volatile uint8_t srx_done, stx_count;\r
volatile uint8_t srx_data, srx_mask, srx_tmp, stx_data;\r
\r
-unsigned char SoftUART_IsReady(void)\r
+uint8_t SoftUART_IsReady(void)\r
{\r
return !(stx_count);\r
}\r
\r
-unsigned char SoftUART_TxByte(unsigned char c)\r
+uint8_t SoftUART_TxByte(uint8_t c)\r
{\r
while (stx_count);\r
\r
return c;\r
}\r
\r
-unsigned char SoftUART_IsReceived(void)\r
+uint8_t SoftUART_IsReceived(void)\r
{\r
return srx_done;\r
}\r
\r
-unsigned char SoftUART_RxByte(void)\r
+uint8_t SoftUART_RxByte(void)\r
{\r
while (!(srx_done));\r
\r
#define STXDDR DDRD\r
\r
/* Function Prototypes: */\r
- unsigned char SoftUART_IsReady(void);\r
- unsigned char SoftUART_TxByte(unsigned char c);\r
- unsigned char SoftUART_IsReceived(void);\r
- unsigned char SoftUART_RxByte(void);\r
- void SoftUART_Init(void);\r
+ uint8_t SoftUART_IsReady(void);\r
+ uint8_t SoftUART_TxByte(uint8_t c);\r
+ uint8_t SoftUART_IsReceived(void);\r
+ uint8_t SoftUART_RxByte(void);\r
+ void SoftUART_Init(void);\r
\r
#endif
\ No newline at end of file
Buffer_Initialize(&USBtoUART_Buffer);\r
Buffer_Initialize(&UARTtoUSB_Buffer);\r
\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+\r
for (;;)\r
{\r
- if (USB_DeviceState == DEVICE_STATE_Configured)\r
- {\r
- if (CurrentFirmwareMode == MODE_USART_BRIDGE)\r
- USARTBridge_Task();\r
- else\r
- AVRISP_Task();\r
- }\r
- \r
+ if (CurrentFirmwareMode == MODE_USART_BRIDGE)\r
+ USARTBridge_Task();\r
+ else\r
+ AVRISP_Task();\r
+\r
USB_USBTask();\r
}\r
}\r
\r
void AVRISP_Task(void)\r
{\r
+ /* Must be in the configured state for the AVRISP code to process data */\r
+ if (USB_DeviceState != DEVICE_STATE_Configured)\r
+ return;\r
+\r
Endpoint_SelectEndpoint(AVRISP_DATA_EPNUM);\r
\r
/* Check to see if a V2 Protocol command has been received */\r
\r
void USARTBridge_Task(void)\r
{\r
+ /* Must be in the configured state for the USART Bridge code to process data */\r
+ if (USB_DeviceState != DEVICE_STATE_Configured)\r
+ return;\r
+\r
/* Read bytes from the USB OUT endpoint into the UART transmit buffer */\r
for (uint8_t DataBytesRem = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); DataBytesRem != 0; DataBytesRem--)\r
{\r
SoftUART_TxByte(Buffer_GetElement(&USBtoUART_Buffer));\r
\r
/* Load bytes from the UART into the UART receive buffer */\r
- if(SoftUART_IsReceived())\r
- Buffer_StoreElement(&UARTtoUSB_Buffer, SoftUART_RxByte());\r
+ if (SoftUART_IsReceived())\r
+ Buffer_StoreElement(&UARTtoUSB_Buffer, SoftUART_RxByte());\r
\r
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);\r
}\r
{\r
bool EndpointConfigSuccess;\r
\r
+ /* Configure the device endpoints according to the selected mode */\r
if (CurrentFirmwareMode == MODE_USART_BRIDGE)\r
{\r
EndpointConfigSuccess = CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);\r
CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);\r
}\r
\r
+/** Event handler for the library USB Connection event. */\r
+void EVENT_USB_Device_Connect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);\r
+}\r
+\r
+/** Event handler for the library USB Disconnection event. */\r
+void EVENT_USB_Device_Disconnect(void)\r
+{\r
+ LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+}\r
+\r
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"\r
* documentation) by the application code so that the address and size of a requested descriptor can be given\r
* to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function\r
*/\r
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
{\r
+ /* Return the correct descriptors based on the selected mode */\r
if (CurrentFirmwareMode == MODE_USART_BRIDGE)\r
return USART_GetDescriptor(wValue, wIndex, DescriptorAddress);\r
else\r