This tests the CAN interface between two LISA C027 MBED Boards. By connecting the two boards, pins 1,2,3 respectively on the CAN interface, and loading and executing this code on BOTH boards, CAN messages will be received, and printed, on the PC-USB console interface of both devices.

Dependencies:   C027-REVB UbloxUSBModem mbed

Fork of C027_ModemTransparentUSBCDC_revb by Stephen Dickey

Committer:
dixter1
Date:
Fri Dec 13 23:37:54 2013 +0000
Revision:
1:15b5edb4a91f
Parent:
0:92ab4f4846f8
Child:
2:c4ad86683060
Updated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dixter1 0:92ab4f4846f8 1 #include "mbed.h"
dixter1 0:92ab4f4846f8 2 #include "C027.h"
dixter1 0:92ab4f4846f8 3 #include "WANDongle.h"
dixter1 0:92ab4f4846f8 4 #include "USBSerialStream.h"
dixter1 0:92ab4f4846f8 5 #include "UbloxCDMAModemInitializer.h"
dixter1 0:92ab4f4846f8 6 #include "UbloxGSMModemInitializer.h"
dixter1 0:92ab4f4846f8 7
dixter1 0:92ab4f4846f8 8 DigitalOut mdm_activity(LED);
dixter1 0:92ab4f4846f8 9
dixter1 0:92ab4f4846f8 10 int main()
dixter1 0:92ab4f4846f8 11 {
dixter1 0:92ab4f4846f8 12 int led_toggle_count = 5;
dixter1 0:92ab4f4846f8 13
dixter1 0:92ab4f4846f8 14 // the instantiation of the type, calls C027::C027
dixter1 0:92ab4f4846f8 15 C027 c027;
dixter1 0:92ab4f4846f8 16
dixter1 1:15b5edb4a91f 17 c027.mdmPower(true,false);
dixter1 1:15b5edb4a91f 18
dixter1 1:15b5edb4a91f 19 // enable the GPS, and connect it
dixter1 1:15b5edb4a91f 20 // to the m3.
dixter1 1:15b5edb4a91f 21 c027.gpsPower(true, false);
dixter1 0:92ab4f4846f8 22
dixter1 0:92ab4f4846f8 23 #if 0
dixter1 0:92ab4f4846f8 24 while(1) {
dixter1 0:92ab4f4846f8 25 mdm_activity = !mdm_activity;
dixter1 0:92ab4f4846f8 26 wait(0.2);
dixter1 0:92ab4f4846f8 27 }
dixter1 0:92ab4f4846f8 28 #else
dixter1 0:92ab4f4846f8 29 while( led_toggle_count-- > 0 )
dixter1 0:92ab4f4846f8 30 {
dixter1 0:92ab4f4846f8 31 mdm_activity = !mdm_activity;
dixter1 0:92ab4f4846f8 32 wait(0.2);
dixter1 0:92ab4f4846f8 33 }
dixter1 0:92ab4f4846f8 34 #endif
dixter1 0:92ab4f4846f8 35
dixter1 0:92ab4f4846f8 36 // open the mdm serial port
dixter1 0:92ab4f4846f8 37 WANDongle mdmDongle;
dixter1 0:92ab4f4846f8 38 USBSerialStream mdmStream(mdmDongle.getSerial(1/* the CDC usually 0 or 1, LISA-C requires CDC1*/));
dixter1 0:92ab4f4846f8 39 USBHost* host = USBHost::getHostInst();
dixter1 0:92ab4f4846f8 40 mdmDongle.addInitializer(new UbloxCDMAModemInitializer(host));
dixter1 0:92ab4f4846f8 41 mdmDongle.addInitializer(new UbloxGSMModemInitializer(host));
dixter1 0:92ab4f4846f8 42
dixter1 0:92ab4f4846f8 43 // open the PC serial port and (use the same baudrate)
dixter1 0:92ab4f4846f8 44 Serial pc(USBTX, USBRX);
dixter1 0:92ab4f4846f8 45 pc.baud(MDMBAUD);
dixter1 0:92ab4f4846f8 46
dixter1 1:15b5edb4a91f 47 pc.printf( "M3->USB CDC connection ready\n");
dixter1 1:15b5edb4a91f 48
dixter1 0:92ab4f4846f8 49 while (1)
dixter1 0:92ab4f4846f8 50 {
dixter1 0:92ab4f4846f8 51 uint8_t buf[64];
dixter1 0:92ab4f4846f8 52 size_t len;
dixter1 0:92ab4f4846f8 53 int i;
dixter1 0:92ab4f4846f8 54
dixter1 0:92ab4f4846f8 55 if (!mdmDongle.connected())
dixter1 0:92ab4f4846f8 56 {
dixter1 0:92ab4f4846f8 57 mdmDongle.tryConnect();
dixter1 0:92ab4f4846f8 58 }
dixter1 0:92ab4f4846f8 59 else
dixter1 0:92ab4f4846f8 60 {
dixter1 0:92ab4f4846f8 61
dixter1 0:92ab4f4846f8 62 // transfer data from pc to modem
dixter1 0:92ab4f4846f8 63 len = mdmStream.space();
dixter1 0:92ab4f4846f8 64 if (len>0)
dixter1 0:92ab4f4846f8 65 {
dixter1 0:92ab4f4846f8 66 if (len > sizeof(buf))
dixter1 0:92ab4f4846f8 67 len = sizeof(buf);
dixter1 0:92ab4f4846f8 68 for (i = 0; (i < len) && pc.readable(); )
dixter1 0:92ab4f4846f8 69 buf[i++] = pc.getc();
dixter1 0:92ab4f4846f8 70 if (OK == mdmStream.write(buf, i))
dixter1 0:92ab4f4846f8 71 /* do something? */;
dixter1 0:92ab4f4846f8 72 }
dixter1 0:92ab4f4846f8 73 // transfer data from modem to pc
dixter1 0:92ab4f4846f8 74 len = mdmStream.available();
dixter1 0:92ab4f4846f8 75 if ((len>0) && pc.writeable())
dixter1 0:92ab4f4846f8 76 {
dixter1 0:92ab4f4846f8 77 if (len > sizeof(buf))
dixter1 0:92ab4f4846f8 78 len = sizeof(buf);
dixter1 0:92ab4f4846f8 79 if (OK == mdmStream.read(buf, &len, len))
dixter1 0:92ab4f4846f8 80 {
dixter1 0:92ab4f4846f8 81 for (i = 0; (i < len); )
dixter1 0:92ab4f4846f8 82 {
dixter1 0:92ab4f4846f8 83 mdm_activity=!mdm_activity;
dixter1 0:92ab4f4846f8 84 pc.putc(buf[i++]);
dixter1 0:92ab4f4846f8 85 }
dixter1 0:92ab4f4846f8 86
dixter1 0:92ab4f4846f8 87 // default the led to off
dixter1 0:92ab4f4846f8 88 mdm_activity=0;
dixter1 0:92ab4f4846f8 89 }
dixter1 0:92ab4f4846f8 90 }
dixter1 0:92ab4f4846f8 91 }
dixter1 0:92ab4f4846f8 92 }
dixter1 0:92ab4f4846f8 93 }