diff options
Diffstat (limited to 'usb-i2c-sl018/usb_serial.c')
-rw-r--r-- | usb-i2c-sl018/usb_serial.c | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/usb-i2c-sl018/usb_serial.c b/usb-i2c-sl018/usb_serial.c index 5a57480..f08d9b3 100644 --- a/usb-i2c-sl018/usb_serial.c +++ b/usb-i2c-sl018/usb_serial.c @@ -21,21 +21,13 @@ * along with spreadspace avr utils. If not, see <http://www.gnu.org/licenses/>. */ +#include <stdio.h> + #include "usb_serial.h" #include <LUFA/Drivers/USB/USB.h> #include "lufa-descriptor-usbserial.h" #include "LUFA/Drivers/Peripheral/Serial.h" -FILE usb_stream; -FILE serial_stream; -FILE * stdio = &serial_stream; - -FILE * * usb_serial_get_stdio_ptr(void) -{ - return &stdio; -} - - /* LUFA Library Copyright (C) Dean Camera, 2012. @@ -64,12 +56,26 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface = }, }; +void EVENT_USB_Device_ConfigurationChanged(void) +{ + CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); +} + +void EVENT_USB_Device_ControlRequest(void) +{ + CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); +} +/* end LUFA CDC-ACM specific definitions*/ + +FILE usb_stream; +FILE serial_stream; void usb_serial_init() { - USB_Init(); Serial_Init(115200,false); Serial_CreateStream(&serial_stream); + + USB_Init(); CDC_Device_CreateStream(&VirtualSerial_CDC_Interface,&usb_stream); } @@ -79,35 +85,23 @@ void usb_serial_task(void) USB_USBTask(); } -void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) +int16_t usb_serial_bytes_received(void) { - if(CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) - stdio = &usb_stream; + if(stdin == &usb_stream) + return CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); else - stdio = &serial_stream; -} - -void EVENT_USB_Device_Disconnect(void) -{ - stdio = &serial_stream; -} -/* end LUFA CDC-ACM specific definitions*/ - -void EVENT_USB_Device_ConfigurationChanged(void) -{ - CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); + return (int16_t)Serial_IsCharReceived(); } -void EVENT_USB_Device_ControlRequest(void) +void EVENT_CDC_Device_ControLineStateChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); + if(CDCInterfaceInfo->State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR) + stdin = stdout = &usb_stream; + else + stdin = stdout = &serial_stream; } -int16_t usb_serial_bytes_received(void) +void EVENT_USB_Device_Disconnect(void) { - if(stdio == &usb_stream) - return CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); - else - return (int16_t)Serial_IsCharReceived(); + stdin = stdout = &serial_stream; } - |