- 论坛徽章:
- 0
|
10可用积分
我先是给短信猫些AT 指令,然后读取短信猫的反馈信息,正确的应该是ok,但我收到的结
果很奇怪
1
1
1
1
1
1
1
1
1
AT
OK
yes
do
{
ioctl(fd, FIONREAD, &nBytes);
}while(nBytes <= 7);
我在读之前先用这个查看buffer里面的个数,我能最多查到8个,但read返回我还是1个,觉得很多显示很奇怪,解释不了
我的程序
int SerialPort::Receive(string &str)
{
int nBytes = 0, nRet = 0;
char Buf[255];
//tcflush(fd, TCIOFLUSH);
do
{
if(nRet = read(fd, Buf, 1) > 0)
{
cout << nRet << endl;
Buf[1] = '\0';
//cout << Buf << endl;
string strTemp(Buf);
str += strTemp;
//if(strTemp[strTemp.size() - 1] == '\r' || strTemp[strTemp.size() - 1] == '\n')
//break;
}
}while(nRet > 0);
return 0;
}
int SerialPort::test()
{
char buf[255];
int nBytes;
Open();
SetSpeed(9600);
SetParity(8, 'n', 1);
tcflush(fd, TCIOFLUSH);
Send("AT\r");
string strFb;
// tcflush(fd, TCIOFLUSH);
do
{
ioctl(fd, FIONREAD, &nBytes);
}while(nBytes <= 3);
//read(fd, buf, 255);
Receive(strFb);
cout << strFb << endl <<"yes" <<endl;
Close();
return 0;
}
int main()
{
SerialPort ttyDev("/dev/ttyS1");
ttyDev.test();
return 0;
}
串口主要设置,波特率和检验马等在另外函数内设置
fcntl(fd, F_SETFL, 0);
NewOpt.c_cflag |= CLOCAL | CREAD;
NewOpt.c_iflag &= ~(INLCR | ICRNL);
NewOpt.c_oflag &= ~OPOST;
NewOpt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
NewOpt.c_cc[VTIME] = 20;
NewOpt.c_cc[VMIN] = 0; |
|