nvda icon indicating copy to clipboard operation
nvda copied to clipboard

NLS E-Reader Zoomax braille display should possibly be supported by NVDA, but isn't

Open XLTechie opened this issue 8 months ago • 15 comments

Steps to reproduce:

Connect the Zoomax 20 cell braille display, which is one of the two units distributed in the U.S. as National Library Service free e-readers. Connect it via USB.

Actual behavior:

NVDA does not detect the display, even after restart. In USB mode, the display continues displaying "USB", as if it is waiting for connection.

Expected behavior:

I would hope this unit would be supported by NVDA, as its manual (for firmware version 2.0) claims NVDA support. That implies it was tested with NVDA at some point, and worked. Obviously, third party claims of NVDA support are meaningless if NVDA does not also claim support, but it's possible this display was known to work in the past, and has since stopped working.

Additional context:

The NVDA UG, in section 16.9, claims support for the NLS E-reader. I can only assume, that since this appears in the HumanWare section, that support only applies to the HumanWare version of the NLS e-reader.

NVDA logs, crash dumps and other attachments:

Here is a log, with HWIO logging enabled. nvda-nobraille.txt

System configuration

NVDA installed/portable/running from source:

Installed

NVDA version:

2023.3

Windows version:

11, 22H2

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.

I have tried a few recent alphas (Oct/Nov, 2023), with the same result.

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?

N/A

XLTechie avatar Nov 30 '23 10:11 XLTechie

@XLTechie You indicate that there is a "HumanWare" version, does this mean that your Zoomax is not made by HumanWare? Do you know if it is a USB serial or HID based device? If it is a device with a USB serial interface, you could select the COM port manually and try a few drivers that might work based on the manufacturer.

bramd avatar Nov 30 '23 17:11 bramd

@bramd It is made by Zoomax. https://www.zoomax.com

My understanding is that it is HID, simply from the fact that the user guide states that you connect it, and select it in the screen reader's braille options, no driver required.

Of course, that does not have to be accurate, it is just what it claims.

It is a Linux based device, with Python firmware.

XLTechie avatar Nov 30 '23 23:11 XLTechie

@XLTechie Based on BRLTTY sourcecode, this display seems to use the Baum protocol. However, the vendor and product IDs that I see in BRLTTY are not listed in NVDA's Baum driver and therefore will not be autodetected.

Based on the vendor and product IDs, this seems to be a device with built-in USB serial converter based on the very common CH-340 chip. So, if you choose the Baum driver and manually select the right serial port, this may work.

To get this autodetected, add it's vendor and product ID to the registerAutomaticDetection method under the KEY_SERIAL key like "VID_1A86&PID_7523",.

Please let me know if this works.

bramd avatar Dec 03 '23 19:12 bramd

@bramd many thanks for this research! Will do some tests and report back.

XLTechie avatar Dec 03 '23 19:12 XLTechie

