Возникла задача сделать печаталку, т.е. микроконтроллер прикидывается клавиатурой и периодически посылает коды нажатия клавиш.
С LUFA имел уже дело, так что для хида решил ее же и использовать. Взял пример для Keyboard (пробовал оба: из Class и LowLevel), но результат один и тот же:
Срабатывание ровно 1 раз.
Код
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)
{
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
uint8_t JoyStatus_LCL = Joystick_GetStatus();
uint8_t ButtonStatus_LCL = Buttons_GetStatus();
uint8_t UsedKeyCodes = 0;
if(ButtonStatus_LCL)
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTGUI;
*ReportSize = sizeof(USB_KeyboardReport_Data_t);
return false;
}
uint8_t* const ReportID,
const uint8_t ReportType,
void* ReportData,
uint16_t* const ReportSize)
{
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
uint8_t JoyStatus_LCL = Joystick_GetStatus();
uint8_t ButtonStatus_LCL = Buttons_GetStatus();
uint8_t UsedKeyCodes = 0;
if(ButtonStatus_LCL)
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_D;
KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTGUI;
*ReportSize = sizeof(USB_KeyboardReport_Data_t);
return false;
}
Проверил выводом устройство запускается, проходят контрол запросы, конфигурирование, дальше срабатывает этот колбэк и после все, никаких контрол запросов не происходит.
P.S. Пример от NXP который использует встроенный USB стек (USB ROM) в микроконтроллере успешно работает.
P.P.S ОС: Windows 8/1-64, среда разработки: LPCXpresso 7.6.2
В чем может быть причина?