Merge pull request #1363 from tobozo/master
HID Mouse with absolute positioning
This commit is contained in:
@@ -300,6 +300,19 @@ typedef struct TU_ATTR_PACKED
|
|||||||
int8_t pan; // using AC Pan
|
int8_t pan; // using AC Pan
|
||||||
} hid_mouse_report_t;
|
} hid_mouse_report_t;
|
||||||
|
|
||||||
|
|
||||||
|
// Absolute Mouse: same as the Standard (relative) Mouse Report but
|
||||||
|
// with int16_t instead of int8_t for X and Y coordinates.
|
||||||
|
typedef struct TU_ATTR_PACKED
|
||||||
|
{
|
||||||
|
uint8_t buttons; /**< buttons mask for currently pressed buttons in the mouse. */
|
||||||
|
int16_t x; /**< Current x position of the mouse. */
|
||||||
|
int16_t y; /**< Current y position of the mouse. */
|
||||||
|
int8_t wheel; /**< Current delta wheel movement on the mouse. */
|
||||||
|
int8_t pan; // using AC Pan
|
||||||
|
} hid_abs_mouse_report_t;
|
||||||
|
|
||||||
|
|
||||||
/// Standard Mouse Buttons Bitmap
|
/// Standard Mouse Buttons Bitmap
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -146,6 +146,19 @@ bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id,
|
|||||||
return tud_hid_n_report(instance, report_id, &report, sizeof(report));
|
return tud_hid_n_report(instance, report_id, &report, sizeof(report));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal)
|
||||||
|
{
|
||||||
|
hid_abs_mouse_report_t report =
|
||||||
|
{
|
||||||
|
.buttons = buttons,
|
||||||
|
.x = x,
|
||||||
|
.y = y,
|
||||||
|
.wheel = vertical,
|
||||||
|
.pan = horizontal
|
||||||
|
};
|
||||||
|
return tud_hid_n_report(instance, report_id, &report, sizeof(report));
|
||||||
|
}
|
||||||
|
|
||||||
bool tud_hid_n_gamepad_report(uint8_t instance, uint8_t report_id,
|
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) {
|
int8_t x, int8_t y, int8_t z, int8_t rz, int8_t rx, int8_t ry, uint8_t hat, uint32_t buttons) {
|
||||||
hid_gamepad_report_t report =
|
hid_gamepad_report_t report =
|
||||||
|
|||||||
@@ -72,6 +72,16 @@ bool tud_hid_n_keyboard_report(uint8_t instance, uint8_t report_id, uint8_t modi
|
|||||||
// use template layout report as defined by hid_mouse_report_t
|
// use template layout report as defined by hid_mouse_report_t
|
||||||
bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal);
|
bool tud_hid_n_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int8_t x, int8_t y, int8_t vertical, int8_t horizontal);
|
||||||
|
|
||||||
|
// ABSOLUTE MOUSE: convenient helper to send absolute mouse report if application
|
||||||
|
// use template layout report as defined by hid_abs_mouse_report_t
|
||||||
|
bool tud_hid_n_abs_mouse_report(uint8_t instance, uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal);
|
||||||
|
|
||||||
|
|
||||||
|
static inline bool tud_hid_abs_mouse_report(uint8_t report_id, uint8_t buttons, int16_t x, int16_t y, int8_t vertical, int8_t horizontal)
|
||||||
|
{
|
||||||
|
return tud_hid_n_abs_mouse_report(0, report_id, buttons, x, y, vertical, horizontal);
|
||||||
|
}
|
||||||
|
|
||||||
// Gamepad: convenient helper to send gamepad report if application
|
// Gamepad: convenient helper to send gamepad report if application
|
||||||
// use template layout report TUD_HID_REPORT_DESC_GAMEPAD
|
// 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);
|
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);
|
||||||
@@ -266,6 +276,55 @@ static inline bool tud_hid_gamepad_report(uint8_t report_id, int8_t x, int8_t y
|
|||||||
HID_COLLECTION_END , \
|
HID_COLLECTION_END , \
|
||||||
HID_COLLECTION_END \
|
HID_COLLECTION_END \
|
||||||
|
|
||||||
|
// Absolute Mouse Report Descriptor Template
|
||||||
|
#define TUD_HID_REPORT_DESC_ABSMOUSE(...) \
|
||||||
|
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
||||||
|
HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ) ,\
|
||||||
|
HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
|
||||||
|
/* Report ID if any */\
|
||||||
|
__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 ( 5 ) ,\
|
||||||
|
HID_LOGICAL_MIN ( 0 ) ,\
|
||||||
|
HID_LOGICAL_MAX ( 1 ) ,\
|
||||||
|
/* Left, Right, Middle, Backward, Forward buttons */ \
|
||||||
|
HID_REPORT_COUNT( 5 ) ,\
|
||||||
|
HID_REPORT_SIZE ( 1 ) ,\
|
||||||
|
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
|
||||||
|
/* 3 bit padding */ \
|
||||||
|
HID_REPORT_COUNT( 1 ) ,\
|
||||||
|
HID_REPORT_SIZE ( 3 ) ,\
|
||||||
|
HID_INPUT ( HID_CONSTANT ) ,\
|
||||||
|
HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ) ,\
|
||||||
|
/* X, Y absolute position [0, 32767] */ \
|
||||||
|
HID_USAGE ( HID_USAGE_DESKTOP_X ) ,\
|
||||||
|
HID_USAGE ( HID_USAGE_DESKTOP_Y ) ,\
|
||||||
|
HID_LOGICAL_MIN ( 0x00 ) ,\
|
||||||
|
HID_LOGICAL_MAX_N( 0x7FFF, 2 ) ,\
|
||||||
|
HID_REPORT_SIZE ( 16 ) ,\
|
||||||
|
HID_REPORT_COUNT ( 2 ) ,\
|
||||||
|
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ) ,\
|
||||||
|
/* Vertical wheel 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_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ), \
|
||||||
|
/* Horizontal wheel scroll [-127, 127] */ \
|
||||||
|
HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ), \
|
||||||
|
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 Descriptor Template
|
// Consumer Control Report Descriptor Template
|
||||||
#define TUD_HID_REPORT_DESC_CONSUMER(...) \
|
#define TUD_HID_REPORT_DESC_CONSUMER(...) \
|
||||||
HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\
|
HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\
|
||||||
|
|||||||
Reference in New Issue
Block a user