来自外部设备的意外输入 - iOS

Posted

技术标签:

【中文标题】来自外部设备的意外输入 - iOS【英文标题】:unexpected input from external device - iOS 【发布时间】:2012-05-02 17:52:00 【问题描述】:

我的 iPod Touch(4G、越狱、ios 5.0)连接到坞站(为 iPod 制造),该坞站通过坞站连接器(很可能使用 Apple 附件协议)向 iPod 发送命令,例如开始和停止播放。由于 iPod 已经越狱,当我 ssh'd 到 iPod 时,我可以看到进来的命令,如下(这里反复按下扩展坞上的播放/暂停按钮,每行等于按下一个按钮):

iPod Touch:~ mobile$ od /dev/tty.iap
0000000 102000 177020 004017 000360 004017 000360 144204 004317
0000020 000340 002020 000376 004017 177430 002010 000376 000440
0000040 147730 160010 004377 147740 160010 020000 154001 102000
0000060 177020 020400 177000 102000 177710 160010 007400 014010
0000100 000377 004417 177430 007400 014011 000377 002020 020400
0000120 177000 004000 000300 140010 004377 000340 000440 000344

我不明白为什么这里的输入总是不同的。当我按下同一个按钮时,我希望每一行输入都是相同的(显然忽略了开头的偏移标记)。否则,播放/暂停按钮将按预期工作(当此 od 命令未运行时)。

所以我的问题是:有没有更好的方法来调用od 或我可以使用的其他实用程序,以便我能够正确查看请求?还是我需要更改波特率或类似的东西?

编辑: 每隔一段时间就会显示两行输入,用于按下一个按钮,而不是仅显示一行。这可能是对齐/缓冲问题吗?

【问题讨论】:

【参考方案1】:

显然问题出在波特率上,/dev/tty.iap 的波特率(默认情况下)为 9600。使用一个小的 C 程序(不知道如何设置 odhexdump 的波特率或直接为串口更改),使用 cfsetspeed 将波特率更改为 19200,来自命令的输入外部配件始终相同。

【讨论】:

stty -F /dev/tty.iap 19200 是通过命令行设置串口速度的方式。要显示当前设置,请尝试 stty -F /dev/tty.iap 并了解有关 stty 的更多信息:stty --help 似乎对我不起作用,请在此处查看我的问题:unix.stackexchange.com/q/37972/18401 这应该真的有效。但似乎其他一些过程正在改变它。我看到如下系统消息:“放弃的串行端口 iap”,然后是“重新获得的串行端口 iap”,所以我猜这种更改只会持续到您关闭 tty,然后某个系统进程将原始设置放回原处。 有趣,感谢您查看此内容。如果您想在 UNIX 网站上用该信息回答问题,我会接受。

以上是关于来自外部设备的意外输入 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

SyntaxError:来自ajax发布调用的JSON输入意外结束

触摸屏基本原理介绍

:输入输出(IO)管理

IO编程

IO细述

什么是标准输入,标准输出(stdin,stdout)