我正在开发一个需要能够通过Windows操作系统上的串行通信与设备通信的应用程序。该应用程序是用Java编写的。我正在使用jSSC库。 (Javax.comm存在问题且RxTx除了非官方更新外没有Java 8支持)设备可以使用串行端口直接连接到PC,或者使用USB转串口转换器。
我的问题: Windows上的COM端口是动态的。这引发了定义连接到哪个comm端口的问题。有没有办法自动确定要连接的COM端口?
到目前为止,我能够提出的唯一解决方案是扫描活动端口的所有COM端口,保存此列表,然后要求用户插入设备并执行另一次扫描 - 然后额外的COM端口将是要连接的那个。
或者,该设备将响应特定的标识' packet:我可以打开每个COM端口并发送此数据包并评估响应。这有可能导致其他设备在短时间内被劫持,这是不理想的。
答案 0 :(得分:0)
为了检测动态操作的端口,需要调用系统特定的功能。 SCM库提供用于动态检测端口的API。
try {
scm.registerUSBHotPlugEventListener(this, PRODUCT_VID, PRODUCT_PID, null);
if(scm.isUSBDevConnected(PRODUCT_VID, PRODUCT_PID, null)) {
USBhotplugEventQueue.offer(SerialComUSB.DEV_ADDED);
}
} catch (Exception e) {
e.printStackTrace();
}