Fixed LowLevel Keyboard demo not saving the issued report only after it has been written to the endpoint.
Added support for multiple keyboard keycodes in a single report to the LowLevel and ClassDriver Keyboard demos.
This commit is contained in:
parent
d753512cca
commit
7ef58eef7a
12 changed files with 68 additions and 36 deletions
|
@ -144,22 +144,34 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
|
|||
uint8_t JoyStatus_LCL = Joystick_GetStatus();
|
||||
uint8_t ButtonStatus_LCL = Buttons_GetStatus();
|
||||
|
||||
static uint8_t PrevUsedKeyCodes;
|
||||
uint8_t UsedKeyCodes = 0;
|
||||
|
||||
if (JoyStatus_LCL & JOY_UP)
|
||||
KeyboardReport->KeyCode[0] = 0x04; // A
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = 0x04; // A
|
||||
else if (JoyStatus_LCL & JOY_DOWN)
|
||||
KeyboardReport->KeyCode[0] = 0x05; // B
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = 0x05; // B
|
||||
|
||||
if (JoyStatus_LCL & JOY_LEFT)
|
||||
KeyboardReport->KeyCode[0] = 0x06; // C
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = 0x06; // C
|
||||
else if (JoyStatus_LCL & JOY_RIGHT)
|
||||
KeyboardReport->KeyCode[0] = 0x07; // D
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = 0x07; // D
|
||||
|
||||
if (JoyStatus_LCL & JOY_PRESS)
|
||||
KeyboardReport->KeyCode[0] = 0x08; // E
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = 0x08; // E
|
||||
|
||||
if (ButtonStatus_LCL & BUTTONS_BUTTON1)
|
||||
KeyboardReport->KeyCode[0] = 0x09; // F
|
||||
KeyboardReport->KeyCode[UsedKeyCodes++] = 0x09; // F
|
||||
|
||||
/* The host will ignore the device if we add a new keycode to the report while another keycode is currently
|
||||
* being sent (i.e. the user has pressed another key while a key is already being pressed) - we need to intersperse
|
||||
* the two reports with a zeroed report to force the host to accept the additional keys */
|
||||
if (UsedKeyCodes != PrevUsedKeyCodes)
|
||||
{
|
||||
memset(KeyboardReport, sizeof(USB_KeyboardReport_Data_t), 0x00);
|
||||
PrevUsedKeyCodes = UsedKeyCodes;
|
||||
}
|
||||
|
||||
*ReportSize = sizeof(USB_KeyboardReport_Data_t);
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -49,11 +49,12 @@
|
|||
* OSes (i.e. no special drivers required). It is boot protocol compatible, and thus
|
||||
* works under compatible BIOS as if it was a native keyboard (e.g. PS/2).
|
||||
*
|
||||
* On start-up the system will automatically enumerate and function
|
||||
* as a keyboard when the USB connection to a host is present. To use
|
||||
* the keyboard example, manipulate the joystick to send the letters
|
||||
* a, b, c, d and e. See the USB HID documentation for more information
|
||||
* on sending keyboard event and key presses.
|
||||
* On start-up the system will automatically enumerate and function as a keyboard
|
||||
* when the USB connection to a host is present. To use the keyboard example,
|
||||
* manipulate the joystick to send the letters a, b, c, d and e. See the USB HID
|
||||
* documentation for more information on sending keyboard event and key presses. Unlike
|
||||
* other LUFA Keyboard demos, this example shows explicitly how to send multiple keypresses
|
||||
* inside the same report to the host.
|
||||
*
|
||||
* \section SSec_Options Project Options
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue