Как настроить устройство ESP32-IDF HID в качестве мыши BLE или джойстика BLE?

#esp32

Вопрос:

ESP-IDF предоставил пример hid_device в качестве контроллера потребителя (увеличение/уменьшение громкости, воспроизведение…..). Я попытался изменить описание USB на мышь или джойстик. К сожалению, ESP32 может подключаться к ПК BT, но не выполняет функции мыши/джойстика. Предоставьте ссылку на мой исходный код. https://drive.google.com/file/d/1SJmk0Ul37iJ1fC5FgiZ1vXz8VgC_hEoJ/view?usp=sharing

Что-то не так с моим описанием USB?

 const unsigned char hidapiReportMap[] = { //8 bytes input, 8 bytes feature
    0x06, 0x00, 0xFF,  // Usage Page (Vendor Defined 0xFF00)
    0x0A, 0x00, 0x01,  // Usage (0x0100)
    0xA1, 0x01,        // Collection (Application)
    0x85, 0x02,        //   Report ID (2)
    0x15, 0x00,        //   Logical Minimum (0)
    0x26, 0xFF, 0x00,  //   Logical Maximum (255)
    0x75, 0x08,        //   Report Size (8)
    0x95, 0x08,        //   Report Count (8)
    0x09, 0x01,        //   Usage (0x01)
    0x82, 0x02, 0x01,  //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Buffered Bytes)
    0x95, 0x08,        //   Report Count (8)
    0x09, 0x02,        //   Usage (0x02)
    0xB2, 0x02, 0x01,  //   Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile,Buffered Bytes)
    0x95, 0x08,        //   Report Count (8)
    0x09, 0x03,        //   Usage (0x03)
    0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
    0xC0,              // End Collection
    // 38 bytes
};
const unsigned char mediaReportMap[] = {
    0x05, 0x01,     // Usage Page(Generic Desktop)
    0x09, 0x02,     // Usage(Mouse)   <--------------------- mouse
    0xA1, 0x01,     // Collection(Physical)
    0x09, 0x01,     // Usage(Pointer)
    0x85, 0x01,     // Report ID
    0x05, 0x09,     // Usage Page(Buttons)
    0x75, 0x08,     // Report Size(8)
    0x95, 0x01,     // Report Count(1)
    0x81, 0x02,     // Input(Variable)
    0x09, 0x30,     // Usage Page(X)
    0x09, 0x31,     // Usage Page(Y)
    0x09, 0x38,     // Usage(Wheel)
    0x75, 0x08,     // Report Size(8)
    0x95, 0x03,     // Report Count(3)
    0x15, 0x81,     // Logical Minimum(-127)
    0x25, 0x7F,     // Logical Maximum(127)
    0x81, 0x06,     // Input(Variable, Relative)
    0xC0            // End Collection
/*
    0x05, 0x01,     // Usage Page(Generic Desktop)
    0x09, 0x04,     // Usage(Joystick)  <---------------------------
    0xA1, 0x01,     // Collection(Application)
    0x05, 0x01,     // Usage Page(Generic Desktop)
    // 8
    0x85, 0x01,     // Report ID
    0x05, 0x01,     // Usage Page(Generic Desktop)
    0x09, 0x30,     // Usage Page(X)
    0x75, 0x10,     // Report Size(16)
    0x95, 0x01,     // Report Count(1)
    0x15, 0x00,     // Logical Minimum(0)
    0x26, 0xFF,     // Logical Maximum(4095)
    0x0F, 
    0x46, 0xFF,     // Physical Maximum(4095)
    0x0F, 
    0x81, 0x02,     // Input(Variable)
    // 28
    0x05, 0x01,     // Usage Page(Generic Desktop)
    0x09, 0x31,     // Usage Page(Y)
    0x75, 0x10,     // Report Size(16)
    0x95, 0x01,     // Report Count(1)
    0x15, 0x00,     // Logical Minimum(0)
    0x26, 0xFF,     // Logical Maximum(4095)
    0x0F, 
    0x46, 0xFF,     // Physical Maximum(4095)
    0x0F, 
    0x81, 0x02,     // Input(Variable)
    0xC0            // End Collection*/
};
 

Вот функция идентификатора отчета.

 void esp_hidd_send_axis(int xVal, int yVal)
{
   uint8_t Mouse_Buffer[8] = {0};

   Mouse_Buffer[0] = 0;
   Mouse_Buffer[1] = xVal amp; 0xFF;
   Mouse_Buffer[2] = yVal amp; 0xFF;
   Mouse_Buffer[3] = 0;
   esp_hidd_dev_input_set(hid_dev, 1, 1, Mouse_Buffer, 4);
}
 

Спасибо за помощь.

Ответ №1:

ESP-IDF приводит пример кода : esp-idfпримерыbluetoothesp_hid_device, почему-то не может поддерживать мышь BLE.

Используя espesp-idfпримерыbluetoothbluedroidbleble_hid_device_demo, он поддерживает клавиатуру BLE, мышь BLE и потребительское устройство BLE. Поделитесь моим справочным кодом: введите описание ссылки здесь