This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

NRF51822 BLE HID Gamepad

Hello! 

 I'm trying to develop a BLE HID Gamepad/Joystick using the NRF51822. I've tried the examples of HID keyboard with SDK 12.3.0 with S130 soft device and they work fine with both OSX and Windows 10. When I update the Report ID to become a HID Gamepad, OSX works fine, but WINDOWS does not transmit any button events. It seems to connect and pair fine and does not have any driver errors, but just doesn't show any button events when I try to test with joy.cpl or https://html5gamepad.com/ .

Has anyone got BLE HID Gamepads working for Windows 10 using NRF51822/NRF51422 before or have any tips?

here is my HID Report for reference

  0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
  0x09, 0x05, // Usage (Game Pad)
  0xA1, 0x01, // Collection (Application)
  0x85, 0x07, // Report ID (7)
  0x09, 0x01, // Usage (Pointer)
  0xA1, 0x00, // Collection (Physical)
  0x09, 0x30, // Usage (X)
  0x09, 0x31, // Usage (Y)
  0x09, 0x32, // Usage (Z)
  0x09, 0x35, // Usage (Rz)
  0x15, 0x00, // Logical Minimum (0)
  0x26, 0xFF, 0x00, // Logical Maximum (255)
  0x75, 0x08, // Report Size (8)
  0x95, 0x04, // Report Count (4)
  0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
  0x09, 0x39, // Usage (Hat switch)
  0x15, 0x00, // Logical Minimum (0)
  0x25, 0x07, // Logical Maximum (7)
  0x35, 0x00, // Physical Minimum (0)
  0x46, 0x3B, 0x01, // Physical Maximum (315)
  0x65, 0x14, // Unit (System: English Rotation, Length: Centimeter)
  0x75, 0x04, // Report Size (4)
  0x95, 0x01, // Report Count (1)
  0x81, 0x42, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)
  0x75, 0x04, // Report Size (4)
  0x95, 0x01, // Report Count (1)
  0x81, 0x01, // Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
  0x05, 0x09, // Usage Page (Button)
  0x19, 0x01, // Usage Minimum (0x01)
  0x29, 0x0F, // Usage Maximum (0x0F)
  0x15, 0x00, // Logical Minimum (0)
  0x25, 0x01, // Logical Maximum (1)
  0x75, 0x01, // Report Size (1)
  0x95, 0x10, // Report Count (16)
  0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
  0xC0 // End Collection


Thanks!

Andy

  • Hi,

    Unfortunately we do not have a gamepad implementation. But it seems there are implementations that should work. I would guess there is something in the descriptor that windows does not like/support. Have you tried stripping it down to a bare minimum to see if that works?

    Edit: One of our developers mentioned he had some issues using physical min/max and unit, so he ended up using logical min/max instead. Might be something to test.

Related