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.
This commit is contained in:
		
							parent
							
								
									b7ef7f49c9
								
							
						
					
					
						commit
						7eb4eb7cdd
					
				
					 9 changed files with 21 additions and 38 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue