This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Zephyr HID mouse and keyboard sample

I need to implement a mouse and keyboard (combo) HOG device.

There are mouse and keyboard samples, but may I integrate them in just one?

Is there any samplecode?

I have already write the reports data describing mouse and keyboard, each one with its REPORT ID, but it is not working...

Thanks in advance!

Aleks

  • Hi Torbjørn,

      I really do not understand what is happening.

      See, below is my report map:

        0x05, 0x01, // Usage Pg (Generic Desktop)
        0x09, 0x06, // Usage (Keyboard)
        0xA1, 0x01, // Collection: (Application)
        0x85, 0x01, // Report Id (1)
        //
        0x05, 0x07, //   Usage Pg (Key Codes)
        0x19, 0xE0, //   Usage Min (224)
        0x29, 0xE7, //   Usage Max (231)
        0x15, 0x00, //   Log Min (0)
        0x25, 0x01, //   Log Max (1)
        //
        //   Modifier byte
        0x75, 0x01, //   Report Size (1)
        0x95, 0x08, //   Report Count (8)
        0x81, 0x02, //   Input: (Data, Variable, Absolute)
        //
        //   Reserved byte
        0x95, 0x01, //   Report Count (1)
        0x75, 0x08, //   Report Size (8)
        0x81, 0x01, //   Input: (Constant)
        //
        //   LED report
        0x95, 0x05, //   Report Count (5)
        0x75, 0x01, //   Report Size (1)
        0x05, 0x08, //   Usage Pg (LEDs)
        0x19, 0x01, //   Usage Min (1)
        0x29, 0x05, //   Usage Max (5)
        0x91, 0x02, //   Output: (Data, Variable, Absolute)
        //
        //   LED report padding
        0x95, 0x01, //   Report Count (1)
        0x75, 0x03, //   Report Size (3)
        0x91, 0x01, //   Output: (Constant)
        //
        //   Key arrays (6 bytes)
        0x95, 0x06, //   Report Count (6)
        0x75, 0x08, //   Report Size (8)
        0x15, 0x00, //   Log Min (0)
        0x25, 0x65, //   Log Max (101)
        0x05, 0x07, //   Usage Pg (Key Codes)
        0x19, 0x00, //   Usage Min (0)
        0x29, 0x65, //   Usage Max (101)
        0x81, 0x00, //   Input: (Data, Array)
        //
        0xC0, // End Collection
        //
    
    
        0x05, 0x01, // Usage Page (Generic Desktop)
        0x09, 0x02, // Usage (Mouse)
        0xA1, 0x01, // Collection (Application)
        0x85, 0x02, // Report Id (2)
        0x09, 0x01, //   Usage (Pointer)
        0xA1, 0x00, //   Collection (Physical)
        0x05, 0x09, //     Usage Page (Buttons)
        0x19, 0x01, //     Usage Minimum (01) - Button 1
        0x29, 0x03, //     Usage Maximum (03) - Button 3
        0x15, 0x00, //     Logical Minimum (0)
        0x25, 0x01, //     Logical Maximum (1)
        0x75, 0x01, //     Report Size (1)
        0x95, 0x03, //     Report Count (3)
        0x81, 0x02, //     Input (Data, Variable, Absolute) - Button states
        0x75, 0x05, //     Report Size (5)
        0x95, 0x01, //     Report Count (1)
        0x81, 0x01, //     Input (Constant) - Padding or Reserved bits
        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, Variable, Relative) - X & Y coordinate
        0xC0,       //   End Collection
        0xC0,       // End Collection
    

    When i connect the device (named SAFE), the OS (Linux) got 2 new devices :

    dmesg:
    
    [ 1556.472958] input: SAFE Keyboard as /devices/virtual/misc/uhid/0005:0000:0000.0050/input/input176
    [ 1556.473985] input: SAFE Mouse as /devices/virtual/misc/uhid/0005:0000:0000.0050/input/input177
    [ 1556.474294] hid-generic 0005:0000:0000.0050: input,hidraw3: BLUETOOTH HID v0.01 Keyboard [SAFE] on 00:1a:7d:da:71:0a

    From btmon, i am intending to send messages to mouse using '2' as preamble so i can verify:

    > ACL Data RX: Handle 71 flags 0x02 dlen 12                                                                                                                 #108 [hci2] 6.972096
          ATT: Handle Value Notification (0x1b) len 7
            Handle: 0x0024
              Data: 0200000000
    > ACL Data RX: Handle 71 flags 0x02 dlen 12                                                                                                                 #109 [hci2] 7.021703
          ATT: Handle Value Notification (0x1b) len 7
            Handle: 0x0024
              Data: 0201001400  <----- (button pressed dx=0, dy=20, wheel=0) ok!
    ...

    But it is being interpreted as keyboard output,  echoing only characters....

    Do you have any clue?

    Thanks, Aleks

  • Hi Aleks

    Are you able to share your sample with me so I can try to reproduce the issue on my side?

    If you don't want to share your code in a public case just let me know, and I will make the case private.

    Best regards
    Torbjørn

  • Good morning [perhaps afternoon !-) ]  Torbjørn!

      I had success!!!

      My mistake was that I do not created a second characteristic for the mouse. Now everything is working pretty well!

      I really appreciated your help, Thank you!!!

      

  • That is great news Aleks!

    The best of luck with your project Slight smile

Related