2015-04-20 4 views
0

Я работал с отчетами HID, и я смог скомпилировать и запустить отчет для клавиатуры, 3-кнопочной мыши и 3-кнопочной мыши с колесом (только по вертикали). Прямо сейчас я пытаюсь использовать 5 кнопок с вертикальным и горизонтальным колесом.Включить колесо V и H в HID-отчет

Так следуя

// Input report - 5 bytes 
// 
//  Byte | D7  D6  D5  D4  D3  D2  D1  D0 
// ------+--------------------------------------------------------------------- 
//  0 | 0  0  0 Forward Back Middle Right Left (Buttons) 
//  1 |        X 
//  2 |        Y 
//  3 |      Vertical Wheel 
//  4 |     Horizontal (Tilt) Wheel 

Теперь у меня есть этот отчет дескриптор

0x05, 0x01,  // USAGE_PAGE (Generic Desktop) 
    0x09, 0x02,  // USAGE (Mouse) 
    0xa1, 0x01,  // COLLECTION (Application) 
    0x09, 0x02,  // USAGE (Mouse) 
    0xa1, 0x02,  // COLLECTION (Logical) 
    0x09, 0x01,  //  USAGE (Pointer) 
    0xa1, 0x00,  //  COLLECTION (Physical) 
    // ------------------------------ Buttons 
    0x05, 0x09,  //  USAGE_PAGE (Button) 
    0x19, 0x01,  //  USAGE_MINIMUM (Button 1) 
    0x29, 0x05,  //  USAGE_MAXIMUM (Button 5) 
    0x15, 0x00,  //  LOGICAL_MINIMUM (0) 
    0x25, 0x01,  //  LOGICAL_MAXIMUM (1) 
    0x75, 0x01,  //  REPORT_SIZE (1) 
    0x95, 0x05,  //  REPORT_COUNT (5 Buttons) 
    0x81, 0x02,  //  INPUT (Data,Var,Abs) 
    // ------------------------------ Padding 
    0x75, 0x03,  //  REPORT_SIZE (8-5buttons 3) 
    0x95, 0x01,  //  REPORT_COUNT (1) 
    0x81, 0x03,  //  INPUT (Cnst,Var,Abs) 
    // ------------------------------ X,Y position 
    0x05, 0x01,  //  USAGE_PAGE (Generic Desktop) 
    0x09, 0x30,  //  USAGE (X) 
    0x09, 0x31,  //  USAGE (Y) 
    0x15, 0x81,  //  LOGICAL_MINIMUM (-127) 
    0x25, 0x7f,  //  LOGICAL_MAXIMUM (127) 
    0x75, 0x08,  //  REPORT_SIZE (8) 
    0x95, 0x02,  //  REPORT_COUNT (2) 
    0x81, 0x06,  //  INPUT (Data,Var,Rel) 
    0xa1, 0x02,  //  COLLECTION (Logical) 
    // ------------------------------ Vertical wheel res multiplier 
    0x09, 0x48,  //   USAGE (Resolution Multiplier) 
    0x15, 0x00,  //   LOGICAL_MINIMUM (0) 
    0x25, 0x01,  //   LOGICAL_MAXIMUM (1) 
    0x35, 0x01,  //   PHYSICAL_MINIMUM (1) 
    0x45, 0x04,  //   PHYSICAL_MAXIMUM (4) 
    0x75, 0x02,  //   REPORT_SIZE (2) 
    0x95, 0x01,  //   REPORT_COUNT (1) 
    0xa4,    //   PUSH 
    0xb1, 0x02,  //   FEATURE (Data,Var,Abs) 
    // ------------------------------ Vertical wheel 
    0x09, 0x38,  //   USAGE (Wheel) 
    0x15, 0x81,  //   LOGICAL_MINIMUM (-127) 
    0x25, 0x7f,  //   LOGICAL_MAXIMUM (127) 
    0x35, 0x00,  //   PHYSICAL_MINIMUM (0)  - reset physical 
    0x45, 0x00,  //   PHYSICAL_MAXIMUM (0) 
    0x75, 0x08,  //   REPORT_SIZE (8) 
    0x81, 0x06,  //   INPUT (Data,Var,Rel) 
    0xc0,    //  END_COLLECTION 
    0xa1, 0x02,  //  COLLECTION (Logical) 
    // ------------------------------ Horizontal wheel res multiplier 
    0x09, 0x48,  //   USAGE (Resolution Multiplier) 
    0xb4,    //   POP 
    0xb1, 0x02,  //   FEATURE (Data,Var,Abs) 
    // ------------------------------ Padding for Feature report 
    0x35, 0x00,  //   PHYSICAL_MINIMUM (0)  - reset physical 
    0x45, 0x00,  //   PHYSICAL_MAXIMUM (0) 
    0x75, 0x04,  //   REPORT_SIZE (4) 
    0xb1, 0x03,  //   FEATURE (Cnst,Var,Abs) 
    // ------------------------------ Horizontal wheel 
    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) 
    0x81, 0x06,  //   INPUT (Data,Var,Rel) 
    0xc0,    //  END_COLLECTION 
    0xc0,    //  END_COLLECTION 
    0xc0,    // END_COLLECTION 
    0xc0    // END_COLLECTION 

который включает в себя 5 кнопок, вертикальные и горизонтальные. Компилируется без любого вопроса, но я пытаюсь отправить следующую информацию, чтобы проверить, если его правильно работает

mouseReport.buttons = 0; 
    mouseReport.x = 0; 
    mouseReport.y = 0; 
    mouseReport.v = 1; 
    mouseReport.h = 0; 

Но что 1 на вертикальное колесо байт делает мышь, нажмите и прокручивать в случайном порядке.

Может ли кто-нибудь сказать мне, что мне не хватает? Я использую тот же самый код, с другим отчетом и 4 байтами, и прокрутка работает отлично.

ответ

0

Ну, я нашел проблему. Я использовал структуру для отправки массива байтов, и мне кажется, что моему микроконтроллеру это не понравилось, потому что оно получало плохую резолюцию, следовательно, случайное движение и клики. Исправлена ​​проблема с изменением его на массив unint8_t.