@bramd Unfortunately, it does not. I can select the Baum driver when the display is connected (but not when it isn't). I can choose a comm port--I tried it both in a USB hub and direct, in which case the only port available changed from COM8 to COM7. However both times, I get the no display detected error

Tried in Alpha and 2023.3.

I didn't try making a compile with the IDs in auto detection--I figured if it doesn't work manually, it won't work automatically. If I am wrong there, I can try that next.

XLTechie avatar Dec 04 '23 12:12 XLTechie

On 4-12-2023 13:22, Luke Davis wrote:

@bramd https://github.com/bramd Unfortunately, it does not. I can select the Baum driver when the display is connected (but not when it isn't). I can choose a comm port--I tried it both in a USB hub and direct, in which case the only port available changed from COM8 to COM7. However both times, I get the no display detected error

Tried in Alpha and 2023.3.

I didn't try making a compile with the IDs in auto detection--I figured if it doesn't work manually, it won't work automatically. If I am wrong there, I can try that next.

No, you are right there. Could you provide a debug log with hwIo logging enabled? You enable this in the advanced preferences, check the hwIo in the debug log categories list and set log level to debug in general preferences. Please not this log will contain raw braille and speech output, so ensure nothing sensitive is brailled/spoken while logging.

bramd avatar Dec 04 '23 22:12 bramd

I have the same display running version 2.0, firmware 29. I (1) changed the logging level to debug, (2) enabled the hwIo debugging category, (3) restarted NVDA with add-ons disabled, and (4) pressed control+shift+NVDA+f1 to start the log fragment. I then plugged the display into my USB port, pressed ctrl+NVDA+a to choose a braille display, pressed B to choose Baum/HumanWare/APH/Orbit braille displays, tabbed over and chose USB-SERIAL CH340, and pressed Enter. That log fragment is attached (see Zoomax NLS eReader .txt).

tmthywynn8 avatar Mar 03 '24 02:03 tmthywynn8

@tmthywynn8 Thanks for the input. From your log it seems the display doesn't respond at all to the request from the driver. I'm not familiar at all with this hardware, but please ensure it is turned on and set to a braille display mode if it has internal menus or options to do so. Some displays still show up as a serial port, even if the hardware is turned off or otherwise unavailable. A logical next step would be to get this running with BRLTTY to check if that code is working and check the differences between BRLTTY and the NVDA driver.

bramd avatar Mar 06 '24 16:03 bramd

I do not recall if I put the display into USB mode or not, but I did the same steps as earlier, except after plugging it in to the USB port, I made sure to put into USB mode (the display says USB in braille; see ZoomaxNVDA.txt). I will try to use BRLTTY after work.

tmthywynn8 avatar Mar 06 '24 18:03 tmthywynn8

I confirm having done the same thing, and gotten the same results.

XLTechie avatar Mar 06 '24 20:03 XLTechie

So I couldn't get the stand-alone version of BRLTTY to work, however Narrator's interface for it worked like a charm. I couldn't choose USB but had to explicitly choose the serial port (in my case COM5. Once that was done, I started narrator, force-quitted the screen reader, loaded NVDA, and chose BRLTTY as the display. I couldn't type any braille, but panning and other D-keys worked as expected.

When using BRLTTY with Narrator though, input keys worked as expected, however the space key did not do anything—had to use BL and BR. When I first started Narrator, the display said BRLTTY 5.6 in computer braille (⡃⡗⡇⡞⡞⡿⠀⠢⠨⠖), and when exiting BRLTTY stopped (⡃⡗⡇⡞⡞⠽⠀⠎⠞⠕⠏⠏⠑⠙). If I force-quit Narrator, disconnect and reconnect the uSB cable, the display says BRLTTY 5.6 followed by no screen (⣝⠕⠀⠎⠉⠗⠑⠑⠝). Note that JAWS works without explicitly choosing anything but the display and its connection type, USB.

tmthywynn8 avatar Mar 07 '24 03:03 tmthywynn8

@tmthywynn8 As far as I know, Narrator does not ship with BRLTTY 6.6 and always as an "M" suffix after the version, such as "6.4M". So I think you somehow ran the standalone 6.6 version. By default the standalone version si configured to sleep if the braille API is not used, so that it is just starting when NVDA/Narator accesses it is normal. It would be really helpful if you could give a brltty log with input and output packets logged. You can do this by running debug-brltty.bat from the standalone version. You may need to add the correct parameters for your display such as "-dserial:COM5" to set the port if you don't have that already in brltty.conf. The debug-brltty.bat should log to your terminal and also to a log file if I remember correctly. I hope we ca nsee how BRLTTY initializes the display based on the raw packets and compare this with NVDA.

bramd avatar Mar 10 '24 14:03 bramd

I definitely saw it say "BRLTTY 5.6" and not "6.6M", and yes, the version shipped with Narrator in Windows 10 is 5.6 not 6.6.

As suggested, I did install the older release instead of the 6.x series, which seemed to work, though input still isn't working with NVDA (I'm probably not doing it correctly). I'm not sure if this is the log you wanted, but I was able to run it with the debug batch file as recommended, though did run it as admin since I saw that the log was going to be written in the program directory. The only change I did was remove the time stamps because it was quite verbose: debug.log

tmthywynn8 avatar Mar 11 '24 02:03 tmthywynn8

I received the NLS eReader Zoomax braille display driver from the National Library Service today (see this zip archive), and the display does work with NVDA with both USB and Bluetooth connections. The only problem is that b11 (the spacebar) isn't registered as such in the mapping, though the Bluetooth mode gets around that by mapping it to b10 (identical to BR). Not sure how this is to integrate into the Baum driver, but one of the comments did say it was based on said driver.

tmthywynn8 avatar Mar 21 '24 21:03 tmthywynn8

As a priority we should update our documentation to clearly state that this specific device does not work with NVDA.

Creating support in NVDA for this device will be challenging without spec information from the manufacturer.

seanbudd avatar Apr 29 '24 01:04 seanbudd

@tmthywynn8 Based on that driver the changes seem very minimal. It seems this device does not respond to a cell count request and therefore the Baum driver will not recognize it. In this driver the cell count is hardcoded to 20 cells.

I think the best solution here would be to find a way to identify this device in the Baum driver and set the cell count to 20 instead of relying on the display reporting it's cell count. Since I don't own this device, I have no easy way to find a good way to identify it and have no motivation to work on this. Besides, I think manufacturers should just extend the driver that is already there and submit their changes to NVDA core to give their users a good user experience. They took the effort to clone the Baum driver and made the minimal changes they need, so doing this properly and submitting a PR to NVDA is not that much of a stretch.

bramd avatar May 02 '24 09:05 bramd

Are you sure? It does look like from the BRLTTY log that the cell count is returned, i.e.:

serial: input: 1B 01 14
input packet: 01 14
Cell Count: 20 (20 text, 0 status)

I will, of course, write to the folks at NLS to see if the author of this driver would be willing to push their code upstream and incorporate into NVDA itself.

tmthywynn8 avatar May 03 '24 04:05 tmthywynn8

@tmthywynn8 Good catch. I was just looking at their driver, which hardcodes the cell count and didn't compare it to the BRLTTY log this time. So I don't know why they do this.

bramd avatar May 04 '24 15:05 bramd