来自串口的linux C struct buffer

时间:2014-06-25 08:57:18

标签: c linux serial-port

如何从串口正确构建缓冲区。

int serialCheckforBuffer (int fd)
{
  int result ;
  if (ioctl (fd, FIONREAD, &result) == -1)
  return -1 ;
  return result ;
}

int serialGetchar (int fd)
{
  uint8_t x ;
  if (read (fd, &x, 1) != 1)
  return -1 ;
  return ((int)x) & 0xFF ;
}

我正在读这样的

for (;;)
{

    while (serialCheckforBuffer (fd))
     {
      printf ("%02X", serialGetchar(fd));
      fflush (stdout) ;
     }
     usleep(10000);
}

输出结果为“071E00000118”

如何构建我的readed缓冲区以适合这样的

    struct obj_Properties
    {
       int Type;
       int ID;
       int Index;
       unsigned int msb;
       unsigned int lsb;
       int chksum;
    };

所以,如果我再次阅读,将采用这种格式

   struct obj_Properties prop;
   printf ("%02X %02X %02X %02X %02X %02X", prop.Type, prop.ID, prop.Index, prop.msb,    prop.lsb, prop.chksum);

我尝试了代码,但没有成功。 也许我错过了什么。

  void buildBuffer(struct obj_Properties *buffer)
  {
     while((serialCheckforBuffer(fd)) == -1)
     usleep(1000);
     memcpy(buffer, &sBuffer, sizeof(struct obj_Properties));
  }

1 个答案:

答案 0 :(得分:0)

在你的while循环中,不要循环打印出值,而是分配它们:

prop.Type = serialGetchar(fd));
prop.ID = serialGetchar(fd));
prop.Index = serialGetchar(fd));
prop.msb = serialGetchar(fd));
prop.lsb = serialGetchar(fd));
prop.chksum = serialGetchar(fd));
printf ("%02X %02X %02X %02X %02X %02X", prop.Type, prop.ID, prop.Index, prop.msb,    prop.lsb, prop.chksum);