Removed new Start of Frame event from the library; performance suffered far too much...
authorDean Camera <dean@fourwalledcubicle.com>
Tue, 2 Jun 2009 10:54:32 +0000 (10:54 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Tue, 2 Jun 2009 10:54:32 +0000 (10:54 +0000)
Fixed MIDI class driver blocking on unread events to the host.

24 files changed:
Demos/Device/CDC/CDC.h
Demos/Device/DualCDC/DualCDC.h
Demos/Device/GenericHID/GenericHID.c
Demos/Device/GenericHID/GenericHID.h
Demos/Device/Joystick/Joystick.c
Demos/Device/Joystick/Joystick.h
Demos/Device/Keyboard/Keyboard.c
Demos/Device/Keyboard/Keyboard.h
Demos/Device/KeyboardMouse/KeyboardMouse.c
Demos/Device/KeyboardMouse/KeyboardMouse.h
Demos/Device/Mouse/Mouse.c
Demos/Device/Mouse/Mouse.h
Demos/Device/RNDISEthernet/RNDISEthernet.h
Demos/Device/USBtoSerial/USBtoSerial.h
LUFA/ChangeLog.txt
LUFA/Drivers/USB/Class/Device/HID.c
LUFA/Drivers/USB/Class/Device/HID.h
LUFA/Drivers/USB/Class/Device/MIDI.c
LUFA/Drivers/USB/HighLevel/Events.h
LUFA/Drivers/USB/HighLevel/USBInterrupt.c
LUFA/Drivers/USB/LowLevel/LowLevel.c
Projects/Magstripe/Magstripe.c
Projects/Magstripe/Magstripe.h
Projects/Magstripe/makefile

index b487813..dc40334 100644 (file)
@@ -64,6 +64,5 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
 \r
 #endif\r
 \r
 #endif\r
index 3c1e296..fc782ee 100644 (file)
@@ -64,6 +64,5 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
-               \r
+\r
 #endif\r
 #endif\r
index 4dfb8e4..9c8023a 100644 (file)
@@ -40,7 +40,7 @@ USB_ClassInfo_HID_t Generic_HID_Interface =
                .ReportOUTEndpointNumber = GENERIC_OUT_EPNUM,\r
                .ReportOUTEndpointSize   = GENERIC_EPSIZE,\r
                \r
                .ReportOUTEndpointNumber = GENERIC_OUT_EPNUM,\r
                .ReportOUTEndpointSize   = GENERIC_EPSIZE,\r
                \r
-               .ReportBufferSize        = GENERIC_REPORT_SIZE,\r
+               .ReportINBufferSize      = GENERIC_REPORT_SIZE,\r
 \r
                .UsingReportProtocol     = true,\r
        };\r
 \r
                .UsingReportProtocol     = true,\r
        };\r
@@ -70,6 +70,12 @@ void SetupHardware(void)
        /* Hardware Initialization */\r
        LEDs_Init();\r
        USB_Init();\r
        /* Hardware Initialization */\r
        LEDs_Init();\r
        USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
@@ -95,9 +101,10 @@ void EVENT_USB_UnhandledControlPacket(void)
        USB_HID_ProcessControlPacket(&Generic_HID_Interface);\r
 }\r
 \r
        USB_HID_ProcessControlPacket(&Generic_HID_Interface);\r
 }\r
 \r
-void EVENT_USB_StartOfFrame(void)\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
 {\r
 {\r
-       USB_HID_RegisterStartOfFrame(&Generic_HID_Interface);\r
+       if (Generic_HID_Interface.IdleMSRemaining)\r
+         Generic_HID_Interface.IdleMSRemaining--;\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
index 2742643..94a09af 100644 (file)
@@ -64,7 +64,6 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
index e073a87..d5c2073 100644 (file)
@@ -37,7 +37,7 @@ USB_ClassInfo_HID_t Joystick_HID_Interface =
                .ReportINEndpointNumber  = JOYSTICK_EPNUM,\r
                .ReportINEndpointSize    = JOYSTICK_EPSIZE,\r
                \r
                .ReportINEndpointNumber  = JOYSTICK_EPNUM,\r
                .ReportINEndpointSize    = JOYSTICK_EPSIZE,\r
                \r
-               .ReportBufferSize        = sizeof(USB_JoystickReport_Data_t),\r
+               .ReportINBufferSize      = sizeof(USB_JoystickReport_Data_t),\r
 \r
                .UsingReportProtocol     = true,\r
        };\r
 \r
                .UsingReportProtocol     = true,\r
        };\r
