Можно ли установить одну относительную ось и одну абсолютную ось в дескрипторе HID мыши? - PullRequest
2 голосов
/ 07 апреля 2019

Я строю собственную мышь Bluetooth, используя датчик приближения для координат Y и гироскоп для координат X, и мне было интересно, возможно ли установить ось X как относительную, а ось Y как абсолютную.

Я могу заставить мою мышь работать, используя обе координаты как относительные или обе координаты как абсолютные;но использование их в качестве различных настроек помогло бы мне получить гораздо лучшую точность наведения при фильтрации, что я не могу реализовать, если и X, и Y имеют одинаковые настройки.

Однако, когда я пытаюсь иметь X как относительное и Y как абсолютноеизменяя дескриптор устройства HID, настройки для координат Y игнорируются.

Это мой дескриптор HID

const uint8_t kMouseHidDescriptor[] = {
  0x05, 0x01,                         // USAGE_PAGE (Generic Desktop)     0
  0x09, 0x02,                         // USAGE (Mouse)                    2
  0xa1, 0x01,                         // COLLECTION (Application)         4
  0x85, 0x01,                         //   REPORT_ID (Mouse)              6
  0x09, 0x01,                         //   USAGE (Pointer)                8
  0xa1, 0x00,                         //   COLLECTION (Physical)          10

  0x05, 0x09,                         //     USAGE_PAGE (Button)          12
  0x19, 0x01,                         //     USAGE_MINIMUM (Button 1)     14
  0x29, 0x03,                         //     USAGE_MAXIMUM (Button 3)     16
  0x15, 0x00,                         //     LOGICAL_MINIMUM (0)          18
  0x25, 0x01,                         //     LOGICAL_MAXIMUM (1)          20
  0x75, 0x01,                         //     REPORT_SIZE (1)              22
  0x95, 0x03,                         //     REPORT_COUNT (3)             24
  0x81, 0x02,                         //     INPUT (Data,Var,Abs)         26
  0x95, 0x05,                         //     REPORT_COUNT (5)             28
  0x81, 0x03,                         //     INPUT (Cnst,Var,Abs)         30

  0x05, 0x01,                         //     USAGE_PAGE (Generic Desktop) 32
  0x09, 0x30,                         //     USAGE (X)                    34
  0x15, 0x81,                         //     LOGICAL_MINIMUM (-127)       36
  0x25, 0x7f,                         //     LOGICAL_MAXIMUM (127)        38
  0x75, 0x08,                         //     REPORT_SIZE (8)              40
  0x95, 0x01,                         //     REPORT_COUNT (1)             42
  0x81, 0x06,                         //     INPUT (Data,Var,Rel)         44

  0x05, 0x01,                         //     USAGE_PAGE (Generic Desktop) 46
  0x09, 0x31,                         //     USAGE (Y)                    48
  0x16, 0x01, 0xf8,                   //     LOGICAL_MINIMUM (-2047)      50
  0x26, 0xff, 0x07,                   //     LOGICAL_MAXIMUM (2047)       53
  0x75, 0x10,                         //     REPORT_SIZE (16)             56
  0x95, 0x01,                         //     REPORT_COUNT (1)             58
  0x81, 0x02,                         //     INPUT (Data,Var,Abs)         60

  0xc0,                               //   END_COLLECTION                 62
  0xc0                                // END_COLLECTION                 63/64
};

Я ожидал, что X-данные будут интерпретироваться как относительные значения, а Y-данные - как абсолютные, но я получаю, что X и Y интерпретируются как относительныеценности.У кого-нибудь есть идеи, как это лучше реализовать?

...