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

Filter for the correct usage page in the Brailliant driver #17522

Open
wants to merge 6 commits into
base: rc
Choose a base branch
from

Conversation

LeonarddeR
Copy link
Collaborator

@LeonarddeR LeonarddeR commented Dec 14, 2024

Link to issue number:

Related to #17518

Summary of the issue:

The Brailliant driver doesn't filter for HID usage page properly, meaning that attempts are made to connect to device entries with other usage pages, such as HID braille and keyboard.
Also, when explicitly selecting the HID driver and then opening the display list again results in no display driver being selected at all and the HID driver being unavailable to select again.

Description of user facing changes

Quicker USB and Bluetooth connection.

Description of development approach

  1. Hardcoded a usage page of 0x93 and ignore all other usage pages in the Brailliant driver.
  2. Added a small caching mechanism to hwPortUtils that caches device info like usage page, manufacturer, vendor, etc. This is necessary because when the display is connected, NVDA is unable to open a second handle to the device to get this information. This means that for example, when a HID braille driver device is connected, NVDA is unable to detect the same HID device again because it can't fetch the usage page.

Testing strategy:

  • Tested USB and Bluetooth with a Brailliant BI20 on Firmware 2.0
  • Tested USB and Bluetooth with a APH Mantis Q40 on Firmware 2.0

Known issues with pull request:

Code Review Checklist:

  • Documentation:
    • Change log entry
    • User Documentation
    • Developer / Technical Documentation
    • Context sensitive help for GUI changes
  • [] Testing:
    • Unit tests
    • System (end to end) tests
    • Manual testing
  • UX of all users considered:
    • Speech
    • Braille
    • Low Vision
    • Different web browsers
    • Localization in other languages / culture than English
  • API is compatible with existing add-ons.
  • Security precautions taken.

Summary by CodeRabbit

Release Notes for NVDA 2024.4.2

  • New Features

    • Improved identification of the Standard HID Braille Display driver.
    • Enhanced reliability for the Humanware Brailliant driver, leading to better connection stability.
  • Bug Fixes

    • Resolved issues with driver selection and connection errors for Braille displays.
  • Documentation

    • Updated user documentation to reflect the latest changes and features.

@LeonarddeR LeonarddeR requested a review from a team as a code owner December 14, 2024 08:52
@LeonarddeR
Copy link
Collaborator Author

LeonarddeR commented Dec 14, 2024

cc @Adriani90 @bramd @dkager @jcsteh I would really appreciate your help with testing with both recent and previous generation Brailliants.
I recall that @jcsteh wrote this driver. May be there is documentation at hand that can confirm the appropriate usage page?

@AppVeyorBot
Copy link

See test results for failed build of commit 59f2c588bd

@dkager
Copy link
Collaborator

dkager commented Dec 14, 2024

This approach looks good, but I agree with you that it should be handled more generally outside of the drivers.

@bramd
Copy link
Contributor

bramd commented Dec 14, 2024

@LeonarddeR My device is still at firmware 2.4 to see if I can do something about the broken driver and/or non-working keys in Standard HID. This looks reasonable to me and I agree that we should build this in bdDetect in the long term. When I downlgrade or have a working driver for 2.4 I'll test your changes.

@jcsteh
Copy link
Contributor

jcsteh commented Dec 15, 2024

I don't own a Brailliant, so unfortunately I can't help. (Well, I do own one of the old ones, but that's basically a rebadged Baum device and doesn't use the Brailliant protocol.) I wrote the original drive using a device I loaned from HumanWare, but I haven't had that device for years.

@Adriani90
Copy link
Collaborator

Thanks Leonard for the ping, I‘ll test next week when I am back home.

Copy link
Contributor

@bramd bramd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me and works fine here

user_docs/en/changes.md Outdated Show resolved Hide resolved
@SaschaCowley SaschaCowley added the conceptApproved Similar 'triaged' for issues, PR accepted in theory, implementation needs review. label Dec 16, 2024
@seanbudd seanbudd added this to the 2024.4.2 milestone Dec 17, 2024
@SaschaCowley SaschaCowley changed the base branch from master to rc December 17, 2024 00:12
@SaschaCowley SaschaCowley requested a review from a team as a code owner December 17, 2024 00:12
@SaschaCowley SaschaCowley changed the base branch from rc to master December 17, 2024 00:12
@SaschaCowley SaschaCowley changed the base branch from master to rc December 17, 2024 04:18
@SaschaCowley SaschaCowley reopened this Dec 17, 2024
Copy link
Contributor

coderabbitai bot commented Dec 17, 2024

Walkthrough

This pull request introduces several improvements to NVDA's device handling and version management. The changes focus on enhancing the Brailliant B HID driver's connection logic by adding a usage page check, improving HID device information retrieval with a caching mechanism, and updating the minor version number. The modifications aim to increase device connection reliability and provide more robust error handling when interacting with hardware devices.

Changes

File Change Summary
source/brailleDisplayDrivers/brailliantB.py Added HID_USAGE_PAGE constant and modified device initialization to check HID usage page
source/buildVersion.py Updated version_minor from 1 to 2
source/hwPortUtils.py Added _getHidInfoCache and enhanced _getHidInfo function with caching and improved error handling
source/winAPI/constants.py Added SHARING_VIOLATION constant to SystemErrorCodes
user_docs/en/changes.md Updated with changes to Braille Display driver reliability

Possibly related PRs

Suggested labels

merge-early

Suggested reviewers

  • LeonarddeR

Tip

CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command @coderabbitai generate docstrings to have CodeRabbit automatically generate docstrings for your pull request. We would love to hear your feedback on Discord.


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (2)
user_docs/en/changes.md (2)

