sdptool add --channel 1 SPrfcomm watch hci0 1 "$COMMAND" {}# ^ here
$COMMAND将二进制数据写入作为参数传递的文件.我通过以下方式测试了它的行为是否正确:
FIFO=$(tempfile)mkfifo "$FIFO""$COMMAND" "$FIFO" &cat "$FIFO" | hexdump -C # <- output is correct
但是,当通过SPP / RFCOMM发现(UUID 00001101-0000-1000-8000-00805F9B34FB)从其他设备连接到服务时,我看到0x0A(LF)的每个实例都被0x0D 0x0A(CR LF)替换为流.问题不在接收端,因为我尝试连接到也发送二进制数据的硬件串行设备,并且转换不会发生.它必须是执行替换的第一个片段(在#^ here行上方)中的命令.
为什么rfcomm工具执行此替换以及如何禁用它?
解决方法 看起来你被TTY的线路规则所困扰(请记住,rfcomm不会创建一个fifo,而是一个tty).您可以尝试将TTY更改为原始模式,即没有任何魔法.最简单的方法是使用stty –file< tty>生的.我不知道rfcomm是否会在其命令行中接受多个命令,但您可以轻松地使用脚本:
command_raw
#!/bin/bashstty --file "" raw"$COMMAND" ""
然后运行:
sdptool add --channel 1 SPrfcomm watch hci0 1 ./command_raw {}
如果您有要运行的命令的源,您也可以在C中轻松更改它:
#include <termios.h> #include <unistd.h> //WARNING: error checking left as an exercise to the reader! voID make_raw(int fd) { struct termios ios; //Not a TTY: nothing to do if (!isatty(fd)) return; tcgetattr(fd,&ios); cfmakeraw(&ios); tcsetattr(fd,TCSANow,&ios); }总结
以上是内存溢出为你收集整理的linux – 通过蓝牙/ RFCOMM / SPP发送二进制数据将0x0A转换为0x0D 0x0A全部内容,希望文章能够帮你解决linux – 通过蓝牙/ RFCOMM / SPP发送二进制数据将0x0A转换为0x0D 0x0A所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)