A library for talking to Multi-Tech's Cellular SocketModem Devices.

Dependents:   M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more

Committer:
mfiore
Date:
Tue Dec 31 15:11:04 2013 +0000
Revision:
105:1977b7154940
Parent:
39:6e94520a3217
Child:
115:b26176f23e89
fixed ping test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfiore 26:f3e06d63967f 1 #include "mbed.h"
mfiore 26:f3e06d63967f 2 #include "include_me.h"
mfiore 26:f3e06d63967f 3
mfiore 105:1977b7154940 4 using namespace mts;
mfiore 105:1977b7154940 5
mfiore 26:f3e06d63967f 6 #define MAX_TRIES 5
mfiore 31:31b95ea90f80 7 #define MAX_REGISTRATION_TRIES 10
mfiore 26:f3e06d63967f 8
mfiore 26:f3e06d63967f 9 bool ping_test(const std::string& apn, const std::string& server);
mfiore 26:f3e06d63967f 10 void blinkLed(DigitalOut led);
mfiore 26:f3e06d63967f 11
mfiore 26:f3e06d63967f 12 void blinkyPingTest() {
mfiore 26:f3e06d63967f 13 DigitalOut ledG(LED1);
mfiore 26:f3e06d63967f 14 DigitalOut ledR(LED2);
mfiore 26:f3e06d63967f 15 std::string apn = "wap.cingular";
mfiore 26:f3e06d63967f 16 std::string server = "8.8.8.8";
mfiore 26:f3e06d63967f 17
mfiore 26:f3e06d63967f 18 ledG = 1;
mfiore 26:f3e06d63967f 19 ledR = 1;
mfiore 26:f3e06d63967f 20
mfiore 26:f3e06d63967f 21 if (ping_test(apn, server)) {
mfiore 26:f3e06d63967f 22 printf("success!\n\r");
mfiore 26:f3e06d63967f 23 blinkLed(ledG);
mfiore 26:f3e06d63967f 24 } else {
mfiore 26:f3e06d63967f 25 printf("failure!\n\r");
mfiore 26:f3e06d63967f 26 blinkLed(ledR);
mfiore 26:f3e06d63967f 27 }
mfiore 26:f3e06d63967f 28 }
mfiore 26:f3e06d63967f 29
mfiore 26:f3e06d63967f 30 bool ping_test(const std::string& apn, const std::string& server) {
mfiore 26:f3e06d63967f 31 int i;
mfiore 26:f3e06d63967f 32
mfiore 26:f3e06d63967f 33 MTSSerialFlowControl* serial = new MTSSerialFlowControl(PTD3, PTD2, PTA12, PTC8);
mfiore 26:f3e06d63967f 34 serial->baud(115200);
mfiore 105:1977b7154940 35 Cellular* cell = Cellular::getInstance();
mfiore 105:1977b7154940 36 cell->init(serial);
mfiore 26:f3e06d63967f 37
mfiore 31:31b95ea90f80 38 printf("waiting for radio to come up\n\r");
mfiore 26:f3e06d63967f 39 wait(30);
mfiore 31:31b95ea90f80 40
mfiore 31:31b95ea90f80 41 i = 0;
mfiore 31:31b95ea90f80 42 while (i++ < MAX_REGISTRATION_TRIES) {
mfiore 31:31b95ea90f80 43 if (cell->getRegistration() == Cellular::REGISTERED) {
mfiore 31:31b95ea90f80 44 printf("registered with tower\n\r");
mfiore 31:31b95ea90f80 45 break;
mfiore 31:31b95ea90f80 46 } else if (i >= MAX_REGISTRATION_TRIES) {
mfiore 31:31b95ea90f80 47 printf("failed to register with tower\n\r");
mfiore 31:31b95ea90f80 48 return false;
mfiore 31:31b95ea90f80 49 }
mfiore 31:31b95ea90f80 50 wait(3);
mfiore 31:31b95ea90f80 51 }
mfiore 31:31b95ea90f80 52
mfiore 31:31b95ea90f80 53 printf("signal strength: %d\n\r", cell->getSignalStrength());
mfiore 26:f3e06d63967f 54
mfiore 26:f3e06d63967f 55 i = 0;
mfiore 26:f3e06d63967f 56 printf("setting APN to %s\n\r", apn.c_str());
mfiore 26:f3e06d63967f 57 while (i++ < MAX_TRIES) {
mfiore 105:1977b7154940 58 if (cell->setApn(apn) == SUCCESS) {
mfiore 26:f3e06d63967f 59 printf("successfully set APN\n\r");
mfiore 26:f3e06d63967f 60 break;
mfiore 31:31b95ea90f80 61 } else if (i >= MAX_TRIES) {
mfiore 26:f3e06d63967f 62 printf("failed to set APN\n\r");
mfiore 26:f3e06d63967f 63 return false;
mfiore 26:f3e06d63967f 64 }
mfiore 26:f3e06d63967f 65 wait(1);
mfiore 26:f3e06d63967f 66 }
mfiore 26:f3e06d63967f 67
mfiore 26:f3e06d63967f 68 i = 0;
mfiore 26:f3e06d63967f 69 printf("bringing up PPP link\n\r");
mfiore 26:f3e06d63967f 70 while (i++ < MAX_TRIES) {
mfiore 26:f3e06d63967f 71 if (cell->connect()) {
mfiore 26:f3e06d63967f 72 printf("PPP link is up\n\r");
mfiore 26:f3e06d63967f 73 break;
mfiore 31:31b95ea90f80 74 } else if (i >= MAX_TRIES) {
mfiore 26:f3e06d63967f 75 printf("failed to bring PPP link up\n\r");
mfiore 26:f3e06d63967f 76 return false;
mfiore 26:f3e06d63967f 77 }
mfiore 26:f3e06d63967f 78 wait(1);
mfiore 26:f3e06d63967f 79 }
mfiore 26:f3e06d63967f 80
mfiore 26:f3e06d63967f 81 printf("pinging %s\n\r", server.c_str());
mfiore 26:f3e06d63967f 82 return cell->ping(server);
mfiore 26:f3e06d63967f 83 }
mfiore 26:f3e06d63967f 84
mfiore 26:f3e06d63967f 85 void blinkLed(DigitalOut led) {
mfiore 26:f3e06d63967f 86 led = 0;
mfiore 26:f3e06d63967f 87
mfiore 26:f3e06d63967f 88 while (true) {
mfiore 26:f3e06d63967f 89 wait(0.25);
mfiore 26:f3e06d63967f 90 led = !led;
mfiore 26:f3e06d63967f 91 }
mfiore 26:f3e06d63967f 92 }