7-8: Inconsistent sentence structure in bullet points.

The bullet points should start with verbs for consistency. Consider rewording to:

- * When the Standard HID Braille Display driver is explicitly selected as the braille display driver, and the braille display list is opened, NVDA correctly identifies the HID driver as the selected driver instead of showing no driver selected. (#17522, @LeonarddeR)
- * The Humanware Brailliant driver is now more reliable in selecting the right connection endpoint, resulting in better connection stability and less errors.  (#17522, @LeonarddeR)
+ * Fixed issue where NVDA did not correctly identify the HID driver as selected when opening the braille display list with Standard HID Braille Display driver explicitly selected. (#17522, @LeonarddeR)
+ * Improved reliability of the Humanware Brailliant driver when selecting connection endpoints, resulting in better stability and fewer errors. (#17522, @LeonarddeR)

8-8: Grammar: "less errors" should be "fewer errors".

"Less" is used for uncountable nouns while "fewer" is used for countable nouns like errors.

📜 Review details

Configuration used: .coderabbit.yml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 782c3d8 and 7f92915.

📒 Files selected for processing (5)
  • source/brailleDisplayDrivers/brailliantB.py (2 hunks)
  • source/buildVersion.py (1 hunks)
  • source/hwPortUtils.py (4 hunks)
  • source/winAPI/constants.py (1 hunks)
  • user_docs/en/changes.md (1 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
source/winAPI/constants.py (2)

Pattern **/*: Focus on code smells, logic errors, edge cases, missing test cases, security flaws and serious issues. Avoid commenting on minor issues such as linting, formatting and style issues. This project uses tabs instead of spaces, do not suggest usage of spaces over tabs. Are there any 'red flags' in this code that might warrant closer investigation from a security standpoint? Explain what makes them suspicious. When providing code suggestions, particularly when requested, ensure GitHub's suggestion format is used, i.e.: suggestion <code changes>


Pattern **/*.py: _, pgettext, ngettext, and ngettext are defined globally, errors for this being undefined can be ignored.

source/buildVersion.py (2)

Pattern **/*: Focus on code smells, logic errors, edge cases, missing test cases, security flaws and serious issues. Avoid commenting on minor issues such as linting, formatting and style issues. This project uses tabs instead of spaces, do not suggest usage of spaces over tabs. Are there any 'red flags' in this code that might warrant closer investigation from a security standpoint? Explain what makes them suspicious. When providing code suggestions, particularly when requested, ensure GitHub's suggestion format is used, i.e.: suggestion <code changes>


Pattern **/*.py: _, pgettext, ngettext, and ngettext are defined globally, errors for this being undefined can be ignored.

source/brailleDisplayDrivers/brailliantB.py (2)

Pattern **/*: Focus on code smells, logic errors, edge cases, missing test cases, security flaws and serious issues. Avoid commenting on minor issues such as linting, formatting and style issues. This project uses tabs instead of spaces, do not suggest usage of spaces over tabs. Are there any 'red flags' in this code that might warrant closer investigation from a security standpoint? Explain what makes them suspicious. When providing code suggestions, particularly when requested, ensure GitHub's suggestion format is used, i.e.: suggestion <code changes>


Pattern **/*.py: _, pgettext, ngettext, and ngettext are defined globally, errors for this being undefined can be ignored.

source/hwPortUtils.py (2)

Pattern **/*: Focus on code smells, logic errors, edge cases, missing test cases, security flaws and serious issues. Avoid commenting on minor issues such as linting, formatting and style issues. This project uses tabs instead of spaces, do not suggest usage of spaces over tabs. Are there any 'red flags' in this code that might warrant closer investigation from a security standpoint? Explain what makes them suspicious. When providing code suggestions, particularly when requested, ensure GitHub's suggestion format is used, i.e.: suggestion <code changes>


Pattern **/*.py: _, pgettext, ngettext, and ngettext are defined globally, errors for this being undefined can be ignored.

user_docs/en/changes.md (3)

Pattern **/*: Focus on code smells, logic errors, edge cases, missing test cases, security flaws and serious issues. Avoid commenting on minor issues such as linting, formatting and style issues. This project uses tabs instead of spaces, do not suggest usage of spaces over tabs. Are there any 'red flags' in this code that might warrant closer investigation from a security standpoint? Explain what makes them suspicious. When providing code suggestions, particularly when requested, ensure GitHub's suggestion format is used, i.e.: suggestion <code changes>


Pattern **/*.md: Focus on grammar, spelling, and punctuation. Also consider readability and clarity of contents. Ensure that changes follow the style of one sentence per line, suggest changes if this is not met.


Pattern user_docs/en/changes.md: Ensure each change log entry references an issue or pull request number. Change log entries can also include a reference to a GitHub author. Examples of valid change log entries: * Item with sub-items (#123, @username): * sub-item * bar (#342) * Item with. Multiple lines. (#143)

🔇 Additional comments (5)
source/winAPI/constants.py (1)

31-32: Addition of SHARING_VIOLATION error code is appropriate

The constant SHARING_VIOLATION correctly represents the error code 0x20 and includes an appropriate docstring.

source/buildVersion.py (1)

68-68: Version number updated appropriately

The version_minor variable has been updated from 1 to 2, reflecting the new minor version.

source/brailleDisplayDrivers/brailliantB.py (2)

38-38: Definition of HID_USAGE_PAGE is appropriate

The constant HID_USAGE_PAGE is correctly defined as 0x93, which will be used for filtering devices.


151-153: ⚠️ Potential issue

Typo in variable name usasePage

There is a typo in the variable name usasePage; it should be usagePage.

Apply this diff to fix the typo:

-                    if (usasePage := portInfo.get("HIDUsagePage")) != HID_USAGE_PAGE:
+                    if (usagePage := portInfo.get("HIDUsagePage")) != HID_USAGE_PAGE:

Additionally, ensure consistency in the variable name throughout the code if it's used elsewhere.

Ensure compatibility with Python versions before 3.8

The use of the walrus operator (:=) requires Python 3.8 or later. If the project needs to maintain compatibility with earlier Python versions, consider refactoring to avoid using the walrus operator.

Suggested refactor:

-                    if (usagePage := portInfo.get("HIDUsagePage")) != HID_USAGE_PAGE:
+                    usagePage = portInfo.get("HIDUsagePage")
+                    if usagePage != HID_USAGE_PAGE:

Likely invalid or redundant comment.

user_docs/en/changes.md (1)

1-8: Missing issue/PR references in changelog entries.

The second bullet point is missing an issue/PR reference number that should be included for traceability.

source/hwPortUtils.py Outdated Show resolved Hide resolved
source/hwPortUtils.py Outdated Show resolved Hide resolved
source/hwPortUtils.py Outdated Show resolved Hide resolved
@LeonarddeR
Copy link
Collaborator Author

I'm not sure whether the usage page constraint brings other issues here. I'd really like it if someone like @dkager can test against an older display, may be someone with a Braille Note as well?

Copy link
Member

@Qchristensen Qchristensen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reads well.

@Adriani90
Copy link
Collaborator

@LeonarddeR testing on a Braillina BI40x with firmware 2.3, it doesn't work when choosing standard HID, but indeed the Standard HID is shown properly after applying changes and checking the current braille display in braille settings panel. It doesn't disappear from the list of braille device drivers anymore.

However, nothing is shown oin the Braille display when standard HID is selected. is this expected?

Just in case, here is my advanced logging:

IO - inputCore.InputManager.executeGesture (15:25:44.037) - winInputHook (7196):
Input: kb(laptop):upArrow
DEBUG - hwPortUtils.listUsbDevices (15:25:44.037) - MainThread (23496):
USB Id: 'VID_8087&PID_0033'
DEBUGWARNING - hwPortUtils.listUsbDevices (15:25:44.037) - MainThread (23496):
Couldn't get DEVPKEY_Device_BusReportedDeviceDesc for {'hardwareID': 'USB\\VID_8087&PID_0033&REV_0000', 'usbID': 'VID_8087&PID_0033', 'devicePath': '\\\\?\\usb#vid_8087&pid_0033#5&242a2f40&0&10#{a5dcbf10-6530-11d2-901f-00c04fb951ed}'}: [WinError 1168] Element nicht gefunden.
DEBUG - hwPortUtils.listUsbDevices (15:25:44.037) - MainThread (23496):
USB Id: 'VID_0B05&PID_19B6'
DEBUG - hwPortUtils.listUsbDevices (15:25:44.047) - MainThread (23496):
Finished listing USB devices
DEBUG - hwPortUtils.listHidDevices (15:25:44.049) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col02', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col02#6&19e2ad7&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 65410}
DEBUG - hwPortUtils.listHidDevices (15:25:44.067) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col08', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col08#6&19e2ad7&0&0007#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 1}
DEBUG - hwPortUtils.listHidDevices (15:25:44.067) - MainThread (23496):
{'hardwareID': 'HID\\VEN_ASUE&DEV_1403&Col04', 'devicePath': '\\\\?\\hid#asue1403&col04#5&1be760f4&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}\\kbd', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (15:25:44.086) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col09', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col09#6&19e2ad7&0&0008#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 1}
DEBUG - hwPortUtils.listHidDevices (15:25:44.097) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col04', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col04#6&19e2ad7&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 65329}
DEBUG - hwPortUtils.listHidDevices (15:25:44.107) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col03', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col03#6&19e2ad7&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}\\kbd', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 1}
DEBUGWARNING - hwPortUtils._getHidInfo (15:25:44.107) - MainThread (23496):
Opening device \\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col01#8&4100f54&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030} to get additional info failed because the device is being used. Falling back to cache for device info
DEBUG - hwPortUtils.listHidDevices (15:25:44.107) - MainThread (23496):
{'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&4100f54&0&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 (15:25:44.117) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col05', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col05#6&19e2ad7&0&0004#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 65329}
DEBUG - hwPortUtils.listHidDevices (15:25:44.117) - MainThread (23496):
{'hardwareID': 'HID\\VEN_ASUE&DEV_1403&Col01', 'devicePath': '\\\\?\\hid#asue1403&col01#5&1be760f4&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (15:25:44.117) - MainThread (23496):
{'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&4100f54&0&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 (15:25:44.117) - MainThread (23496):
{'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&4100f54&0&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 (15:25:44.117) - MainThread (23496):
{'hardwareID': 'HID\\VEN_ASUE&DEV_1403&Col02', 'devicePath': '\\\\?\\hid#asue1403&col02#5&1be760f4&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (15:25:44.129) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col06', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col06#6&19e2ad7&0&0005#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 12}
DEBUG - hwPortUtils.listHidDevices (15:25:44.129) - MainThread (23496):
{'hardwareID': 'HID\\VEN_ASUE&DEV_1403&Col03', 'devicePath': '\\\\?\\hid#asue1403&col03#5&1be760f4&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (15:25:44.148) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col01', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col01#6&19e2ad7&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 65417}
DEBUG - hwPortUtils.listHidDevices (15:25:44.157) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col07', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col07#6&19e2ad7&0&0006#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 1}
DEBUG - hwPortUtils.listHidDevices (15:25:44.157) - MainThread (23496):
Finished listing HID devices
DEBUG - hwPortUtils.listComPorts (15:25:44.157) - MainThread (23496):
Finished listing com ports
IO - speech.speech.speak (15:25:44.180) - MainThread (23496):
Speaking ['Standard-HID-Braillezeile']
IO - braille.BrailleBuffer.update (15:25:44.180) - MainThread (23496):
Braille regions text: ['Wählen Sie eine Braillezeile aus dlg ', 'Braillezeile: Standard-HID-Braillezeile + kmbf']
IO - braille.BrailleHandler.update (15:25:44.180) - MainThread (23496):
Braille window dots: 12 1235 1 24 12345 15 1356 146 123 15 25 - 2 23456 356 145 36 125 24 145 36 12 1235 1 24 12345 15 1356 146 123 15 - 4 235 - 13 134 12 124
DEBUG - hwIo.hid.Hid.setOutputReport (15:25:44.180) - hwIo.ioThread.IoThread (23480):
Set output report: b'\x05\x01\x00(\x03\x17\x01\n\x1f\x115)\x07\x11\x12\x00\x02>4\x19$\x13\n\x19$\x03\x17\x01\n\x1f\x115)\x07\x11\x00\x08\x16\x00\x05\r\x03\x0b\x00'
IO - inputCore.InputManager.executeGesture (15:25:45.827) - winInputHook (7196):
Input: kb(laptop):shift+tab

...

IO - inputCore.InputManager.executeGesture (15:25:46.122) - winInputHook (7196):
Input: kb(laptop):shift+tab
DEBUGWARNING - NVDAObjects.NVDAObject._get_annotations (15:25:46.126) - MainThread (23496):
Fetching annotations not supported on: Button
IO - speech.speech.speak (15:25:46.126) - MainThread (23496):
Speaking ['OK', 'Schalter', CancellableSpeech (still valid)]
IO - inputCore.InputManager.executeGesture (15:25:48.477) - winInputHook (7196):
Input: kb(laptop):space
IO - speech.speech.speak (15:25:48.493) - MainThread (23496):
Speaking ['gedrückt']
DEBUG - NVDAObjects.NVDAObject._get_placeholder (15:25:48.493) - MainThread (23496):
Potential unimplemented child class: <NVDAObjects.IAccessible.Button object at 0x0B5DB6D0>
DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (15:25:48.493) - MainThread (23496):
Unable to use _getIA2TargetsForRelationsOfType, fallback to _IA2Relations.
DEBUG - NVDAObjects.IAccessible.IAccessible._get__IA2Relations (15:25:48.493) - MainThread (23496):
Not an IA2.IAccessible2
DEBUG - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (15:25:48.493) - MainThread (23496):
Unable to fetch _IA2Relations
Traceback (most recent call last):
  File "NVDAObjects\IAccessible\__init__.pyc", line 1863, in _getIA2RelationFirstTarget
  File "baseObject.pyc", line 59, in __get__
  File "baseObject.pyc", line 167, in _getPropertyViaCache
  File "NVDAObjects\IAccessible\__init__.pyc", line 1780, in _get__IA2Relations
NotImplementedError
DEBUGWARNING - NVDAObjects.NVDAObject._get_annotations (15:25:48.493) - MainThread (23496):
Fetching annotations not supported on: Button
IO - braille.BrailleBuffer.update (15:25:48.493) - MainThread (23496):
Braille regions text: ['Wählen Sie eine Braillezeile aus dlg ', 'OK ⢎⣿⡱ sltr']
IO - braille.BrailleHandler.update (15:25:48.493) - MainThread (23496):
Braille window dots: 2456 345 125 123 14 - 234 - 1246 15 - 12 1235 1 24 12345 15 1356 146 123 15 - 16 234 - 145 123 1245 - 135 13 - 2348 12345678 1567 - 234 123 2345 1235
DEBUG - hwIo.hid.Hid.setOutputReport (15:25:48.493) - hwIo.ioThread.IoThread (23480):
Set output report: b'\x05\x01\x00(:\x1c\x13\x07\t\x00\x0e\x00+\x11\x00\x03\x17\x01\n\x1f\x115)\x07\x11\x00!\x0e\x00\x19\x07\x1b\x00\x15\x05\x00\x8e\xffq\x00\x0e\x07\x1e\x17'
DEBUG - autoSettingsUtils.autoSettings.AutoSettings._registerConfigSaveAction (15:25:48.564) - MainThread (23496):
registering pre_configSave action: <class 'brailleDisplayDrivers.hidBrailleStandard.HidBrailleDriver'>
DEBUG - hwPortUtils.listUsbDevices (15:25:48.564) - MainThread (23496):
USB Id: 'VID_8087&PID_0033'
DEBUGWARNING - hwPortUtils.listUsbDevices (15:25:48.564) - MainThread (23496):
Couldn't get DEVPKEY_Device_BusReportedDeviceDesc for {'hardwareID': 'USB\\VID_8087&PID_0033&REV_0000', 'usbID': 'VID_8087&PID_0033', 'devicePath': '\\\\?\\usb#vid_8087&pid_0033#5&242a2f40&0&10#{a5dcbf10-6530-11d2-901f-00c04fb951ed}'}: [WinError 1168] Element nicht gefunden.
DEBUG - hwPortUtils.listUsbDevices (15:25:48.564) - MainThread (23496):
USB Id: 'VID_0B05&PID_19B6'
DEBUG - hwPortUtils.listUsbDevices (15:25:48.564) - MainThread (23496):
Finished listing USB devices
DEBUG - hwPortUtils.listHidDevices (15:25:48.573) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col02', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col02#6&19e2ad7&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 65410}
DEBUG - hwPortUtils.listHidDevices (15:25:48.580) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col08', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col08#6&19e2ad7&0&0007#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 1}
DEBUG - hwPortUtils.listHidDevices (15:25:48.580) - MainThread (23496):
{'hardwareID': 'HID\\VEN_ASUE&DEV_1403&Col04', 'devicePath': '\\\\?\\hid#asue1403&col04#5&1be760f4&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}\\kbd', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (15:25:48.591) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col09', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col09#6&19e2ad7&0&0008#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 1}
DEBUG - hwPortUtils.listHidDevices (15:25:48.607) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col04', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col04#6&19e2ad7&0&0003#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 65329}
DEBUG - hwPortUtils.listHidDevices (15:25:48.629) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col03', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col03#6&19e2ad7&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}\\kbd', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 1}
DEBUGWARNING - hwPortUtils._getHidInfo (15:25:48.629) - MainThread (23496):
Opening device \\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col01#8&4100f54&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030} to get additional info failed because the device is being used. Falling back to cache for device info
DEBUG - hwPortUtils.listHidDevices (15:25:48.629) - MainThread (23496):
{'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&4100f54&0&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 (15:25:48.636) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col05', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col05#6&19e2ad7&0&0004#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 65329}
DEBUG - hwPortUtils.listHidDevices (15:25:48.636) - MainThread (23496):
{'hardwareID': 'HID\\VEN_ASUE&DEV_1403&Col01', 'devicePath': '\\\\?\\hid#asue1403&col01#5&1be760f4&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (15:25:48.636) - MainThread (23496):
{'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&4100f54&0&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 (15:25:48.636) - MainThread (23496):
{'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&4100f54&0&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 (15:25:48.636) - MainThread (23496):
{'hardwareID': 'HID\\VEN_ASUE&DEV_1403&Col02', 'devicePath': '\\\\?\\hid#asue1403&col02#5&1be760f4&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (15:25:48.648) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col06', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col06#6&19e2ad7&0&0005#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 12}
DEBUG - hwPortUtils.listHidDevices (15:25:48.648) - MainThread (23496):
{'hardwareID': 'HID\\VEN_ASUE&DEV_1403&Col03', 'devicePath': '\\\\?\\hid#asue1403&col03#5&1be760f4&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': None}
DEBUG - hwPortUtils.listHidDevices (15:25:48.657) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col01', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col01#6&19e2ad7&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 65417}
DEBUG - hwPortUtils.listHidDevices (15:25:48.677) - MainThread (23496):
{'hardwareID': 'HID\\VID_0B05&PID_19B6&REV_0318&Col07', 'devicePath': '\\\\?\\hid#vid_0b05&pid_19b6&col07#6&19e2ad7&0&0006#{4d1e55b2-f16f-11cf-88cb-001111000030}', 'provider': 'usb', 'usbID': 'VID_0B05&PID_19B6', 'vendorID': 2821, 'productID': 6582, 'versionNumber': 792, 'manufacturer': 'ASUSTek Computer Inc.', 'product': 'N-KEY Device', 'HIDUsagePage': 1}
DEBUG - hwPortUtils.listHidDevices (15:25:48.677) - MainThread (23496):
Finished listing HID devices
DEBUG - hwPortUtils.listComPorts (15:25:48.677) - MainThread (23496):
Finished listing com ports
DEBUG - hwIo.hid.Hid.__init__ (15:25:48.677) - MainThread (23496):
Opening device \\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col02#8&4100f54&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}
DEBUG - hwIo.hid.Hid.__init__ (15:25:48.677) - MainThread (23496):
usage ID: 0X1
DEBUG - hwIo.hid.Hid.__init__ (15:25:48.677) - MainThread (23496):
usage page: 0X41
DEBUG - hwIo.hid.Hid.__init__ (15:25:48.677) - MainThread (23496):
Report byte lengths: input 14, output 41, feature 17
INFO - brailleDisplayDrivers.hidBrailleStandard.HidBrailleDriver.__init__ (15:25:48.677) - MainThread (23496):
Found display with 1 rows, 40 cols connected via hid (\\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col02#8&4100f54&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030})
DEBUG - braille.BrailleHandler._switchDisplay (15:25:48.677) - MainThread (23496):
Switching braille display from 'brailliantB' to 'hidBrailleStandard'
DEBUG - hwIo.hid.Hid.setOutputReport (15:25:48.677) - MainThread (23496):
Set output report: b'\x05\x01\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
DEBUG - hwIo.base.IoBase.close (15:25:48.697) - MainThread (23496):
Closing
DEBUG - autoSettingsUtils.autoSettings.AutoSettings._loadSpecificSettings (15:25:48.697) - MainThread (23496):
loading braille hidBrailleStandard
INFO - braille.BrailleHandler._setDisplay (15:25:48.697) - MainThread (23496):
Loaded braille display driver 'hidBrailleStandard', current display has 40 cells.
DEBUG - hwIo.hid.Hid.close (15:25:48.697) - MainThread (23496):
Attempted to close an already closed device.
DEBUG - gui.settingsDialogs.AutoSettingsMixin.refreshGui (15:25:48.706) - MainThread (23496):
refreshing panel
DEBUG - gui.settingsDialogs.AutoSettingsMixin.updateDriverSettings (15:25:48.726) - MainThread (23496):
Current sizerDict: {}
DEBUG - gui.settingsDialogs.AutoSettingsMixin.updateDriverSettings (15:25:48.726) - MainThread (23496):
Current supportedSettings: ()
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.816) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:25:48.819) - MainThread (23496):
Loading output tables completed, now at 0.09 seconds from start
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.901) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:25:48.901) - MainThread (23496):
Loading input tables completed, now at 0.17 seconds from start
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.907) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.919) - MainThread (23496):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.919) - MainThread (23496):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.919) - MainThread (23496):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.927) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.942) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.949) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:25:48.949) - MainThread (23496):
Loading cursor settings completed, now at 0.22 seconds from start
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.965) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.966) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:25:48.966) - MainThread (23496):
Loading timeout settings completed, now at 0.24 seconds from start
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.981) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:25:48.981) - MainThread (23496):
Loading tether settings completed, now at 0.25 seconds from start
DEBUG - config.featureFlag._validateConfig_featureFlag (15:25:48.987) - MainThread (23496):
Validating feature flag: DEFAULT, optionsEnum: ReviewRoutingMovesSystemCaretFlag, behaviorOfDefault: NEVER
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.987) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:25:48.997) - MainThread (23496):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:25:49.007) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:25:49.021) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - config.featureFlag._validateConfig_featureFlag (15:25:49.027) - MainThread (23496):
Validating feature flag: DEFAULT, optionsEnum: BoolFlag, behaviorOfDefault: ENABLED
DEBUG - gui.contextHelp.bindHelpEvent (15:25:49.027) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - config.featureFlag._validateConfig_featureFlag (15:25:49.047) - MainThread (23496):
Validating feature flag: DEFAULT, optionsEnum: FontFormattingBrailleModeFlag, behaviorOfDefault: LIBLOUIS
DEBUG - gui.contextHelp.bindHelpEvent (15:25:49.047) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:25:49.047) - MainThread (23496):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:25:49.047) - MainThread (23496):
Did context help binding for CheckBox
DEBUG - config.featureFlag._validateConfig_featureFlag (15:25:49.058) - MainThread (23496):
Validating feature flag: DEFAULT, optionsEnum: BoolFlag, behaviorOfDefault: DISABLED
DEBUG - gui.contextHelp.bindHelpEvent (15:25:49.058) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - config.featureFlag._validateConfig_featureFlag (15:25:49.077) - MainThread (23496):
Validating feature flag: DEFAULT, optionsEnum: BoolFlag, behaviorOfDefault: ENABLED
DEBUG - gui.contextHelp.bindHelpEvent (15:25:49.077) - MainThread (23496):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:25:49.077) - MainThread (23496):
Finished making settings, now at 0.35 seconds from start
DEBUG - gui.settingsDialogs.AutoSettingsMixin.refreshGui (15:25:49.077) - MainThread (23496):
refreshing panel
ERROR - unhandled exception (15:25:49.077) - MainThread (23496):
Traceback (most recent call last):
  File "wx\core.pyc", line 3427, in <lambda>
  File "gui\settingsDialogs.pyc", line 1549, in refreshGui
