Usb 通过C+连接到tty端口+;除非您';我先通过屏幕连接
我拿起了一个AUPS-A10-R11 DC UPS,正在使用他们的API为我的xen主机构建一些监控软件。他们的API通过设备上的USB连接运行,在主机上显示为/dev/ttyUSB# 除了一件让我困惑的事之外,我的一切都很顺利。当我第一次打开或重新启动它所连接的主机时,我无法与设备通信。但是,如果我打开与它的屏幕连接:Usb 通过C+连接到tty端口+;除非您';我先通过屏幕连接,usb,uart,tty,usbserial,Usb,Uart,Tty,Usbserial,我拿起了一个AUPS-A10-R11 DC UPS,正在使用他们的API为我的xen主机构建一些监控软件。他们的API通过设备上的USB连接运行,在主机上显示为/dev/ttyUSB# 除了一件让我困惑的事之外,我的一切都很顺利。当我第一次打开或重新启动它所连接的主机时,我无法与设备通信。但是,如果我打开与它的屏幕连接: screen /dev/ttyUSB0 9600 然后关闭它(ctrl+a,k),那么它将工作得非常好,直到下次重新启动主机 有人知道为什么我必须先通过屏幕连接到设备吗?我已
screen /dev/ttyUSB0 9600
然后关闭它(ctrl+a,k),那么它将工作得非常好,直到下次重新启动主机
有人知道为什么我必须先通过屏幕连接到设备吗?我已将代码粘贴到此处:。在重新启动时进行连接时,它会在if…else子句的“readnothing”部分停止。通过屏幕连接到设备后,工作正常
有什么想法吗
有人知道为什么我必须先通过屏幕连接到设备吗
这种行为几乎总是与程序未完成termios初始化有关
理想的程序将为其目的配置串行终端,并在退出时将termios配置恢复到原来的状态。但大多数程序,包括minicom和screen等终端仿真程序,只是简单地保留其termios配置,而不是恢复它。
幸运的是,这个遗留的termios配置填补了缺失的部分,使您的程序能够按预期访问串行终端 对“您的”代码的审查表明,它是从的公认答案复制而来的。根据得票数,这个代码显然适用于很多人。然而,作者承认它是在POSIX标准之前编写的,因此代码不应该被认为是可移植的。换句话说,您的里程数可能会有所不同 显然,您忽略了与POSIX兼容的。该程序中有用于阻止非规范模式的测试termios配置。
如果您喜欢使用cfmakeraw()宏来简化,那么这里有另一个。听起来像是termios初始化不完整。您选择复制非POSIX代码,因为输入有行终止,所以使用阻塞规范模式会更简单。看到真棒,谢谢你的帮助!锯末,如果你想在那里做你的第一个答案,那就做了!