Я играю с радио XBEE, я использую Linux (Ubuntu 9.10), и XBEE, похоже, не отправляет значения NULL через последовательный порт при использовании МОЕГО кода. Когда я использую программу XCTU (эмулятор стандартного термина, который поставляется с XBEE в отдельном окне Windows), я вижу этот вывод через последовательный порт, когда новый XBEE присоединяется к сети:
7E 00 20 95 00 13 A2 00 40 3B
и т.д ... идеально. Но, используя МОЙ код, когда к сети присоединяется новый XBEE, я вижу следующее:
7E 20 95 13 A2 40 3B
Вот как я открываю последовательный порт
struct termios options;
int port;
port = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK);
tcgetattr(port, &options);
bzero(&options, sizeof(options));
options.c_cflag = B9600 | ~CRTSCTS | CS8 | CLOCAL | CREAD;
tcsetattr(port, TCSANOW, &options);
У меня есть свои теории о том, что делает этот код, но мои теории явно ошибочны. Пытаюсь открыть порт с 9600, 8N1, No Flow control. Вы можете видеть, что я также использую драйвер serial-> USB, но поскольку мне кажется, что я получаю данные, я почти уверен, что эта часть работает.
Я предполагаю, что когда я использую bzero options, я делаю 0x00 контрольным символом? Я не уверен. Когда у меня нет параметров bzero, я могу читать только 5 байтов за раз и теряю данные. Такое ощущение, что у меня проблемы с управлением потоком или скоростью передачи данных, поэтому я использую bzero (), и теперь я не получаю NULL.
Я также только что использовал Minicom в своей системе Linux и записал результат. Я получаю ту же информацию, без NULL (это действительно портит размер пакетов для тех, кто не знаком с протоколом). Мог ли мой код установить последовательный порт в состояние, которое minicom не меняется? Я потерялся.
Спасибо за помощь!
c_cc[]
? Это может позволить передавать нули (и другие управляющие символы). У вас есть встроенный (не USB) последовательный порт, который можно использовать для проверки, что проблема не в драйвере USB? - person Adam Liss   schedule 22.12.2009