Merge pull request #2911 from jay94ks/styluspen
Adding Stylus-Pen Device Support.
This commit is contained in:
@@ -197,11 +197,43 @@ static void send_hid_report(uint8_t report_id, uint32_t btn)
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
/* use this to send stylus touch signal through USB. */
|
||||
static void send_stylus_touch(uint16_t x, uint16_t y, bool state)
|
||||
{
|
||||
// skip if hid is not ready yet
|
||||
if ( !tud_hid_ready() ) return;
|
||||
|
||||
static bool has_stylus_pen = false;
|
||||
|
||||
hid_stylus_report_t report =
|
||||
{
|
||||
.attr = 0,
|
||||
.x = 0,
|
||||
.y = 0
|
||||
};
|
||||
|
||||
report.x = x;
|
||||
report.y = y;
|
||||
|
||||
if (state)
|
||||
{
|
||||
report.attr = STYLUS_ATTR_TIP_SWITCH | STYLUS_ATTR_IN_RANGE;
|
||||
tud_hid_report(REPORT_ID_STYLUS_PEN, &report, sizeof(report));
|
||||
|
||||
has_stylus_pen = true;
|
||||
}else
|
||||
{
|
||||
report.attr = 0;
|
||||
if (has_stylus_pen) tud_hid_report(REPORT_ID_STYLUS_PEN, &report, sizeof(report));
|
||||
has_stylus_pen = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Every 10ms, we will sent 1 report for each HID profile (keyboard, mouse etc ..)
|
||||
// tud_hid_report_complete_cb() is used to send the next report after previous one is complete
|
||||
void hid_task(void)
|
||||
@@ -209,6 +241,14 @@ void hid_task(void)
|
||||
// Poll every 10ms
|
||||
const uint32_t interval_ms = 10;
|
||||
static uint32_t start_ms = 0;
|
||||
static uint32_t touch_ms = 0;
|
||||
static bool touch_state = false;
|
||||
|
||||
if (board_millis() - touch_ms < 100) {
|
||||
touch_ms = board_millis();
|
||||
send_stylus_touch(0, 0, touch_state = !touch_state);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( board_millis() - start_ms < interval_ms) return; // not enough time
|
||||
start_ms += interval_ms;
|
||||
|
@@ -79,6 +79,7 @@ uint8_t const desc_hid_report[] =
|
||||
{
|
||||
TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(REPORT_ID_KEYBOARD )),
|
||||
TUD_HID_REPORT_DESC_MOUSE ( HID_REPORT_ID(REPORT_ID_MOUSE )),
|
||||
TUD_HID_REPORT_DESC_STYLUS_PEN( HID_REPORT_ID(REPORT_ID_STYLUS_PEN )),
|
||||
TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(REPORT_ID_CONSUMER_CONTROL )),
|
||||
TUD_HID_REPORT_DESC_GAMEPAD ( HID_REPORT_ID(REPORT_ID_GAMEPAD ))
|
||||
};
|
||||
|
@@ -29,6 +29,7 @@ enum
|
||||
{
|
||||
REPORT_ID_KEYBOARD = 1,
|
||||
REPORT_ID_MOUSE,
|
||||
REPORT_ID_STYLUS_PEN,
|
||||
REPORT_ID_CONSUMER_CONTROL,
|
||||
REPORT_ID_GAMEPAD,
|
||||
REPORT_ID_COUNT
|
||||
|
@@ -325,6 +325,29 @@ typedef enum
|
||||
|
||||
/// @}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Digitizer Stylus Pen
|
||||
//--------------------------------------------------------------------+
|
||||
/** \addtogroup ClassDriver_HID_Stylus Stylus
|
||||
* @{ */
|
||||
|
||||
// Standard Stylus Pen Report.
|
||||
typedef struct TU_ATTR_PACKED
|
||||
{
|
||||
uint8_t attr; /**< Attribute mask for describing current status of the stylus pen. */
|
||||
uint16_t x; /**< Current x position of the mouse. */
|
||||
uint16_t y; /**< Current y position of the mouse. */
|
||||
} hid_stylus_report_t;
|
||||
|
||||
// Standard Stylus Pen Attributes Bitmap.
|
||||
typedef enum
|
||||
{
|
||||
STYLUS_ATTR_TIP_SWITCH = TU_BIT(0), ///< Tip switch
|
||||
STYLUS_ATTR_IN_RANGE = TU_BIT(1), ///< In-range bit.
|
||||
} hid_stylus_attr_bm_t;
|
||||
|
||||
/// @}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Keyboard
|
||||
//--------------------------------------------------------------------+
|
||||
@@ -740,6 +763,21 @@ enum {
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Usage Table
|
||||
/* Usage Types Data
|
||||
Sel Selector Array
|
||||
SV Static Value Constant, Variable, Absolute
|
||||
SF Static Flag Constant, Variable, Absolute
|
||||
DV Dynamic Value Constant, Variable, Absolute
|
||||
DF Dynamic Flag Constant, Variable, Absolute
|
||||
*/
|
||||
/* Usage Types Collection
|
||||
NAry Named Array Logical
|
||||
CA Collection Application Application
|
||||
CL Collection Logical Logical
|
||||
CP Collection Physical Physical
|
||||
US Usage Switch Logical
|
||||
UM Usage Modifier Logical
|
||||
*/
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
/// HID Usage Table - Table 1: Usage Page Summary
|
||||
@@ -759,8 +797,14 @@ enum {
|
||||
HID_USAGE_PAGE_DIGITIZER = 0x0d,
|
||||
HID_USAGE_PAGE_PID = 0x0f,
|
||||
HID_USAGE_PAGE_UNICODE = 0x10,
|
||||
HID_USAGE_PAGE_ALPHA_DISPLAY = 0x14,
|
||||
HID_USAGE_PAGE_MEDICAL = 0x40,
|
||||
HID_USAGE_PAGE_SOC = 0x11,
|
||||
HID_USAGE_PAGE_EYE_AND_HEAD_TRACKERS = 0x12,
|
||||
// 0x13 is reserved
|
||||
HID_USAGE_PAGE_AUXILIARY_DISPLAY = 0x14,
|
||||
// 0x15 - 0x1f is reserved
|
||||
HID_USAGE_PAGE_SENSORS = 0x20,
|
||||
// 0x21 - 0x3f is reserved
|
||||
HID_USAGE_PAGE_MEDICAL_INSTRUMENT = 0x40,
|
||||
HID_USAGE_PAGE_LIGHTING_AND_ILLUMINATION = 0x59,
|
||||
HID_USAGE_PAGE_MONITOR = 0x80, // 0x80 - 0x83
|
||||
HID_USAGE_PAGE_POWER = 0x84, // 0x084 - 0x87
|
||||
@@ -846,7 +890,6 @@ enum {
|
||||
HID_USAGE_DESKTOP_SYSTEM_DISPLAY_LCD_AUTOSCALE = 0xB7
|
||||
};
|
||||
|
||||
|
||||
/// HID Usage Table: Consumer Page (0x0C)
|
||||
/// Only contains controls that supported by Windows (whole list is too long)
|
||||
enum {
|
||||
@@ -905,48 +948,125 @@ enum {
|
||||
HID_USAGE_CONSUMER_AC_PAN = 0x0238,
|
||||
};
|
||||
|
||||
/// HID Usage Table - Lighting And Illumination Page (0x59)
|
||||
/// HID Usage Table: Digitizer Page (0x0D)
|
||||
enum {
|
||||
HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01,
|
||||
HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02,
|
||||
HID_USAGE_LIGHTING_LAMP_COUNT = 0x03,
|
||||
HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04,
|
||||
HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05,
|
||||
HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06,
|
||||
HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07,
|
||||
HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08,
|
||||
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20,
|
||||
HID_USAGE_LIGHTING_LAMP_ID = 0x21,
|
||||
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22,
|
||||
HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23,
|
||||
HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24,
|
||||
HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25,
|
||||
HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26,
|
||||
HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27,
|
||||
HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28,
|
||||
HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29,
|
||||
HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A,
|
||||
HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B,
|
||||
HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C,
|
||||
HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D,
|
||||
HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50,
|
||||
HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51,
|
||||
HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52,
|
||||
HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53,
|
||||
HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54,
|
||||
HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55,
|
||||
HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60,
|
||||
HID_USAGE_LIGHTING_LAMP_ID_START = 0x61,
|
||||
HID_USAGE_LIGHTING_LAMP_ID_END = 0x62,
|
||||
HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70,
|
||||
HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71,
|
||||
};
|
||||
HID_USAGE_DIGITIZER_UNDEFINED = 0x00,
|
||||
HID_USAGE_DIGITIZER_DIGITIZER = 0x01, // CA
|
||||
HID_USAGE_DIGITIZER_PEN = 0x02, // CA
|
||||
HID_USAGE_DIGITIZER_LIGHT_PEN = 0x03, // CA
|
||||
HID_USAGE_DIGITIZER_TOUCH_SCREEN = 0x04, // CA
|
||||
HID_USAGE_DIGITIZER_TOUCH_PAD = 0x05, // CA
|
||||
HID_USAGE_DIGITIZER_WHITEBOARD = 0x06, // CA
|
||||
HID_USAGE_DIGITIZER_COORDINATE_MEASURING_MACHINE = 0x07, // CA
|
||||
HID_USAGE_DIGITIZER_3D_DIGITIZER = 0x08, // CA
|
||||
HID_USAGE_DIGITIZER_STEREO_PLOTTER = 0x09, // CA
|
||||
HID_USAGE_DIGITIZER_ARTICULATED_ARM = 0x0A, // CA
|
||||
HID_USAGE_DIGITIZER_ARMATURE = 0x0B, // CA
|
||||
HID_USAGE_DIGITIZER_MULTIPLE_POINT_DIGITIZER = 0x0C, // CA
|
||||
HID_USAGE_DIGITIZER_FREE_SPACE_WAND = 0x0D, // CA
|
||||
HID_USAGE_DIGITIZER_DEVICE_CONFIGURATION = 0x0E, // CA
|
||||
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_DIGITIZER = 0x0F, // CA
|
||||
// Reserved (0x10 - 0x1F)
|
||||
HID_USAGE_DIGITIZER_STYLUS = 0x20, // CA/CL
|
||||
HID_USAGE_DIGITIZER_PUCK = 0x21, // CL
|
||||
HID_USAGE_DIGITIZER_FINGER = 0x22, // CL
|
||||
HID_USAGE_DIGITIZER_DEVICE_SETTINGS = 0x23, // CL
|
||||
HID_USAGE_DIGITIZER_CHARACTER_GESTURE = 0x24, // CL
|
||||
// Reserved (0x25 - 0x2F)
|
||||
HID_USAGE_DIGITIZER_TIP_PRESSURE = 0x30, // DV
|
||||
HID_USAGE_DIGITIZER_BARREL_PRESSURE = 0x31, // DV
|
||||
HID_USAGE_DIGITIZER_IN_RANGE = 0x32, // MC
|
||||
HID_USAGE_DIGITIZER_TOUCH = 0x33, // MC
|
||||
HID_USAGE_DIGITIZER_UNTOUCH = 0x34, // OSC
|
||||
HID_USAGE_DIGITIZER_TAP = 0x35, // OSC
|
||||
HID_USAGE_DIGITIZER_QUALITY = 0x36, // DV
|
||||
HID_USAGE_DIGITIZER_DATA_VALID = 0x37, // MC
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_INDEX = 0x38, // DV
|
||||
HID_USAGE_DIGITIZER_TABLET_FUNCTION_KEYS = 0x39, // CL
|
||||
HID_USAGE_DIGITIZER_PROGRAM_CHANGE_KEYS = 0x3A, // CL
|
||||
HID_USAGE_DIGITIZER_BATTERY_STRENGTH = 0x3B, // DV
|
||||
HID_USAGE_DIGITIZER_INVERT = 0x3C, // MC
|
||||
HID_USAGE_DIGITIZER_X_TILT = 0x3D, // DV
|
||||
HID_USAGE_DIGITIZER_Y_TILT = 0x3E, // DV
|
||||
HID_USAGE_DIGITIZER_AZIMUTH = 0x3F, // DV
|
||||
HID_USAGE_DIGITIZER_ALTITUDE = 0x40, // DV
|
||||
HID_USAGE_DIGITIZER_TWIST = 0x41, // DV
|
||||
HID_USAGE_DIGITIZER_TIP_SWITCH = 0x42, // MC
|
||||
HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH = 0x43, // MC
|
||||
HID_USAGE_DIGITIZER_BARREL_SWITCH = 0x44, // MC
|
||||
HID_USAGE_DIGITIZER_ERASER = 0x45, // MC
|
||||
HID_USAGE_DIGITIZER_TABLET_PICK = 0x46, // MC
|
||||
HID_USAGE_DIGITIZER_TOUCH_VALID = 0x47, // MC
|
||||
HID_USAGE_DIGITIZER_WIDTH = 0x48, // DV
|
||||
HID_USAGE_DIGITIZER_HEIGHT = 0x49, // DV
|
||||
// Reserved (0x4A - 0x50)
|
||||
HID_USAGE_DIGITIZER_CONTACT_IDENTIFIER = 0x51, // DV
|
||||
HID_USAGE_DIGITIZER_DEVICE_MODE = 0x52, // DV
|
||||
HID_USAGE_DIGITIZER_DEVICE_IDENTIFIER = 0x53, // DV/SV
|
||||
HID_USAGE_DIGITIZER_CONTACT_COUNT = 0x54, // DV
|
||||
HID_USAGE_DIGITIZER_CONTACT_COUNT_MAXIMUM = 0x55, // SV
|
||||
HID_USAGE_DIGITIZER_SCAN_TIME = 0x56, // DV
|
||||
HID_USAGE_DIGITIZER_SURFACE_SWITCH = 0x57, // DF
|
||||
HID_USAGE_DIGITIZER_BUTTON_SWITCH = 0x58, // DF
|
||||
HID_USAGE_DIGITIZER_PAD_TYPE = 0x59, // SF
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_NUMBER = 0x5B, // SV
|
||||
HID_USAGE_DIGITIZER_PREFERRED_COLOR = 0x5C, // DV
|
||||
HID_USAGE_DIGITIZER_PREFERRED_COLOR_LOCKED = 0x5D, // MC
|
||||
HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH = 0x5E, // DV
|
||||
HID_USAGE_DIGITIZER_PREFERRED_LINE_WIDTH_LOCKED = 0x5F, // MC
|
||||
HID_USAGE_DIGITIZER_LATENCY_MODE = 0x60, // DF
|
||||
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_QUALITY = 0x61, // DV
|
||||
HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA_LENGTH = 0x62, // DV
|
||||
HID_USAGE_DIGITIZER_CHARACTER_GESTURE_DATA = 0x63, // DV
|
||||
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENCODING = 0x64, // NAry
|
||||
HID_USAGE_DIGITIZER_UTF8_CHARACTER_GESTURE_ENCODING = 0x65, // Sel
|
||||
HID_USAGE_DIGITIZER_UTF16_LE_CHARACTER_GESTURE_ENCODING = 0x66, // Sel
|
||||
HID_USAGE_DIGITIZER_UTF16_BE_CHARACTER_GESTURE_ENCODING = 0x67, // Sel
|
||||
HID_USAGE_DIGITIZER_UTF32_LE_CHARACTER_GESTURE_ENCODING = 0x68, // Sel
|
||||
HID_USAGE_DIGITIZER_UTF32_BE_CHARACTER_GESTURE_ENCODING = 0x69, // Sel
|
||||
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_VENDOR_ID = 0x6A, // SV
|
||||
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_VERSION = 0x6B, // SV
|
||||
HID_USAGE_DIGITIZER_CAPACITIVE_HEAT_MAP_FRAME_DATA = 0x6C, // DV
|
||||
HID_USAGE_DIGITIZER_GESTURE_CHARACTER_ENABLE = 0x6D, // DF
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_NUMBER_PART2 = 0x6E, // SV
|
||||
HID_USAGE_DIGITIZER_NO_PREFERRED_COLOR = 0x6F, // DF
|
||||
HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE = 0x70, // NAry
|
||||
HID_USAGE_DIGITIZER_PREFERRED_LINE_STYLE_LOCKED = 0x71, // MC
|
||||
HID_USAGE_DIGITIZER_INK = 0x72, // Sel
|
||||
HID_USAGE_DIGITIZER_PENCIL = 0x73, // Sel
|
||||
HID_USAGE_DIGITIZER_HIGHLIGHTER = 0x74, // Sel
|
||||
HID_USAGE_DIGITIZER_CHISEL_MARKER = 0x75, // Sel
|
||||
HID_USAGE_DIGITIZER_BRUSH = 0x76, // Sel
|
||||
HID_USAGE_DIGITIZER_NO_PREFERENCE = 0x77, // Sel
|
||||
// Reserved (0x78 - 0x7F)
|
||||
HID_USAGE_DIGITIZER_DIGITIZER_DIAGNOSTIC = 0x80, // CL
|
||||
HID_USAGE_DIGITIZER_DIGITIZER_ERROR = 0x81, // NAry
|
||||
HID_USAGE_DIGITIZER_ERR_NORMAL_STATUS = 0x82, // Sel
|
||||
HID_USAGE_DIGITIZER_ERR_TRANSDUCERS_EXCEEDED = 0x83, // Sel
|
||||
HID_USAGE_DIGITIZER_ERR_FULL_TRANS_FEATURES_UNAVAILABLE = 0x84, // Sel
|
||||
HID_USAGE_DIGITIZER_ERR_CHARGE_LOW = 0x85, // Sel
|
||||
// Reserved (0x86 - 0x8F)
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_SOFTWARE_INFO = 0x90, // CL
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR_ID = 0x91, // SV
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT_ID = 0x92, // SV
|
||||
HID_USAGE_DIGITIZER_DEVICE_SUPPORTED_PROTOCOLS = 0x93, // NAry/CL
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_SUPPORTED_PROTOCOLS = 0x94, // NAry/CL
|
||||
HID_USAGE_DIGITIZER_NO_PROTOCOL = 0x95, // Sel
|
||||
HID_USAGE_DIGITIZER_WACOM_AES_PROTOCOL = 0x96, // Sel
|
||||
HID_USAGE_DIGITIZER_USI_PROTOCOL = 0x97, // Sel
|
||||
HID_USAGE_DIGITIZER_MICROSOFT_PEN_PROTOCOL = 0x98, // Sel
|
||||
// Reserved (0x99 - 0x9F)
|
||||
HID_USAGE_DIGITIZER_SUPPORTED_REPORT_RATES = 0xA0, // SV/CL
|
||||
HID_USAGE_DIGITIZER_REPORT_RATE = 0xA1, // DV
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED = 0xA2, // SF
|
||||
HID_USAGE_DIGITIZER_SWITCH_DISABLED = 0xA3, // Sel
|
||||
HID_USAGE_DIGITIZER_SWITCH_UNIMPLEMENTED = 0xA4, // Sel
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_SWITCHES = 0xA5, // CL
|
||||
HID_USAGE_DIGITIZER_TRANSDUCER_INDEX_SELECTOR = 0xA6, // DV
|
||||
// Reserved (0xA7 - 0xAF)
|
||||
HID_USAGE_DIGITIZER_BUTTON_PRESS_THRESHOLD = 0xB0, // DV
|
||||
|
||||
/// HID Usage Table: FIDO Alliance Page (0xF1D0)
|
||||
enum {
|
||||
HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection
|
||||
HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report
|
||||
HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
|
||||
// Reserved (0xB1 - 0xFFFF)
|
||||
};
|
||||
|
||||
/// HID Usage Table: Physical Input Device Page (0x0F)
|
||||
@@ -1059,6 +1179,50 @@ enum {
|
||||
HID_USAGE_PID_RAM_POOL_AVAILABLE = 0xac,
|
||||
};
|
||||
|
||||
/// HID Usage Table - Lighting And Illumination Page (0x59)
|
||||
enum {
|
||||
HID_USAGE_LIGHTING_LAMP_ARRAY = 0x01,
|
||||
HID_USAGE_LIGHTING_LAMP_ARRAY_ATTRIBUTES_REPORT = 0x02,
|
||||
HID_USAGE_LIGHTING_LAMP_COUNT = 0x03,
|
||||
HID_USAGE_LIGHTING_BOUNDING_BOX_WIDTH_IN_MICROMETERS = 0x04,
|
||||
HID_USAGE_LIGHTING_BOUNDING_BOX_HEIGHT_IN_MICROMETERS = 0x05,
|
||||
HID_USAGE_LIGHTING_BOUNDING_BOX_DEPTH_IN_MICROMETERS = 0x06,
|
||||
HID_USAGE_LIGHTING_LAMP_ARRAY_KIND = 0x07,
|
||||
HID_USAGE_LIGHTING_MIN_UPDATE_INTERVAL_IN_MICROSECONDS = 0x08,
|
||||
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_REQUEST_REPORT = 0x20,
|
||||
HID_USAGE_LIGHTING_LAMP_ID = 0x21,
|
||||
HID_USAGE_LIGHTING_LAMP_ATTRIBUTES_RESPONSE_REPORT = 0x22,
|
||||
HID_USAGE_LIGHTING_POSITION_X_IN_MICROMETERS = 0x23,
|
||||
HID_USAGE_LIGHTING_POSITION_Y_IN_MICROMETERS = 0x24,
|
||||
HID_USAGE_LIGHTING_POSITION_Z_IN_MICROMETERS = 0x25,
|
||||
HID_USAGE_LIGHTING_LAMP_PURPOSES = 0x26,
|
||||
HID_USAGE_LIGHTING_UPDATE_LATENCY_IN_MICROSECONDS = 0x27,
|
||||
HID_USAGE_LIGHTING_RED_LEVEL_COUNT = 0x28,
|
||||
HID_USAGE_LIGHTING_GREEN_LEVEL_COUNT = 0x29,
|
||||
HID_USAGE_LIGHTING_BLUE_LEVEL_COUNT = 0x2A,
|
||||
HID_USAGE_LIGHTING_INTENSITY_LEVEL_COUNT = 0x2B,
|
||||
HID_USAGE_LIGHTING_IS_PROGRAMMABLE = 0x2C,
|
||||
HID_USAGE_LIGHTING_INPUT_BINDING = 0x2D,
|
||||
HID_USAGE_LIGHTING_LAMP_MULTI_UPDATE_REPORT = 0x50,
|
||||
HID_USAGE_LIGHTING_RED_UPDATE_CHANNEL = 0x51,
|
||||
HID_USAGE_LIGHTING_GREEN_UPDATE_CHANNEL = 0x52,
|
||||
HID_USAGE_LIGHTING_BLUE_UPDATE_CHANNEL = 0x53,
|
||||
HID_USAGE_LIGHTING_INTENSITY_UPDATE_CHANNEL = 0x54,
|
||||
HID_USAGE_LIGHTING_LAMP_UPDATE_FLAGS = 0x55,
|
||||
HID_USAGE_LIGHTING_LAMP_RANGE_UPDATE_REPORT = 0x60,
|
||||
HID_USAGE_LIGHTING_LAMP_ID_START = 0x61,
|
||||
HID_USAGE_LIGHTING_LAMP_ID_END = 0x62,
|
||||
HID_USAGE_LIGHTING_LAMP_ARRAY_CONTROL_REPORT = 0x70,
|
||||
HID_USAGE_LIGHTING_AUTONOMOUS_MODE = 0x71,
|
||||
};
|
||||
|
||||
/// HID Usage Table: FIDO Alliance Page (0xF1D0)
|
||||
enum {
|
||||
HID_USAGE_FIDO_U2FHID = 0x01, // U2FHID usage for top-level collection
|
||||
HID_USAGE_FIDO_DATA_IN = 0x20, // Raw IN data report
|
||||
HID_USAGE_FIDO_DATA_OUT = 0x21 // Raw OUT data report
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------
|
||||
* ASCII to KEYCODE Conversion
|
||||
* Expand to array of [128][2] (shift, keycode)
|
||||
|
@@ -194,6 +194,16 @@ bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id,
|
||||
return tud_hid_n_report(instance, report_id, &report, sizeof(report));
|
||||
}
|
||||
|
||||
bool tud_hid_n_stylus_report(uint8_t instance, uint8_t report_id, uint8_t attrs, uint16_t x, uint16_t y) {
|
||||
hid_stylus_report_t report = {
|
||||
.attr = attrs,
|
||||
.x = x,
|
||||
.y = y,
|
||||
};
|
||||
|
||||
return tud_hid_n_report(instance, report_id, &report, sizeof(report));
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// USBD-CLASS API
|
||||
//--------------------------------------------------------------------+
|
||||
|
@@ -79,6 +79,9 @@ bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t but
|
||||
// use template layout report TUD_HID_REPORT_DESC_GAMEPAD
|
||||
bool 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);
|
||||
|
||||
// STYLUS PEN: convenient helper to send absolute stylus pen report if application
|
||||
bool tud_hid_n_stylus_report(uint8_t instance, uint8_t report_id, uint8_t attrs, uint16_t x, uint16_t y);
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Application API (Single Port)
|
||||
//--------------------------------------------------------------------+
|
||||
@@ -114,6 +117,10 @@ TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_gamepad_report(uint8_t report_i
|
||||
return tud_hid_n_gamepad_report(0, report_id, x, y, z, rz, rx, ry, hat, buttons);
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline bool tud_hid_stylus_report(uint8_t report_id, uint8_t attrs, uint16_t x, uint16_t y) {
|
||||
return tud_hid_n_stylus_report(0, report_id, attrs, x, y);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Application Callbacks
|
||||
//--------------------------------------------------------------------+
|
||||
@@ -257,6 +264,41 @@ void tud_hid_report_failed_cb(uint8_t instance, hid_report_type_t report_type, u
|
||||
HID_COLLECTION_END , \
|
||||
HID_COLLECTION_END \
|
||||
|
||||
// Stylus Pen Report Descriptor Template
|
||||
#define TUD_HID_REPORT_DESC_STYLUS_PEN(...) \
|
||||
HID_USAGE_PAGE ( HID_USAGE_PAGE_DIGITIZER ) , \
|
||||
HID_USAGE ( HID_USAGE_DIGITIZER_TOUCH_SCREEN ) , \
|
||||
HID_COLLECTION ( HID_COLLECTION_APPLICATION ) , \
|
||||
/* Report ID if any */\
|
||||
__VA_ARGS__ \
|
||||
HID_USAGE ( HID_USAGE_DIGITIZER_STYLUS ) , \
|
||||
HID_COLLECTION ( HID_COLLECTION_PHYSICAL ) , \
|
||||
HID_USAGE_PAGE ( HID_USAGE_DIGITIZER_TIP_SWITCH ) , \
|
||||
HID_USAGE_PAGE ( HID_USAGE_DIGITIZER_IN_RANGE ) , \
|
||||
HID_LOGICAL_MIN ( 0 ), \
|
||||
HID_LOGICAL_MAX ( 1 ), \
|
||||
HID_REPORT_SIZE ( 1 ), \
|
||||
HID_REPORT_COUNT( 2 ), \
|
||||
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), \
|
||||
HID_REPORT_SIZE ( 1 ), \
|
||||
HID_REPORT_COUNT( 6 ), \
|
||||
HID_INPUT ( HID_CONSTANT | HID_ARRAY | HID_ABSOLUTE), \
|
||||
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), \
|
||||
HID_PHYSICAL_MAX_N( 0x7fff, 2 ), \
|
||||
HID_LOGICAL_MAX_N ( 0x7fff, 2 ), \
|
||||
HID_REPORT_SIZE ( 16 ), \
|
||||
HID_REPORT_COUNT( 1 ), \
|
||||
HID_UNIT_EXPONENT( 0x0f ), \
|
||||
HID_UNIT ( HID_VARIABLE | HID_NONLINEAR ), \
|
||||
HID_PHYSICAL_MIN( 0 ), \
|
||||
HID_PHYSICAL_MAX( 0 ), \
|
||||
HID_USAGE ( HID_USAGE_DESKTOP_X ), \
|
||||
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), \
|
||||
HID_USAGE ( HID_USAGE_DESKTOP_Y ), \
|
||||
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), \
|
||||
HID_COLLECTION_END , \
|
||||
HID_COLLECTION_END \
|
||||
|
||||
// Absolute Mouse Report Descriptor Template
|
||||
#define TUD_HID_REPORT_DESC_ABSMOUSE(...) \
|
||||
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
||||
|
Reference in New Issue
Block a user