【问题标题】:Serial port unique identification in JavaJava中的串口唯一标识
【发布时间】:2014-10-18 16:22:33
【问题描述】:

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

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

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

所以问题是:如何唯一标识每个串行端口并存储此信息以供下次重新启动后使用?

【问题讨论】:

  • 创建 udev 规则修改您的安装程序(或安装说明)以创建所述 udev 规则。
  • 可以在设置中更改端口。 PID 和 VID 可能不为人所知,因为设备很多,并且仍在开发中。我的目标也是不给应用程序root权限。

标签: java linux serial-port


【解决方案1】:

好的,我找到了解决方案...
因为我只对 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();
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2010-10-10
    • 2022-11-16
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多