Skip to content

Commit 35e9f03

Browse files
authored
Merge pull request #2911 from jay94ks/styluspen
Adding Stylus-Pen Device Support.
2 parents 2a3025e + a232644 commit 35e9f03

File tree

6 files changed

+303
-45
lines changed

6 files changed

+303
-45
lines changed

examples/device/hid_composite/src/main.c

+41-1
Original file line numberDiff line numberDiff line change
@@ -197,18 +197,58 @@ static void send_hid_report(uint8_t report_id, uint32_t btn)
197197
}
198198
}
199199
break;
200-
201200
default: break;
202201
}
203202
}
204203

204+
/* use this to send stylus touch signal through USB. */
205+
static void send_stylus_touch(uint16_t x, uint16_t y, bool state)
206+
{
207+
// skip if hid is not ready yet
208+
if ( !tud_hid_ready() ) return;
209+
210+
static bool has_stylus_pen = false;
211+
212+
hid_stylus_report_t report =
213+
{
214+
.attr = 0,
215+
.x = 0,
216+
.y = 0
217+
};
218+
219+
report.x = x;
220+
report.y = y;
221+
222+
if (state)
223+
{
224+
report.attr = STYLUS_ATTR_TIP_SWITCH | STYLUS_ATTR_IN_RANGE;
225+
tud_hid_report(REPORT_ID_STYLUS_PEN, &report, sizeof(report));
226+
227+
has_stylus_pen = true;
228+
}else
229+
{
230+
report.attr = 0;
231+
if (has_stylus_pen) tud_hid_report(REPORT_ID_STYLUS_PEN, &report, sizeof(report));
232+
has_stylus_pen = false;
233+
}
234+
235+
}
236+
205237
// Every 10ms, we will sent 1 report for each HID profile (keyboard, mouse etc ..)
206238
// tud_hid_report_complete_cb() is used to send the next report after previous one is complete
207239
void hid_task(void)
208240
{
209241
// Poll every 10ms
210242
const uint32_t interval_ms = 10;
211243
static uint32_t start_ms = 0;
244+
static uint32_t touch_ms = 0;
245+
static bool touch_state = false;
246+
247+
if (board_millis() - touch_ms < 100) {
248+
touch_ms = board_millis();
249+
send_stylus_touch(0, 0, touch_state = !touch_state);
250+
return;
251+
}
212252

213253
if ( board_millis() - start_ms < interval_ms) return; // not enough time
214254
start_ms += interval_ms;

examples/device/hid_composite/src/usb_descriptors.c

+1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ uint8_t const desc_hid_report[] =
7979
{
8080
TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(REPORT_ID_KEYBOARD )),
8181
TUD_HID_REPORT_DESC_MOUSE ( HID_REPORT_ID(REPORT_ID_MOUSE )),
82+
TUD_HID_REPORT_DESC_STYLUS_PEN( HID_REPORT_ID(REPORT_ID_STYLUS_PEN )),
8283
TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL )),
8384
TUD_HID_REPORT_DESC_GAMEPAD ( HID_REPORT_ID(REPORT_ID_GAMEPAD ))
8485
};

examples/device/hid_composite/src/usb_descriptors.h

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ enum
2929
{
3030
REPORT_ID_KEYBOARD = 1,
3131
REPORT_ID_MOUSE,
32+
REPORT_ID_STYLUS_PEN,
3233
REPORT_ID_CONSUMER_CONTROL,
3334
REPORT_ID_GAMEPAD,
3435
REPORT_ID_COUNT

src/class/hid/hid.h

+208-44
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,29 @@ typedef enum
325325

326326
/// @}
327327

328+
//--------------------------------------------------------------------+
329+
// Digitizer Stylus Pen
330+
//--------------------------------------------------------------------+
331+
/** \addtogroup ClassDriver_HID_Stylus Stylus
332+
* @{ */
333+
334+
// Standard Stylus Pen Report.
335+
typedef struct TU_ATTR_PACKED
336+
{
337+
uint8_t attr; /**< Attribute mask for describing current status of the stylus pen. */
338+
uint16_t x; /**< Current x position of the mouse. */
339+
uint16_t y; /**< Current y position of the mouse. */
340+
} hid_stylus_report_t;
341+
342+
// Standard Stylus Pen Attributes Bitmap.
343+
typedef enum
344+
{
345+
STYLUS_ATTR_TIP_SWITCH = TU_BIT(0), ///< Tip switch
346+
STYLUS_ATTR_IN_RANGE = TU_BIT(1), ///< In-range bit.
347+
} hid_stylus_attr_bm_t;
348+
349+
/// @}
350+
328351
//--------------------------------------------------------------------+
329352
// Keyboard
330353
//--------------------------------------------------------------------+
@@ -740,6 +763,21 @@ enum {
740763

741764
//--------------------------------------------------------------------+
742765
// Usage Table
766+
/* Usage Types Data
767+
Sel Selector Array
768+
SV Static Value Constant, Variable, Absolute
769+
SF Static Flag Constant, Variable, Absolute
770+
DV Dynamic Value Constant, Variable, Absolute
771+
DF Dynamic Flag Constant, Variable, Absolute
772+
*/
773+
/* Usage Types Collection
774+
NAry Named Array Logical
775+
CA Collection Application Application
776+
CL Collection Logical Logical
777+
CP Collection Physical Physical
778+
US Usage Switch Logical
779+
UM Usage Modifier Logical
780+
*/
743781
//--------------------------------------------------------------------+
744782

745783
/// HID Usage Table - Table 1: Usage Page Summary
@@ -759,8 +797,14 @@ enum {
759797
HID_USAGE_PAGE_DIGITIZER = 0x0d,
760798
HID_USAGE_PAGE_PID = 0x0f,
761799
HID_USAGE_PAGE_UNICODE = 0x10,
762-
HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14,
763-
HID_USAGE_PAGE_MEDICAL = 0x40,
800+
HID_USAGE_PAGE_SOC = 0x11,
801+
HID_USAGE_PAGE_EYE_AND_HEAD_TRACKERS = 0x12,
802+
// 0x13 is reserved
803+
HID_USAGE_PAGE_AUXILIARY_DISPLAY = 0x14,
804+
// 0x15 - 0x1f is reserved
805+
HID_USAGE_PAGE_SENSORS = 0x20,
806+
// 0x21 - 0x3f is reserved
807+
HID_USAGE_PAGE_MEDICAL_INSTRUMENT = 0x40,
764808
HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59,
765809
HID_USAGE_PAGE_MONITOR = 0x80, // 0x80 - 0x83
766810
HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87
@@ -846,7 +890,6 @@ enum {
846890
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7
847891
};
848892

849-
850893
/// HID Usage Table: Consumer Page (0x0C)
851894
/// Only contains controls that supported by Windows (whole list is too long)
852895
enum {
@@ -905,48 +948,125 @@ enum {
905948
HID_USAGE_CONSUMER_AC_PAN = 0x0238,
906949
};
907950

908-
/// HID Usage Table - Lighting And Illumination Page (0x59)
909-
enum {
910-
HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01,
911-
HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02,
912-
HID_USAGE_LIGHTING_LAMP_COUNT = 0x03,
913-
HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04,
914-
HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05,
915-
HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06,
916-
HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07,
917-
HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08,
918-
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20,
919-
HID_USAGE_LIGHTING_LAMP_ID = 0x21,
920-
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22,
921-
HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23,
922-
HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24,
923-
HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25,
924-
HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26,
925-
HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27,
926-
HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28,
927-
HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29,
928-
HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A,
929-
HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B,
930-
HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C,
931-
HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D,
932-
HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50,
933-
HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51,
934-
HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52,
935-
HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53,
936-
HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54,
937-
HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55,
938-
HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60,
939-
HID_USAGE_LIGHTING_LAMP_ID_START = 0x61,
940-
HID_USAGE_LIGHTING_LAMP_ID_END = 0x62,
941-
HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70,
942-
HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71,
943-
};
944-
945-
/// HID Usage Table: FIDO Alliance Page (0xF1D0)
951+
/// HID Usage Table: Digitizer Page (0x0D)
946952
enum {
947-
HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection
948-
HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report
949-
HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
953+
HID_USAGE_DIGITIZER_UNDEFINED = 0x00,
954+
HID_USAGE_DIGITIZER_DIGITIZER = 0x01, // CA
955+
HID_USAGE_DIGITIZER_PEN = 0x02, // CA
956+
HID_USAGE_DIGITIZER_LIGHT_PEN = 0x03, // CA
957+
HID_USAGE_DIGITIZER_TOUCH_SCREEN = 0x04, // CA
958+
HID_USAGE_DIGITIZER_TOUCH_PAD = 0x05, // CA
959+
HID_USAGE_DIGITIZER_WHITEBOARD = 0x06, // CA
960+
HID_USAGE_DIGITIZER_COORDINATE_MEASURING_MACHINE = 0x07, // CA
961+
HID_USAGE_DIGITIZER_3D_DIGITIZER = 0x08, // CA
962+
HID_USAGE_DIGITIZER_STEREO_PLOTTER = 0x09, // CA
963+
HID_USAGE_DIGITIZER_ARTICULATED_ARM = 0x0A, // CA
964+
HID_USAGE_DIGITIZER_ARMATURE = 0x0B, // CA
965+
HID_USAGE_DIGITIZER_MULTIPLE_POINT_DIGITIZER = 0x0C, // CA
966+
HID_USAGE_DIGITIZER_FREE_SPACE_WAND = 0x0D, // CA
967+
HID_USAGE_DIGITIZER_DEVICE_CONFIGURATION = 0x0E, // CA
968+
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_DIGITIZER = 0x0F, // CA
969+
// Reserved (0x10 - 0x1F)
970+
HID_USAGE_DIGITIZER_STYLUS = 0x20, // CA/CL
971+
HID_USAGE_DIGITIZER_PUCK = 0x21, // CL
972+
HID_USAGE_DIGITIZER_FINGER = 0x22, // CL
973+
HID_USAGE_DIGITIZER_DEVICE_SETTINGS = 0x23, // CL
974+
HID_USAGE_DIGITIZER_CHARACTER_GESTURE = 0x24, // CL
975+
// Reserved (0x25 - 0x2F)
976+
HID_USAGE_DIGITIZER_TIP_PRESSURE = 0x30, // DV
977+
HID_USAGE_DIGITIZER_BARREL_PRESSURE = 0x31, // DV
978+
HID_USAGE_DIGITIZER_IN_RANGE = 0x32, // MC
979+
HID_USAGE_DIGITIZER_TOUCH = 0x33, // MC
980+
HID_USAGE_DIGITIZER_UNTOUCH = 0x34, // OSC
981+
HID_USAGE_DIGITIZER_TAP = 0x35, // OSC
982+
HID_USAGE_DIGITIZER_QUALITY = 0x36, // DV
983+
HID_USAGE_DIGITIZER_DATA_VALID = 0x37, // MC
984+
HID_USAGE_DIGITIZER_TRANSDUCER_INDEX = 0x38, // DV
985+
HID_USAGE_DIGITIZER_TABLET_FUNCTION_KEYS = 0x39, // CL
986+
HID_USAGE_DIGITIZER_PROGRAM_CHANGE_KEYS = 0x3A, // CL
987+
HID_USAGE_DIGITIZER_BATTERY_STRENGTH = 0x3B, // DV
988+
HID_USAGE_DIGITIZER_INVERT = 0x3C, // MC
989+
HID_USAGE_DIGITIZER_X_TILT = 0x3D, // DV
990+
HID_USAGE_DIGITIZER_Y_TILT = 0x3E, // DV
991+
HID_USAGE_DIGITIZER_AZIMUTH = 0x3F, // DV
992+
HID_USAGE_DIGITIZER_ALTITUDE = 0x40, // DV
993+
HID_USAGE_DIGITIZER_TWIST = 0x41, // DV
994+
HID_USAGE_DIGITIZER_TIP_SWITCH = 0x42, // MC
995+
HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH = 0x43, // MC
996+
HID_USAGE_DIGITIZER_BARREL_SWITCH = 0x44, // MC
997+
HID_USAGE_DIGITIZER_ERASER = 0x45, // MC
998+
HID_USAGE_DIGITIZER_TABLET_PICK = 0x46, // MC
999+
HID_USAGE_DIGITIZER_TOUCH_VALID = 0x47, // MC
1000+
HID_USAGE_DIGITIZER_WIDTH = 0x48, // DV
1001+
HID_USAGE_DIGITIZER_HEIGHT = 0x49, // DV
1002+
// Reserved (0x4A - 0x50)
1003+
HID_USAGE_DIGITIZER_CONTACT_IDENTIFIER = 0x51, // DV
1004+
HID_USAGE_DIGITIZER_DEVICE_MODE = 0x52, // DV
1005+
HID_USAGE_DIGITIZER_DEVICE_IDENTIFIER = 0x53, // DV/SV
1006+
HID_USAGE_DIGITIZER_CONTACT_COUNT = 0x54, // DV
1007+
HID_USAGE_DIGITIZER_CONTACT_COUNT_MAXIMUM = 0x55, // SV
1008+
HID_USAGE_DIGITIZER_SCAN_TIME = 0x56, // DV
1009+
HID_USAGE_DIGITIZER_SURFACE_SWITCH = 0x57, // DF
1010+
HID_USAGE_DIGITIZER_BUTTON_SWITCH = 0x58, // DF
1011+
HID_USAGE_DIGITIZER_PAD_TYPE = 0x59, // SF
1012+
HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_NUMBER = 0x5B, // SV
1013+
HID_USAGE_DIGITIZER_PREFERRED_COLOR = 0x5C, // DV
1014+
HID_USAGE_DIGITIZER_PREFERRED_COLOR_LOCKED = 0x5D, // MC
1015+
HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH = 0x5E, // DV
1016+
HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH_LOCKED = 0x5F, // MC
1017+
HID_USAGE_DIGITIZER_LATENCY_MODE = 0x60, // DF
1018+
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_QUALITY = 0x61, // DV
1019+
HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA_LENGTH = 0x62, // DV
1020+
HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA = 0x63, // DV
1021+
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENCODING = 0x64, // NAry
1022+
HID_USAGE_DIGITIZER_UTF8_CHARACTER_GESTURE_ENCODING = 0x65, // Sel
1023+
HID_USAGE_DIGITIZER_UTF16_LE_CHARACTER_GESTURE_ENCODING = 0x66, // Sel
1024+
HID_USAGE_DIGITIZER_UTF16_BE_CHARACTER_GESTURE_ENCODING = 0x67, // Sel
1025+
HID_USAGE_DIGITIZER_UTF32_LE_CHARACTER_GESTURE_ENCODING = 0x68, // Sel
1026+
HID_USAGE_DIGITIZER_UTF32_BE_CHARACTER_GESTURE_ENCODING = 0x69, // Sel
1027+
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_VENDOR_ID = 0x6A, // SV
1028+
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_VERSION = 0x6B, // SV
1029+
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_FRAME_DATA = 0x6C, // DV
1030+
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENABLE = 0x6D, // DF
1031+
HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_NUMBER_PART2 = 0x6E, // SV
1032+
HID_USAGE_DIGITIZER_NO_PREFERRED_COLOR = 0x6F, // DF
1033+
HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE = 0x70, // NAry
1034+
HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE_LOCKED = 0x71, // MC
1035+
HID_USAGE_DIGITIZER_INK = 0x72, // Sel
1036+
HID_USAGE_DIGITIZER_PENCIL = 0x73, // Sel
1037+
HID_USAGE_DIGITIZER_HIGHLIGHTER = 0x74, // Sel
1038+
HID_USAGE_DIGITIZER_CHISEL_MARKER = 0x75, // Sel
1039+
HID_USAGE_DIGITIZER_BRUSH = 0x76, // Sel
1040+
HID_USAGE_DIGITIZER_NO_PREFERENCE = 0x77, // Sel
1041+
// Reserved (0x78 - 0x7F)
1042+
HID_USAGE_DIGITIZER_DIGITIZER_DIAGNOSTIC = 0x80, // CL
1043+
HID_USAGE_DIGITIZER_DIGITIZER_ERROR = 0x81, // NAry
1044+
HID_USAGE_DIGITIZER_ERR_NORMAL_STATUS = 0x82, // Sel
1045+
HID_USAGE_DIGITIZER_ERR_TRANSDUCERS_EXCEEDED = 0x83, // Sel
1046+
HID_USAGE_DIGITIZER_ERR_FULL_TRANS_FEATURES_UNAVAILABLE = 0x84, // Sel
1047+
HID_USAGE_DIGITIZER_ERR_CHARGE_LOW = 0x85, // Sel
1048+
// Reserved (0x86 - 0x8F)
1049+
HID_USAGE_DIGITIZER_TRANSDUCER_SOFTWARE_INFO = 0x90, // CL
1050+
HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR_ID = 0x91, // SV
1051+
HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT_ID = 0x92, // SV
1052+
HID_USAGE_DIGITIZER_DEVICE_SUPPORTED_PROTOCOLS = 0x93, // NAry/CL
1053+
HID_USAGE_DIGITIZER_TRANSDUCER_SUPPORTED_PROTOCOLS = 0x94, // NAry/CL
1054+
HID_USAGE_DIGITIZER_NO_PROTOCOL = 0x95, // Sel
1055+
HID_USAGE_DIGITIZER_WACOM_AES_PROTOCOL = 0x96, // Sel
1056+
HID_USAGE_DIGITIZER_USI_PROTOCOL = 0x97, // Sel
1057+
HID_USAGE_DIGITIZER_MICROSOFT_PEN_PROTOCOL = 0x98, // Sel
1058+
// Reserved (0x99 - 0x9F)
1059+
HID_USAGE_DIGITIZER_SUPPORTED_REPORT_RATES = 0xA0, // SV/CL
1060+
HID_USAGE_DIGITIZER_REPORT_RATE = 0xA1, // DV
1061+
HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED = 0xA2, // SF
1062+
HID_USAGE_DIGITIZER_SWITCH_DISABLED = 0xA3, // Sel
1063+
HID_USAGE_DIGITIZER_SWITCH_UNIMPLEMENTED = 0xA4, // Sel
1064+
HID_USAGE_DIGITIZER_TRANSDUCER_SWITCHES = 0xA5, // CL
1065+
HID_USAGE_DIGITIZER_TRANSDUCER_INDEX_SELECTOR = 0xA6, // DV
1066+
// Reserved (0xA7 - 0xAF)
1067+
HID_USAGE_DIGITIZER_BUTTON_PRESS_THRESHOLD = 0xB0, // DV
1068+
1069+
// Reserved (0xB1 - 0xFFFF)
9501070
};
9511071

9521072
/// HID Usage Table: Physical Input Device Page (0x0F)
@@ -1059,6 +1179,50 @@ enum {
10591179
HID_USAGE_PID_RAM_POOL_AVAILABLE = 0xac,
10601180
};
10611181

1182+
/// HID Usage Table - Lighting And Illumination Page (0x59)
1183+
enum {
1184+
HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01,
1185+
HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02,
1186+
HID_USAGE_LIGHTING_LAMP_COUNT = 0x03,
1187+
HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04,
1188+
HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05,
1189+
HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06,
1190+
HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07,
1191+
HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08,
1192+
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20,
1193+
HID_USAGE_LIGHTING_LAMP_ID = 0x21,
1194+
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22,
1195+
HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23,
1196+
HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24,
1197+
HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25,
1198+
HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26,
1199+
HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27,
1200+
HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28,
1201+
HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29,
1202+
HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A,
1203+
HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B,
1204+
HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C,
1205+
HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D,
1206+
HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50,
1207+
HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51,
1208+
HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52,
1209+
HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53,
1210+
HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54,
1211+
HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55,
1212+
HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60,
1213+
HID_USAGE_LIGHTING_LAMP_ID_START = 0x61,
1214+
HID_USAGE_LIGHTING_LAMP_ID_END = 0x62,
1215+
HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70,
1216+
HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71,
1217+
};
1218+
1219+
/// HID Usage Table: FIDO Alliance Page (0xF1D0)
1220+
enum {
1221+
HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection
1222+
HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report
1223+
HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
1224+
};
1225+
10621226
/*--------------------------------------------------------------------
10631227
* ASCII to KEYCODE Conversion
10641228
* Expand to array of [128][2] (shift, keycode)

src/class/hid/hid_device.c

+10
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,16 @@ bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id,
194194
return tud_hid_n_report(instance, report_id, &report, sizeof(report));
195195
}
196196

197+
bool tud_hid_n_stylus_report(uint8_t instance, uint8_t report_id, uint8_t attrs, uint16_t x, uint16_t y) {
198+
hid_stylus_report_t report = {
199+
.attr = attrs,
200+
.x = x,
201+
.y = y,
202+
};
203+
204+
return tud_hid_n_report(instance, report_id, &report, sizeof(report));
205+
}
206+
197207
//--------------------------------------------------------------------+
198208
// USBD-CLASS API
199209
//--------------------------------------------------------------------+

0 commit comments

Comments
 (0)