Split out LED report processing from the host into a seperate routine in the LowLevel KeyboardMouse device demo, to avoid duplicate code.

pull/1469/head
Dean Camera 15 years ago
parent 0c5d6f5f97
commit 6a48efd3bd

@ -180,8 +180,26 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
return; return;
} }
/* Read in the LED report from the host */ /* Read in and process the LED report from the host */
uint8_t LEDStatus = Endpoint_Read_Byte(); Keyboard_ProcessLEDReport(Endpoint_Read_Byte());
/* Clear the endpoint data */
Endpoint_ClearOUT();
Endpoint_ClearStatusStage();
}
break;
}
}
/** Processes a given Keyboard LED report from the host, and sets the board LEDs to match. Since the Keyboard
* LED report can be sent through either the control endpoint (via a HID SetReport request) or the HID OUT
* endpoint, the processing code is placed here to avoid duplicating it and potentially having different
* behaviour depending on the method used to sent it.
*/
void Keyboard_ProcessLEDReport(const uint8_t LEDStatus)
{
uint8_t LEDMask = LEDS_LED2; uint8_t LEDMask = LEDS_LED2;
if (LEDStatus & KEYBOARD_LED_NUMLOCK) if (LEDStatus & KEYBOARD_LED_NUMLOCK)
@ -193,17 +211,8 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
if (LEDStatus & KEYBOARD_LED_SCROLLLOCK) if (LEDStatus & KEYBOARD_LED_SCROLLLOCK)
LEDMask |= LEDS_LED4; LEDMask |= LEDS_LED4;
/* Set the status LEDs to the current HID LED status */ /* Set the status LEDs to the current Keyboard LED status */
LEDs_SetAllLEDs(LEDMask); LEDs_SetAllLEDs(LEDMask);
/* Clear the endpoint data */
Endpoint_ClearOUT();
Endpoint_ClearStatusStage();
}
break;
}
} }
/** Keyboard task. This generates the next keyboard HID report for the host, and transmits it via the /** Keyboard task. This generates the next keyboard HID report for the host, and transmits it via the
@ -260,21 +269,8 @@ void Keyboard_HID_Task(void)
/* Check if Keyboard LED Endpoint Ready for Read/Write */ /* Check if Keyboard LED Endpoint Ready for Read/Write */
if (Endpoint_IsReadWriteAllowed()) if (Endpoint_IsReadWriteAllowed())
{ {
/* Read in the LED report from the host */ /* Read in and process the LED report from the host */
uint8_t LEDStatus = Endpoint_Read_Byte(); Keyboard_ProcessLEDReport(Endpoint_Read_Byte());
uint8_t LEDMask = LEDS_LED2;
if (LEDStatus & KEYBOARD_LED_NUMLOCK)
LEDMask |= LEDS_LED1;
if (LEDStatus & KEYBOARD_LED_CAPSLOCK)
LEDMask |= LEDS_LED3;
if (LEDStatus & KEYBOARD_LED_SCROLLLOCK)
LEDMask |= LEDS_LED4;
/* Set the status LEDs to the current Keyboard LED status */
LEDs_SetAllLEDs(LEDMask);
/* Handshake the OUT Endpoint - clear endpoint and ready for next report */ /* Handshake the OUT Endpoint - clear endpoint and ready for next report */
Endpoint_ClearOUT(); Endpoint_ClearOUT();

@ -131,6 +131,7 @@
/* Function Prototypes: */ /* Function Prototypes: */
void SetupHardware(void); void SetupHardware(void);
void Keyboard_ProcessLEDReport(const uint8_t LEDStatus);
void Keyboard_HID_Task(void); void Keyboard_HID_Task(void);
void Mouse_HID_Task(void); void Mouse_HID_Task(void);

Loading…
Cancel
Save