Se possível, o mais fácil pode ser ajustar o software para emitir hexadecimal. A maioria dos softwares provavelmente já possui sdio.h
(ou equivalente) e hexadecimal dos dados simplesmente requerem printf
chamadas (ou equivalentes) nos dados indo e vindo do descritor de arquivo serial. Nenhuma complicação de um processo extra transportando os dados para lá e para cá e com pouca latência extra.
Se você estiver com pressa, algo como strace
(ou sysdig
SystemTap
etc) poderá ser usado para registrar a comunicação, embora strace
diminua bastante o processo, e a saída exija pós-processamento; os outros dois são módulos do kernel, então podem não ser adequados.
strace -xx -y -e trace=read,write -p $pid_of_your_program_here
No nível de hardware, um Bus Pirate ou similar pode ser outra maneira de explorar a comunicação.
Enquanto isso, socat(1)
parece ter uma conveniente opção -x
para hex:
-x Writes the transferred data not only to their target streams,
but also to stderr. The output format is hexadecimal, prefixed
with "> " or "< " indicating flow directions. Can be combined
with -v .
que depois de algumas experiências eu pude ouvir um Arduino aleatório via:
socat -x PTY,link=/dev/blah,raw,wait-slave /dev/serial/by-id/usb-Arduino...
e, em seguida, seu software pode abrir /dev/blah
(ou talvez executá-lo via EXEC
?). Observe que nenhuma opção raw
foi especificada após o caminho /dev/serial/by-id/usb-Arduino...
, pois com esse conjunto houve erros de tcgetattr(6, ...): Inappropriate ioctl for device
quando socat
tentou configurá-lo. A saída socat
provavelmente também exigirá pós-processamento, já que se parece com algo assim:
--
2017/10/09 16:32:20 socat[30806] I transferred 1 bytes from 6 to 5
< 2017/10/09 16:32:20.475916 length=31 from=2042 to=2072
52 65 71 75 65 73 74 69 6e 67 20 74 65 6d 70 65 Requesting tempe
72 61 74 75 72 65 73 2e 2e 2e 44 4f 4e 45 0a ratures...DONE.
--