@@ -79,6 +79,9 @@ bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t but
7979// use template layout report TUD_HID_REPORT_DESC_GAMEPAD
8080bool tud_hid_n_gamepad_report (uint8_t instance , uint8_t report_id , int8_t x , int8_t y , int8_t z , int8_t rz , int8_t rx , int8_t ry , uint8_t hat , uint32_t buttons );
8181
82+ // STYLUS PEN: convenient helper to send absolute stylus pen report if application
83+ bool tud_hid_n_stylus_report (uint8_t instance , uint8_t report_id , uint8_t attrs , uint16_t x , uint16_t y );
84+
8285//--------------------------------------------------------------------+
8386// Application API (Single Port)
8487//--------------------------------------------------------------------+
@@ -114,6 +117,10 @@ TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_gamepad_report(uint8_t report_i
114117 return tud_hid_n_gamepad_report (0 , report_id , x , y , z , rz , rx , ry , hat , buttons );
115118}
116119
120+ TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_stylus_report (uint8_t report_id , uint8_t attrs , uint16_t x , uint16_t y ) {
121+ return tud_hid_n_stylus_report (0 , report_id , attrs , x , y );
122+ }
123+
117124//--------------------------------------------------------------------+
118125// Application Callbacks
119126//--------------------------------------------------------------------+
@@ -257,6 +264,41 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, u
257264 HID_COLLECTION_END , \
258265 HID_COLLECTION_END \
259266
267+ // Stylus Pen Report Descriptor Template
268+ #define TUD_HID_REPORT_DESC_STYLUS_PEN (...) \
269+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DIGITIZER ) , \
270+ HID_USAGE ( HID_USAGE_DIGITIZER_TOUCH_SCREEN ) , \
271+ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) , \
272+ /* Report ID if any */ \
273+ __VA_ARGS__ \
274+ HID_USAGE ( HID_USAGE_DIGITIZER_STYLUS ) , \
275+ HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) , \
276+ HID_USAGE_PAGE ( HID_USAGE_PAGE_TIP_SWITCH ) , \
277+ HID_USAGE_PAGE ( HID_USAGE_PAGE_IN_RANGE ) , \
278+ HID_LOGICAL_MIN ( 0 ), \
279+ HID_LOGICAL_MAX ( 1 ), \
280+ HID_REPORT_SIZE ( 1 ), \
281+ HID_REPORT_COUNT ( 2 ), \
282+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), \
283+ HID_REPORT_SIZE ( 1 ), \
284+ HID_REPORT_COUNT ( 6 ), \
285+ HID_INPUT ( HID_CONSTANT | HID_ARRAY | HID_ABSOLUTE ), \
286+ HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), \
287+ HID_PHYSICAL_MAX ( 0x7fff ), \
288+ HID_LOGICAL_MAX ( 0x7fff ), \
289+ HID_REPORT_SIZE ( 16 ), \
290+ HID_REPORT_COUNT ( 1 ), \
291+ HID_UNIT_EXPONENT ( - 1 ), \
292+ HID_UNIT ( HID_VARIABLE | HID_NONLINEAR ), \
293+ HID_PHYSICAL_MIN ( 0 ), \
294+ HID_PHYSICAL_MAX ( 0 ), \
295+ HID_USAGE ( HID_USAGE_DESKTOP_X ), \
296+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), \
297+ HID_USAGE ( HID_USAGE_DESKTOP_Y ), \
298+ HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), \
299+ HID_COLLECTION_END , \
300+ HID_COLLECTION_END \
301+
260302// Absolute Mouse Report Descriptor Template
261303#define TUD_HID_REPORT_DESC_ABSMOUSE (...) \
262304 HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
0 commit comments