向modem下at command可以,但就是无法获得串口的数据.连OnComm事件都没有,究其是哪里还要设置啊?
modem没有问题,用hyper terminal可以看到数据.mscomm控件是不是有些modem根本不能使用它啊?
代码如下:
BOOL CModemTestDlg::CreateComm()
{
TCHAR Tport[16];
TCHAR Rport[16];
TCHAR Aport[16]; if(m_Tmodem.GetPortOpen())
m_Tmodem.SetPortOpen(FALSE); GetPrivateProfileString("TestModem","SerialPort",NULL,Tport,16,confilename);
if(strcmp(Tport,"com3")==0)
{
m_Tmodem.SetCommPort(3);
} m_Tmodem. SetInBufferSize(1024);
m_Tmodem. SetOutBufferSize(512); if(!m_Tmodem.GetPortOpen())
m_Tmodem.SetPortOpen(TRUE);
else
{
MessageBox("Can't open the test modem com port");
return FALSE;
}
modem没有问题,用hyper terminal可以看到数据.mscomm控件是不是有些modem根本不能使用它啊?
代码如下:
BOOL CModemTestDlg::CreateComm()
{
TCHAR Tport[16];
TCHAR Rport[16];
TCHAR Aport[16]; if(m_Tmodem.GetPortOpen())
m_Tmodem.SetPortOpen(FALSE); GetPrivateProfileString("TestModem","SerialPort",NULL,Tport,16,confilename);
if(strcmp(Tport,"com3")==0)
{
m_Tmodem.SetCommPort(3);
} m_Tmodem. SetInBufferSize(1024);
m_Tmodem. SetOutBufferSize(512); if(!m_Tmodem.GetPortOpen())
m_Tmodem.SetPortOpen(TRUE);
else
{
MessageBox("Can't open the test modem com port");
return FALSE;
}
m_Comm.SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes
m_Comm.SetOutBufferSize(512); //设置输出缓冲区的大小,Bytes if(!m_Comm.GetPortOpen()) //打开串口
m_Comm.SetPortOpen(TRUE);
m_Comm.SetInputMode(1); //设置输入方式为二进制方式
m_Comm.SetSettings("110,n,8,1"); //设置波特率等参数
m_Comm.SetRThreshold(1); //为1表示有一个字符引发一个事件
m_Comm.SetInputLen(0);你再把你接收部分贴出来看看
对不起,刚才贴的有问题,我是这样设置的,这个代码在其它的modem应用时没有问题,只是这个pci modem才出现这个问题.
代码如下:
void CModemTestDlg::OnCommMscommT()
{
// TODO: Add your control notification handler code here
/* VARIANT vResponse;
int k;
char *str;
if(m_Tmodem.GetCommEvent()==2)
{
// WaitForSingleObject(WakeUpT,INFINITE);//1000);
k=m_Tmodem.GetInBufferCount();
if(k>0)
{
vResponse=m_Tmodem.GetInput();
str=(char*)vResponse.parray->pvData;
for(int i=0;i<=k;i++)
{ RecTmodem+=str[i];
m_str[i]=str[i];
}
}
}
*/
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
// char *str;
BYTE rxdata[2048];
CString strtemp;
if(m_Tmodem.GetCommEvent()==2)
{
variant_inp=m_Tmodem.GetInput();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
RecTmodem+=strtemp;
m_str[k]=rxdata[k];
}
m_edit.SetWindowText(RecTmodem);
// m_edit.SetWindowText("com3 info");
}
// m_edit.SetWindowText("com3 event");
}BOOL CModemTestDlg::CreateComm()
{
TCHAR Tport[16];
TCHAR Rport[16];
TCHAR Aport[16]; if(m_Tmodem.GetPortOpen())
m_Tmodem.SetPortOpen(FALSE); GetPrivateProfileString("TestModem","SerialPort",NULL,Tport,16,confilename);
if(strcmp(Tport,"com3")==0)
{
m_Tmodem.SetCommPort(3);
} m_Tmodem. SetInBufferSize(1024);
m_Tmodem. SetOutBufferSize(512); if(!m_Tmodem.GetPortOpen())
m_Tmodem.SetPortOpen(TRUE);
else
{
MessageBox("Can't open the test modem com port");
return FALSE;
}
m_Tmodem.SetInputMode(1);
m_Tmodem.SetSettings("115200,n,8,1");
m_Tmodem.SetRThreshold(1);
m_Tmodem.SetInputLen(0); m_Tmodem.SetRTSEnable(TRUE); // Must be set RTS is true.
}
比较一下它们还有什么区别!