RuntimeError: wrapped C/C++ object of type BoxSizer has been deleted

@LeonarddeR
Copy link
Collaborator Author

@Adriani90 This is expected from NVDA"s perspective, see #17526 (comment)

@Adriani90
Copy link
Collaborator

Ah, I am not sure whether that runtime error at the end has anything to do with this issue.

It seems when I choose standard HID and press ok, the braille display is shown as
"automatic, Standard HID". It seems it popüulates the automatic braille display connection with the standar HID although I have chosen it manually.

@LeonarddeR
Copy link
Collaborator Author

That would be weird. I'll see whether I can reproduce that, but it should have nothing to do with the changes in this pr.

@Adriani90
Copy link
Collaborator

After a while, I restarted NVDA, and suddenly now the Standard HID driver seems to work somehow, at least my Braille display shows characters and I can read.

At this stage I try to choose back the Humanware driver, and the Braille display is again empty, the humanware driver doesn't work anymore.

IO - inputCore.logTimeSinceInput (15:47:03.242) - MainThread (26960):
0.126 sec since input
IO - speech.speech.speak (15:47:03.242) - MainThread (26960):
Speaking ['HumanWare Brailliant BI/B-Serien / BrailleNote Touch']
IO - inputCore.InputManager.executeGesture (15:47:03.756) - winInputHook (25368):
Input: kb(laptop):enter
DEBUG - autoSettingsUtils.autoSettings.AutoSettings._registerConfigSaveAction (15:47:03.766) - MainThread (26960):
registering pre_configSave action: <class 'brailleDisplayDrivers.brailliantB.BrailleDisplayDriver'>
DEBUGWARNING - hwPortUtils.listUsbDevices (15:47:03.766) - MainThread (26960):
Couldn't get DEVPKEY_Device_BusReportedDeviceDesc for {'hardwareID': 'USB\\VID_8087&PID_0033&REV_0000', 'usbID': 'VID_8087&PID_0033', 'devicePath': '\\\\?\\usb#vid_8087&pid_0033#5&242a2f40&0&10#{a5dcbf10-6530-11d2-901f-00c04fb951ed}'}: [WinError 1168] Element nicht gefunden.
IO - inputCore.InputManager.executeGesture (15:47:05.356) - winInputHook (25368):
Input: kb(laptop):downArrow
IO - inputCore.InputManager.executeGesture (15:47:05.573) - winInputHook (25368):
Input: kb(laptop):upArrow
IO - inputCore.InputManager.executeGesture (15:47:06.100) - winInputHook (25368):
Input: kb(laptop):tab
IO - inputCore.InputManager.executeGesture (15:47:06.596) - winInputHook (25368):
Input: kb(laptop):shift+tab
IO - inputCore.InputManager.executeGesture (15:47:07.202) - winInputHook (25368):
Input: kb(laptop):alt+tab
IO - inputCore.InputManager.executeGesture (15:47:16.983) - winInputHook (25368):
Input: kb(laptop):alt+tab
IO - inputCore.InputManager.executeGesture (15:47:18.136) - winInputHook (25368):
Input: kb(laptop):windows+m
IO - inputCore.InputManager.executeGesture (15:47:18.266) - winInputHook (25368):
Input: kb(laptop):windows+m
IO - inputCore.InputManager.executeGesture (15:47:18.476) - winInputHook (25368):
Input: kb(laptop):ö
IO - inputCore.InputManager.executeGesture (15:47:19.176) - winInputHook (25368):
Input: kb(laptop):downArrow
IO - inputCore.InputManager.executeGesture (15:47:19.386) - winInputHook (25368):
Input: kb(laptop):downArrow
IO - inputCore.InputManager.executeGesture (15:47:19.586) - winInputHook (25368):
Input: kb(laptop):upArrow
IO - inputCore.InputManager.executeGesture (15:47:19.766) - winInputHook (25368):
Input: kb(laptop):upArrow
IO - inputCore.InputManager.executeGesture (15:47:19.953) - winInputHook (25368):
Input: kb(laptop):upArrow
IO - inputCore.InputManager.executeGesture (15:47:20.136) - winInputHook (25368):
Input: kb(laptop):upArrow
DEBUGWARNING - brailleDisplayDrivers.brailliantB.BrailleDisplayDriver.__init__ (15:47:20.274) - MainThread (26960):
Ignoring device '\\\\?\\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col02#8&4100f54&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}' with usage page 65
DEBUGWARNING - brailleDisplayDrivers.brailliantB.BrailleDisplayDriver.__init__ (15:47:20.274) - MainThread (26960):
Ignoring device '\\\\?\\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col03#8&4100f54&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}\\kbd' with usage page 1
ERROR - braille.BrailleHandler.setDisplayByName (15:47:20.274) - MainThread (26960):
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 190, in __init__
RuntimeError: No display found
DEBUG - hwIo.hid.Hid.close (15:47:20.289) - MainThread (26960):
Attempted to close an already closed device.

