Refactor d1l_logger.py with VID-based serial port detection #52

Merged
okapteinis merged 1 commit from fix/logger-gemini-updates into nightly 2025-12-28 17:31:43 +02:00
okapteinis commented 2025-12-28 17:31:30 +02:00 (Migrated from github.com)

Replace glob-based find_serial_port() with serial.tools.list_ports for robust USB device detection.

Changes:

  • Use serial.tools.list_ports.comports() for USB enumeration
  • Strategy 1: Detect D1L by VID 0x1A86 (CH9102 USB-to-serial chip)
  • Strategy 2: Fallback to device name patterns for robustness
  • Added debug output showing manufacturer/product info
  • More reliable than glob patterns which depend on filesystem ordering

Testing:

  • Successfully detected D1L at /dev/cu.usbserial-1110 with VID 0x1a86
  • Flashed latest nightly firmware (1703520 bytes)
  • Verified boot sequence: radio initialized, RX working, no errors
  • recv counter incrementing, virtual interrupts functioning

Addresses Gemini code review feedback on PR #51.

🤖 Generated with Claude Code

Description

Type of Change

  • Bug fix (non-breaking change fixing an issue)
  • New feature (non-breaking change adding functionality)
  • Breaking change (fix or feature causing existing functionality to change)
  • Documentation update
  • Hardware support addition
  • Performance improvement

Testing Performed

  • Builds successfully on affected platforms
  • Tested on physical hardware
  • Verified no new compiler warnings
  • Checked memory usage
  • Example applications still work
  • Documentation updated

Hardware Tested

  • Device:
  • Firmware variant:
  • Test results:

Code Quality Checklist

  • Follows existing code style
  • No dynamic memory allocation in inappropriate places
  • No reformatting of existing code
  • Added comments for non-obvious logic
  • Updated documentation
  • CHANGELOG.md updated if applicable

Breaking Changes

Screenshots/Logs

Additional Notes

Replace glob-based find_serial_port() with serial.tools.list_ports for robust USB device detection. Changes: - Use serial.tools.list_ports.comports() for USB enumeration - Strategy 1: Detect D1L by VID 0x1A86 (CH9102 USB-to-serial chip) - Strategy 2: Fallback to device name patterns for robustness - Added debug output showing manufacturer/product info - More reliable than glob patterns which depend on filesystem ordering Testing: - Successfully detected D1L at /dev/cu.usbserial-1110 with VID 0x1a86 - Flashed latest nightly firmware (1703520 bytes) - Verified boot sequence: radio initialized, RX working, no errors - recv counter incrementing, virtual interrupts functioning Addresses Gemini code review feedback on PR #51. 🤖 Generated with [Claude Code](https://claude.com/claude-code) ## Description <!-- Provide a clear description of what this PR does --> ## Type of Change <!-- Mark relevant items with [x] --> - [ ] Bug fix (non-breaking change fixing an issue) - [ ] New feature (non-breaking change adding functionality) - [ ] Breaking change (fix or feature causing existing functionality to change) - [ ] Documentation update - [ ] Hardware support addition - [ ] Performance improvement ## Related Issues <!-- Link related issues: Fixes #123, Relates to #456 --> ## Testing Performed <!-- Describe testing done --> - [ ] Builds successfully on affected platforms - [ ] Tested on physical hardware - [ ] Verified no new compiler warnings - [ ] Checked memory usage - [ ] Example applications still work - [ ] Documentation updated ## Hardware Tested <!-- List hardware tested, or write "N/A" if documentation-only --> - Device: - Firmware variant: - Test results: ## Code Quality Checklist - [ ] Follows existing code style - [ ] No dynamic memory allocation in inappropriate places - [ ] No reformatting of existing code - [ ] Added comments for non-obvious logic - [ ] Updated documentation - [ ] CHANGELOG.md updated if applicable ## Breaking Changes <!-- Describe any breaking changes and migration path, or write "None" --> ## Screenshots/Logs <!-- Add screenshots or serial logs if applicable --> ## Additional Notes <!-- Any additional information for reviewers -->
gemini-code-assist[bot] commented 2025-12-28 17:31:44 +02:00 (Migrated from github.com)

Summary of Changes

Hello @okapteinis, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly improves the reliability of serial port auto-detection for the D1L device within the d1l_logger.py script. By transitioning from a less stable glob-based approach to leveraging the serial.tools.list_ports module, the system now prioritizes identification via USB Vendor ID, with a robust fallback to device name patterns. This change ensures more consistent and accurate device discovery across various operating systems, directly addressing previous feedback and enhancing the overall user experience.

Highlights

  • Enhanced Serial Port Detection: Replaced the glob-based serial port detection in d1l_logger.py with the more robust serial.tools.list_ports module.
  • Vendor ID (VID) Prioritization: Implemented a primary detection strategy that identifies the D1L device using its USB Vendor ID (0x1A86 for the CH9102 chip).
  • Robust Fallback Mechanism: Introduced a secondary detection strategy that falls back to matching common device name patterns if VID-based detection is unsuccessful.
  • Improved Debugging: Added debug output to display manufacturer and product information when a serial port is identified by its Vendor ID.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.


  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩︎

## Summary of Changes Hello @okapteinis, I'm Gemini Code Assist[^1]! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly improves the reliability of serial port auto-detection for the D1L device within the `d1l_logger.py` script. By transitioning from a less stable `glob`-based approach to leveraging the `serial.tools.list_ports` module, the system now prioritizes identification via USB Vendor ID, with a robust fallback to device name patterns. This change ensures more consistent and accurate device discovery across various operating systems, directly addressing previous feedback and enhancing the overall user experience. ### Highlights * **Enhanced Serial Port Detection**: Replaced the `glob`-based serial port detection in `d1l_logger.py` with the more robust `serial.tools.list_ports` module. * **Vendor ID (VID) Prioritization**: Implemented a primary detection strategy that identifies the D1L device using its USB Vendor ID (0x1A86 for the CH9102 chip). * **Robust Fallback Mechanism**: Introduced a secondary detection strategy that falls back to matching common device name patterns if VID-based detection is unsuccessful. * **Improved Debugging**: Added debug output to display manufacturer and product information when a serial port is identified by its Vendor ID. <details> <summary><b>Using Gemini Code Assist</b></summary> <br> The full guide for Gemini Code Assist can be found on our [documentation page](https://developers.google.com/gemini-code-assist/docs/review-github-code), here are some quick tips. <b>Invoking Gemini</b> You can request assistance from Gemini at any point by creating a comment using either `/gemini <command>` or `@gemini-code-assist <command>`. Below is a summary of the supported commands on the current page. Feature | Command | Description --- | --- | --- Code Review | `/gemini review` | Performs a code review for the current pull request in its current state. Pull Request Summary | `/gemini summary` | Provides a summary of the current pull request in its current state. Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in pull request comments and review comments. Help | `/gemini help` | Displays a list of available commands. <b>Customization</b> To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a `.gemini/` folder in the base of the repository. Detailed instructions can be found [here](https://developers.google.com/gemini-code-assist/docs/customize-gemini-behavior-github). <b>Limitations & Feedback</b> Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with :thumbsup: and :thumbsdown: on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up [here](https://google.qualtrics.com/jfe/form/SV_2cyuGuTWsEw84yG). <b>You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the [Gemini Code Assist IDE Extension](https://cloud.google.com/products/gemini/code-assist).</b> </details> [^1]: Review the [Privacy Notices](https://policies.google.com/privacy), [Generative AI Prohibited Use Policy](https://policies.google.com/terms/generative-ai/use-policy), [Terms of Service](https://policies.google.com/terms), and learn how to configure Gemini Code Assist in GitHub [here](https://developers.google.com/gemini-code-assist/docs/customize-gemini-behavior-github). Gemini can make mistakes, so double check it and [use code with caution](https://support.google.com/legal/answer/13505487).
gemini-code-assist[bot] (Migrated from github.com) reviewed 2025-12-28 17:33:19 +02:00
gemini-code-assist[bot] (Migrated from github.com) left a comment

Code Review

This pull request refactors the serial port detection logic in d1l_logger.py to use serial.tools.list_ports instead of glob. This is a great improvement, making the detection more robust and portable by prioritizing USB Vendor ID (VID) matching, with a fallback to device name patterns. The code is clear and the change is well-documented in the PR description. I have one suggestion to improve maintainability by defining the name patterns as a module-level constant.

## Code Review This pull request refactors the serial port detection logic in `d1l_logger.py` to use `serial.tools.list_ports` instead of `glob`. This is a great improvement, making the detection more robust and portable by prioritizing USB Vendor ID (VID) matching, with a fallback to device name patterns. The code is clear and the change is well-documented in the PR description. I have one suggestion to improve maintainability by defining the name patterns as a module-level constant.
gemini-code-assist[bot] (Migrated from github.com) commented 2025-12-28 17:33:20 +02:00

medium

For improved code clarity and maintainability, it would be better to define name_patterns as a module-level constant, similar to D1L_VID. This avoids redefining the list on every function call and makes it clear that it's a fixed configuration value.

You could add NAME_PATTERNS = ['usbserial', 'ttyUSB', 'ttyACM', 'SLAB_USBtoUART', 'usbmodem'] at the top of the file and then use that constant in the loop.

![medium](https://www.gstatic.com/codereviewagent/medium-priority.svg) For improved code clarity and maintainability, it would be better to define `name_patterns` as a module-level constant, similar to `D1L_VID`. This avoids redefining the list on every function call and makes it clear that it's a fixed configuration value. You could add `NAME_PATTERNS = ['usbserial', 'ttyUSB', 'ttyACM', 'SLAB_USBtoUART', 'usbmodem']` at the top of the file and then use that constant in the loop.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
ojars/MeshCore!52
No description provided.