Может ли библиотека мыши прокручиваться по горизонтали?

Я использую библиотеку Mouse с ATmega32U4, подключенным к Linux через USB.

Я хотел бы использовать команды горизонтальной прокрутки, но функция Mouse.move(), похоже, принимает только Параметры перемещения по оси X, перемещения по оси Y и вертикальной прокрутки.

Как я могу отправить команды горизонтальной прокрутки с Arduino на компьютер?

, 👍1

Обсуждение

Вам нужно переписать ядро, чтобы обеспечить кнопки 6 и 7., @Ignacio Vazquez-Abrams

Вы можете комбинировать его с клавиатурой, чтобы использовать клавиши Ctrl и Shift для других параметров прокрутки., @Majenko


2 ответа


2

Как было предложено в комментариях, я отредактировал основные библиотеки для достижения этой цели.

Я использую PlatformIO, поэтому файлы библиотеки, которые мне нужно было отредактировать, находились здесь:

~/.platformio/packages/framework-arduinoavr/libraries/Mouse/src/

И необходимые изменения (для изменения параметра wheel для параметров горизонтальной (h) и вертикальной (v) прокрутки были следующими:

Mouse.h

Измените объявление move():

...
void move(signed char x, signed char y, signed char h = 0, signed char v = 0); 
...

Mouse.cpp

Add the following to the report descriptor after the last INPUT message:

...
0x05, 0x0c,        //       USAGE PAGE (Consumer Devices)
0x0a, 0x38, 0x02,  //       USAGE (AC Pan)
0x15, 0x81,        //       LOGICAL_MINIMUM (-127)
0x25, 0x7f,        //       LOGICAL_MAXIMUM (127)
0x75, 0x08,        //       REPORT_SIZE (8)
0x95, 0x01,        //       REPORT_COUNT (1)
0x81, 0x06,        //       INPUT (Data, Var, Rel)
...

Change the definition of move():

void Mouse_::move(signed char x, signed char y, signed char h, signed char v)
{
    uint8_t m[5];
    m[0] = _buttons;
    m[1] = x;
    m[2] = y;
    m[3] = v;
    m[4] = h;
    HID().SendReport(1, m, 5);
}

The following terminal commands were also useful in testing these changes:

# List input devices
xinput --list

# List device capabilities
xinput --list <device-id>

# Watch for data sent from the device
watch -n 0.1 xinput query-state <device-id>
,

В библиотеке NicoHood/HID https://github.com/NicoHood/HID есть много для клавиатур (медиа-клавиши и так далее), но не все для мышей. Я не знаю, есть ли там горизонтальная прокрутка., @Jot


0

Горизонтальная прокрутка достигается удерживанием Shift при прокрутке по вертикали.

Сделайте это вместо этого:

Keyboard.press(KEY_LEFT_SHIFT);
    Mouse.move(0, 0, 1);
    Keyboard.releaseAll();
,