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:
Dean Camera 2009-11-20 04:39:41 +00:00
parent d753512cca
commit 7ef58eef7a
12 changed files with 68 additions and 36 deletions

View file

@ -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;
}

View file

@ -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
*