Не удается записать на HID USB-устройство (Arduino, V-USB, HidSharp)

В настоящее время я создаю прототип USB-устройства HID, используя Arduino Nano и библиотеку V-USB. Проблема в том, что хотя я могу читать с устройства, я не могу писать на него.
Вот схема: Схема Что касается прошивки, я использую библиотеку hid-serial.
Вот код Arduino:

#include <HIDSerial.h>

HIDSerial serial;

unsigned char buffer[32];

void setup() {
  serial.begin();
}

void loop() {
  if(serial.available()) {
    int size = serial.read(buffer);
    if (size!=0) {
      serial.write((const uint8_t*)buffer, size);
      serial.write('\n');
    }
  }
  serial.poll();
}

Вот дескриптор отчета HID:

    0x06, 0x00, 0xff,              // USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    // USAGE (Vendor Usage 1)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x08,                    //   REPORT_COUNT (8)
    0x09, 0x00,                    //   USAGE (Undefined)  
    0x82, 0x02, 0x01,              //   INPUT (Data,Var,Abs,Buf)
    0x95, HIDSERIAL_INBUFFER_SIZE, //   REPORT_COUNT (32)
    0x09, 0x00,                    //   USAGE (Undefined)        
    0xb2, 0x02, 0x01,              //   FEATURE (Data,Var,Abs,Buf)
    0xc0                           // END_COLLECTION

И, наконец, вот код, работающий на хосте (.NET/C# с использованием библиотеки HidSharp):

var devices = DeviceList.Local;
var hidDeviceCollection = devices.GetHidDevices(this.vendorId, this.productId).ToList();
var device = hidDeviceCollection.First();
var stream = device.Open();
var buffer = new byte[9];
buffer[0] = 0;
buffer[1] = 42;
stream.Write(buffer);
buffer = stream.Read();

Когда я запускаю приведенный выше код, несмотря на то, что stream.CanRead имеет значение true, я получаю исключение "Не удается записать на это устройство". Однако, если я изменю код на пример «Hello World», предоставленный библиотекой, я смогу читать с устройства без проблем.

, 👍0


1 ответ


Лучший ответ:

1

Обнаружена ошибка.
Пока HidSharp отправлял выходные отчеты, драйвер устройства ожидал отчетов о функциях.
Изменение строки

0xb2, 0x02, 0x01,              //   FEATURE (Data,Var,Abs,Buf)

в

0x92, 0x02, 0x01,              // ВЫВОД (Data,Var,Abs,Buf)

Проблема решена.

,