Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HumanWare driver does not work for Brailliant BI 40X on firmware 2.4.0_build4201 #17518

Closed
bramd opened this issue Dec 13, 2024 · 3 comments · Fixed by #17526
Closed

HumanWare driver does not work for Brailliant BI 40X on firmware 2.4.0_build4201 #17518

bramd opened this issue Dec 13, 2024 · 3 comments · Fixed by #17526
Labels
component/braille-display-drivers p2 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority triaged Has been triaged, issue is waiting for implementation.
Milestone

Comments

@bramd
Copy link
Contributor

bramd commented Dec 13, 2024

Steps to reproduce:

  1. Ensure the Brailliant BI 40X is updated to version 2.4.0_build4201 and connected via Bluetooth (USB not tested as of yet)
  2. Try to select HumanWare Brailliant BI/B series as braille display

Actual behavior:

NVDA is unable to open the display. However, the display now works with the Standard HID driver. Using this driver no pressed keys are being processed, making the display quite unusable.

Expected behavior:

  1. The display should still work with the specific Brailliant BI driver
  2. The display should now work with Standard HID braille as well including ke presses, or it should be temporarily blacklisted if it's HID implementation does not confirm to the HID standard

NVDA logs, crash dumps and other attachments:

DEBUG - autoSettingsUtils.autoSettings.AutoSettings._registerConfigSaveAction (21:52:30.098) - MainThread (14868):
registering pre_configSave action: <class 'brailleDisplayDrivers.brailliantB.BrailleDisplayDriver'>
DEBUG - hwPortUtils.listUsbDevices (21:52:30.098) - MainThread (14868):
USB Id: 'VID_06CB&PID_00FC'
DEBUGWARNING - hwPortUtils.listUsbDevices (21:52:30.098) - MainThread (14868):
Couldn't get DEVPKEY_Device_BusReportedDeviceDesc for {'hardwareID': 'USB\\VID_06CB&PID_00FC&REV_0000', 'usbID': 'VID_06CB&PID_00FC', 'devicePath': '\\\\?\\usb#vid_06cb&pid_00fc#da3c89f1c180#{a5dcbf10-6530-11d2-901f-00c04fb951ed}'}: [WinError 1168] Element not found.
DEBUG - hwPortUtils.listUsbDevices (21:52:30.098) - MainThread (14868):
USB Id: 'VID_04F2&PID_B6EA'
DEBUG - hwPortUtils.listUsbDevices (21:52:30.098) - MainThread (14868):
USB Id: 'VID_8087&PID_0026'
DEBUGWARNING - hwPortUtils.listUsbDevices (21:52:30.098) - MainThread (14868):
Couldn't get DEVPKEY_Device_BusReportedDeviceDesc for {'hardwareID': 'USB\\VID_8087&PID_0026&REV_0002', 'usbID': 'VID_8087&PID_0026', 'devicePath': '\\\\?\\usb#vid_8087&pid_0026#5&389f0089&0&10#{a5dcbf10-6530-11d2-901f-00c04fb951ed}'}: [WinError 1168] Element not found.
DEBUG - hwPortUtils.listUsbDevices (21:52:30.098) - MainThread (14868):
Finished listing USB devices
DEBUG - hwPortUtils.listHidDevices (21:52:30.103) - MainThread (14868):
{'hardwareID': 'HID\\{00001124-0000-1000-8000-00805f9b34fb}_VID&00021d6b_PID&0246&Col02', 'devicePath': '\\\\?\\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col02#8&30697e91&1&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'bluetooth', 'vendorID': 7531, 'productID': 582, 'versionNumber': 0, 'manufacturer': 'Humanware', 'product': 'Brailliant BI 40X', 'HIDUsagePage': 65}
DEBUG - hwPortUtils.listHidDevices (21:52:30.103) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_901C&Col05', 'devicePath': '\\\\?\\hid#elan901c&col05#5&2c55633&0&0004#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.106) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_0672&Col03', 'devicePath': '\\\\?\\hid#elan0672&col03#5&3149a78b&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_0672&Col04', 'devicePath': '\\\\?\\hid#elan0672&col04#5&3149a78b&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_901C&Col01', 'devicePath': '\\\\?\\hid#elan901c&col01#5&2c55633&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\{00001124-0000-1000-8000-00805f9b34fb}_VID&00021d6b_PID&0246&Col03', 'devicePath': '\\\\?\\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col03#8&30697e91&1&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}\\kbd', 'provider': 'bluetooth', 'vendorID': 7531, 'productID': 582, 'versionNumber': 0, 'manufacturer': 'Humanware', 'product': 'Brailliant BI 40X', 'HIDUsagePage': 1}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_901C&Col02', 'devicePath': '\\\\?\\hid#elan901c&col02#5&2c55633&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\INTC816&Col01', 'devicePath': '\\\\?\\hid#intc816&col01#3&36043c54&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}\\kbd', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_901C&Col03', 'devicePath': '\\\\?\\hid#elan901c&col03#5&2c55633&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\INTC816&Col02', 'devicePath': '\\\\?\\hid#intc816&col02#3&36043c54&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_901C&Col04', 'devicePath': '\\\\?\\hid#elan901c&col04#5&2c55633&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_0672&Col01', 'devicePath': '\\\\?\\hid#elan0672&col01#5&3149a78b&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.107) - MainThread (14868):
{'hardwareID': 'HID\\{00001124-0000-1000-8000-00805f9b34fb}_VID&00021d6b_PID&0246&Col01', 'devicePath': '\\\\?\\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col01#8&30697e91&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'bluetooth', 'vendorID': 7531, 'productID': 582, 'versionNumber': 0, 'manufacturer': 'Humanware', 'product': 'Brailliant BI 40X', 'HIDUsagePage': 147}
DEBUG - hwPortUtils.listHidDevices (21:52:30.111) - MainThread (14868):
{'hardwareID': 'HID\\VEN_ELAN&DEV_0672&Col02', 'devicePath': '\\\\?\\hid#elan0672&col02#5&3149a78b&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (21:52:30.111) - MainThread (14868):
Finished listing HID devices
DEBUG - hwPortUtils.listComPorts (21:52:30.111) - MainThread (14868):
{'hardwareID': 'BTHENUM\\{00001101-0000-1000-8000-00805f9b34fb}_LOCALMFG&0000', 'port': 'COM4', 'bluetoothAddress': 0, 'friendlyName': 'Standard Serial over Bluetooth link (COM4)'}
DEBUG - hwPortUtils.listComPorts (21:52:30.112) - MainThread (14868):
{'hardwareID': 'BTHENUM\\{00001101-0000-1000-8000-00805f9b34fb}_VID&00010047_PID&f000', 'port': 'COM3', 'bluetoothAddress': 32226523796, 'bluetoothName': 'Basic Braille BB4/B2-17100', 'friendlyName': 'Standard Serial over Bluetooth link (COM3)'}
DEBUG - hwPortUtils.listComPorts (21:52:30.112) - MainThread (14868):
Finished listing com ports
DEBUG - hwIo.hid.Hid.__init__ (21:52:30.112) - MainThread (14868):
Opening device \\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col02#8&30697e91&1&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}
DEBUG - hwIo.hid.Hid.__init__ (21:52:30.112) - MainThread (14868):
usage ID: 0X1
DEBUG - hwIo.hid.Hid.__init__ (21:52:30.112) - MainThread (14868):
usage page: 0X41
DEBUG - hwIo.hid.Hid.__init__ (21:52:30.112) - MainThread (14868):
Report byte lengths: input 14, output 41, feature 17
DEBUG - hwIo.hid.Hid.getFeature (21:52:31.116) - MainThread (14868):
Get feature b'\x01' failed: [WinError 1] Incorrect function.
DEBUG - hwIo.hid.Hid.getFeature (21:52:31.318) - MainThread (14868):
Get feature b'\x01' failed: [WinError 1] Incorrect function.
DEBUG - hwIo.hid.Hid.getFeature (21:52:31.518) - MainThread (14868):
Get feature b'\x01' failed: [WinError 1] Incorrect function.
DEBUG - hwIo.base.IoBase.close (21:52:31.518) - MainThread (14868):
Closing
DEBUG - hwIo.hid.Hid.__init__ (21:52:31.518) - MainThread (14868):
Opening device \\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col03#8&30697e91&1&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}\kbd
DEBUG - hwIo.hid.Hid.__init__ (21:52:31.518) - MainThread (14868):
Open failed: [WinError 5] Access is denied.
DEBUGWARNING - brailleDisplayDrivers.brailliantB.BrailleDisplayDriver.__init__ (21:52:31.518) - MainThread (14868):
Traceback (most recent call last):
  File "brailleDisplayDrivers\brailliantB.pyc", line 150, in __init__
  File "hwIo\hid.pyc", line 160, in __init__
PermissionError: [WinError 5] Access is denied.
DEBUGWARNING - hwIo.base.IoBase.__del__ (21:52:31.518) - MainThread (14868):
Couldn't delete object gracefully
Traceback (most recent call last):
  File "hwIo\base.pyc", line 172, in __del__
  File "hwIo\hid.pyc", line 326, in close
AttributeError: 'Hid' object has no attribute '_isClosed'
DEBUG - hwIo.hid.Hid.__init__ (21:52:31.518) - MainThread (14868):
Opening device \\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col01#8&30697e91&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
DEBUG - hwIo.hid.Hid.__init__ (21:52:31.518) - MainThread (14868):
usage ID: 0X1
DEBUG - hwIo.hid.Hid.__init__ (21:52:31.518) - MainThread (14868):
usage page: 0X93
DEBUG - hwIo.hid.Hid.__init__ (21:52:31.522) - MainThread (14868):
Report byte lengths: input 46, output 44, feature 39
DEBUG - hwIo.hid.Hid.close (21:52:31.522) - MainThread (14868):
Attempted to close an already closed device.
DEBUG - hwIo.hid.Hid.getFeature (21:52:32.983) - MainThread (14868):
Get feature: b'\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
DEBUG - hwIo.hid.Hid.getFeature (21:52:33.206) - MainThread (14868):
Get feature: b'\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
DEBUG - hwIo.hid.Hid.getFeature (21:52:33.425) - MainThread (14868):
Get feature: b'\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
DEBUG - hwIo.base.IoBase.close (21:52:33.426) - MainThread (14868):
Closing
ERROR - braille.BrailleHandler.setDisplayByName (21:52:33.427) - MainThread (14868):
Error initializing display driver 'brailliantB'
Traceback (most recent call last):
  File "braille.pyc", line 2515, in setDisplayByName
  File "braille.pyc", line 2585, in _setDisplay
  File "braille.pyc", line 2555, in _switchDisplay
  File "extensionPoints\util.pyc", line 216, in callWithSupportedKwargs
  File "brailleDisplayDrivers\brailliantB.pyc", line 186, in __init__
RuntimeError: No display found
DEBUG - hwIo.hid.Hid.close (21:52:33.428) - MainThread (14868):
Attempted to close an already closed device.
IO - speech.speech.speak (21:52:33.553) - MainThread (14868):
Speaking [LangChangeCommand ('en_GB'), 'Braille Display Error', 'dialog', 'Could not load the brailliantB display.', CancellableSpeech (still valid)]
IO - speech.speech.speak (21:52:33.558) - MainThread (14868):
Speaking [LangChangeCommand ('en_GB'), 'OK', 'button', CancellableSpeech (still valid)]
IO - inputCore.InputManager.executeGesture (21:52:34.933) - winInputHook (17828):
Input: kb(laptop):NVDA+control+shift+f1

System configuration

NVDA installed/portable/running from source:

Installed

NVDA version:

2024.4.1

Windows version:

Version 23H2 (OS Build 22631.4602)

Name and version of other software in use when reproducing the issue:

N/A

Other information about your system:

Other questions

Does the issue still occur after restarting your computer?

Yes

Have you tried any other versions of NVDA? If so, please report their behaviors.

No

If NVDA add-ons are disabled, is your problem still occurring?

Yes

Does the issue still occur after you run the COM Registration Fixing Tool in NVDA's tools menu?

Yes

@tmthywynn8
Copy link

It appears that for one user "factory resetting the unit and forgetting/re-pairing to Windows solves the key issue at least for basic cases" (Mastodon post. However keybindings will still differ depending on the connection used. STR:

  1. Connect the braille display asBluetooth.
  2. With NVDA, select Automatic as the braille display, making sure "Standard HID Braille Display" is checked as one of the displays to be detected automatically.
  3. Once the connection is established, press the following keys as an example:
    • Previous thumb key
    • Next thumb key
    • Result: The left and right arrow-keys are emulated, as the keys are registered as dpad left and dpad right.
  4. Connect the display as USB.
  5. With NVDA, select Automatic as the braille display, making sure "HumanWare Brailliant BI/B series / BrailleNote Touch" is checked as one of the displays to be detected automatically.
    • Alternatively, manually choose "HumanWare Brailliant BI/B series / BrailleNote Touch" as the display.
  6. Once the connection is established, press the following keys as an example:
    • Previous thumb key
    • Next thumb key
    • Result: NVDA moves the display to the previous and next lines, as the keys are registered as up and down respectively.

@zersiax
Copy link

zersiax commented Dec 16, 2024

Same behavior observed for Mantis q40, same firmware version and build. While this has been reported to Humanware, they appear to be more concerned with the fact I'm not in the US than actually taking an interest. A fix from their side may, therefore, not be something we should expect in the near future.
as @tmthywynn8 pointed out, it appears that reinitializing the bluetooth connection entirely (forget and re-add on Windows) improves the situation somewhat. This still only allows the unit to be used as a "standard HID" display, but restores scrolling and basic cursor routing buttons. While I reset my unit entirely to achieve this, I've since found that just readding the bluetooth device seems to be enough to trigger this change.
Interestingly, JAWS had less trouble with this firmware; it initially exhibits the same symptoms, but reconnecting the display after JAWS has already started seems to restore the cursor routing and panning keys, without having to re-add the bluetooth device outright.
The change log for this update does indicate the device has been improved where brailleHID is concerned... hperhaps they improved it a bit too much. 🤷🏻

@SaschaCowley SaschaCowley added p2 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority component/braille-display-drivers triaged Has been triaged, issue is waiting for implementation. labels Dec 16, 2024
@SaschaCowley SaschaCowley added this to the 2024.4.2 milestone Dec 16, 2024
@tmthywynn8
Copy link

tmthywynn8 commented Dec 18, 2024

It appears APH/HumanWare have released a hotfix for this issue. I installed build 4203 of the 2.4.0 release and it does seem to resolve the issue for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component/braille-display-drivers p2 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority triaged Has been triaged, issue is waiting for implementation.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants