Need help with combining mouse, keyboard and media into one HID.

Hello,
I have combine mouse with keyboard HID_12 and keyboard with media HID_23,
but not able to combine mouse with media and all 3 together!
Here are my HID_12  and HID_23:

HID_12  
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
0x09, 0x02, /* USAGE (Mouse) */
0xa1, 0x01, /* COLLECTION (Application) */
0x85, MOUSE_REPORT_ID, /* Report ID (1) */
0x09, 0x01, /* USAGE (Pointer) */
0xa1, 0x00, /* COLLECTION (Physical) */
0x05, 0x09, /* USAGE_PAGE (Button) */
0x19, 0x01, /* USAGE_MINIMUM (Button 1) */
0x29, 0x03, /* USAGE_MAXIMUM (Button 3) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x25, 0x01, /* LOGICAL_MAXIMUM (1) */
0x95, 0x03, /* REPORT_COUNT (3) */
0x75, 0x01, /* REPORT_SIZE (1) */
0x81, 0x02, /* INPUT (Data,Var,Abs) */
0x95, 0x01, /* REPORT_COUNT (1) */
0x75, 0x05, /* REPORT_SIZE (5) */
0x81, 0x03, /* INPUT (Cnst,Var,Abs) */
0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */
0x09, 0x30, /* USAGE (X) */
0x09, 0x31, /* USAGE (Y) */
0x09, 0x38, /* USAGE (Wheel) */
0x15, 0x81, /* LOGICAL_MINIMUM (-127) */
0x25, 0x7f, /* LOGICAL_MAXIMUM (127) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x95, 0x03, /* REPORT_COUNT (3) */
0x81, 0x06, /* INPUT (Data,Var,Rel) */
0xc0, /* END_COLLECTION (Physical) */
0xc0, /* END_COLLECTION (Application) */

0x09, 0x06, /* USAGE (Keyboard) */
0xa1, 0x01, /* COLLECTION (Application) */
0x85, KEYBOARD_REPORT_ID, /* REPORT ID (0x02) */
0x05, 0x07, /* USAGE_PAGE (Keyboard) */
0xa1, 0x01, /* COLLECTION (Application) */
0x95, 0x08, /* REPORT_COUNT (8) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x25, 0xff, /* LOGICAL_MAXIMUM (255) */
0x19, 0x00, /* USAGE_MINIMUM (0) */
0x29, 0xff, /* USAGE_MAXIMUM (255) */
0x81, 0x00, /* INPUT (Data,Var,Abs) */
0xc0, /* END_COLLECTION (Application) */
0xc0, /* END_COLLECTION (Application) */

HID_23
0x05, 0x01, /* USAGE_PAGE (Generic Desktop)*/
0x09, 0x06, /* USAGE (Keyboard) */
0xa1, 0x01, /* COLLECTION (Application) */
0x85, KEYBOARD_REPORT_ID, /* REPORT ID (0x02) */
0x05, 0x07, /* USAGE_PAGE (Keyboard) */
0xa1, 0x01, /* COLLECTION (Application) */
0x95, 0x08, /* REPORT_COUNT (8) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x25, 0xff, /* LOGICAL_MAXIMUM (255) */
0x19, 0x00, /* USAGE_MINIMUM (0) */
0x29, 0xff, /* USAGE_MAXIMUM (255) */
0x81, 0x00, /* INPUT (Data,Var,Abs) */
0xc0, /* END_COLLECTION (Application) */
0xc0, /* END_COLLECTION (Application) */

0x05, 0x0c, // USAGE_PAGE (Consumer Devices) // 3 - OK - PC Volume Down
0x09, 0x01, // USAGE (Consumer Control)
0xa1, 0x01, /* COLLECTION (Application) */
0x05, 0x0c, /* USAGE_PAGE (Consumer) */
0x09, 0x01, /* USAGE (Consumer Control) */
0xa1, 0x01, /* COLLECTION (Application) */
0x85, MEDIA_REPORT_ID, /* REPORT ID (0x03) */
0x95, 0x02, /* REPORT_COUNT (2) */
0x75, 0x10, /* REPORT_SIZE (16) */
0x15, 0x00, /* LOGICAL_MINIMUM (0) */
0x26, 0x9C, 0x02, /* LOGICAL_MAXIMUM (1) */
0x19, 0x00, /* USAGE_MINIMUM */
0x2A, 0x9C, 0x02, /* USAGE_MAXIMUM */
0x81, 0x00, /* INPUT (Data,Var,Abs) */
0xc0, /* END_COLLECTION (Application) */
0xc0, /* END_COLLECTION (Application) */

Parents
  • Thank you Håkon,

    1. I am using BLE_HID_selfie for keyboard and media and BLE_HID for mouse and keyboard.

    2. How to send all STM32wb55 my project to you?

    3. Not sure.

    4. After connecting to Bluetooth - after few second - it said - driver error!

  • Thank you Håkon,

    3. Yes The HID over GATT profile for Bluetooth USB HID specification

    I am going to use BL651, nrf52810, pca10040 development board with nRF5 SDK v14.1.0 for BLE - nRF desktop application. HID for usb do not depend on SDK or device. Here are reports for given mouse, keyboard and media report descriptors I am using: Can you help?

    typedef struct

    {

    uint8_t ReportID;

    uint8_t buttons;

    int8_t x;

    int8_t y;

    int8_t wheel;

    } mouse_report_t;

    //#ifdef ST_SELFIE

    /* Keybaord key data*/

    typedef struct

    {

    uint8_t ReportID;

    uint8_t Data_0;

    uint8_t Data_1;

    uint8_t Data_2;

    uint8_t Data_3;

    uint8_t Data_4;

    uint8_t Data_5;

    uint8_t Data_6;

    uint8_t Data_7;

    } keyboard_report_t;

    /* Multimedia key data*/

    typedef struct

    {

    uint8_t ReportID;

    uint8_t Data_0;

    uint8_t Data_1;

    uint8_t Data_2;

    uint8_t Data_3;

    } multimedia_report_t;

  • Thank you Håkon,

    My concern is that will be I able to use pca10040 development board for all ble_hids_mouse, ble_hids_keyboard and ble_hids_media examples at the same time?

  • Hi,

     

    Yes, it is possible to add to the usb descriptors, but you will have to populate the below mentioned structures as well.

    Note that in newer SDKs, all hids example has media buttons (consumer control).

     

    Kind regards,

    Håkon 

  • Thank you Håkon again,

    Please can you give me more detail information - what board and newer SDK to use [with links]:
    nRF52833 Development Kit, 
    nRF52840 Development Kit, or 
    NRF52-DK - that will be good for all examples!

    GS2

  • Hi,

     

    If you want to test with nRF5 SDK, use the latest version, ie. v17.1.0.

    If you want to use NCS (zephyr based), use v2.6.1.

     

    Both has HID-over-GATT bluetooth samples.

     

    Kind regards,

    Håkon

  • Thanks,

    Please can you give me more detail information - what board to use  [with links]:
    nRF52833 Development Kit, 
    nRF52840 Development Kit, or 
    NRF52-DK - that will be good for all examples!

    What is the difference nRF5 SDK and NCS ?

Reply
  • Thanks,

    Please can you give me more detail information - what board to use  [with links]:
    nRF52833 Development Kit, 
    nRF52840 Development Kit, or 
    NRF52-DK - that will be good for all examples!

    What is the difference nRF5 SDK and NCS ?

Children
  • Hi,

     

    GS2 said:
    Please can you give me more detail information - what board to use

    You can use any board you'd like. nRF52840 has the most amount of flash and ram.

    GS2 said:

    What is the difference nRF5 SDK and NCS ?

    nRF5 SDK is for nRF52-series devices, and NCS is for newer devices.

    NCS is future proof if you plan to develop on nRF53-series or newer devices.

     

    Kind regards,

    Håkon

  • Thank you,

    I am planning to use NRF52-DK with nRF52832 and with nRF5 SDK, use the latest version v17.1.0.

    Can you please provide the link to HID-over-GATT Bluetooth samples?!

  • Hi,

    GS2 said:
    Can you please provide the link to HID-over-GATT Bluetooth samples?!

    They are located in the SDK_PATH/examples/ble_peripheral/ble_app_hids_*

     

    Kind regards,

    Håkon

     

  • Was not able to compile any of the examples , even blinky!, with nRF5 SDK - the latest version v17.1.0. and  with SEGGER Embedded Studio (SES).

  • Hi,

     

    Could this be the issue that you are seeing?

     nRF5 SDK 17.1.0 examples is not compiling in latest SES (6.20a) 

    If you get a compiler error, it is easier to help if you share the log.

    Kind regards,

    Håkon