Как читать кросс-платформенные отчеты HID Output

У меня есть собственный чип ATMEL с прошивкой, которая использует LUFA для вождения USB. Я могу читать и писать выходные отчеты на Windows с существующим программным обеспечением в .Net, используя PInvoke.

Теперь я хочу разработать кроссплатформенное настольное приложение с общей базой кода для связи с моим устройством.

Я могу успешно записывать выходные отчеты на устройство на Mac, используя оба HidApi в C ++, а также моя любимая библиотека HidSharp в C # через моно.

Однако я не могу читать HID отчеты. Обе платформы дают мне тайм-аут, когда я вызываю эквивалентный метод .Read ().

Мой соответствующий код LUFA выглядит так:

bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
uint8_t* const reportId,
const uint8_t reportType,
void* reportData,
uint16_t* const reportSize)
{
if(reportType == HID_REPORT_ITEM_In && reportId != NULL && *reportId != 0) {
if(debug) {
serial_write_str_P(PSTR("USB IN Packet: "));
serial_write_uint8(reportId == NULL ? 0xff : *reportId, 10);
}

Я могу войти в «USB IN Packet:» и читать отчеты в .Net, используя что-то вроде этого:

[DllImport("hid.dll", SetLastError = true)]
static extern Boolean HidD_GetInputReport(IntPtr hFileHandle, byte[] reportBuffer, uint reportBufferLength);

byte[] buffer = new byte[packetSize];
buffer[0] = MY_CONTROL_PACKET;
HidD_GetInputReport(_fileHandle.DangerousGetHandle(), buffer, (uint)buffer.Length)

На Mac или ПК с использованием библиотек HidSharp или HidApi я никогда не смогу перейти в строку «USB IN Packet:» и получаю тайм-аут. Мой код HidSharp выглядит так:

HidStream stream;
device.TryOpen(out stream);
using (stream) {
var bytes = new byte[37];
bytes[0] = MY_REPORT_ID;
stream.Read(bytes)
}

Что я делаю не так в HidSharp? Если HidSharp не работает, как мне сделать это в HidApi? Если HidApi сломан, какие еще есть варианты?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]