上次发了一贴!一起节。
到底SetCommMask 和GetCommMask怎么用?
我根据串口通信类改的!
CSerialPortEx::InitPort()
{
省略了一些
我只对这四个事件感兴趣;
SetCommMask(m_hComm, EV_RLSD|EV_RING|EV_DSR|EV_CTS);
}
UINT CSerialPortEx::CommThread(LPVOID pParam)
{
省略了一些定义;
bResult = WaitCommEvent(port->m_hComm, &Event, &port->m_ov); ::WaitForMultipleObjects(m_hComm,INFINITE);
CString yy;
yy="";
GetCommMask(port->m_hComm, &CommEvent);
if (CommEvent & EV_CTS)
yy+="EV_CTS";
if (CommEvent & EV_DSR)
yy+="EV_DSR";
if (CommEvent & EV_RING)
yy+="EV_RING";
if (CommEvent & EV_RLSD)
yy+="EV_RLSD";
AfxMessageBox(yy);
//在这里yy的结果是yy=EV_CTSEV_DSREV_RINGEV_RLSD
//这证明串口的那四个脚都有电平变化。而事实我只触发CTS脚的电平。
//怎么这四个脚;;
//我把SetCommMask(m_hComm, EV_RLSD|EV_RING|EV_DSR|EV_CTS) 改为
//SetCommMask(m_hComm, EV_CTS)正确,但是其他三个脚就对电平变化没有反映。
大家看一看,拉一把吧!
return 0;}
到底SetCommMask 和GetCommMask怎么用?
我根据串口通信类改的!
CSerialPortEx::InitPort()
{
省略了一些
我只对这四个事件感兴趣;
SetCommMask(m_hComm, EV_RLSD|EV_RING|EV_DSR|EV_CTS);
}
UINT CSerialPortEx::CommThread(LPVOID pParam)
{
省略了一些定义;
bResult = WaitCommEvent(port->m_hComm, &Event, &port->m_ov); ::WaitForMultipleObjects(m_hComm,INFINITE);
CString yy;
yy="";
GetCommMask(port->m_hComm, &CommEvent);
if (CommEvent & EV_CTS)
yy+="EV_CTS";
if (CommEvent & EV_DSR)
yy+="EV_DSR";
if (CommEvent & EV_RING)
yy+="EV_RING";
if (CommEvent & EV_RLSD)
yy+="EV_RLSD";
AfxMessageBox(yy);
//在这里yy的结果是yy=EV_CTSEV_DSREV_RINGEV_RLSD
//这证明串口的那四个脚都有电平变化。而事实我只触发CTS脚的电平。
//怎么这四个脚;;
//我把SetCommMask(m_hComm, EV_RLSD|EV_RING|EV_DSR|EV_CTS) 改为
//SetCommMask(m_hComm, EV_CTS)正确,但是其他三个脚就对电平变化没有反映。
大家看一看,拉一把吧!
return 0;}
SetCommMask(m_hComm, EV_RLSD|EV_RING|EV_DSR|EV_CTS);
//这证明串口的那四个脚都有电平变化。而事实我只触发CTS脚的电平。
//怎么这四个脚;;
//SetCommMask(m_hComm, EV_CTS)正确,但是其他三个脚就对电平变化没有反映。SetCommMask() ok!!!!!!
是设置你要监视的事件;
GetCommMask(port->m_hComm, &CommEvent);
时得到你要监视的事件。
你可以这样写:
WaitCommEvent(port->m_hComm, &Event, &port->m_ov);
if((Event& EV_RLSD)== EV_RLSD)
//get EV_RLSD event
if((Event& EV_RING)==EV_RING)
//get EV_RING event
if((Event& EV_DSR)== EV_DSR)
//get EV_DSR event
if((Event& EV_CTS)== EV_CTS)
//get EV_CTS event