Я использовал следующую команду, чтобы создать пару для последовательного порта и попытаться отправить через них двоичные данные.
sudo socat -d -d pty,link=/dev/tty.vcp0,raw,echo=0,user=myusername,group=staff pty,link=/dev/tty.vcp1,raw,echo=0,user=myusername,group=staff
Однако даже я пытаюсь отправить следующий двоичный файл
data.bin
0x16 0x16 0x16 0x16 0x16 0x16
(в основном просто файл с 6 байтами, каждый байт имеет значение 0x16)
by
cat /dev/tty.vcp0 > recv.bin
а также
cat data.bin > /dev/tty.vcp1
И я получаю всего 3 байта 0x16 вместо 6.
Аналогичная вещь происходит с байтом 0xF. Если я отправлю двоичный файл с 6 байтами 0xF, я не смогу получить ни одного байта.
Кто-нибудь знает, что вызывает отсутствие 0x16 и 0xF? Как передать двоичные данные, содержащие 0x16 и 0xF?
Другой тестовый пример:
Тестовый пример 1
Отправлять:
0x16 0x16 0x16 0x0 0x0 0x0 0x0 0x16 0x16 0x16
Получать:
0x16 0x0 0x0 0x0 0x0 0x16
Тестовый пример 2
Отправлять:
0xf 0xf 0xf 0x0 0x0 0x0 0x0 0xf 0xf 0xf
Получать:
0xf 0x0 0x0 0x0 0x0
Я добавил параметр -x в команду socat, и я вижу, что отображаются правильные данные, так что это должно быть проблемой принимающей стороны.
P.S. Все вышеперечисленные тесты проводятся на Mac OS X 10.9.2.