diff --git a/Projects/Webserver/USBDeviceMode.h b/Projects/Webserver/USBDeviceMode.h index d76c667783dd62e7e59d553c3a3c1587cc94925b..999df6ef0dd362648e11937d7f752cf6e85c4641 100644 --- a/Projects/Webserver/USBDeviceMode.h +++ b/Projects/Webserver/USBDeviceMode.h @@ -37,6 +37,7 @@ #define _USBDEVICEMODE_H_ /* Includes: */ + #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/USB/Class/MassStorage.h> #include "Webserver.h" diff --git a/Projects/Webserver/USBHostMode.h b/Projects/Webserver/USBHostMode.h index 03387edd251c373c6976699eff8b731f02267037..b548e6b8d870fca74a267c79a5e8cf0631e37169 100644 --- a/Projects/Webserver/USBHostMode.h +++ b/Projects/Webserver/USBHostMode.h @@ -37,6 +37,7 @@ #define _USBHOSTMODE_H_ /* Includes: */ + #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/USB/Class/RNDIS.h> #include "Webserver.h" diff --git a/Projects/XPLAINBridge/Lib/SoftUART.c b/Projects/XPLAINBridge/Lib/SoftUART.c index bc0265378fc91201a6a8f521008ac258371aff74..01f9b2e12c9ae4c36a752869d2b7265e0758c613 100644 --- a/Projects/XPLAINBridge/Lib/SoftUART.c +++ b/Projects/XPLAINBridge/Lib/SoftUART.c @@ -35,12 +35,12 @@ volatile uint8_t srx_done, stx_count; volatile uint8_t srx_data, srx_mask, srx_tmp, stx_data; -unsigned char SoftUART_IsReady(void) +uint8_t SoftUART_IsReady(void) { return !(stx_count); } -unsigned char SoftUART_TxByte(unsigned char c) +uint8_t SoftUART_TxByte(uint8_t c) { while (stx_count); @@ -50,12 +50,12 @@ unsigned char SoftUART_TxByte(unsigned char c) return c; } -unsigned char SoftUART_IsReceived(void) +uint8_t SoftUART_IsReceived(void) { return srx_done; } -unsigned char SoftUART_RxByte(void) +uint8_t SoftUART_RxByte(void) { while (!(srx_done)); diff --git a/Projects/XPLAINBridge/Lib/SoftUART.h b/Projects/XPLAINBridge/Lib/SoftUART.h index 7dbf2d56b85fbee4e93482654706ff8bad824706..d6b24320fed4becb6488634842bf7fbfbd8f68aa 100644 --- a/Projects/XPLAINBridge/Lib/SoftUART.h +++ b/Projects/XPLAINBridge/Lib/SoftUART.h @@ -51,10 +51,10 @@ #define STXDDR DDRD /* Function Prototypes: */ - unsigned char SoftUART_IsReady(void); - unsigned char SoftUART_TxByte(unsigned char c); - unsigned char SoftUART_IsReceived(void); - unsigned char SoftUART_RxByte(void); - void SoftUART_Init(void); + uint8_t SoftUART_IsReady(void); + uint8_t SoftUART_TxByte(uint8_t c); + uint8_t SoftUART_IsReceived(void); + uint8_t SoftUART_RxByte(void); + void SoftUART_Init(void); #endif \ No newline at end of file diff --git a/Projects/XPLAINBridge/XPLAINBridge.c b/Projects/XPLAINBridge/XPLAINBridge.c index 2de545f9510fe49df01bddf20e5d32cf4eebca82..13752ef8222b923ce85fc6163d8a68ce823a0b57 100644 --- a/Projects/XPLAINBridge/XPLAINBridge.c +++ b/Projects/XPLAINBridge/XPLAINBridge.c @@ -80,22 +80,25 @@ int main(void) Buffer_Initialize(&USBtoUART_Buffer); Buffer_Initialize(&UARTtoUSB_Buffer); + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); + for (;;) { - if (USB_DeviceState == DEVICE_STATE_Configured) - { - if (CurrentFirmwareMode == MODE_USART_BRIDGE) - USARTBridge_Task(); - else - AVRISP_Task(); - } - + if (CurrentFirmwareMode == MODE_USART_BRIDGE) + USARTBridge_Task(); + else + AVRISP_Task(); + USB_USBTask(); } } void AVRISP_Task(void) { + /* Must be in the configured state for the AVRISP code to process data */ + if (USB_DeviceState != DEVICE_STATE_Configured) + return; + Endpoint_SelectEndpoint(AVRISP_DATA_EPNUM); /* Check to see if a V2 Protocol command has been received */ @@ -112,6 +115,10 @@ void AVRISP_Task(void) void USARTBridge_Task(void) { + /* Must be in the configured state for the USART Bridge code to process data */ + if (USB_DeviceState != DEVICE_STATE_Configured) + return; + /* Read bytes from the USB OUT endpoint into the UART transmit buffer */ for (uint8_t DataBytesRem = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); DataBytesRem != 0; DataBytesRem--) { @@ -130,8 +137,8 @@ void USARTBridge_Task(void) SoftUART_TxByte(Buffer_GetElement(&USBtoUART_Buffer)); /* Load bytes from the UART into the UART receive buffer */ - if(SoftUART_IsReceived()) - Buffer_StoreElement(&UARTtoUSB_Buffer, SoftUART_RxByte()); + if (SoftUART_IsReceived()) + Buffer_StoreElement(&UARTtoUSB_Buffer, SoftUART_RxByte()); CDC_Device_USBTask(&VirtualSerial_CDC_Interface); } @@ -169,6 +176,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) { bool EndpointConfigSuccess; + /* Configure the device endpoints according to the selected mode */ if (CurrentFirmwareMode == MODE_USART_BRIDGE) { EndpointConfigSuccess = CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); @@ -193,6 +201,18 @@ void EVENT_USB_Device_UnhandledControlRequest(void) CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); } +/** Event handler for the library USB Connection event. */ +void EVENT_USB_Device_Connect(void) +{ + LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); +} + +/** Event handler for the library USB Disconnection event. */ +void EVENT_USB_Device_Disconnect(void) +{ + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); +} + /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors" * documentation) by the application code so that the address and size of a requested descriptor can be given * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function @@ -201,6 +221,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) */ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress) { + /* Return the correct descriptors based on the selected mode */ if (CurrentFirmwareMode == MODE_USART_BRIDGE) return USART_GetDescriptor(wValue, wIndex, DescriptorAddress); else diff --git a/Projects/XPLAINBridge/XPLAINBridge.h b/Projects/XPLAINBridge/XPLAINBridge.h index 805c30d096707472684384fee7cba47115dbee0b..0c3a56c9dc3b10f2488af81e5e8673c582e376d9 100644 --- a/Projects/XPLAINBridge/XPLAINBridge.h +++ b/Projects/XPLAINBridge/XPLAINBridge.h @@ -85,8 +85,8 @@ void EVENT_USB_Device_ConfigurationChanged(void); void EVENT_USB_Device_UnhandledControlRequest(void); - - void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo); + void EVENT_USB_Device_Connect(void); + void EVENT_USB_Device_Disconnect(void); uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress);