Java中的串行端口唯一标识

时间:2014-10-18 16:22:33

标签: java linux serial-port

我正在开发一个使用串行端口与某些设备通信的Linux应用程序。 我为所有设备使用usb-to-serial转换器,因此所有串口都通过usb连接。

目前我正在使用每个端口的名称来识别它(ttyAM0或ttyUSB1等),但这是非常有问题的,因为端口限制不断变化。

我无法创建udev规则,实际上不应该将任何内容更改为操作系统本身,因为认为最终用户无法/熟练地执行此操作。 (这是一个商业应用程序)。

所以问题是:我如何唯一地识别每个串口并存储下次重启后要使用的信息?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案......
由于我只对Linux感兴趣,因此请检查文件夹/dev/serial/by-id以获取每个设备的唯一ID。这些文件是指向串口的链接。

所以......
读取该文件夹中的文件名会为您提供ID 读取每个链接的目标会为您提供端口名称。

以下是我的工作代码:

    HashMap<String, String> portsMap = new HashMap<>();

    File serialFolder = new File("/dev/serial/by-id");
    File[] listOfDevices = serialFolder.listFiles();

    for (int i = 0; i < listOfDevices.length; i++)
    {
        if (Files.isSymbolicLink(listOfDevices[i].toPath()))
        {
            try
            {
                String portName = listOfDevices[i].getName();
                String id = Files
                        .readSymbolicLink(listOfDevices[i].toPath())
                        .toString()
                        .substring(
                        Files.readSymbolicLink(listOfDevices[i].toPath())
                        .toString().lastIndexOf("/") + 1);
                portsMap.put(id, portName);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }