��L�� óôLª ôôL│Â
ôôL≥Â
ôôL:
ôôL<
õôL┬ õôL
┬ õôL, õôL, öôL÷ öôLü öôLä öôLç öôLÎá
öôLÓá
÷ôLâ³ ÷ôLç³ ÷ôL]æ ÷ôL◆æ ÷ôL≥á
÷ôL£á
øôL D øôL"D øôLW øôLW øôLª ! øôª ùôLê÷ ! ùôLí÷ ùôL ! ùôL ùôL&ç ! ùôL(ç úôLÞ÷ ! úôLà÷ úôL< ! úôL> úôL»+ ! úôL¼+ úôL¢
! úôL¢
ûôL ! ûôL ûôLJ* ! ûôLM* ûôL ! ûôL ûôLB
! ûôLD
ýôLÞ ! ýôLà ýôL ! ýôL ýôLôLàÎ
ÿôL¨ ! ÿôLª ÿôL]␉ ! ÿôL◆␉ ÿôLø ! ÿôLø ÿôLÏ≠
! ÿôLÒ≠
ôL¾# ! ôLÁ# ôL=Ù ! ôL@Ù ôL»
! ôL½
ôL7»
! ôL:»
ôLð ! ôLó ôL└ ! ôL⎺ ôL'ñ ! ôL*ñ ôL¨¬ ! ôLª¬ ôL!Ù ! ôL#Ù ôL␍ò !
这是使用 cat /my/device/file 得到的操纵杆输出。我该如何读取设备文件?以上是二进制字节吗?我只需要能够检测这些字符是什么。
教程/建议非常棒!
答案1
设备文件只是内核空间的一个链接。输出和如何“读取”设备文件取决于设备本身。您必须查阅驱动程序的文档(如果有)或阅读源代码以了解其写入的内容。
我最好的猜测是它的二进制文件由驱动程序源中的 C 结构描述。
答案2
答案3
“设备文件”是磁盘上链接到内核代码的特殊节点。此代码是设备驱动程序。加载设备驱动程序时,您可以设置特定函数,当对“文件”调用某些系统调用(打开/读取/写入/关闭等)时调用这些函数。
因此,当您调用“read”时,它会调用设备驱动程序代码中的特定函数。此代码几乎可以在内核模式下执行任何操作;在这种情况下,读取操纵杆的硬件数据、将电压值转换为数字,然后从设备文件中读取它,这很有意义。
只是随机猜测,我确信发送的值只是操纵杆 X 和 Y(和 Z?)的位置读数以及一些按钮设置。以文本形式读取不起作用,您需要执行十六进制和/或数字转储的东西。插入操纵杆,从中读取值,然后移动操纵杆,按下按钮,看看值如何变化。
源代码可能有注释说明这些值的含义,但实际代码可能对您来说是不可读的(除非您知道硬件寄存器和 USB 协议内容的含义)。
答案4
您应该确保您的设备的波特率等于您的串行口的波特率。
检查速度波特率:
$ stty < /my/device/file
并且设备和串行端口速度相等:
$ stty -F /my/device/file XXspeedXX