Skip to content

Conversation

@paul356
Copy link
Contributor

@paul356 paul356 commented Nov 26, 2025

Description

Since BLE supports multiple connections, it is not uncommon for a BLE hid host to support multiple connections. This PR address the need to support multiple connections in the BLE hid module. The core data struct is to add these memebers to esp_ble_hidd_dev_s. These fields help to track which connection currently is selected. I also update the handlers to use these members to respond to different events.

    // Multi-connection support
    SemaphoreHandle_t            conn_mutex;        // Mutex for protecting connection state
    hidd_connection_t           connections[ESP_HIDD_MAX_CONNECTIONS];
    uint8_t                     active_conn_index;  // Index to active connection (0xFF = broadcast mode)
    bool                        broadcast_mode;     // When true, send to all connections

Related

Testing

I have tested this change using the esp_hid_device example. For single connection the behavior stays the same. I have a keyboard project which supports multiple BLE clients. I was able to switch between different BLE clients.


Checklist

Before submitting a Pull Request, please ensure the following:

  • 🚨 This PR does not introduce breaking changes.
  • All CI checks (GH Actions) pass.
  • Documentation is updated as needed.
  • Tests are updated or added as necessary.
  • Code is well-commented, especially in complex areas.
  • Git history is clean — commits are squashed to the minimum necessary.

Note

Add BLE HID multi-connection support with per-connection CCC and APIs to set active connection, query connections, and toggle broadcast mode, updating send and event paths accordingly.

  • API (public esp_hidd):
    • Add esp_hidd_conn_info_t and new APIs: esp_hidd_dev_set_active_conn, esp_hidd_dev_get_connections, esp_hidd_dev_set_broadcast_mode.
  • BLE HID implementation (ble_hidd):
    • Introduce multi-connection state: connections[], conn_mutex, active_conn_index, broadcast_mode.
    • Track per-connection CCC for Battery; update CCC handling.
    • Update connect/disconnect to add/remove connections; adjust active connection.
    • Modify connected, battery, input, and feature report paths to support unicast to active connection or broadcast to all.
    • Initialize and free new mutex; add internal helper functions.
    • Expose BLE-specific wrappers: esp_ble_hidd_dev_set_active_conn, ...get_connections, ...set_broadcast_mode.

Written by Cursor Bugbot for commit 3b7ab64. This will update automatically on new commits. Configure here.

@github-actions
Copy link

github-actions bot commented Nov 26, 2025

Warnings
⚠️

Some issues found for the commit messages in this PR:

  • the commit message "feat(esp_hid): Enahcne esp_hid to support multiple BLE connections. Add interfaces to allow users to select which connection to use or boradcast events to all connections.":
    • summary appears to be too long
    • summary should not end with a period (full stop)

Please fix these commit messages - here are some basic tips:

  • follow Conventional Commits style
  • correct format of commit message should be: <type/action>(<scope/component>): <summary>, for example fix(esp32): Fixed startup timeout issue
  • allowed types are: change,ci,docs,feat,fix,refactor,remove,revert,test
  • sufficiently descriptive message summary should be between 20 to 72 characters and start with upper case letter
  • avoid Jira references in commit messages (unavailable/irrelevant for our customers)

TIP: Install pre-commit hooks and run this check when committing (uses the Conventional Precommit Linter).

👋 Hello paul356, we appreciate your contribution to this project!


📘 Please review the project's Contributions Guide for key guidelines on code, documentation, testing, and more.

🖊️ Please also make sure you have read and signed the Contributor License Agreement for this project.

Click to see more instructions ...


This automated output is generated by the PR linter DangerJS, which checks if your Pull Request meets the project's requirements and helps you fix potential issues.

DangerJS is triggered with each push event to a Pull Request and modify the contents of this comment.

Please consider the following:
- Danger mainly focuses on the PR structure and formatting and can't understand the meaning behind your code or changes.
- Danger is not a substitute for human code reviews; it's still important to request a code review from your colleagues.
- Resolve all warnings (⚠️ ) before requesting a review from human reviewers - they will appreciate it.
- To manually retry these Danger checks, please navigate to the Actions tab and re-run last Danger workflow.

Review and merge process you can expect ...


We do welcome contributions in the form of bug reports, feature requests and pull requests via this public GitHub repository.

This GitHub project is public mirror of our internal git repository

1. An internal issue has been created for the PR, we assign it to the relevant engineer.
2. They review the PR and either approve it or ask you for changes or clarifications.
3. Once the GitHub PR is approved, we synchronize it into our internal git repository.
4. In the internal git repository we do the final review, collect approvals from core owners and make sure all the automated tests are passing.
- At this point we may do some adjustments to the proposed change, or extend it by adding tests or documentation.
5. If the change is approved and passes the tests it is merged into the default branch.
5. On next sync from the internal git repository merged change will appear in this public GitHub repository.

Generated by 🚫 dangerJS against 3b7ab64

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

This PR is being reviewed by Cursor Bugbot

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

@paul356 paul356 force-pushed the master branch 2 times, most recently from 0894a72 to cc9902d Compare November 26, 2025 14:37
@espressif-bot espressif-bot added the Status: Opened Issue is new label Nov 26, 2025
@github-actions github-actions bot changed the title Support BLE multiple connection in the BLE part of the esp_hid component. Support BLE multiple connection in the BLE part of the esp_hid component. (IDFGH-16865) Nov 26, 2025
…dd interfaces to allow users to select which connection to use or boradcast events to all connections.
@paul356
Copy link
Contributor Author

paul356 commented Nov 27, 2025

I have trouble with pre-commit hooks. Because this fork is created years ago, I will create a new fork and fix the pre-commit hooks first, then create a new PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Status: Opened Issue is new

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants