Skip to content

File syn_usb_hid_mouse.c

File List > drivers > syn_usb_hid_mouse.c

Go to the documentation of this file

#include "syntropic/drivers/syn_usb_hid_mouse.h"

#include <string.h>

const uint8_t SYN_USB_HID_MOUSE_REPORT_DESC[54] = {
    0x05, 0x01, /* Usage Page (Generic Desktop) */
    0x09, 0x02, /* Usage (Mouse) */
    0xA1, 0x01, /* Collection (Application) */
    0x09, 0x01, /*   Usage (Pointer) */
    0xA1, 0x00, /*   Collection (Physical) */
    0x05, 0x09, /*     Usage Page (Buttons) */
    0x19, 0x01, /*     Usage Minimum (1) */
    0x29, 0x03, /*     Usage Maximum (3) */
    0x15, 0x00, /*     Logical Minimum (0) */
    0x25, 0x01, /*     Logical Maximum (1) */
    0x95, 0x03, /*     Report Count (3 buttons) */
    0x75, 0x01, /*     Report Size (1 bit) */
    0x81, 0x02, /*     Input (Data, Variable, Absolute) */
    0x95, 0x01, /*     Report Count (1 padding byte) */
    0x75, 0x05, /*     Report Size (5 bits) */
    0x81, 0x01, /*     Input (Constant) */
    0x05, 0x01, /*     Usage Page (Generic Desktop) */
    0x09, 0x30, /*     Usage (X) */
    0x09, 0x31, /*     Usage (Y) */
    0x09, 0x38, /*     Usage (Wheel) */
    0x15, 0x81, /*     Logical Minimum (-127) */
    0x25, 0x7F, /*     Logical Maximum (+127) */
    0x75, 0x08, /*     Report Size (8 bits) */
    0x95, 0x03, /*     Report Count (3 fields: X, Y, Wheel) */
    0x81, 0x06, /*     Input (Data, Variable, Relative) */
    0xC0,       /*   End Collection */
    0xC0        /* End Collection */
};

SYN_Status syn_usb_hid_mouse_send(SYN_USB_HID *hid, uint8_t buttons, int8_t x, int8_t y,
                                  int8_t wheel)
{
    if (!hid) {
        return SYN_INVALID_PARAM;
    }

    SYN_USB_HID_MouseReport report;
    report.buttons = buttons;
    report.x = x;
    report.y = y;
    report.wheel = wheel;

    return syn_usb_hid_send_report(hid, &report, sizeof(report));
}

SYN_Status syn_usb_hid_mouse_move(SYN_USB_HID *hid, int8_t x, int8_t y)
{
    return syn_usb_hid_mouse_send(hid, 0x00, x, y, 0);
}

SYN_Status syn_usb_hid_mouse_click(SYN_USB_HID *hid, uint8_t buttons)
{
    return syn_usb_hid_mouse_send(hid, buttons, 0, 0, 0);
}