@Adriani90
Copy link
Collaborator

I could catch following error:

ERROR - braille.BrailleHandler._bgThreadExecutor (15:51:11.300) - hwIo.ioThread.IoThread (21892):
Error displaying cells. Disabling display
Traceback (most recent call last):
  File "braille.pyc", line 3064, in _bgThreadExecutor
  File "brailleDisplayDrivers\brailliantB.pyc", line 311, in display
  File "hwIo\hid.pyc", line 323, in setOutputReport
OSError: [WinError 121] Das Zeitlimit für die Semaphore wurde erreicht.
ERROR - braille.BrailleHandler.handleDisplayUnavailable (15:51:11.306) - hwIo.ioThread.IoThread (21892):
Braille display unavailable. Disabling
Traceback (most recent call last):
  File "braille.pyc", line 3064, in _bgThreadExecutor
  File "brailleDisplayDrivers\brailliantB.pyc", line 311, in display
  File "hwIo\hid.pyc", line 323, in setOutputReport
OSError: [WinError 121] Das Zeitlimit für die Semaphore wurde erreicht.
DEBUG - autoSettingsUtils.autoSettings.AutoSettings._registerConfigSaveAction (15:51:11.326) - hwIo.ioThread.IoThread (21892):
registering pre_configSave action: <class 'brailleDisplayDrivers.noBraille.BrailleDisplayDriver'>
DEBUG - braille.BrailleHandler._switchDisplay (15:51:11.326) - hwIo.ioThread.IoThread (21892):
Switching braille display from 'brailliantB' to 'noBraille'
ERROR - braille.BrailleDisplayDriver.terminate (15:51:16.338) - hwIo.ioThread.IoThread (21892):
Display driver BrailleDisplayDriver('brailliantB', numCells=40) failed to display while terminating.
Traceback (most recent call last):
  File "braille.pyc", line 3064, in _bgThreadExecutor
  File "brailleDisplayDrivers\brailliantB.pyc", line 311, in display
  File "hwIo\hid.pyc", line 323, in setOutputReport
