免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3108 | 回复: 0
打印 上一主题 下一主题

短信猫加串口编程问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-08 10:31 |只看该作者 |倒序浏览
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;

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP