USB to UART bridge

Dependencies:   USBDevice mbed

Fork of XBee-ExplorerLite by Norimasa Okamoto

UARTpinout
TXDp9
RXDp10
RTSp5
DTRp6

Windows serial driver:
https://developer.mbed.org/handbook/USBSerial
https://developer.mbed.org/media/uploads/samux/serial.zip

Revision:
2:79ca417c25b2
Parent:
0:9b1aa393acb3
--- a/main.cpp	Tue May 13 15:46:37 2014 +0900
+++ b/main.cpp	Tue Aug 11 23:07:42 2015 +0000
@@ -1,64 +1,55 @@
+// main.cpp 2015/7/8
+// USB-to-UART-bridge
 #include "BaseUsbUartBridge.h"
-DigitalOut led_xbee(LED1),led_usb(LED2),led_reset(LED3),led_heartbeat(LED4);
-RawSerial pc(MBED_UARTUSB);
-#if defined(TARGET_LPC4088)
-#define XBEE_UART P4_22,P4_23
-DigitalOut xbee_rts(P4_21);
-DigitalOut xbee_dtr(P4_19);
-DigitalOut xbee_reset(P4_17);
-DigitalIn reset_sw(P2_10);
-#define SW_MODE PullUp
-#elif defined(TARGET_LPC1768)
-#define XBEE_UART p9,p10
-DigitalOut xbee_rts(p21);
-DigitalOut xbee_dtr(p22);
-DigitalOut xbee_reset(p30);
-DigitalIn reset_sw(p14);
-#define SW_MODE PullDown
+
+DigitalInOut uart_nRTS(p5);
+DigitalInOut uart_nDTR(p6);
+#if defined(TARGET_MCU_LPC11U35_501)
+DigitalOut led_uart(LED1);
+DigitalOut led_usb(LED2);
+DigitalOut led_rts(p18);
+DigitalOut led_dtr(p20);
 #else
-#error "target error"
+DigitalOut led_uart(LED1);
+DigitalOut led_usb(LED2);
+DigitalOut led_rts(LED3);
+DigitalOut led_dtr(LED4);
 #endif
 
-class USB_XBee : public BaseUsbUartBridge {
+class USB_UART : public BaseUsbUartBridge {
 public:
-    USB_XBee(PinName tx, PinName rx) : BaseUsbUartBridge(tx, rx) {}
-    virtual void controlLineStateChanged(int rts, int dtr){
-        xbee_rts = rts ^ 1;
-        xbee_dtr = dtr ^ 1;
+    USB_UART(PinName tx, PinName rx) : BaseUsbUartBridge(tx, rx) {
+        uart_nRTS.mode(PullUp);
+        uart_nDTR.mode(PullUp);
+        uart_nRTS.input();        
+        uart_nDTR.input();
+    }
+    virtual void controlLineStateChanged(int rts, int dtr) {
+        led_rts = rts;
+        led_dtr = dtr;
+        if (rts) {
+            uart_nRTS.output();
+            uart_nRTS = 0;
+        } else {
+            uart_nRTS.input();
+        }
+        if (dtr) {
+            uart_nDTR.output();
+            uart_nDTR = 0;
+        } else {
+            uart_nDTR.input();
+        }
     }
     virtual void monitor(src_t src, uint8_t c) {
         switch(src) {
-            case _UART: led_xbee = !led_xbee; break;
+            case _UART: led_uart = !led_uart; break;
             case _USB: led_usb = !led_usb; break;
         }
-        //pc.putc(c);// debug
     }
-};
-
-USB_XBee usb_xbee(XBEE_UART);
+} usb_uart(UART_TX, UART_RX);
 
 int main() {
-    pc.baud(115200);
-
-    xbee_rts = 0;
-    xbee_dtr = 0;
-    xbee_reset = 1;
-    reset_sw.mode(SW_MODE);
-    int prev_sw = 1;
-
-    Timer heartbeat_t;
-    heartbeat_t.reset();
-    heartbeat_t.start();
     while(1) {
-        if (reset_sw ^ prev_sw) {
-            prev_sw = reset_sw;
-            xbee_reset = prev_sw ^ (SW_MODE == PullDown ? 1 : 0);
-            led_reset = xbee_reset;
-        }
-        if (heartbeat_t.read_ms() > 500) {
-            heartbeat_t.reset();
-            led_heartbeat = !led_heartbeat;
-        }
-        usb_xbee.poll();
+        usb_uart.poll();
     }
 }