HID дескриптор устройства дистанционного управления - PullRequest
1 голос
/ 11 июня 2019

Я занимаюсь разработкой приложения для удаленного управления на Android.

Вот мой скрытый дескриптор. Я могу отправлять ключевые события: громкость вниз / вверх, dpad по центру / вверх / вниз / влево / вправо.

private static final byte[] REPORT_MAP_REMOTE_WORKING = {
            USAGE_PAGE, 0x0c, // Usage Page (Consumer Devices)
            USAGE, 0x01, // Usage (Consumer Control)
            COLLECTION, 0x01, // Collection (Application)
            REPORT_ID, 0x01, // // Report ID
            LOGICAL_MINIMUM, 0x00, // // Logical Minimum (0)
            LOGICAL_MAXIMUM, 0x01, // // Logical Maximum (1)

            // VOLUME UP - 0 byte 0 bit - 0x01
            USAGE, (byte) 0xe9,

            // VOLUME DOWN - 0 byte 1 bit - 0x02
            USAGE, (byte) 0xea,
            REPORT_SIZE, 0x01,
            REPORT_COUNT, 0x02,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD CENTER - 0 byte 2 bit - 0x04
            USAGE, (byte) 0x41,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD UP - 0 byte 3 bit - 0x08
            USAGE, (byte) 0x42,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD DOWN - 0 byte 4 bit - 0x10
            USAGE, (byte) 0x43,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD LEFT - 0 byte 5 bit - 0x20
            USAGE, (byte) 0x44,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // DPAD RIGHT - 0 byte 6 bit - 0x40
            USAGE, (byte) 0x45,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            // VOLUME MUTE - 0 byte 7 bit - 0x80
            USAGE, (byte) 0xe2,
            REPORT_COUNT, COUNT_01,
            INPUT, 0x06, // Input (Data, Variable, Relative)

            END_COLLECTION, // End Collection
    };

Как я могу отредактировать этот дескриптор, чтобы иметь возможность отправлять события, соответствующие цветным кнопкам (красная, зеленая, желтая, синяя) на любых пультах?

1 Ответ

0 голосов
/ 12 июня 2019

Красные / зеленые / синие / желтые кнопки также используются на странице потребителя. Попробуйте это:

//--------------------------------------------------------------------------------
// Report descriptor data in hex (length 47 bytes)
//--------------------------------------------------------------------------------


// 050C0901 A1018501 15002501 09E909EA 09410942 09430944 094509E2 0969096A
// 096B096C 7501950C 81069504 8101C0    


//--------------------------------------------------------------------------------
// Decoded Application Collection
//--------------------------------------------------------------------------------

/*
05 0C        (GLOBAL) USAGE_PAGE         0x000C Consumer Device Page 
09 01        (LOCAL)  USAGE              0x000C0001 Consumer Control (Application Collection)  
A1 01        (MAIN)   COLLECTION         0x01 Application (Usage=0x000C0001: Page=Consumer Device Page, Usage=Consumer Control, Type=Application Collection)
85 01          (GLOBAL) REPORT_ID          0x01 (1)  
15 00          (GLOBAL) LOGICAL_MINIMUM    0x00 (0)  <-- Info: Consider replacing 15 00 with 14
25 01          (GLOBAL) LOGICAL_MAXIMUM    0x01 (1)  
09 E9          (LOCAL)  USAGE              0x000C00E9 Volume Increment (Re-trigger Control)  
09 EA          (LOCAL)  USAGE              0x000C00EA Volume Decrement (Re-trigger Control)  
09 41          (LOCAL)  USAGE              0x000C0041 Menu Pick (One Shot Control)  
09 42          (LOCAL)  USAGE              0x000C0042 Menu Up (One Shot Control)  
09 43          (LOCAL)  USAGE              0x000C0043 Menu Down (One Shot Control)  
09 44          (LOCAL)  USAGE              0x000C0044 Menu Left (One Shot Control)  
09 45          (LOCAL)  USAGE              0x000C0045 Menu Right (One Shot Control)  
09 E2          (LOCAL)  USAGE              0x000C00E2 Mute (On/Off Control)  
09 69          (LOCAL)  USAGE              0x000C0069 Red Menu Button (Momentary Control)  
09 6A          (LOCAL)  USAGE              0x000C006A Green Menu Button (Momentary Control)  
09 6B          (LOCAL)  USAGE              0x000C006B Blue Menu Button (Momentary Control)  
09 6C          (LOCAL)  USAGE              0x000C006C Yellow Menu Button (Momentary Control)  
75 01          (GLOBAL) REPORT_SIZE        0x01 (1) Number of bits per field  
95 0C          (GLOBAL) REPORT_COUNT       0x0C (12) Number of fields  
81 06          (MAIN)   INPUT              0x00000006 (12 fields x 1 bit) 0=Data 1=Variable 1=Relative 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap 
95 04          (GLOBAL) REPORT_COUNT       0x04 (4) Number of fields  
81 01          (MAIN)   INPUT              0x00000001 (4 fields x 1 bit) 1=Constant 0=Array 0=Absolute 
C0           (MAIN)   END_COLLECTION     Application 
*/

//--------------------------------------------------------------------------------
// Consumer Device Page inputReport 01 (Device --> Host)
//--------------------------------------------------------------------------------

typedef struct
{
  uint8_t  reportId;                                 // Report ID = 0x01 (1)
                                                     // Collection: CA:ConsumerControl
  uint8_t  CD_ConsumerControlVolumeIncrement : 1;    // Usage 0x000C00E9: Volume Increment, Value = 0 to 1
  uint8_t  CD_ConsumerControlVolumeDecrement : 1;    // Usage 0x000C00EA: Volume Decrement, Value = 0 to 1
  uint8_t  CD_ConsumerControlMenuPick : 1;           // Usage 0x000C0041: Menu Pick, Value = 0 to 1
  uint8_t  CD_ConsumerControlMenuUp : 1;             // Usage 0x000C0042: Menu Up, Value = 0 to 1
  uint8_t  CD_ConsumerControlMenuDown : 1;           // Usage 0x000C0043: Menu Down, Value = 0 to 1
  uint8_t  CD_ConsumerControlMenuLeft : 1;           // Usage 0x000C0044: Menu Left, Value = 0 to 1
  uint8_t  CD_ConsumerControlMenuRight : 1;          // Usage 0x000C0045: Menu Right, Value = 0 to 1
  uint8_t  CD_ConsumerControlMute : 1;               // Usage 0x000C00E2: Mute, Value = 0 to 1
  uint8_t  CD_ConsumerControlRedMenuButton : 1;      // Usage 0x000C0069: Red Menu Button, Value = 0 to 1
  uint8_t  CD_ConsumerControlGreenMenuButton : 1;    // Usage 0x000C006A: Green Menu Button, Value = 0 to 1
  uint8_t  CD_ConsumerControlBlueMenuButton : 1;     // Usage 0x000C006B: Blue Menu Button, Value = 0 to 1
  uint8_t  CD_ConsumerControlYellowMenuButton : 1;   // Usage 0x000C006C: Yellow Menu Button, Value = 0 to 1
  uint8_t  : 1;                                      // Pad
  uint8_t  : 1;                                      // Pad
  uint8_t  : 1;                                      // Pad
  uint8_t  : 1;                                      // Pad
} inputReport01_t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...