Split out LED report processing from the host into a seperate routine in the LowLevel...
authorDean Camera <dean@fourwalledcubicle.com>
Sun, 7 Feb 2010 14:03:48 +0000 (14:03 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sun, 7 Feb 2010 14:03:48 +0000 (14:03 +0000)
Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.c
Demos/Device/LowLevel/KeyboardMouse/KeyboardMouse.h

index d31f94d..e41b709 100644 (file)
@@ -180,21 +180,8 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                                          return;\r
                                }\r
 \r
-                               /* Read in the LED report from the host */\r
-                               uint8_t LEDStatus = Endpoint_Read_Byte();\r
-                               uint8_t LEDMask   = LEDS_LED2;\r
-                               \r
-                               if (LEDStatus & KEYBOARD_LED_NUMLOCK)\r
-                                 LEDMask |= LEDS_LED1;\r
-                               \r
-                               if (LEDStatus & KEYBOARD_LED_CAPSLOCK)\r
-                                 LEDMask |= LEDS_LED3;\r
-\r
-                               if (LEDStatus & KEYBOARD_LED_SCROLLLOCK)\r
-                                 LEDMask |= LEDS_LED4;\r
-\r
-                               /* Set the status LEDs to the current HID LED status */\r
-                               LEDs_SetAllLEDs(LEDMask);\r
+                               /* Read in and process the LED report from the host */\r
+                               Keyboard_ProcessLEDReport(Endpoint_Read_Byte());\r
 \r
                                /* Clear the endpoint data */\r
                                Endpoint_ClearOUT();\r
@@ -206,6 +193,28 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
        }\r
 }\r
 \r
+/** Processes a given Keyboard LED report from the host, and sets the board LEDs to match. Since the Keyboard\r
+ *  LED report can be sent through either the control endpoint (via a HID SetReport request) or the HID OUT\r
+ *  endpoint, the processing code is placed here to avoid duplicating it and potentially having different\r
+ *  behaviour depending on the method used to sent it.\r
+ */\r
+void Keyboard_ProcessLEDReport(const uint8_t LEDStatus)\r
+{\r
+       uint8_t LEDMask = LEDS_LED2;\r
+       \r
+       if (LEDStatus & KEYBOARD_LED_NUMLOCK)\r
+         LEDMask |= LEDS_LED1;\r
+       \r
+       if (LEDStatus & KEYBOARD_LED_CAPSLOCK)\r
+         LEDMask |= LEDS_LED3;\r
+\r
+       if (LEDStatus & KEYBOARD_LED_SCROLLLOCK)\r
+         LEDMask |= LEDS_LED4;\r
+\r
+       /* Set the status LEDs to the current Keyboard LED status */\r
+       LEDs_SetAllLEDs(LEDMask);\r
+}\r
+\r
 /** Keyboard task. This generates the next keyboard HID report for the host, and transmits it via the\r
  *  keyboard IN endpoint when the host is ready for more data. Additionally, it processes host LED status\r
  *  reports sent to the device via the keyboard OUT reporting endpoint.\r
@@ -260,21 +269,8 @@ void Keyboard_HID_Task(void)
        /* Check if Keyboard LED Endpoint Ready for Read/Write */\r
        if (Endpoint_IsReadWriteAllowed())\r
        {               \r
-               /* Read in the LED report from the host */\r
-               uint8_t LEDStatus = Endpoint_Read_Byte();\r
-               uint8_t LEDMask   = LEDS_LED2;\r
-               \r
-               if (LEDStatus & KEYBOARD_LED_NUMLOCK)\r
-                 LEDMask |= LEDS_LED1;\r
-               \r
-               if (LEDStatus & KEYBOARD_LED_CAPSLOCK)\r
-                 LEDMask |= LEDS_LED3;\r
-\r
-               if (LEDStatus & KEYBOARD_LED_SCROLLLOCK)\r
-                 LEDMask |= LEDS_LED4;\r
-\r
-               /* Set the status LEDs to the current Keyboard LED status */\r
-               LEDs_SetAllLEDs(LEDMask);\r
+               /* Read in and process the LED report from the host */\r
+               Keyboard_ProcessLEDReport(Endpoint_Read_Byte());\r
 \r
                /* Handshake the OUT Endpoint - clear endpoint and ready for next report */\r
                Endpoint_ClearOUT();\r
index e5337f2..7fcec97 100644 (file)
                        \r
        /* Function Prototypes: */\r
                void SetupHardware(void);\r
+               void Keyboard_ProcessLEDReport(const uint8_t LEDStatus);\r
                void Keyboard_HID_Task(void);\r
                void Mouse_HID_Task(void);\r
                \r