OSError: [WinError 121] Das Zeitlimit für die Semaphore wurde erreicht.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "braille.pyc", line 3229, in terminate
  File "brailleDisplayDrivers\brailliantB.pyc", line 311, in display
  File "hwIo\hid.pyc", line 323, in setOutputReport
OSError: [WinError 121] Das Zeitlimit für die Semaphore wurde erreicht.
DEBUG - autoSettingsUtils.autoSettings.AutoSettings._loadSpecificSettings (15:51:16.353) - hwIo.ioThread.IoThread (21892):
loading braille noBraille
INFO - braille.BrailleHandler._setDisplay (15:51:16.353) - hwIo.ioThread.IoThread (21892):
Loaded braille display driver 'noBraille', current display has 0 cells.
DEBUG - hwIo.hid.Hid.close (15:51:16.353) - hwIo.ioThread.IoThread (21892):
Attempted to close an already closed device.
DEBUG - gui.settingsDialogs.AutoSettingsMixin.refreshGui (15:51:16.353) - MainThread (19224):
refreshing panel
DEBUGWARNING - hwIo.ioThread._internalCompletionRoutine (15:51:16.353) - hwIo.ioThread.IoThread (21892):
Not executing queued completion routine 0x5a9d2c0:<bound method IoBase._ioDone of <hwIo.hid.Hid object at 0x09847770>> because reference died
DEBUG - gui.settingsDialogs.AutoSettingsMixin.updateDriverSettings (15:51:16.386) - MainThread (19224):
Current sizerDict: {}
DEBUG - gui.settingsDialogs.AutoSettingsMixin.updateDriverSettings (15:51:16.386) - MainThread (19224):
Current supportedSettings: ()
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.471) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:51:16.471) - MainThread (19224):
Loading output tables completed, now at 0.09 seconds from start
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.551) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:51:16.551) - MainThread (19224):
Loading input tables completed, now at 0.17 seconds from start
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.566) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.566) - MainThread (19224):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.566) - MainThread (19224):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.566) - MainThread (19224):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.578) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.586) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.601) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:51:16.601) - MainThread (19224):
Loading cursor settings completed, now at 0.21 seconds from start
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.609) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.616) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:51:16.616) - MainThread (19224):
Loading timeout settings completed, now at 0.23 seconds from start
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.626) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:51:16.626) - MainThread (19224):
Loading tether settings completed, now at 0.24 seconds from start
DEBUG - config.featureFlag._validateConfig_featureFlag (15:51:16.641) - MainThread (19224):
Validating feature flag: DEFAULT, optionsEnum: ReviewRoutingMovesSystemCaretFlag, behaviorOfDefault: NEVER
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.641) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.641) - MainThread (19224):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.646) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.667) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - config.featureFlag._validateConfig_featureFlag (15:51:16.676) - MainThread (19224):
Validating feature flag: DEFAULT, optionsEnum: BoolFlag, behaviorOfDefault: ENABLED
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.676) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - config.featureFlag._validateConfig_featureFlag (15:51:16.689) - MainThread (19224):
Validating feature flag: DEFAULT, optionsEnum: FontFormattingBrailleModeFlag, behaviorOfDefault: LIBLOUIS
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.689) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.689) - MainThread (19224):
Did context help binding for CheckBox
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.689) - MainThread (19224):
Did context help binding for CheckBox
DEBUG - config.featureFlag._validateConfig_featureFlag (15:51:16.706) - MainThread (19224):
Validating feature flag: DEFAULT, optionsEnum: BoolFlag, behaviorOfDefault: DISABLED
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.706) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - config.featureFlag._validateConfig_featureFlag (15:51:16.716) - MainThread (19224):
Validating feature flag: DEFAULT, optionsEnum: BoolFlag, behaviorOfDefault: ENABLED
DEBUG - gui.contextHelp.bindHelpEvent (15:51:16.716) - MainThread (19224):
Did context help binding for LabeledControlHelper.__init__.<locals>.WxCtrlWithEnableEvnt
DEBUG - gui.settingsDialogs.BrailleSettingsSubPanel.makeSettings (15:51:16.716) - MainThread (19224):
Finished making settings, now at 0.33 seconds from start

