Thursday, October 22, 2020

Re: /dev/usb0 - NotImplementedError: Operation not supported or unimplemented on this platform

On 2020-10-22, Mario St-Gelais <mario.stg@videotron.ca> wrote:
> I am attempting to get data from USB or an Accurite Weather Sensor,
> model 06006 through python program called weewx.  I wrote the weewx dist
> list but got no answer so far.  I am in foact not sure it's related to
> weewx itself as I can not connect to the device even through ipython. 
> Throuh ipython I get this  output:
>=======================
> /usr/local/lib/python3.8/site-packages/usb/backend/libusb1.py in _check(ret)
>     583     if ret < 0:
>     584         if ret == LIBUSB_ERROR_NOT_SUPPORTED:
> --> 585             raise NotImplementedError(_strerror(ret))
>     586         elif ret == LIBUSB_ERROR_TIMEOUT:
>     587             raise USBTimeoutError(_strerror(ret), ret,
> _libusb_errno[ret])
>
> NotImplementedError: Operation not supported or unimplemented on this
> platform
>
> I of course get similar output if I try the acurite.py drive used by weewx:
>===============
> PYTHONPATH=bin doas python3.8 bin/weewx/drivers/acurite.py
>
>
> Traceback (most recent call last):
>   File "bin/weewx/drivers/acurite.py", line 982, in <module>
>     with Station() as s:
>   File "bin/weewx/drivers/acurite.py", line 587, in __enter__
>     self.open()
>   File "bin/weewx/drivers/acurite.py", line 612, in open
>     self.handle.detachKernelDriver(interface)
>   File "/usr/local/lib/python3.8/site-packages/usb/legacy.py", line
> 294, in detachKernelDriver
>     self.dev.detach_kernel_driver(interface)
>   File "/usr/local/lib/python3.8/site-packages/usb/core.py", line 1094,
> in detach_kernel_driver
>     self._ctx.backend.detach_kernel_driver(
>   File "/usr/local/lib/python3.8/site-packages/usb/backend/libusb1.py",
> line 905, in detach_kernel_driver
>     _check(self.lib.libusb_detach_kernel_driver(dev_handle.handle, intf))
>   File "/usr/local/lib/python3.8/site-packages/usb/backend/libusb1.py",
> line 585, in _check
>     raise NotImplementedError(_strerror(ret))
>
> NotImplementedError: Operation not supported or unimplemented on this
> platform
>
> usbdevs output:
>=============
> YTHONPATH=bin doas python3.8 bin/weewx/drivers/acurite.py
>
>
> Traceback (most recent call last):
>   File "bin/weewx/drivers/acurite.py", line 982, in <module>
>     with Station() as s:
>   File "bin/weewx/drivers/acurite.py", line 587, in __enter__
>     self.open()
>   File "bin/weewx/drivers/acurite.py", line 612, in open
>     self.handle.detachKernelDriver(interface)
>   File "/usr/local/lib/python3.8/site-packages/usb/legacy.py", line
> 294, in detachKernelDriver
>     self.dev.detach_kernel_driver(interface)
>   File "/usr/local/lib/python3.8/site-packages/usb/core.py", line 1094,
> in detach_kernel_driver
>     self._ctx.backend.detach_kernel_driver(
>   File "/usr/local/lib/python3.8/site-packages/usb/backend/libusb1.py",
> line 905, in detach_kernel_driver
>     _check(self.lib.libusb_detach_kernel_driver(dev_handle.handle, intf))
>   File "/usr/local/lib/python3.8/site-packages/usb/backend/
>
> Could someone shed some light on this.  I will provide more info if
> required.  Any other alternative to access this device?
>
> usbdevs output:
>
> doas usbdevs -v -d /dev/usb0
> Controller /dev/usb0:
> addr 01: 8086:0000 Intel, xHCI root hub
>          super speed, self powered, config 1, rev 1.00
>          driver: uhub0
> addr 02: 24c0:0003 vendor 0x24c0, Chaney Instrument
>          low speed, power 100 mA, config 1, rev 0.20
>          driver: uhidev0
>

Try removing the call to detachKernelDriver,
https://github.com/weewx/weewx/blob/master/bin/weewx/drivers/acurite.py#L610

You can also try building a kernel with the device blacklisted from the
uhid driver, it should then attach to ugen(4) which will allow libusb to do
more things with it. Diff below; after applying run "make" in sys/dev/usb
before building/installing a new kernel.

Index: usb_quirks.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/usb_quirks.c,v
retrieving revision 1.76
diff -u -p -r1.76 usb_quirks.c
--- usb_quirks.c 5 Jan 2020 00:54:13 -0000 1.76
+++ usb_quirks.c 22 Oct 2020 10:40:11 -0000
@@ -123,6 +123,7 @@ const struct usbd_quirk_entry {
{ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPAD2, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_SPEAKERS, ANY, { UQ_BAD_HID }},
+ { USB_VENDOR_CHANEY, USB_PRODUCT_CHANEY_ACURITE, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_OLD, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM, ANY, { UQ_BAD_HID }},
{ USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_SISPM_FLASH, ANY, { UQ_BAD_HID }},
Index: usbdevs
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdevs,v
retrieving revision 1.720
diff -u -p -r1.720 usbdevs
--- usbdevs 3 Aug 2020 14:25:44 -0000 1.720
+++ usbdevs 22 Oct 2020 10:40:12 -0000
@@ -630,6 +630,7 @@ vendor ARDUINO 0x2341 Arduino SA
vendor TPLINK 0x2357 TP-Link
vendor WMR 0x2405 West Mountain Radio
vendor TRIPPLITE 0x2478 Tripp-Lite
+vendor CHANEY 0x24co Chaney Instrument
vendor ARUBA 0x2626 Aruba
vendor XIAOMI 0x2717 Xiaomi
vendor NHJ 0x2770 NHJ
@@ -1302,6 +1303,9 @@ product CHENSOURCE CM12402 0x933d CM1240
/* Cherry products */
product CHERRY MY3000KBD 0x0001 My3000 keyboard
product CHERRY MY3000HUB 0x0003 My3000 hub
+
+/* Chaney Instrument products */
+product CHANEY ACURITE 0x0003 AcuRite Weather Station

/* Chic Technology products */
product CHIC MOUSE1 0x0001 mouse

No comments:

Post a Comment