A USB to UART bridge

Dependencies:   USBDevice BufferedSerial mbed

Committer:
yihui
Date:
Thu Jul 24 07:18:44 2014 +0000
Revision:
4:9c038f12d460
Parent:
3:2b4d2284bab0
Child:
5:10fccccbbb11
use buffered serial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yihui 0:8c4eea221dcf 1 /**
yihui 0:8c4eea221dcf 2 * USB to UART Bridge
yihui 0:8c4eea221dcf 3 */
yihui 0:8c4eea221dcf 4
yihui 0:8c4eea221dcf 5 #include "mbed.h"
yihui 0:8c4eea221dcf 6 #include "USBSerial.h"
yihui 4:9c038f12d460 7 #include "BufferedSerial.h"
yihui 0:8c4eea221dcf 8
yihui 4:9c038f12d460 9 BufferedSerial uart(USBTX, USBRX);
yihui 0:8c4eea221dcf 10 USBSerial pc;
yihui 2:427b69ad737c 11 DigitalOut led1(LED1);
yihui 2:427b69ad737c 12 DigitalOut led2(LED2);
yihui 2:427b69ad737c 13 DigitalOut led3(LED3);
yihui 3:2b4d2284bab0 14 DigitalOut led4(LED4);
yihui 3:2b4d2284bab0 15
yihui 3:2b4d2284bab0 16 Ticker ticker;
yihui 3:2b4d2284bab0 17 volatile bool rxflag = false;
yihui 3:2b4d2284bab0 18 volatile bool txflag = false;
yihui 3:2b4d2284bab0 19
yihui 3:2b4d2284bab0 20
yihui 3:2b4d2284bab0 21 void indicate()
yihui 3:2b4d2284bab0 22 {
yihui 3:2b4d2284bab0 23 if (rxflag) {
yihui 3:2b4d2284bab0 24 led3 = !led3;
yihui 3:2b4d2284bab0 25 rxflag = false;
yihui 3:2b4d2284bab0 26 } else {
yihui 3:2b4d2284bab0 27 if (led3) {
yihui 3:2b4d2284bab0 28 led3 = 0;
yihui 3:2b4d2284bab0 29 }
yihui 3:2b4d2284bab0 30 }
yihui 3:2b4d2284bab0 31
yihui 3:2b4d2284bab0 32 if (txflag) {
yihui 3:2b4d2284bab0 33 led4 = !led4;
yihui 3:2b4d2284bab0 34 txflag = false;
yihui 3:2b4d2284bab0 35 } else {
yihui 3:2b4d2284bab0 36 if (led4) {
yihui 3:2b4d2284bab0 37 led4 = 0;
yihui 3:2b4d2284bab0 38 }
yihui 3:2b4d2284bab0 39 }
yihui 3:2b4d2284bab0 40 }
yihui 0:8c4eea221dcf 41
yihui 0:8c4eea221dcf 42 // Called by ISR
yihui 3:2b4d2284bab0 43 void settings_changed(int baud, int bits, int parity, int stop)
yihui 0:8c4eea221dcf 44 {
yihui 0:8c4eea221dcf 45 const Serial::Parity parityTable[] = {Serial::None, Serial::Odd, Serial::Even, Serial::Forced0, Serial::Forced1};
yihui 0:8c4eea221dcf 46
yihui 2:427b69ad737c 47
yihui 2:427b69ad737c 48 led1 = 1;
yihui 0:8c4eea221dcf 49 if (stop != 2) {
yihui 0:8c4eea221dcf 50 stop = 1; // stop bit(s) = 1 or 1.5
yihui 0:8c4eea221dcf 51 }
yihui 0:8c4eea221dcf 52 uart.baud(baud);
yihui 0:8c4eea221dcf 53 uart.format(bits, parityTable[parity], stop);
yihui 2:427b69ad737c 54 led1 = 0;
yihui 0:8c4eea221dcf 55 }
yihui 0:8c4eea221dcf 56
yihui 0:8c4eea221dcf 57 int main()
yihui 0:8c4eea221dcf 58 {
yihui 3:2b4d2284bab0 59 pc.attach(settings_changed);
yihui 4:9c038f12d460 60 ticker.attach_us(indicate, 500);
yihui 0:8c4eea221dcf 61
yihui 0:8c4eea221dcf 62 while (1) {
yihui 0:8c4eea221dcf 63 while (uart.readable()) {
yihui 3:2b4d2284bab0 64 rxflag = true;
yihui 3:2b4d2284bab0 65 char r = uart.getc();
yihui 4:9c038f12d460 66 pc.putc(r);
yihui 3:2b4d2284bab0 67 }
yihui 3:2b4d2284bab0 68
yihui 4:9c038f12d460 69 while (pc.readable()) {
yihui 3:2b4d2284bab0 70 char r = pc.getc();
yihui 4:9c038f12d460 71
yihui 4:9c038f12d460 72 txflag = true;
yihui 4:9c038f12d460 73 uart.putc(r);
yihui 0:8c4eea221dcf 74 }
yihui 0:8c4eea221dcf 75 }
yihui 0:8c4eea221dcf 76 }