@Adriani90
Copy link
Collaborator

Not sure yet whether this was happening always before, I never tested switching back and forth between standard HID and the native driver, I shall try with the NVDA stable version as well.
As of now it seems the Humanware driver didn't work anymore, until I manually chose "no braille display", then waited for about 1 minute, and then choose again automatic braille display detection.

I think NVDA can properly close a braille display device only when choosing "no braille display", but not when changing back and forth between standard HID and the native driver. At least this is my conclulusion but this might be wrong.
I wonder why it says several times that it tries to close an already closed device.

@Adriani90
Copy link
Collaborator

Now after restarting NVDA, looking at the selected braille display in the settings panel, it says
"Automatic, (Humanware Brailliant), but in the log it seems still the standard HID driver is used:

INFO - brailleDisplayDrivers.brailliantB.BrailleDisplayDriver.__init__ (16:10:09.428) - ThreadPoolExecutor-0_0 (21084):
Found display with 40 cells connected via hid (\\?\hid#{00001124-0000-1000-8000-00805f9b34fb}_vid&00021d6b_pid&0246&col01#8&4100f54&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030})
DEBUG - braille.BrailleHandler._switchDisplay (16:10:09.428) - ThreadPoolExecutor-0_0 (21084):
Switching braille display from 'noBraille' to 'brailliantB'
DEBUG - autoSettingsUtils.autoSettings.AutoSettings._loadSpecificSettings (16:10:09.430) - ThreadPoolExecutor-0_0 (21084):
loading braille brailliantB
INFO - braille.BrailleHandler._setDisplay (16:10:09.430) - ThreadPoolExecutor-0_0 (21084):
Loaded braille display driver 'brailliantB', current display has 40 cells.
DEBUGWARNING - hwPortUtils.listUsbDevices (16:10:09.430) - ThreadPoolExecutor-0_0 (21084):
Couldn't get DEVPKEY_Device_BusReportedDeviceDesc for {'hardwareID': 'USB\\VID_8087&PID_0033&REV_0000', 'usbID': 'VID_8087&PID_0033', 'devicePath': '\\\\?\\usb#vid_8087&pid_0033#5&242a2f40&0&10#{a5dcbf10-6530-11d2-901f-00c04fb951ed}'}: [WinError 1168] Element nicht gefunden.

@Adriani90
Copy link
Collaborator

And the keys of the braille display are not working but it shows braille characters.

@Adriani90
Copy link
Collaborator

Now testing on the stable version of NVDA 2024.4.1, it seems the humanware driver is not working anymore. It is shown on the settings panel as selected, but in fact NVDA uses the standard HID driver.

The error about the time limit for the semaphore being reached is logged again and again when choosing the humanware driver manually.

I guess this is the issue that is there for a while and is not impcated by this PR.

I need to reinstall NVDA stable and clean my user config to make the humanware driver work again and then I can perform further tests if needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
conceptApproved Similar 'triaged' for issues, PR accepted in theory, implementation needs review.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants