首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Arduino Leonardo/Micro的定制HID兼容UPS在Ubuntu 18.04 LTS上不工作

基于Arduino Leonardo/Micro的定制HID兼容UPS在Ubuntu 18.04 LTS上不工作
EN

Ask Ubuntu用户
提问于 2020-12-03 06:16:05
回答 1查看 355关注 0票数 0

我正在开发一个基于Arduino微公司的符合HID标准的定制UPS。当我将它连接到Apple OSX (我使用Macbook作为主机)或Windows 10 VM机器时,我的"UPS“是由操作系统正确确定的,我还可以向主机报告剩余的电池容量和其他参数。

但是,当我将它插入Ubuntu18.04LTS时,它就不能工作了(没有显示在电源设置中)。同时,商用的APC在Ubuntu下工作得很好。下表所列为国际劳工局的公告:

代码语言:javascript
复制
abratchik@ubuntu-parallels-vm:~$ lsusb
Bus 001 Device 003: ID 203a:fffa  
Bus 001 Device 002: ID 203a:fffa  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 203a:fff9  
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 004: ID 2341:8036 Arduino SA Leonardo (CDC ACM, HID)
Bus 002 Device 006: ID 051d:0003 American Power Conversion UPS
Bus 002 Device 003: ID 203a:fffe  
Bus 002 Device 002: ID 203a:fffc  
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub


abratchik@ubuntu-parallels-vm:~$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 1, Class=Video, Driver=uvcvideo, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/15p, 12M
        |__ Port 5: Dev 4, If 2, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 5: Dev 4, If 0, Class=Communications, Driver=cdc_acm, 12M
        |__ Port 5: Dev 4, If 1, Class=CDC Data, Driver=cdc_acm, 12M
        |__ Port 4: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/15p, 480M
    |__ Port 1: Dev 2, If 0, Class=Printer, Driver=usblp, 480M
    |__ Port 2: Dev 3, If 0, Class=Printer, Driver=usblp, 480M

在第一次打印时,我的自定义UPS是ID 2341:8036,APC UPS是051d:0003。

但是,Ubuntu正确地检测到APC是UPS,而我的UPS根本没有出现:

代码语言:javascript
复制
abratchik@ubuntu-parallels-vm:~$ upower -e
/org/freedesktop/UPower/devices/line_power_ADP0
/org/freedesktop/UPower/devices/battery_BAT0
/org/freedesktop/UPower/devices/ups_hiddev3
/org/freedesktop/UPower/devices/DisplayDevice

abratchik@ubuntu-parallels-vm:~$ upower -i /org/freedesktop/UPower/devices/ups_hiddev3
  native-path:          /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2.4/2-2.4:1.0/usbmisc/hiddev3
  vendor:               American Power Conversion 
  model:                Smart-UPS C 1500 FW:UPS 10.0 / ID=1005
  serial:               3S1838X02676  
  power supply:         yes
  updated:              Thu 03 Dec 2020 10:00:04 AM +04 (-11 seconds ago)
  has history:          yes
  has statistics:       yes
  ups
    present:             yes
    state:               fully-charged
    warning-level:       none
    time to empty:       2.0 hours
    percentage:          100%
    icon-name:          'battery-full-charged-symbolic'

另外,RX/TX LED没有在Arduino板上闪烁,所以看起来董事会和VM之间没有交换。正如我前面提到的,同一板在OSX和Windows 10下工作得很好。

我在googled上搜索了一下,发现很多关于这个主题的文章都提到usbhid-ups驱动程序,它在默认情况下不是安装的,需要一些我所理解的配置。我真的想避免这一点,并使我的UPS完全“即插即用”,类似于APC UPS。已经失去了对我的UPS可能不同的想法,除了可能是供应商ID /产品ID,但这将是我最后的选择,试图改变这些。我所缺少的任何暗示都是非常感谢的。

EN

回答 1

Ask Ubuntu用户

发布于 2020-12-28 14:49:28

最后,我明白了它是如何工作的。Linux中的usbhid驱动程序是无罪的,它只是HID协议的低级解析器,除了去加密设备响应并将它们传递给管理层( udev ()和位于udev之上的UPower管理器)之外,没有做任何其他智能工作。

UPower实际上定义了所有支持的供应商ID/Product的列表,并以udev规则的形式将其提供给udev。所以我是对的--在这种情况下,供应商ID /产品ID确实很重要--如果您是APC,那么您的UPS将被自动检测到,否则设备就会被UPower忽略,即使它是符合HID的。

幸运的是,有一个解决办法。udev规则以文本格式存储在/etc/udev/ rules es.d/文件夹中,因此可以轻松地定义其他规则。我们必须在这个文件夹中创建文件98-UPower-hid.ules(我假设确切的文件名并不重要),并添加以下行:

代码语言:javascript
复制
ATTRS{idVendor}=="2341", ENV{UPOWER_VENDOR}="Arduino"
ATTRS{idVendor}=="2341", ATTRS{idProduct}=="8036", ENV{UPOWER_BATTERY_TYPE}="ups"

重新启动。在那之后,带有UPS草图的Arduino板就被Ubuntu认出来了。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1297093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档