USB-UART bridge for XBee with XCTU.

Dependencies:   USBDevice mbed

USB to UART bridge for XBee with XCTU.
320 350
Windows serial driver:
https://developer.mbed.org/handbook/USBSerial
https://developer.mbed.org/media/uploads/samux/serial.zip

Committer:
va009039
Date:
Tue May 13 15:46:37 2014 +0900
Revision:
1:3d02f8b77d68
Parent:
0:9b1aa393acb3
add sendBreak,update USBDevice.lib.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:9b1aa393acb3 1 #include "BaseUsbUartBridge.h"
va009039 0:9b1aa393acb3 2
va009039 0:9b1aa393acb3 3 // http://mbed.org/handbook/USBSerial
va009039 0:9b1aa393acb3 4 // http://mbed.org/media/uploads/samux/serial.zip
va009039 0:9b1aa393acb3 5
va009039 0:9b1aa393acb3 6 BaseUsbUartBridge::BaseUsbUartBridge(PinName tx, PinName rx, int uart_buf_size, int usb_buf_size)
va009039 0:9b1aa393acb3 7 : SerialBase(tx, rx), USBCDC(0x1f00, 0x2012, 0x0001, true),
va009039 0:9b1aa393acb3 8 uart_buf(uart_buf_size), usb_buf(usb_buf_size)
va009039 0:9b1aa393acb3 9 {
va009039 0:9b1aa393acb3 10 SerialBase::attach(this, &BaseUsbUartBridge::uart_handler, RxIrq);
va009039 0:9b1aa393acb3 11 }
va009039 0:9b1aa393acb3 12
va009039 0:9b1aa393acb3 13 void BaseUsbUartBridge::poll()
va009039 0:9b1aa393acb3 14 {
va009039 0:9b1aa393acb3 15 uint8_t c;
va009039 0:9b1aa393acb3 16 int size = uart_buf.available();
va009039 0:9b1aa393acb3 17 if (size > 0) {
va009039 0:9b1aa393acb3 18 uint8_t buf[MAX_PACKET_SIZE_EPBULK];
va009039 0:9b1aa393acb3 19 if (size > sizeof(buf)) {
va009039 0:9b1aa393acb3 20 size = sizeof(buf);
va009039 0:9b1aa393acb3 21 }
va009039 0:9b1aa393acb3 22 for(int i = 0; i < size; i++) {
va009039 0:9b1aa393acb3 23 uart_buf.dequeue(&c);
va009039 0:9b1aa393acb3 24 buf[i] = c;
va009039 0:9b1aa393acb3 25 monitor(_UART, c);
va009039 0:9b1aa393acb3 26 }
va009039 0:9b1aa393acb3 27 if (terminal_connected) {
va009039 0:9b1aa393acb3 28 USBCDC::send(buf, size);
va009039 0:9b1aa393acb3 29 }
va009039 0:9b1aa393acb3 30 }
va009039 0:9b1aa393acb3 31
va009039 0:9b1aa393acb3 32 if (usb_buf.dequeue(&c)) {
va009039 0:9b1aa393acb3 33 SerialBase::_base_putc(c);
va009039 0:9b1aa393acb3 34 monitor(_USB, c);
va009039 0:9b1aa393acb3 35 }
va009039 0:9b1aa393acb3 36 }
va009039 0:9b1aa393acb3 37
va009039 0:9b1aa393acb3 38 void BaseUsbUartBridge::uart_handler(void)
va009039 0:9b1aa393acb3 39 {
va009039 0:9b1aa393acb3 40 uint8_t c = SerialBase::_base_getc();
va009039 0:9b1aa393acb3 41 uart_buf.queue(c);
va009039 0:9b1aa393acb3 42 }
va009039 0:9b1aa393acb3 43
va009039 0:9b1aa393acb3 44 bool BaseUsbUartBridge::bulk_callback()
va009039 0:9b1aa393acb3 45 {
va009039 0:9b1aa393acb3 46 uint8_t c[65];
va009039 0:9b1aa393acb3 47 uint32_t size = 0;
va009039 0:9b1aa393acb3 48
va009039 0:9b1aa393acb3 49 //we read the packet received and put it on the circular buffer
va009039 0:9b1aa393acb3 50 readEP(c, &size);
va009039 0:9b1aa393acb3 51 for (uint32_t i = 0; i < size; i++) {
va009039 0:9b1aa393acb3 52 usb_buf.queue(c[i]);
va009039 0:9b1aa393acb3 53 }
va009039 0:9b1aa393acb3 54
va009039 0:9b1aa393acb3 55 // We reactivate the endpoint to receive next characters
va009039 0:9b1aa393acb3 56 readStart(EPBULK_OUT, MAX_PACKET_SIZE_EPBULK);
va009039 0:9b1aa393acb3 57 return true;
va009039 0:9b1aa393acb3 58 }
va009039 0:9b1aa393acb3 59
va009039 1:3d02f8b77d68 60 /* virtual */ void BaseUsbUartBridge::lineCodingChanged(int baud, int bits, int parity, int stop)
va009039 1:3d02f8b77d68 61 {
va009039 1:3d02f8b77d68 62 SerialBase::baud(baud);
va009039 1:3d02f8b77d68 63 }
va009039 1:3d02f8b77d68 64
va009039 1:3d02f8b77d68 65 /* virtual */ void BaseUsbUartBridge::sendBreak(uint16_t duration)
va009039 1:3d02f8b77d68 66 {
va009039 1:3d02f8b77d68 67 SerialBase::send_break();
va009039 1:3d02f8b77d68 68 };
va009039 1:3d02f8b77d68 69