From 7c5444b89a49df7cb671b0b041567990d2a3012e Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 2 Jun 2009 10:54:32 +0000 Subject: Removed new Start of Frame event from the library; performance suffered far too much and it was only useful in one of the standard classes (HID). Altered HID demos to use the previous method of tracking millisecond periods via a hardware timer rather than the SOF events. Fixed MIDI class driver blocking on unread events to the host. --- LUFA/ChangeLog.txt | 1 - LUFA/Drivers/USB/Class/Device/HID.c | 26 ++++---------------------- LUFA/Drivers/USB/Class/Device/HID.h | 3 +-- LUFA/Drivers/USB/Class/Device/MIDI.c | 28 +++++----------------------- LUFA/Drivers/USB/HighLevel/Events.h | 6 ------ LUFA/Drivers/USB/HighLevel/USBInterrupt.c | 18 ------------------ LUFA/Drivers/USB/LowLevel/LowLevel.c | 5 ----- 7 files changed, 10 insertions(+), 77 deletions(-) (limited to 'LUFA') diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt index fe3b63360..67f88b9a3 100644 --- a/LUFA/ChangeLog.txt +++ b/LUFA/ChangeLog.txt @@ -38,7 +38,6 @@ * LUFA/Drivers/USB/Class/ directory to LUFA/Drivers/USB/HighLevel/ in preperation for the new USB class APIs * - Moved out each demos' functionality library files (e.g. Ring Buffer library) to /Lib directories for a better directory structure * - Removed Tx interrupt from the USBtoSerial demo; now sends characters via polling to ensure more time for the Rx interrupt - * - Added new EVENT_USB_StartOfFrame event in the library to indicate the start of each USB frame (when generated) * - Removed psuedo-scheduler, dynamic memory block allocator from the library (no longer needed and not used respectively) * * diff --git a/LUFA/Drivers/USB/Class/Device/HID.c b/LUFA/Drivers/USB/Class/Device/HID.c index fbc5e3a5c..5f8ccfbae 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.c +++ b/LUFA/Drivers/USB/Class/Device/HID.c @@ -45,7 +45,7 @@ void USB_HID_ProcessControlPacket(USB_ClassInfo_HID_t* HIDInterfaceInfo) { Endpoint_ClearSETUP(); - uint8_t ReportINData[HIDInterfaceInfo->ReportBufferSize]; + uint8_t ReportINData[HIDInterfaceInfo->ReportINBufferSize]; uint16_t ReportINSize; memset(ReportINData, 0, sizeof(ReportINData)); @@ -146,12 +146,6 @@ bool USB_HID_ConfigureEndpoints(USB_ClassInfo_HID_t* HIDInterfaceInfo) return true; } - -void USB_HID_RegisterStartOfFrame(USB_ClassInfo_HID_t* HIDInterfaceInfo) -{ - if (HIDInterfaceInfo->IdleMSRemaining) - HIDInterfaceInfo->IdleMSRemaining--; -} void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo) { @@ -166,7 +160,7 @@ void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo) if (HIDInterfaceInfo->IdleCount && !(HIDInterfaceInfo->IdleMSRemaining)) HIDInterfaceInfo->IdleMSRemaining = HIDInterfaceInfo->IdleCount; - uint8_t ReportINData[HIDInterfaceInfo->ReportBufferSize]; + uint8_t ReportINData[HIDInterfaceInfo->ReportINBufferSize]; uint16_t ReportINSize; memset(ReportINData, 0, sizeof(ReportINData)); @@ -174,13 +168,7 @@ void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo) ReportINSize = CALLBACK_USB_HID_CreateNextHIDReport(HIDInterfaceInfo, ReportINData); if (ReportINSize) - { - Endpoint_Write_Stream_LE(ReportINData, ReportINSize - #if !defined(NO_STREAM_CALLBACKS) - , NO_STREAM_CALLBACK - #endif - ); - } + Endpoint_Write_Stream_LE(ReportINData, ReportINSize, NO_STREAM_CALLBACK); Endpoint_ClearIN(); } @@ -195,13 +183,7 @@ void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo) uint8_t ReportOUTData[ReportOUTSize]; if (ReportOUTSize) - { - Endpoint_Read_Stream_LE(ReportOUTData, ReportOUTSize - #if !defined(NO_STREAM_CALLBACKS) - , NO_STREAM_CALLBACK - #endif - ); - } + Endpoint_Read_Stream_LE(ReportOUTData, ReportOUTSize, NO_STREAM_CALLBACK); CALLBACK_USB_HID_ProcessReceivedHIDReport(HIDInterfaceInfo, ReportOUTData, ReportOUTSize); diff --git a/LUFA/Drivers/USB/Class/Device/HID.h b/LUFA/Drivers/USB/Class/Device/HID.h index 8fdeb064a..4501fcb1c 100644 --- a/LUFA/Drivers/USB/Class/Device/HID.h +++ b/LUFA/Drivers/USB/Class/Device/HID.h @@ -96,7 +96,7 @@ uint8_t ReportOUTEndpointNumber; /**< Endpoint number of the HID interface's OUT report endpoint, if used */ uint16_t ReportOUTEndpointSize; /**< Size in bytes of the HID interface's OUT report endpoint, if used */ - uint8_t ReportBufferSize; + uint8_t ReportINBufferSize; bool UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */ uint16_t IdleCount; /**< Report idle period, in ms, set by the host */ @@ -106,7 +106,6 @@ /* Function Prototypes: */ bool USB_HID_ConfigureEndpoints(USB_ClassInfo_HID_t* HIDInterfaceInfo); void USB_HID_ProcessControlPacket(USB_ClassInfo_HID_t* HIDInterfaceInfo); - void USB_HID_RegisterStartOfFrame(USB_ClassInfo_HID_t* HIDInterfaceInfo); void USB_HID_USBTask(USB_ClassInfo_HID_t* HIDInterfaceInfo); uint16_t CALLBACK_USB_HID_CreateNextHIDReport(USB_ClassInfo_HID_t* HIDInterfaceInfo, void* ReportData); diff --git a/LUFA/Drivers/USB/Class/Device/MIDI.c b/LUFA/Drivers/USB/Class/Device/MIDI.c index 9b4cd4b04..42c06904b 100644 --- a/LUFA/Drivers/USB/Class/Device/MIDI.c +++ b/LUFA/Drivers/USB/Class/Device/MIDI.c @@ -55,36 +55,18 @@ bool USB_MIDI_ConfigureEndpoints(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo) return true; } -void USB_MIDI_SendNoteChange(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, const uint8_t Pitch, const bool OnOff, - const uint8_t CableID, const uint8_t Channel) -{ - if (!(USB_IsConnected)) - return; - - Endpoint_SelectEndpoint(MIDIInterfaceInfo->DataINEndpointNumber); - while (!(Endpoint_IsReadWriteAllowed())); - - uint8_t Command = ((OnOff)? MIDI_COMMAND_NOTE_ON : MIDI_COMMAND_NOTE_OFF); - - Endpoint_Write_Byte((CableID << 4) | (Command >> 4)); - - Endpoint_Write_Byte(Command | Channel); - Endpoint_Write_Byte(Pitch); - Endpoint_Write_Byte(MIDI_STANDARD_VELOCITY); - - Endpoint_ClearIN(); -} - void USB_MIDI_SendEventPacket(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, USB_MIDI_EventPacket_t* Event) { if (!(USB_IsConnected)) return; Endpoint_SelectEndpoint(MIDIInterfaceInfo->DataINEndpointNumber); - while (!(Endpoint_IsReadWriteAllowed())); - Endpoint_Write_Stream_LE(Event, sizeof(USB_MIDI_EventPacket_t), NO_STREAM_CALLBACK); - Endpoint_ClearIN(); + if (Endpoint_IsReadWriteAllowed()); + { + Endpoint_Write_Stream_LE(Event, sizeof(USB_MIDI_EventPacket_t), NO_STREAM_CALLBACK); + Endpoint_ClearIN(); + } } bool USB_MIDI_ReceiveEventPacket(USB_ClassInfo_MIDI_t* MIDIInterfaceInfo, USB_MIDI_EventPacket_t* Event) diff --git a/LUFA/Drivers/USB/HighLevel/Events.h b/LUFA/Drivers/USB/HighLevel/Events.h index ded027b12..e6d2beaa7 100644 --- a/LUFA/Drivers/USB/HighLevel/Events.h +++ b/LUFA/Drivers/USB/HighLevel/Events.h @@ -267,11 +267,6 @@ * \ref Group_USBManagement documentation). */ void EVENT_USB_Reset(void); - - /** Event for the USB start of frame interrupt, firing once each millisecond in either device or host - * mode, while USB frames are being generated or recieved. - */ - void EVENT_USB_StartOfFrame(void); #endif /* Private Interface - For use in library only: */ @@ -308,7 +303,6 @@ void EVENT_USB_Suspend(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub); void EVENT_USB_WakeUp(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub); void EVENT_USB_Reset(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub); - void EVENT_USB_StartOfFrame(void) ATTR_WEAK ATTR_ALIAS(USB_Event_Stub); #endif #endif diff --git a/LUFA/Drivers/USB/HighLevel/USBInterrupt.c b/LUFA/Drivers/USB/HighLevel/USBInterrupt.c index 0ccbe6155..0b9d08223 100644 --- a/LUFA/Drivers/USB/HighLevel/USBInterrupt.c +++ b/LUFA/Drivers/USB/HighLevel/USBInterrupt.c @@ -180,15 +180,6 @@ ISR(USB_GEN_vect, ISR_BLOCK) EVENT_USB_Reset(); } - - if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) - { - USB_INT_Clear(USB_INT_SOFI); - - FrameElapsed = true; - - EVENT_USB_StartOfFrame(); - } #endif #if defined(USB_CAN_BE_HOST) @@ -241,15 +232,6 @@ ISR(USB_GEN_vect, ISR_BLOCK) USB_ResetInterface(); } - - if (USB_INT_HasOccurred(USB_INT_HSOFI) && USB_INT_IsEnabled(USB_INT_HSOFI)) - { - USB_INT_Clear(USB_INT_HSOFI); - - FrameElapsed = true; - - EVENT_USB_StartOfFrame(); - } #endif #if defined(USB_CAN_BE_BOTH) diff --git a/LUFA/Drivers/USB/LowLevel/LowLevel.c b/LUFA/Drivers/USB/LowLevel/LowLevel.c index 255a6ef29..82705db96 100644 --- a/LUFA/Drivers/USB/LowLevel/LowLevel.c +++ b/LUFA/Drivers/USB/LowLevel/LowLevel.c @@ -228,8 +228,6 @@ void USB_ResetInterface(void) #if defined(USB_DEVICE_ONLY) USB_INT_Enable(USB_INT_SUSPEND); USB_INT_Enable(USB_INT_EORSTI); - USB_INT_Enable(USB_INT_SOFI); - #if defined(CONTROL_ONLY_DEVICE) UENUM = ENDPOINT_CONTROLEP; #endif @@ -245,13 +243,11 @@ void USB_ResetInterface(void) USB_INT_Enable(USB_INT_SRPI); USB_INT_Enable(USB_INT_BCERRI); - USB_INT_Enable(USB_INT_HSOFI); #else if (USB_CurrentMode == USB_MODE_DEVICE) { USB_INT_Enable(USB_INT_SUSPEND); USB_INT_Enable(USB_INT_EORSTI); - USB_INT_Enable(USB_INT_SOFI); #if defined(CONTROL_ONLY_DEVICE) UENUM = ENDPOINT_CONTROLEP; @@ -269,7 +265,6 @@ void USB_ResetInterface(void) USB_INT_Enable(USB_INT_SRPI); USB_INT_Enable(USB_INT_BCERRI); - USB_INT_Enable(USB_INT_HSOFI); } #endif } -- cgit v1.2.3