SLCAN/CAN-USB implementation for mbed targets

Dependencies:   USBDevice mbed

Committer:
devanlai
Date:
Sat Jun 04 04:40:58 2016 +0000
Revision:
0:f2565808eea5
Child:
1:3644b10bce2f
SLCAN implementation working over hardware serial; USBSerial not yet functional

Who changed what in which revision?

UserRevisionLine numberNew contents of line
devanlai 0:f2565808eea5 1 #include <mbed.h>
devanlai 0:f2565808eea5 2 #include <USBSerial.h>
devanlai 0:f2565808eea5 3 #include "slcan.h"
devanlai 0:f2565808eea5 4
devanlai 0:f2565808eea5 5 static const uint16_t VID = 0x1209;
devanlai 0:f2565808eea5 6 static const uint16_t PID = 0x0001;
devanlai 0:f2565808eea5 7 static const uint16_t VERSION = 0x0001;
devanlai 0:f2565808eea5 8
devanlai 0:f2565808eea5 9
devanlai 0:f2565808eea5 10 CAN can1(D9, D10);
devanlai 0:f2565808eea5 11 /*
devanlai 0:f2565808eea5 12 USBSerial virtualUART(VID, PID, VERSION, false);
devanlai 0:f2565808eea5 13 USBSLCAN slcan(virtualUART, can1);
devanlai 0:f2565808eea5 14 */
devanlai 0:f2565808eea5 15
devanlai 0:f2565808eea5 16 Serial hwUART(USBTX, USBRX);
devanlai 0:f2565808eea5 17 SerialSLCAN slcan(hwUART, can1);
devanlai 0:f2565808eea5 18
devanlai 0:f2565808eea5 19 Timer timer;
devanlai 0:f2565808eea5 20 DigitalOut led(LED1);
devanlai 0:f2565808eea5 21 DigitalOut led2(LED2);
devanlai 0:f2565808eea5 22
devanlai 0:f2565808eea5 23 int main() {
devanlai 0:f2565808eea5 24 can1.mode(CAN::Reset);
devanlai 0:f2565808eea5 25 //can1.frequency(500000);
devanlai 0:f2565808eea5 26 //can1.mode(CAN::Silent);
devanlai 0:f2565808eea5 27
devanlai 0:f2565808eea5 28 //virtualUART.connect(false);
devanlai 0:f2565808eea5 29 hwUART.baud(115200);
devanlai 0:f2565808eea5 30
devanlai 0:f2565808eea5 31 led = 0;
devanlai 0:f2565808eea5 32 led2 = 1;
devanlai 0:f2565808eea5 33 while(1) {
devanlai 0:f2565808eea5 34 bool active = false;
devanlai 0:f2565808eea5 35 active = slcan.update();
devanlai 0:f2565808eea5 36 /*
devanlai 0:f2565808eea5 37 if (virtualUART.configured()) {
devanlai 0:f2565808eea5 38 led2 = 0;
devanlai 0:f2565808eea5 39 active = slcan.update();
devanlai 0:f2565808eea5 40 } else {
devanlai 0:f2565808eea5 41 led2 = 1;
devanlai 0:f2565808eea5 42 virtualUART.connect(false);
devanlai 0:f2565808eea5 43 }
devanlai 0:f2565808eea5 44 */
devanlai 0:f2565808eea5 45
devanlai 0:f2565808eea5 46 if (active) {
devanlai 0:f2565808eea5 47 timer.reset();
devanlai 0:f2565808eea5 48 timer.start();
devanlai 0:f2565808eea5 49 }
devanlai 0:f2565808eea5 50
devanlai 0:f2565808eea5 51 if (timer.read_ms() > 100) {
devanlai 0:f2565808eea5 52 led = 0;
devanlai 0:f2565808eea5 53 timer.stop();
devanlai 0:f2565808eea5 54 } else {
devanlai 0:f2565808eea5 55 led = 1;
devanlai 0:f2565808eea5 56 }
devanlai 0:f2565808eea5 57 }
devanlai 0:f2565808eea5 58 }