For RevB MBED Hardware, with the new boot sequence. This example establishes a transparent link between the mbed USB CDC port and the modem (LISA) on the C027. You can use it to use the standard u-blox tools such as m-center or any terminal program. These tools can then connect to the serial port and talk directly to the modem. Baudrate should be set to 115200 baud and is fixed. m-center can be downloaded from u-blox website following this link: http://www.u-blox.com/en/evaluation-tools-a-software/u-center/m-center.html
Dependencies: C027-REVB UbloxUSBModem mbed
main.cpp@4:34eb741c5ed5, 2013-12-14 (annotated)
- Committer:
- dixter1
- Date:
- Sat Dec 14 01:20:56 2013 +0000
- Revision:
- 4:34eb741c5ed5
- Parent:
- 1:15b5edb4a91f
- Child:
- 6:2d7edb824271
Cleanup incorrect commit to the program.
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 | 4:34eb741c5ed5 | 47 | pc.printf( "M3->USB CDC connection ready\r\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 | } |