From 7eb4eb7cdd1ba6a9a6e1ae82968294445667f2e0 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 26 May 2009 04:46:35 +0000 Subject: [PATCH] Fix all device mode demos broken in the recent API changes. Change USBtoSerial Tx to polling-driven rather than interrupt driven, to ensure more time for the Rx interrupt to be serviced. --- Bootloaders/DFU/BootloaderDFU.c | 4 ++-- Demos/Device/AudioOutput/AudioOutput.c | 8 ++++---- Demos/Device/AudioOutput/Descriptors.c | 2 +- Demos/Device/GenericHID/GenericHID.c | 3 +++ Demos/Device/MassStorage/MassStorage.c | 8 ++++---- Demos/Device/USBtoSerial/USBtoSerial.c | 26 +++----------------------- LUFA.pnproj | 2 +- LUFA/ChangeLog.txt | 1 + LUFA/Drivers/USB/LowLevel/Device.h | 5 ++--- 9 files changed, 21 insertions(+), 38 deletions(-) diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c index 10a30167bf..11177c5a63 100644 --- a/Bootloaders/DFU/BootloaderDFU.c +++ b/Bootloaders/DFU/BootloaderDFU.c @@ -139,7 +139,7 @@ int main (void) /** Event handler for the USB_Disconnect event. This indicates that the bootloader should exit and the user * application started. */ -void EventHandler_USB_Disconnect(void) +void EVENT_USB_Disconnect(void) { /* Upon disconnection, run user application */ RunBootloader = false; @@ -149,7 +149,7 @@ void EventHandler_USB_Disconnect(void) * control requests that are not handled internally by the USB library (including the DFU commands, which are * all issued via the control endpoint), so that they can be handled appropriately for the application. */ -void EventHandler_USB_UnhandledControlPacket(void) +void EVENT_USB_UnhandledControlPacket(void) { /* Get the size of the command and data from the wLength value */ SentCommand.DataSize = USB_ControlRequest.wLength; diff --git a/Demos/Device/AudioOutput/AudioOutput.c b/Demos/Device/AudioOutput/AudioOutput.c index 7ec2e3534c..40e376b52f 100644 --- a/Demos/Device/AudioOutput/AudioOutput.c +++ b/Demos/Device/AudioOutput/AudioOutput.c @@ -75,7 +75,7 @@ int main(void) /** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs, and * configures the sample update and PWM timers. */ -void EventHandler_USB_Connect(void) +void EVENT_USB_Connect(void) { /* Start USB management task */ Scheduler_SetTaskMode(USB_USBTask, TASK_RUN); @@ -110,7 +110,7 @@ void EventHandler_USB_Connect(void) /** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via * the status LEDs, disables the sample update and PWM output timers and stops the USB and Audio management tasks. */ -void EventHandler_USB_Disconnect(void) +void EVENT_USB_Disconnect(void) { /* Stop the timers */ TCCR0B = 0; @@ -140,7 +140,7 @@ void EventHandler_USB_Disconnect(void) /** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration * of the USB device after enumeration - the device endpoints are configured. */ -void EventHandler_USB_ConfigurationChanged(void) +void EVENT_USB_ConfigurationChanged(void) { /* Setup audio stream endpoint */ Endpoint_ConfigureEndpoint(AUDIO_STREAM_EPNUM, EP_TYPE_ISOCHRONOUS, @@ -155,7 +155,7 @@ void EventHandler_USB_ConfigurationChanged(void) * control requests that are not handled internally by the USB library (including the Audio class-specific * requests) so that they can be handled appropriately for the application. */ -void EventHandler_USB_UnhandledControlPacket(void) +void EVENT_USB_UnhandledControlPacket(void) { /* Process General and Audio specific control requests */ switch (USB_ControlRequest.bRequest) diff --git a/Demos/Device/AudioOutput/Descriptors.c b/Demos/Device/AudioOutput/Descriptors.c index 0c3873b419..92d7e0d57b 100644 --- a/Demos/Device/AudioOutput/Descriptors.c +++ b/Demos/Device/AudioOutput/Descriptors.c @@ -271,7 +271,7 @@ USB_Descriptor_String_t PROGMEM ProductString = * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the * USB host. */ -uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress) +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress) { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); diff --git a/Demos/Device/GenericHID/GenericHID.c b/Demos/Device/GenericHID/GenericHID.c index f43499a0f5..058d269fef 100644 --- a/Demos/Device/GenericHID/GenericHID.c +++ b/Demos/Device/GenericHID/GenericHID.c @@ -59,6 +59,9 @@ int main(void) /* Disable clock division */ clock_prescale_set(clock_div_1); + /* Hardware Initialization */ + LEDs_Init(); + /* Indicate USB not ready */ UpdateStatus(Status_USBNotReady); diff --git a/Demos/Device/MassStorage/MassStorage.c b/Demos/Device/MassStorage/MassStorage.c index 82e7e8aa23..72a2302199 100644 --- a/Demos/Device/MassStorage/MassStorage.c +++ b/Demos/Device/MassStorage/MassStorage.c @@ -86,7 +86,7 @@ int main(void) } /** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */ -void EventHandler_USB_Connect(void) +void EVENT_USB_Connect(void) { /* Indicate USB enumerating */ UpdateStatus(Status_USBEnumerating); @@ -98,7 +98,7 @@ void EventHandler_USB_Connect(void) /** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via * the status LEDs and stops the Mass Storage management task. */ -void EventHandler_USB_Disconnect(void) +void EVENT_USB_Disconnect(void) { /* Stop running mass storage task */ Scheduler_SetTaskMode(USB_MassStorage, TASK_STOP); @@ -110,7 +110,7 @@ void EventHandler_USB_Disconnect(void) /** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration * of the USB device after enumeration - the device endpoints are configured and the Mass Storage management task started. */ -void EventHandler_USB_ConfigurationChanged(void) +void EVENT_USB_ConfigurationChanged(void) { /* Setup Mass Storage In and Out Endpoints */ Endpoint_ConfigureEndpoint(MASS_STORAGE_IN_EPNUM, EP_TYPE_BULK, @@ -132,7 +132,7 @@ void EventHandler_USB_ConfigurationChanged(void) * control requests that are not handled internally by the USB library (including the Mass Storage class-specific * requests) so that they can be handled appropriately for the application. */ -void EventHandler_USB_UnhandledControlPacket(void) +void EVENT_USB_UnhandledControlPacket(void) { /* Process UFI specific control requests */ switch (USB_ControlRequest.bRequest) diff --git a/Demos/Device/USBtoSerial/USBtoSerial.c b/Demos/Device/USBtoSerial/USBtoSerial.c index ef51a6eeb3..7cef56560a 100644 --- a/Demos/Device/USBtoSerial/USBtoSerial.c +++ b/Demos/Device/USBtoSerial/USBtoSerial.c @@ -256,16 +256,9 @@ TASK(CDC_Task) } } - /* Check if Rx buffer contains data */ + /* Check if Rx buffer contains data - if so, send it */ if (Rx_Buffer.Elements) - { - /* Initiate the transmission of the buffer contents if USART idle */ - if (!(Transmitting)) - { - Transmitting = true; - Serial_TxByte(Buffer_GetElement(&Rx_Buffer)); - } - } + Serial_TxByte(Buffer_GetElement(&Rx_Buffer)); /* Select the Serial Tx Endpoint */ Endpoint_SelectEndpoint(CDC_TX_EPNUM); @@ -303,19 +296,6 @@ TASK(CDC_Task) } } -/** ISR to handle the USART transmit complete interrupt, fired each time the USART has sent a character. This reloads the USART - * data register with the next byte from the Rx_Buffer circular buffer if a character is available, or stops the transmission if - * the buffer is currently empty. - */ -ISR(USART1_TX_vect, ISR_BLOCK) -{ - /* Send next character if available */ - if (Rx_Buffer.Elements) - UDR1 = Buffer_GetElement(&Rx_Buffer); - else - Transmitting = false; -} - /** ISR to handle the USART receive complete interrupt, fired each time the USART has received a character. This stores the received * character into the Tx_Buffer circular buffer for later transmission to the host. */ @@ -383,7 +363,7 @@ void ReconfigureUSART(void) UCSR1A = (1 << U2X1); /* Enable transmit and receive modules and interrupts */ - UCSR1B = ((1 << TXCIE1) | (1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); + UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); /* Set the USART mode to the mask generated by the Line Coding options */ UCSR1C = ConfigMask; diff --git a/LUFA.pnproj b/LUFA.pnproj index b5ceb65c17..235ccfa3b9 100644 --- a/LUFA.pnproj +++ b/LUFA.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/LUFA/ChangeLog.txt b/LUFA/ChangeLog.txt index 68aa6c79ed..ac675348bf 100644 --- a/LUFA/ChangeLog.txt +++ b/LUFA/ChangeLog.txt @@ -29,6 +29,7 @@ * - Deleted StdDescriptors.c, renamed USB_GetDescriptor() to CALLBACK_USB_GetDescriptor, moved ConfigDescriptor.c/.h from the * 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 * * * \section Sec_ChangeLog090510 Version 090510 diff --git a/LUFA/Drivers/USB/LowLevel/Device.h b/LUFA/Drivers/USB/LowLevel/Device.h index cf54345c41..31d612c0ab 100644 --- a/LUFA/Drivers/USB/LowLevel/Device.h +++ b/LUFA/Drivers/USB/LowLevel/Device.h @@ -117,8 +117,7 @@ /* Function Prototypes: */ /** Function to retrieve a given descriptor's size and memory location from the given descriptor type value, * index and language ID. This function MUST be overridden in the user application (added with full, identical - * prototype and name except for the \ref ATTR_WEAK attribute) so that the library can call it to retrieve descriptor - * data. + * prototype and name so that the library can call it to retrieve descriptor data. * * \param wValue The type of the descriptor to retrieve in the upper byte, and the index in the * lower byte (when more than one descriptor of the given type exists, such as the @@ -139,7 +138,7 @@ * \return Size in bytes of the descriptor if it exists, zero or \ref NO_DESCRIPTOR otherwise */ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress) - ATTR_WARN_UNUSED_RESULT ATTR_WEAK ATTR_NON_NULL_PTR_ARG(3); + ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); /* Private Interface - For use in library only: */ #if !defined(__DOXYGEN__)