@@ -69,6 +69,12 @@ void SetupHardware(void)
        LEDs_Init();\r
        Buttons_Init();\r
        USB_Init();\r
        LEDs_Init();\r
        Buttons_Init();\r
        USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
@@ -94,9 +100,10 @@ void EVENT_USB_UnhandledControlPacket(void)
        USB_HID_ProcessControlPacket(&Joystick_HID_Interface);\r
 }\r
 \r
        USB_HID_ProcessControlPacket(&Joystick_HID_Interface);\r
 }\r
 \r
-void EVENT_USB_StartOfFrame(void)\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
 {\r
 {\r
-       USB_HID_RegisterStartOfFrame(&Joystick_HID_Interface);\r
+       if (Joystick_HID_Interface.IdleMSRemaining)\r
+         Joystick_HID_Interface.IdleMSRemaining--;\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
index 461d0d0..164c58e 100644 (file)
@@ -75,7 +75,6 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
index d8893bf..d506657 100644 (file)
@@ -41,7 +41,7 @@ USB_ClassInfo_HID_t Keyboard_HID_Interface =
         .ReportOUTEndpointNumber = KEYBOARD_LEDS_EPNUM,\r
         .ReportOUTEndpointSize   = KEYBOARD_EPSIZE,\r
         \r
         .ReportOUTEndpointNumber = KEYBOARD_LEDS_EPNUM,\r
         .ReportOUTEndpointSize   = KEYBOARD_EPSIZE,\r
         \r
-               .ReportBufferSize        = sizeof(USB_KeyboardReport_Data_t),\r
+               .ReportINBufferSize      = sizeof(USB_KeyboardReport_Data_t),\r
 \r
         .IdleCount               = 500,\r
     };\r
 \r
         .IdleCount               = 500,\r
     };\r
@@ -73,6 +73,12 @@ void SetupHardware()
     LEDs_Init();\r
     Buttons_Init();\r
     USB_Init();\r
     LEDs_Init();\r
     Buttons_Init();\r
     USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
@@ -98,9 +104,10 @@ void EVENT_USB_UnhandledControlPacket(void)
     USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
 }\r
 \r
     USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
 }\r
 \r
-void EVENT_USB_StartOfFrame(void)\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
 {\r
 {\r
-    USB_HID_RegisterStartOfFrame(&Keyboard_HID_Interface);\r
+       if (Keyboard_HID_Interface.IdleMSRemaining)\r
+         Keyboard_HID_Interface.IdleMSRemaining--;\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
index eeb7be9..9cfc9ab 100644 (file)
@@ -78,7 +78,6 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
index 8f6a573..71a8375 100644 (file)
@@ -41,7 +41,7 @@ USB_ClassInfo_HID_t Keyboard_HID_Interface =
                .ReportOUTEndpointNumber = KEYBOARD_OUT_EPNUM,\r
                .ReportOUTEndpointSize   = HID_EPSIZE,\r
                \r
                .ReportOUTEndpointNumber = KEYBOARD_OUT_EPNUM,\r
                .ReportOUTEndpointSize   = HID_EPSIZE,\r
                \r
-               .ReportBufferSize        = sizeof(USB_KeyboardReport_Data_t),\r
+               .ReportINBufferSize      = sizeof(USB_KeyboardReport_Data_t),\r
 \r
                .IdleCount               = 500,\r
        };\r
 \r
                .IdleCount               = 500,\r
        };\r
@@ -53,7 +53,7 @@ USB_ClassInfo_HID_t Mouse_HID_Interface =
                .ReportINEndpointNumber  = MOUSE_IN_EPNUM,\r
                .ReportINEndpointSize    = HID_EPSIZE,\r
 \r
                .ReportINEndpointNumber  = MOUSE_IN_EPNUM,\r
                .ReportINEndpointSize    = HID_EPSIZE,\r
 \r
-               .ReportBufferSize        = sizeof(USB_MouseReport_Data_t),\r
+               .ReportINBufferSize      = sizeof(USB_MouseReport_Data_t),\r
 \r
                .ReportOUTEndpointNumber = 0,\r
                .ReportOUTEndpointSize   = 0,\r
 \r
                .ReportOUTEndpointNumber = 0,\r
                .ReportOUTEndpointSize   = 0,\r
