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
main.cpp@1:15b5edb4a91f, 2013-12-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |