Merge pull request #174 from jalmeroth/main
feat: add horizontal scrolling
This commit is contained in:
commit
28c3f1cdd1
|
@ -166,6 +166,14 @@ void extract_data(hid_interface_t *iface, report_val_t *val) {
|
|||
.dst = &iface->mouse.wheel,
|
||||
.id = &iface->mouse.report_id},
|
||||
|
||||
{.usage_page = HID_USAGE_PAGE_CONSUMER,
|
||||
.global_usage = HID_USAGE_DESKTOP_MOUSE,
|
||||
.usage = HID_USAGE_CONSUMER_AC_PAN,
|
||||
.handler = _store,
|
||||
.receiver = process_mouse_report,
|
||||
.dst = &iface->mouse.pan,
|
||||
.id = &iface->mouse.report_id},
|
||||
|
||||
{.usage_page = HID_USAGE_PAGE_KEYBOARD,
|
||||
.global_usage = HID_USAGE_DESKTOP_KEYBOARD,
|
||||
.handler = handle_keyboard_descriptor_values,
|
||||
|
|
|
@ -98,6 +98,7 @@ typedef struct {
|
|||
report_val_t move_x;
|
||||
report_val_t move_y;
|
||||
report_val_t wheel;
|
||||
report_val_t pan;
|
||||
|
||||
uint8_t report_id;
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ typedef struct {
|
|||
#define KEYARRAY_BIT_OFFSET 16
|
||||
#define KEYS_IN_USB_REPORT 6
|
||||
#define KBD_REPORT_LENGTH 8
|
||||
#define MOUSE_REPORT_LENGTH 7
|
||||
#define MOUSE_REPORT_LENGTH 8
|
||||
#define CONSUMER_CONTROL_LENGTH 4
|
||||
#define SYSTEM_CONTROL_LENGTH 1
|
||||
#define MODIFIER_BIT_LENGTH 8
|
||||
|
@ -345,6 +345,7 @@ typedef struct TU_ATTR_PACKED {
|
|||
int16_t x;
|
||||
int16_t y;
|
||||
int8_t wheel;
|
||||
int8_t pan;
|
||||
uint8_t mode;
|
||||
} mouse_report_t;
|
||||
|
||||
|
@ -460,7 +461,7 @@ int32_t extract_bit_variable(uint32_t, uint32_t, uint8_t *, int, uint8_t *);
|
|||
int32_t extract_kbd_data(uint8_t *, int, uint8_t, hid_interface_t *, hid_keyboard_report_t *);
|
||||
|
||||
/********* Mouse **********/
|
||||
bool tud_mouse_report(uint8_t mode, uint8_t buttons, int16_t x, int16_t y, int8_t wheel);
|
||||
bool tud_mouse_report(uint8_t mode, uint8_t buttons, int16_t x, int16_t y, int8_t wheel, int8_t pan);
|
||||
|
||||
void process_mouse_report(uint8_t *, int, uint8_t, hid_interface_t *);
|
||||
void parse_report_descriptor(hid_interface_t *, uint8_t const *, int);
|
||||
|
|
|
@ -98,6 +98,15 @@ HID_COLLECTION ( HID_COLLECTION_APPLICATION ) ,\
|
|||
HID_REPORT_SIZE ( 8 ) ,\
|
||||
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
|
||||
\
|
||||
/* Horizontal wheel (AC Pan) */ \
|
||||
HID_USAGE_PAGE ( HID_USAGE_PAGE_CONSUMER ) ,\
|
||||
HID_LOGICAL_MIN ( 0x81 ) ,\
|
||||
HID_LOGICAL_MAX ( 0x7f ) ,\
|
||||
HID_REPORT_COUNT( 1 ) ,\
|
||||
HID_REPORT_SIZE ( 8 ) ,\
|
||||
HID_USAGE_N ( HID_USAGE_CONSUMER_AC_PAN, 2 ) ,\
|
||||
HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ) ,\
|
||||
\
|
||||
/* Mouse mode (0 = absolute, 1 = relative) */ \
|
||||
HID_REPORT_COUNT( 1 ), \
|
||||
HID_REPORT_SIZE ( 8 ), \
|
||||
|
|
|
@ -219,6 +219,7 @@ void extract_report_values(uint8_t *raw_report, device_t *state, mouse_values_t
|
|||
values->move_x = mouse_report->x;
|
||||
values->move_y = mouse_report->y;
|
||||
values->wheel = mouse_report->wheel;
|
||||
values->pan = mouse_report->pan;
|
||||
values->buttons = mouse_report->buttons;
|
||||
return;
|
||||
}
|
||||
|
@ -230,6 +231,7 @@ void extract_report_values(uint8_t *raw_report, device_t *state, mouse_values_t
|
|||
values->move_x = get_report_value(raw_report, &iface->mouse.move_x);
|
||||
values->move_y = get_report_value(raw_report, &iface->mouse.move_y);
|
||||
values->wheel = get_report_value(raw_report, &iface->mouse.wheel);
|
||||
values->pan = get_report_value(raw_report, &iface->mouse.pan);
|
||||
values->buttons = get_report_value(raw_report, &iface->mouse.buttons);
|
||||
}
|
||||
|
||||
|
@ -239,6 +241,7 @@ mouse_report_t create_mouse_report(device_t *state, mouse_values_t *values) {
|
|||
.x = state->pointer_x,
|
||||
.y = state->pointer_y,
|
||||
.wheel = values->wheel,
|
||||
.pan = values->pan,
|
||||
.mode = ABSOLUTE,
|
||||
};
|
||||
|
||||
|
@ -296,7 +299,8 @@ void process_mouse_queue_task(device_t *state) {
|
|||
return;
|
||||
|
||||
/* Try sending it to the host, if it's successful */
|
||||
bool succeeded = tud_mouse_report(report.mode, report.buttons, report.x, report.y, report.wheel);
|
||||
bool succeeded
|
||||
= tud_mouse_report(report.mode, report.buttons, report.x, report.y, report.wheel, report.pan);
|
||||
|
||||
/* ... then we can remove it from the queue */
|
||||
if (succeeded)
|
||||
|
|
|
@ -81,10 +81,10 @@ uint8_t const *tud_hid_descriptor_report_cb(uint8_t instance) {
|
|||
}
|
||||
}
|
||||
|
||||
bool tud_mouse_report(uint8_t mode, uint8_t buttons, int16_t x, int16_t y, int8_t wheel) {
|
||||
mouse_report_t report = {.buttons = buttons, .wheel = wheel, .x = x, .y = y, .mode = mode};
|
||||
uint8_t instance = ITF_NUM_HID;
|
||||
uint8_t report_id = REPORT_ID_MOUSE;
|
||||
bool tud_mouse_report(uint8_t mode, uint8_t buttons, int16_t x, int16_t y, int8_t wheel, int8_t pan) {
|
||||
mouse_report_t report = {.buttons = buttons, .wheel = wheel, .x = x, .y = y, .mode = mode, .pan = pan};
|
||||
|
||||
if (mode == RELATIVE) {
|
||||
instance = ITF_NUM_HID_REL_M;
|
||||
|
|
Loading…
Reference in New Issue