Не удается записать на 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», предоставленный библиотекой, я смогу читать с устройства без проблем.
@Pawlakov, 👍0
1 ответ
Лучший ответ:
Обнаружена ошибка.
Пока HidSharp отправлял выходные отчеты, драйвер устройства ожидал отчетов о функциях.
Изменение строки
0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)
в
0x92, 0x02, 0x01, // ВЫВОД (Data,Var,Abs,Buf)
Проблема решена.
- Attiny85 не распознается при запуске Windows
- Последовательная связь Arduino и AVR через USB
- Attiny85 ошибка загрузки
- Первая настройка - отказ в доступе к usb-порту - ubuntu 14.04
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Может ли Arduino взаимодействовать с USB-устройствами без USB-хост-экрана?
- В чем разница/связь между Arduino и AVR?
- Если USB дает 5 В, как Arduino может подавать 5 В на контакт 5 В? (И еще вопрос)