diff --git a/lib/usb_device/include/usb_device.h b/lib/usb_device/include/usb_device.h index 0e3fa88..4329343 100644 --- a/lib/usb_device/include/usb_device.h +++ b/lib/usb_device/include/usb_device.h @@ -22,6 +22,7 @@ class USB_Device void begin(); void end(); + void buttons(uint32_t buttons); void button(uint8_t button, bool val); void dpad(uint8_t dir); diff --git a/lib/usb_device/include/usbd_report.h b/lib/usb_device/include/usbd_report.h index 6f8f98d..8b30016 100644 --- a/lib/usb_device/include/usbd_report.h +++ b/lib/usb_device/include/usbd_report.h @@ -3,7 +3,7 @@ #include -#define HID_JOYSTICK_REPORT_DESC_SIZE 89U +#define HID_JOYSTICK_REPORT_DESC_SIZE 104U // USB Joystick Report Descriptor extern uint8_t USBD_HID_Joystick_ReportDesc[HID_JOYSTICK_REPORT_DESC_SIZE]; @@ -13,12 +13,26 @@ struct __attribute__((packed)) USBD_HID_Joystick_Report uint8_t reportID = 20; uint32_t buttons; unsigned hat:4; + unsigned trigger_left:10; + unsigned trigger_right:10; unsigned x:10; unsigned y:10; unsigned rx:10; unsigned ry:10; - unsigned trigger_left:10; - unsigned trigger_right:10; }; +/* +struct __attribute__((packed)) USBD_HID_Joystick_Report +{ + unsigned header:16; + unsigned buttons:16; + //unsigned hat:4; + unsigned trigger_left:8; + unsigned trigger_right:8; + unsigned x:16; + unsigned y:16; + unsigned rx:16; + unsigned ry:16; +}; +*/ #endif \ No newline at end of file diff --git a/lib/usb_device/src/usb_device.cpp b/lib/usb_device/src/usb_device.cpp index 757541f..f9b4241 100644 --- a/lib/usb_device/src/usb_device.cpp +++ b/lib/usb_device/src/usb_device.cpp @@ -21,6 +21,11 @@ void USB_Device::end() HID_Custom_DeInit(); } +void USB_Device::buttons(uint32_t buttons) +{ + report.buttons = buttons; +} + void USB_Device::button(uint8_t button, bool val) { if (val) diff --git a/lib/usb_device/src/usbd_report.cpp b/lib/usb_device/src/usbd_report.cpp index 906c146..3d15176 100644 --- a/lib/usb_device/src/usbd_report.cpp +++ b/lib/usb_device/src/usbd_report.cpp @@ -27,19 +27,14 @@ __ALIGN_BEGIN uint8_t USBD_HID_CUSTOM_ReportDesc[] __ALIGN_END = { */ __ALIGN_BEGIN uint8_t USBD_HID_Joystick_ReportDesc[] __ALIGN_END = { HID_USAGE_PAGE(GENERIC_DESKTOP), - HID_USAGE(JOYSTICK), + HID_USAGE(GAME_PAD), HID_COLLECTION(APPLICATION), HID_REPORT_ID(20), // HID Joystick Report ID - HID_LOGICAL_MINIMUM(1, 0), - HID_LOGICAL_MAXIMUM(1, 1), - HID_REPORT_SIZE(1), - HID_REPORT_COUNT(32), - HID_USAGE_PAGE(BUTTON), HID_USAGE_MINIMUM(1, 0), - HID_USAGE_MAXIMUM(1, 32), + HID_USAGE_MAXIMUM(1, 9), HID_REPORT_SIZE(1), HID_REPORT_COUNT(32), HID_INPUT(DATA, VARIABLE, ABSOLUTE), @@ -54,27 +49,146 @@ __ALIGN_BEGIN uint8_t USBD_HID_Joystick_ReportDesc[] __ALIGN_END = { HID_USAGE(HAT_SWITCH), HID_INPUT(DATA, VARIABLE, ABSOLUTE), + HID_USAGE_PAGE(GENERIC_DESKTOP), + HID_COLLECTION(PHYSICAL), + HID_USAGE(Z), + HID_USAGE(RZ), + HID_LOGICAL_MINIMUM(1, 0), + HID_LOGICAL_MAXIMUM(2, 1022), + HID_REPORT_SIZE(10), + HID_REPORT_COUNT(2), + HID_INPUT(DATA, VARIABLE, ABSOLUTE), + HID_END_COLLECTION(PHYSICAL), + HID_USAGE_PAGE(GENERIC_DESKTOP), HID_USAGE(POINTER), HID_COLLECTION(PHYSICAL), HID_USAGE(X), HID_USAGE(Y), + HID_LOGICAL_MINIMUM(1, 0), + HID_LOGICAL_MAXIMUM(2, 1022), + HID_REPORT_SIZE(10), + HID_REPORT_COUNT(2), + HID_INPUT(DATA, VARIABLE, ABSOLUTE), + HID_END_COLLECTION(PHYSICAL), + + HID_USAGE_PAGE(GENERIC_DESKTOP), + HID_USAGE(POINTER), + HID_COLLECTION(PHYSICAL), HID_USAGE(RX), HID_USAGE(RY), HID_LOGICAL_MINIMUM(1, 0), HID_LOGICAL_MAXIMUM(2, 1022), HID_REPORT_SIZE(10), - HID_REPORT_COUNT(4), + HID_REPORT_COUNT(2), HID_INPUT(DATA, VARIABLE, ABSOLUTE), HID_END_COLLECTION(PHYSICAL), - HID_USAGE(Z), - HID_USAGE(RZ), - HID_LOGICAL_MINIMUM(1, 0), - HID_LOGICAL_MAXIMUM(2, 1022), - HID_REPORT_SIZE(10), - HID_REPORT_COUNT(2), - HID_INPUT(DATA, VARIABLE, ABSOLUTE), - HID_END_COLLECTION(APPLICATION) -}; \ No newline at end of file +}; + +/* +__ALIGN_BEGIN uint8_t USBD_HID_Joystick_ReportDesc2[] __ALIGN_END = { + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x05, // USAGE (Game Pad) + 0xa1, 0x01, // COLLECTION (Application) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x3a, // USAGE (Counted Buffer) + 0xa1, 0x02, // COLLECTION (Logical) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x02, // REPORT_COUNT (2) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x3f, // USAGE (Reserved) + 0x09, 0x3b, // USAGE (Byte Count) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + + 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x45, 0x01, // PHYSICAL_MAXIMUM (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x0c, // USAGE_MINIMUM (Button 12) + 0x29, 0x0f, // USAGE_MAXIMUM (Button 15) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x45, 0x01, // PHYSICAL_MAXIMUM (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x09, 0x09, // USAGE (Button 9) + 0x09, 0x0a, // USAGE (Button 10) + 0x09, 0x07, // USAGE (Button 7) + 0x09, 0x08, // USAGE (Button 8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x45, 0x01, // PHYSICAL_MAXIMUM (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x09, 0x05, // USAGE (Button 5) + 0x09, 0x06, // USAGE (Button 6) + 0x09, 0x0b, // USAGE (Button 11) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + + 0x75, 0x01, // REPORT_SIZE (1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x45, 0x01, // PHYSICAL_MAXIMUM (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x01, // USAGE_MINIMUM (Button 1) + 0x29, 0x04, // USAGE_MAXIMUM (Button 4) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + 0x75, 0x08, // REPORT_SIZE (8) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x46, 0xff, 0x00, // PHYSICAL_MAXIMUM (255) + 0x95, 0x02, // REPORT_COUNT (2) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x32, // USAGE (Z) + 0x09, 0x35, // USAGE (Rz) + 0x81, 0x02, // INPUT (Data,Var,Abs) + + 0x75, 0x10, // REPORT_SIZE (16) + 0x16, 0x00, 0x80, // LOGICAL_MINIMUM (-32768) + 0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767) + 0x36, 0x00, 0x80, // PHYSICAL_MINIMUM (-32768) + 0x46, 0xff, 0x7f, // PHYSICAL_MAXIMUM (32767) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + 0x95, 0x02, // REPORT_COUNT (2) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x30, // USAGE (X) + 0x09, 0x31, // USAGE (Y) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0, // END_COLLECTION + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + 0x95, 0x02, // REPORT_COUNT (2) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x33, // USAGE (Rx) + 0x09, 0x34, // USAGE (Ry) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0, // END_COLLECTION + 0xc0, // END_COLLECTION + 0xc0 // END_COLLECTION +}; +*/ diff --git a/platformio.ini b/platformio.ini index 1a4daef..2b11619 100644 --- a/platformio.ini +++ b/platformio.ini @@ -19,8 +19,10 @@ build_flags = -D PIO_FRAMEWORK_ARDUINO_ENABLE_HID -D USBD_USE_HID_COMPOSITE -D USBCON - -D USBD_VID=0x0483 - -D USBD_PID=0x0483 + -D USBD_VID=0x045e + -D USBD_PID=0x1102 + ;-D USBD_VID=0x0483 + ;-D USBD_PID=0x0483 -D USB_MANUFACTURER="Goshi" -D USB_PRODUCT="\"BLACKPILL_F411CE\"" diff --git a/src/main.cpp b/src/main.cpp index c473d30..cc1f8c5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -80,6 +80,9 @@ void setup() device.begin(); + device.trigger_right(511); + device.trigger_left(511); + // Turn off LED digitalWrite(PC13, HIGH); } @@ -87,6 +90,8 @@ void setup() uint8_t tevent_size; TouchEvent tevent[5]; +uint32_t buttons = 1; + void loop() { int8_t ret = trackpad_right.poll(tevent, tevent_size); @@ -134,6 +139,9 @@ void loop() case TouchControl::CT_JOYSTICK: device.joystick_left(((TouchJoystick*)tcontrols[c])->getX(), ((TouchJoystick*)tcontrols[c])->getY()); + //device.joystick_right(((TouchJoystick*)tcontrols[c])->getX(), ((TouchJoystick*)tcontrols[c])->getY()); + //device.trigger_left(((TouchJoystick*)tcontrols[c])->getX()); + //device.trigger_right(((TouchJoystick*)tcontrols[c])->getY()); break; case TouchControl::CT_DPAD: @@ -152,8 +160,16 @@ void loop() uint32_t right_trigger = analogRead(TRIGGER_RIGHT_PIN); uint8_t right_tp_click = digitalRead(TRACKPAD_CLICK_RIGHT_PIN); - device.trigger_right(right_trigger); - device.button(0, right_tp_click); + //device.joystick_right(30000, 30000); + + //device.trigger_right(right_trigger); + device.button(2, right_tp_click); + + //buttons <<= 1; + //if (buttons >= 2048) buttons = 1u; + + //device.buttons(buttons); + //delay(500); device.sendReport(); }