@@ -85,7 +85,13 @@ void SetupHardware()
        /* Hardware Initialization */\r
        Joystick_Init();\r
        LEDs_Init();\r
        /* Hardware Initialization */\r
        Joystick_Init();\r
        LEDs_Init();\r
-       USB_Init();     \r
+       USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
@@ -115,10 +121,13 @@ void EVENT_USB_UnhandledControlPacket(void)
        USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
 }\r
 \r
        USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
 }\r
 \r
-void EVENT_USB_StartOfFrame(void)\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
 {\r
 {\r
-       USB_HID_RegisterStartOfFrame(&Keyboard_HID_Interface);\r
-       USB_HID_RegisterStartOfFrame(&Mouse_HID_Interface);\r
+       if (Keyboard_HID_Interface.IdleMSRemaining)\r
+         Keyboard_HID_Interface.IdleMSRemaining--;\r
+\r
+       if (Mouse_HID_Interface.IdleMSRemaining)\r
+         Mouse_HID_Interface.IdleMSRemaining--;\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
index a5c3c5d..c18c6e1 100644 (file)
@@ -82,7 +82,6 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
index 57c1aa1..01ead00 100644 (file)
@@ -37,7 +37,7 @@ USB_ClassInfo_HID_t Mouse_HID_Interface =
                .ReportINEndpointNumber  = MOUSE_EPNUM,\r
                .ReportINEndpointSize    = MOUSE_EPSIZE,\r
 \r
                .ReportINEndpointNumber  = MOUSE_EPNUM,\r
                .ReportINEndpointSize    = MOUSE_EPSIZE,\r
 \r
-               .ReportBufferSize        = sizeof(USB_MouseReport_Data_t),\r
+               .ReportINBufferSize      = sizeof(USB_MouseReport_Data_t),\r
        };\r
 \r
 int main(void)\r
        };\r
 \r
 int main(void)\r
@@ -67,6 +67,12 @@ void SetupHardware(void)
        LEDs_Init();\r
        Buttons_Init();\r
        USB_Init();\r
        LEDs_Init();\r
        Buttons_Init();\r
        USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
 }\r
 \r
 void EVENT_USB_Connect(void)\r
@@ -92,9 +98,10 @@ void EVENT_USB_UnhandledControlPacket(void)
        USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
 }\r
 \r
        USB_HID_ProcessControlPacket(&Mouse_HID_Interface);\r
 }\r
 \r
-void EVENT_USB_StartOfFrame(void)\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
 {\r
 {\r
-       USB_HID_RegisterStartOfFrame(&Mouse_HID_Interface);\r
+       if (Mouse_HID_Interface.IdleMSRemaining)\r
+         Mouse_HID_Interface.IdleMSRemaining--;\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
index 5c80495..9134e67 100644 (file)
@@ -77,7 +77,6 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
index bc50042..f0247ce 100644 (file)
@@ -71,7 +71,6 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
                \r
                void CALLBACK_USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
        \r
                \r
                void CALLBACK_USB_RNDIS_ProcessRNDISControlMessage(USB_ClassInfo_RNDIS_t* RNDISInterfaceInfo);\r
        \r
index 7ff796e..bc8d983 100644 (file)
@@ -66,7 +66,6 @@
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                void EVENT_USB_Disconnect(void);\r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
                \r
                void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);\r
 \r
                \r
                void EVENT_USB_CDC_LineEncodingChanged(USB_ClassInfo_CDC_t* CDCInterfaceInfo);\r
 \r
index fe3b633..67f88b9 100644 (file)
@@ -38,7 +38,6 @@
   *    LUFA/Drivers/USB/Class/ directory to LUFA/Drivers/USB/HighLevel/ in preperation for the new USB class APIs\r
   *  - Moved out each demos' functionality library files (e.g. Ring Buffer library) to /Lib directories for a better directory structure\r
   *  - Removed Tx interrupt from the USBtoSerial demo; now sends characters via polling to ensure more time for the Rx interrupt\r
   *    LUFA/Drivers/USB/Class/ directory to LUFA/Drivers/USB/HighLevel/ in preperation for the new USB class APIs\r
   *  - Moved out each demos' functionality library files (e.g. Ring Buffer library) to /Lib directories for a better directory structure\r
   *  - Removed Tx interrupt from the USBtoSerial demo; now sends characters via polling to ensure more time for the Rx interrupt\r
-  *  - Added new EVENT_USB_StartOfFrame event in the library to indicate the start of each USB frame (when generated)\r
   *  - Removed psuedo-scheduler, dynamic memory block allocator from the library (no longer needed and not used respectively)\r
   *\r
   *\r
   *  - Removed psuedo-scheduler, dynamic memory block allocator from the library (no longer needed and not used respectively)\r
   *\r
   *\r
index fbc5e3a..5f8ccfb 100644 (file)
@@ -45,7 +45,7 @@ void USB_HID_ProcessControlPacket(USB_ClassInfo_HID_t* HIDInterfaceInfo)
                        {\r
                                Endpoint_ClearSETUP();  \r
 \r
                        {\r
                                Endpoint_ClearSETUP();  \r
 \r
-                               uint8_t  ReportINData[HIDInterfaceInfo->ReportBufferSize];\r
+                               uint8_t  ReportINData[HIDInterfaceInfo->ReportINBufferSize];\r
                                uint16_t ReportINSize;\r
 \r
                                memset(ReportINData, 0, sizeof(ReportINData));\r
                                uint16_t ReportINSize;\r
 \r
                                memset(ReportINData, 0, sizeof(ReportINData));\r
@@ -146,12 +146,6 @@ bool USB_HID_ConfigureEndpoints(USB_ClassInfo_HID_t* HIDInterfaceInfo)
        \r
        return true;\r
 }\r
        \r
        return true;\r
 }\r
-\r
-void USB_HID_RegisterStartOfFrame(USB_ClassInfo_HID_t* HIDInterfaceInfo)\r
-{\r
-       if (HIDInterfaceInfo->IdleMSRemaining)\r
-         HIDInterfaceInfo->IdleMSRemaining--;\r
-}\r
                \r
 void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo)\r
 {\r
                \r
 void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo)\r
 {\r
@@ -166,7 +160,7 @@ void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo)
                if (HIDInterfaceInfo->IdleCount && !(HIDInterfaceInfo->IdleMSRemaining))\r
                  HIDInterfaceInfo->IdleMSRemaining = HIDInterfaceInfo->IdleCount;\r
 \r
                if (HIDInterfaceInfo->IdleCount && !(HIDInterfaceInfo->IdleMSRemaining))\r
                  HIDInterfaceInfo->IdleMSRemaining = HIDInterfaceInfo->IdleCount;\r
 \r
-               uint8_t  ReportINData[HIDInterfaceInfo->ReportBufferSize];\r
+               uint8_t  ReportINData[HIDInterfaceInfo->ReportINBufferSize];\r
                uint16_t ReportINSize;\r
 \r
                memset(ReportINData, 0, sizeof(ReportINData));\r
                uint16_t ReportINSize;\r
 \r
                memset(ReportINData, 0, sizeof(ReportINData));\r
@@ -174,13 +168,7 @@ void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo)
                ReportINSize = CALLBACK_USB_HID_CreateNextHIDReport(HIDInterfaceInfo, ReportINData);\r
 \r
                if (ReportINSize)\r
                ReportINSize = CALLBACK_USB_HID_CreateNextHIDReport(HIDInterfaceInfo, ReportINData);\r
 \r
                if (ReportINSize)\r
-               {\r
-                       Endpoint_Write_Stream_LE(ReportINData, ReportINSize\r
-                       #if !defined(NO_STREAM_CALLBACKS)\r
-                                                , NO_STREAM_CALLBACK\r
-                       #endif\r
-                                                );\r
-               }\r
+                 Endpoint_Write_Stream_LE(ReportINData, ReportINSize, NO_STREAM_CALLBACK);\r
                \r
                Endpoint_ClearIN();\r
        }\r
                \r
                Endpoint_ClearIN();\r
        }\r
@@ -195,13 +183,7 @@ void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo)
                        uint8_t  ReportOUTData[ReportOUTSize];\r
                        \r
                        if (ReportOUTSize)\r
                        uint8_t  ReportOUTData[ReportOUTSize];\r
                        \r
                        if (ReportOUTSize)\r
-                       {\r
-                               Endpoint_Read_Stream_LE(ReportOUTData, ReportOUTSize\r
-                               #if !defined(NO_STREAM_CALLBACKS)\r
-                                                   , NO_STREAM_CALLBACK\r
-                               #endif\r
-                                                   );\r
-                       }\r
+                         Endpoint_Read_Stream_LE(ReportOUTData, ReportOUTSize, NO_STREAM_CALLBACK);\r
                          \r
                        CALLBACK_USB_HID_ProcessReceivedHIDReport(HIDInterfaceInfo, ReportOUTData, ReportOUTSize);\r
                        \r
                          \r
                        CALLBACK_USB_HID_ProcessReceivedHIDReport(HIDInterfaceInfo, ReportOUTData, ReportOUTSize);\r
                        \r
index 8fdeb06..4501fcb 100644 (file)
@@ -96,7 +96,7 @@
                        uint8_t  ReportOUTEndpointNumber; /**< Endpoint number of the HID interface's OUT report endpoint, if used */\r
                        uint16_t ReportOUTEndpointSize;  /**< Size in bytes of the HID interface's OUT report endpoint, if used */\r
                        \r
                        uint8_t  ReportOUTEndpointNumber; /**< Endpoint number of the HID interface's OUT report endpoint, if used */\r
                        uint16_t ReportOUTEndpointSize;  /**< Size in bytes of the HID interface's OUT report endpoint, if used */\r
                        \r
-                       uint8_t  ReportBufferSize;\r
+                       uint8_t  ReportINBufferSize;\r
 \r
                        bool     UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */\r
                        uint16_t IdleCount; /**< Report idle period, in ms, set by the host */\r
 \r
                        bool     UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */\r
                        uint16_t IdleCount; /**< Report idle period, in ms, set by the host */\r
        /* Function Prototypes: */\r
                bool USB_HID_ConfigureEndpoints(USB_ClassInfo_HID_t* HIDInterfaceInfo);\r
                void USB_HID_ProcessControlPacket(USB_ClassInfo_HID_t* HIDInterfaceInfo);\r
        /* Function Prototypes: */\r
                bool USB_HID_ConfigureEndpoints(USB_ClassInfo_HID_t* HIDInterfaceInfo);\r
                void USB_HID_ProcessControlPacket(USB_ClassInfo_HID_t* HIDInterfaceInfo);\r
-               void USB_HID_RegisterStartOfFrame(USB_ClassInfo_HID_t* HIDInterfaceInfo);\r
                void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo);\r
                \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo);\r
                \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
index 9b4cd4b..42c0690 100644 (file)
@@ -55,36 +55,18 @@ bool USB_MIDI_ConfigureEndpoints(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo)
        return true;\r
 }\r
 \r
        return true;\r
 }\r
 \r
-void USB_MIDI_SendNoteChange(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, const uint8_t Pitch, const bool OnOff,\r
-                             const uint8_t CableID, const uint8_t Channel)\r
-{\r
-       if (!(USB_IsConnected))\r
-         return;\r
-       \r
-       Endpoint_SelectEndpoint(MIDIInterfaceInfo->DataINEndpointNumber);\r
-       while (!(Endpoint_IsReadWriteAllowed()));\r
-\r
-       uint8_t Command = ((OnOff)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF);\r
-\r
-       Endpoint_Write_Byte((CableID << 4) | (Command >> 4));\r
-\r
-       Endpoint_Write_Byte(Command | Channel);\r
-       Endpoint_Write_Byte(Pitch);\r
-       Endpoint_Write_Byte(MIDI_STANDARD_VELOCITY);\r
-       \r
-       Endpoint_ClearIN();\r
-}\r
-\r
 void USB_MIDI_SendEventPacket(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, USB_MIDI_EventPacket_t* Event)\r
 {\r
        if (!(USB_IsConnected))\r
          return;\r
        \r
        Endpoint_SelectEndpoint(MIDIInterfaceInfo->DataINEndpointNumber);\r
 void USB_MIDI_SendEventPacket(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, USB_MIDI_EventPacket_t* Event)\r
 {\r
        if (!(USB_IsConnected))\r
          return;\r
        \r
        Endpoint_SelectEndpoint(MIDIInterfaceInfo->DataINEndpointNumber);\r
-       while (!(Endpoint_IsReadWriteAllowed()));\r
 \r
 \r
-       Endpoint_Write_Stream_LE(Event, sizeof(USB_MIDI_EventPacket_t), NO_STREAM_CALLBACK);\r
-       Endpoint_ClearIN();\r
+       if (Endpoint_IsReadWriteAllowed());\r
+       {\r
+               Endpoint_Write_Stream_LE(Event, sizeof(USB_MIDI_EventPacket_t), NO_STREAM_CALLBACK);\r
+               Endpoint_ClearIN();\r
+       }\r
 }\r
 \r
 bool USB_MIDI_ReceiveEventPacket(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, USB_MIDI_EventPacket_t* Event)\r
 }\r
 \r
 bool USB_MIDI_ReceiveEventPacket(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, USB_MIDI_EventPacket_t* Event)\r
index ded027b..e6d2bea 100644 (file)
                         *        \ref Group_USBManagement documentation).\r
                         */\r
                        void EVENT_USB_Reset(void);\r
                         *        \ref Group_USBManagement documentation).\r
                         */\r
                        void EVENT_USB_Reset(void);\r
-                       \r
-                       /** Event for the USB start of frame interrupt, firing once each millisecond in either device or host\r
-                        *  mode, while USB frames are being generated or recieved.\r
-                        */\r
-                       void EVENT_USB_StartOfFrame(void);\r
                #endif\r
                \r
        /* Private Interface - For use in library only: */\r
                #endif\r
                \r
        /* Private Interface - For use in library only: */\r
                                void EVENT_USB_Suspend(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
                                void EVENT_USB_WakeUp(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
                                void EVENT_USB_Reset(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
                                void EVENT_USB_Suspend(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
                                void EVENT_USB_WakeUp(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
                                void EVENT_USB_Reset(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
-                               void EVENT_USB_StartOfFrame(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub);\r
                        #endif\r
        #endif\r
 \r
                        #endif\r
        #endif\r
 \r
index 0ccbe61..0b9d082 100644 (file)
@@ -180,15 +180,6 @@ ISR(USB_GEN_vect, ISR_BLOCK)
 \r
                EVENT_USB_Reset();\r
        }\r
 \r
                EVENT_USB_Reset();\r
        }\r
-       \r
-       if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI))\r
-       {\r
-               USB_INT_Clear(USB_INT_SOFI);\r
-\r
-               FrameElapsed = true;\r
-               \r
-               EVENT_USB_StartOfFrame();\r
-       }\r
        #endif\r
        \r
        #if defined(USB_CAN_BE_HOST)\r
        #endif\r
        \r
        #if defined(USB_CAN_BE_HOST)\r
@@ -241,15 +232,6 @@ ISR(USB_GEN_vect, ISR_BLOCK)
 \r
                USB_ResetInterface();\r
        }\r
 \r
                USB_ResetInterface();\r
        }\r
-\r
-       if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI))\r
-       {\r
-               USB_INT_Clear(USB_INT_HSOFI);\r
-\r
-               FrameElapsed = true;\r
-               \r
-               EVENT_USB_StartOfFrame();\r
-       }\r
        #endif\r
 \r
        #if defined(USB_CAN_BE_BOTH)\r
        #endif\r
 \r
        #if defined(USB_CAN_BE_BOTH)\r
index 255a6ef..82705db 100644 (file)
@@ -228,8 +228,6 @@ void USB_ResetInterface(void)
        #if defined(USB_DEVICE_ONLY)    \r
        USB_INT_Enable(USB_INT_SUSPEND);\r
        USB_INT_Enable(USB_INT_EORSTI);\r
        #if defined(USB_DEVICE_ONLY)    \r
        USB_INT_Enable(USB_INT_SUSPEND);\r
        USB_INT_Enable(USB_INT_EORSTI);\r
-       USB_INT_Enable(USB_INT_SOFI);\r
-\r
        #if defined(CONTROL_ONLY_DEVICE)\r
        UENUM = ENDPOINT_CONTROLEP;\r
        #endif\r
        #if defined(CONTROL_ONLY_DEVICE)\r
        UENUM = ENDPOINT_CONTROLEP;\r
        #endif\r
@@ -245,13 +243,11 @@ void USB_ResetInterface(void)
        \r
        USB_INT_Enable(USB_INT_SRPI);\r
        USB_INT_Enable(USB_INT_BCERRI);\r
        \r
        USB_INT_Enable(USB_INT_SRPI);\r
        USB_INT_Enable(USB_INT_BCERRI);\r
-       USB_INT_Enable(USB_INT_HSOFI);\r
        #else\r
        if (USB_CurrentMode == USB_MODE_DEVICE)\r
        {\r
                USB_INT_Enable(USB_INT_SUSPEND);\r
                USB_INT_Enable(USB_INT_EORSTI);\r
        #else\r
        if (USB_CurrentMode == USB_MODE_DEVICE)\r
        {\r
                USB_INT_Enable(USB_INT_SUSPEND);\r
                USB_INT_Enable(USB_INT_EORSTI);\r
-               USB_INT_Enable(USB_INT_SOFI);\r
 \r
                #if defined(CONTROL_ONLY_DEVICE)\r
                UENUM = ENDPOINT_CONTROLEP;\r
 \r
                #if defined(CONTROL_ONLY_DEVICE)\r
                UENUM = ENDPOINT_CONTROLEP;\r
@@ -269,7 +265,6 @@ void USB_ResetInterface(void)
                \r
                USB_INT_Enable(USB_INT_SRPI);\r
                USB_INT_Enable(USB_INT_BCERRI);\r
                \r
                USB_INT_Enable(USB_INT_SRPI);\r
                USB_INT_Enable(USB_INT_BCERRI);\r
-               USB_INT_Enable(USB_INT_HSOFI);\r
        }\r
        #endif\r
 }\r
        }\r
        #endif\r
 }\r
index 5cd107e..871db28 100644 (file)
@@ -39,6 +39,8 @@ USB_ClassInfo_HID_t Keyboard_HID_Interface =
 \r
                .ReportINEndpointNumber  = KEYBOARD_EPNUM,\r
                .ReportINEndpointSize    = KEYBOARD_EPSIZE,\r
 \r
                .ReportINEndpointNumber  = KEYBOARD_EPNUM,\r
                .ReportINEndpointSize    = KEYBOARD_EPSIZE,\r
+               \r
+               .ReportINBufferSize      = sizeof(USB_KeyboardReport_Data_t),\r
        };\r
 \r
 int main(void)\r
        };\r
 \r
 int main(void)\r
@@ -70,6 +72,12 @@ void SetupHardware(void)
        /* Hardware Initialization */\r
        Magstripe_Init();\r
        USB_Init();\r
        /* Hardware Initialization */\r
        Magstripe_Init();\r
        USB_Init();\r
+\r
+       /* Millisecond timer initialization, with output compare interrupt enabled for the idle timing */\r
+       OCR0A  = ((F_CPU / 64) / 1000);\r
+       TCCR0A = (1 << WGM01);\r
+       TCCR0B = ((1 << CS01) | (1 << CS00));\r
+       TIMSK0 = (1 << OCIE0A);\r
 }\r
 \r
 void ReadMagstripeData(void)\r
 }\r
 \r
 void ReadMagstripeData(void)\r
@@ -113,9 +121,10 @@ void EVENT_USB_UnhandledControlPacket(void)
        USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
 }\r
 \r
        USB_HID_ProcessControlPacket(&Keyboard_HID_Interface);\r
 }\r
 \r
-void EVENT_USB_StartOfFrame(void)\r
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
 {\r
 {\r
-       USB_HID_RegisterStartOfFrame(&Keyboard_HID_Interface);\r
+       if (Keyboard_HID_Interface.IdleMSRemaining)\r
+         Keyboard_HID_Interface.IdleMSRemaining--;\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
 }\r
 \r
 uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData)\r
index b0e47d5..2b8aa37 100644 (file)
@@ -78,7 +78,6 @@
                \r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
                \r
                void EVENT_USB_ConfigurationChanged(void);\r
                void EVENT_USB_UnhandledControlPacket(void);\r
-               void EVENT_USB_StartOfFrame(void);\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
 \r
                uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData);\r
                void     CALLBACK_USB_HID_ProcessReceivedHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo,\r
index 138456f..80b1744 100644 (file)
@@ -183,7 +183,7 @@ CSTANDARD = -std=gnu99
 
 # Place -D or -U options here for C sources
 CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)
 
 # Place -D or -U options here for C sources
 CDEFS  = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)
-CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DNO_STREAM_CALLBACKS -DUSB_DEVICE_ONLY
+CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY
 CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION
 CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
 CDEFS += -DMAG_T1_CLOCK="(1 << 0)"
 CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION
 CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
 CDEFS += -DMAG_T1_CLOCK="(1 << 0)"