|
|
@@ -197,6 +197,175 @@ ATTR_WEAK void tud_hid_mouse_set_report_cb(uint8_t report_id, hid_report_type_t
|
|
|
|
|
|
#endif
|
|
|
|
|
|
+
|
|
|
+//--------------------------------------------------------------------+
|
|
|
+// HID Report Descriptor Template
|
|
|
+//--------------------------------------------------------------------+
|
|
|
+/* These template should be used as follow
|
|
|
+ * - Only 1 report : no parameter
|
|
|
+ * uint8_t report_desc[] = { ID_REPORT_DESC_KEYBOARD() };
|
|
|
+ *
|
|
|
+ * - Multiple Reports: "HID_REPORT_ID(ID)," must be passed to template
|
|
|
+ * uint8_t report_desc[] = {
|
|
|
+ * ID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(1) ,) ,
|
|
|
+ * HID_REPORT_DESC_MOUSE ( HID_REPORT_ID(2) ,)
|
|
|
+ * };
|
|
|
+ */
|
|
|
+
|
|
|
+/*------------- Keyboard Descriptor Template -------------*/
|
|
|
+#define HID_REPORT_DESC_KEYBOARD(...) \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ) ,\
|
|
|
+ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
|
|
|
+ /* 8 bits Modifier Keys (Shfit, Control, Alt) */ \
|
|
|
+ __VA_ARGS__ \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ) ,\
|
|
|
+ HID_USAGE_MIN ( 224 ) ,\
|
|
|
+ HID_USAGE_MAX ( 231 ) ,\
|
|
|
+ HID_LOGICAL_MIN ( 0 ) ,\
|
|
|
+ HID_LOGICAL_MAX ( 1 ) ,\
|
|
|
+ HID_REPORT_COUNT ( 8 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 1 ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
|
|
|
+ /* 8 bit reserved */ \
|
|
|
+ HID_REPORT_COUNT ( 1 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 8 ) ,\
|
|
|
+ HID_INPUT ( HID_CONSTANT ) ,\
|
|
|
+ /* 6-byte Keycodes */ \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ) ,\
|
|
|
+ HID_USAGE_MIN ( 0 ) ,\
|
|
|
+ HID_USAGE_MAX ( 255 ) ,\
|
|
|
+ HID_LOGICAL_MIN ( 0 ) ,\
|
|
|
+ HID_LOGICAL_MAX ( 255 ) ,\
|
|
|
+ HID_REPORT_COUNT ( 6 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 8 ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\
|
|
|
+ /* 5-bit LED Indicator Kana | Compose | ScrollLock | CapsLock | NumLock */ \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ) ,\
|
|
|
+ HID_USAGE_MIN ( 1 ) ,\
|
|
|
+ HID_USAGE_MAX ( 5 ) ,\
|
|
|
+ HID_REPORT_COUNT ( 5 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 1 ) ,\
|
|
|
+ HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
|
|
|
+ /* led padding */ \
|
|
|
+ HID_REPORT_COUNT ( 1 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 3 ) ,\
|
|
|
+ HID_OUTPUT ( HID_CONSTANT ) ,\
|
|
|
+ HID_COLLECTION_END \
|
|
|
+
|
|
|
+/*------------- Mouse Descriptor Template -------------*/
|
|
|
+#define HID_REPORT_DESC_MOUSE(...) \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\
|
|
|
+ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
|
|
|
+ __VA_ARGS__ \
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_POINTER ) ,\
|
|
|
+ HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) ,\
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\
|
|
|
+ HID_USAGE_MIN ( 1 ) ,\
|
|
|
+ HID_USAGE_MAX ( 3 ) ,\
|
|
|
+ HID_LOGICAL_MIN ( 0 ) ,\
|
|
|
+ HID_LOGICAL_MAX ( 1 ) ,\
|
|
|
+ /* Left, Right, Middle, Backward, Forward mouse buttons */ \
|
|
|
+ HID_REPORT_COUNT ( 3 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 1 ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
|
|
|
+ /* 3 bit padding */ \
|
|
|
+ HID_REPORT_COUNT ( 1 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 5 ) ,\
|
|
|
+ HID_INPUT ( HID_CONSTANT ) ,\
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
|
|
+ /* X, Y position [-127, 127] */ \
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\
|
|
|
+ HID_LOGICAL_MIN ( 0x81 ) ,\
|
|
|
+ HID_LOGICAL_MAX ( 0x7f ) ,\
|
|
|
+ HID_REPORT_COUNT ( 2 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 8 ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
|
|
|
+ /* Mouse scroll [-127, 127] */ \
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_WHEEL ) ,\
|
|
|
+ HID_LOGICAL_MIN ( 0x81 ) ,\
|
|
|
+ HID_LOGICAL_MAX ( 0x7f ) ,\
|
|
|
+ HID_REPORT_COUNT( 1 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 8 ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
|
|
|
+ HID_COLLECTION_END ,\
|
|
|
+ HID_COLLECTION_END \
|
|
|
+
|
|
|
+//------------- Consumer Control Report Template -------------//
|
|
|
+#define HID_REPORT_DESC_CONSUMER(...) \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_CONSUMER_CONTROL ) ,\
|
|
|
+ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
|
|
|
+ __VA_ARGS__ \
|
|
|
+ HID_LOGICAL_MIN ( 0x00 ) ,\
|
|
|
+ HID_LOGICAL_MAX_N( 0x03FF, 2 ) ,\
|
|
|
+ HID_USAGE_MIN ( 0x00 ) ,\
|
|
|
+ HID_USAGE_MAX_N ( 0x03FF, 2 ) ,\
|
|
|
+ HID_REPORT_COUNT ( 1 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 16 ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\
|
|
|
+ HID_COLLECTION_END \
|
|
|
+
|
|
|
+//------------- System Control Report Template -------------//
|
|
|
+/* 0x00 - do nothing
|
|
|
+ * 0x01 - Power Off
|
|
|
+ * 0x02 - Standby
|
|
|
+ * 0x04 - Wake Host
|
|
|
+ */
|
|
|
+#define HID_REPORT_DESC_SYSTEM_CONTROL(...) \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_CONTROL ) ,\
|
|
|
+ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
|
|
|
+ __VA_ARGS__ \
|
|
|
+ /* 2 bit system power control */ \
|
|
|
+ HID_LOGICAL_MIN ( 1 ) ,\
|
|
|
+ HID_LOGICAL_MAX ( 3 ) ,\
|
|
|
+ HID_REPORT_COUNT ( 1 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 2 ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_SLEEP ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_POWER_DOWN ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_SYSTEM_WAKE_UP ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\
|
|
|
+ /* 6 bit padding */ \
|
|
|
+ HID_REPORT_COUNT ( 1 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 6 ) ,\
|
|
|
+ HID_INPUT ( HID_CONSTANT ) ,\
|
|
|
+ HID_COLLECTION_END \
|
|
|
+
|
|
|
+//------------- Gamepad Report Template -------------//
|
|
|
+// Gamepad with 16 buttons and 2 joysticks
|
|
|
+// | Button Map (2 bytes) | X | Y | Z | Rz
|
|
|
+#define HID_REPORT_DESC_GAMEPAD(...) \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_GAMEPAD ) ,\
|
|
|
+ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
|
|
|
+ __VA_ARGS__ \
|
|
|
+ /* 16 bit Button Map */ \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ) ,\
|
|
|
+ HID_USAGE_MIN ( 1 ) ,\
|
|
|
+ HID_USAGE_MAX ( 16 ) ,\
|
|
|
+ HID_LOGICAL_MIN ( 0 ) ,\
|
|
|
+ HID_LOGICAL_MAX ( 1 ) ,\
|
|
|
+ HID_REPORT_COUNT ( 16 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 1 ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ) ,\
|
|
|
+ /* X, Y, Z, Rz (min -127, max 127 ) */ \
|
|
|
+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
|
|
+ HID_LOGICAL_MIN ( 0x81 ) ,\
|
|
|
+ HID_LOGICAL_MAX ( 0x7f ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_Z ) ,\
|
|
|
+ HID_USAGE ( HID_USAGE_DESKTOP_RZ ) ,\
|
|
|
+ HID_REPORT_COUNT ( 4 ) ,\
|
|
|
+ HID_REPORT_SIZE ( 8 ) ,\
|
|
|
+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
|
|
|
+ HID_COLLECTION_END \
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/** @} */
|
|
|
/** @} */
|
|
|
|