Oops - fix broken SPI driver due to missing bit inversion on a port mask.
[pub/USBasp.git] / Demos / Device / LowLevel / GenericHID / GenericHID.c
index 5146efd..d7c2e37 100644 (file)
@@ -1,7 +1,7 @@
 /*
              LUFA Library
      Copyright (C) Dean Camera, 2010.
-              
+
   dean [at] fourwalledcubicle [dot] com
       www.fourwalledcubicle.com
 */
@@ -9,13 +9,13 @@
 /*
   Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
-  Permission to use, copy, modify, distribute, and sell this 
+  Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
+  without fee, provided that the above copyright notice appear in
   all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
   The author disclaim all warranties with regard to this
@@ -46,7 +46,7 @@ static uint8_t LastReceived[GENERIC_REPORT_SIZE];
 int main(void)
 {
        SetupHardware();
-       
+
        LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
        sei();
 
@@ -120,18 +120,15 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                        if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
                        {
                                uint8_t GenericData[GENERIC_REPORT_SIZE];
+                               CreateGenericHIDReport(GenericData);
 
                                Endpoint_ClearSETUP();
-       
-                               CreateGenericHIDReport(GenericData);
 
                                /* Write the report data to the control endpoint */
                                Endpoint_Write_Control_Stream_LE(&GenericData, sizeof(GenericData));
-
-                               /* Finalize the stream transfer to send the last packet or clear the host abort */
                                Endpoint_ClearOUT();
                        }
-               
+
                        break;
                case REQ_SetReport:
                        if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
@@ -139,32 +136,14 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
                                uint8_t GenericData[GENERIC_REPORT_SIZE];
 
                                Endpoint_ClearSETUP();
-                               
-                               /* Wait until the generic report has been sent by the host */
-                               while (!(Endpoint_IsOUTReceived()))
-                               {
-                                       if (USB_DeviceState == DEVICE_STATE_Unattached)
-                                         return;
-                               }
 
+                               /* Read the report data from the control endpoint */
                                Endpoint_Read_Control_Stream_LE(&GenericData, sizeof(GenericData));
-
-                               ProcessGenericHIDReport(GenericData);
-                       
-                               /* Clear the endpoint data */
                                Endpoint_ClearOUT();
 
-                               /* Wait until the host is ready to receive the request confirmation */
-                               while (!(Endpoint_IsINReady()))
-                               {
-                                       if (USB_DeviceState == DEVICE_STATE_Unattached)
-                                         return;
-                               }
-                               
-                               /* Handshake the request by sending an empty IN packet */
-                               Endpoint_ClearIN();
+                               ProcessGenericHIDReport(GenericData);
                        }
-                       
+
                        break;
        }
 }
@@ -180,7 +159,7 @@ void ProcessGenericHIDReport(uint8_t* DataArray)
                DataArray is an array holding the last report from the host. This function is called
                each time the host has sent a report to the device.
        */
-       
+
        for (uint8_t i = 0; i < GENERIC_REPORT_SIZE; i++)
          LastReceived[i] = DataArray[i];
 }
@@ -193,7 +172,7 @@ void CreateGenericHIDReport(uint8_t* DataArray)
 {
        /*
                This is where you need to create reports to be sent to the host from the device. This
-               function is called each time the host is ready to accept a new report. DataArray is 
+               function is called each time the host is ready to accept a new report. DataArray is
                an array to hold the report to the host.
        */
 
@@ -208,7 +187,7 @@ void HID_Task(void)
          return;
 
        Endpoint_SelectEndpoint(GENERIC_OUT_EPNUM);
-       
+
        /* Check to see if a packet has been sent from the host */
        if (Endpoint_IsOUTReceived())
        {
@@ -217,26 +196,26 @@ void HID_Task(void)
                {
                        /* Create a temporary buffer to hold the read in report from the host */
                        uint8_t GenericData[GENERIC_REPORT_SIZE];
-                       
+
                        /* Read Generic Report Data */
                        Endpoint_Read_Stream_LE(&GenericData, sizeof(GenericData));
-                       
+
                        /* Process Generic Report Data */
                        ProcessGenericHIDReport(GenericData);
                }
 
                /* Finalize the stream transfer to send the last packet */
                Endpoint_ClearOUT();
-       }       
+       }
 
        Endpoint_SelectEndpoint(GENERIC_IN_EPNUM);
-       
+
        /* Check to see if the host is ready to accept another packet */
        if (Endpoint_IsINReady())
        {
                /* Create a temporary buffer to hold the report to send to the host */
                uint8_t GenericData[GENERIC_REPORT_SIZE];
-               
+
                /* Create Generic Report Data */
                CreateGenericHIDReport(GenericData);
 
@@ -247,3 +226,4 @@ void HID_Task(void)
                Endpoint_ClearIN();
        }
 }
+