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 21:47:11 2013 +0000
Revision:
115:b26176f23e89
Parent:
105:1977b7154940
add Transport.h to include_me.h; start cleaning up test directory - not finished yet

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 26:f3e06d63967f 4 #define MAX_TRIES 5
mfiore 31:31b95ea90f80 5 #define MAX_REGISTRATION_TRIES 10
mfiore 26:f3e06d63967f 6
mfiore 115:b26176f23e89 7 #define CELL_SHIELD 0 // if using a cell shield board, change to 1
mfiore 115:b26176f23e89 8
mfiore 115:b26176f23e89 9 using namespace mts;
mfiore 115:b26176f23e89 10
mfiore 115:b26176f23e89 11 /* APN is ignored if using wifi */
mfiore 115:b26176f23e89 12 bool cellPingTest(const std::string& apn, const std::string& server);
mfiore 115:b26176f23e89 13 bool wifiPingTest(const std::string& server, const std::string& ssid, Wifi::SecurityType type, const std::string& key);
mfiore 26:f3e06d63967f 14 void blinkLed(DigitalOut led);
mfiore 26:f3e06d63967f 15
mfiore 115:b26176f23e89 16 void pingTest() {
mfiore 26:f3e06d63967f 17 DigitalOut ledG(LED1);
mfiore 26:f3e06d63967f 18 DigitalOut ledR(LED2);
mfiore 26:f3e06d63967f 19
mfiore 26:f3e06d63967f 20 ledG = 1;
mfiore 26:f3e06d63967f 21 ledR = 1;
mfiore 115:b26176f23e89 22
mfiore 115:b26176f23e89 23 std::string server = "8.8.8.8"; // Google's DNS server
mfiore 115:b26176f23e89 24 #if CELL_SHIELD
mfiore 115:b26176f23e89 25 std::string apn = "wap.cingular"; // APN of sim card
mfiore 115:b26176f23e89 26 if (cellPingTest(apn, server)) {
mfiore 115:b26176f23e89 27 #else
mfiore 115:b26176f23e89 28 std::string ssid = "Mtech_guest"; // ssid of wireless network
mfiore 115:b26176f23e89 29 Wifi::SecurityType type = Wifi::WPA2; // NONE, WEP64, WEP128, WPA, WPA2
mfiore 115:b26176f23e89 30 std::string key = "MultiModem2!"; // password for network (if type is not "NONE")
mfiore 115:b26176f23e89 31 if (wifiPingTest(server, ssid, type, key)) {
mfiore 115:b26176f23e89 32 #endif
mfiore 26:f3e06d63967f 33 printf("success!\n\r");
mfiore 26:f3e06d63967f 34 blinkLed(ledG);
mfiore 26:f3e06d63967f 35 } else {
mfiore 26:f3e06d63967f 36 printf("failure!\n\r");
mfiore 26:f3e06d63967f 37 blinkLed(ledR);
mfiore 26:f3e06d63967f 38 }
mfiore 26:f3e06d63967f 39 }
mfiore 26:f3e06d63967f 40
mfiore 115:b26176f23e89 41 bool wifiPingTest(const std::string& server, const std::string& ssid, Wifi::SecurityType type, const std::string& key) {
mfiore 26:f3e06d63967f 42 int i;
mfiore 26:f3e06d63967f 43
mfiore 115:b26176f23e89 44 Transport::setTransport(Transport::WIFI);
mfiore 115:b26176f23e89 45 MTSSerial* serial = new MTSSerial(PTD3, PTD2, 256, 256);
mfiore 115:b26176f23e89 46 serial->baud(9600);
mfiore 115:b26176f23e89 47 Wifi* wifi = Wifi::getInstance();
mfiore 115:b26176f23e89 48 wifi->init(serial);
mfiore 115:b26176f23e89 49
mfiore 115:b26176f23e89 50 printf("waiting for radio to come up\r\n");
mfiore 115:b26176f23e89 51 wait(5);
mfiore 115:b26176f23e89 52
mfiore 115:b26176f23e89 53 i = 0;
mfiore 115:b26176f23e89 54 while (i++ < MAX_TRIES) {
mfiore 115:b26176f23e89 55 if (wifi->setNetwork(ssid, type, key) == SUCCESS) {
mfiore 115:b26176f23e89 56 printf("set network\r\n");
mfiore 115:b26176f23e89 57 break;
mfiore 115:b26176f23e89 58 } else {
mfiore 115:b26176f23e89 59 printf("failed to set network\r\n");
mfiore 115:b26176f23e89 60 }
mfiore 115:b26176f23e89 61 wait(1);
mfiore 115:b26176f23e89 62 }
mfiore 115:b26176f23e89 63
mfiore 115:b26176f23e89 64 i = 0;
mfiore 115:b26176f23e89 65 while (i++ < MAX_TRIES) {
mfiore 115:b26176f23e89 66 if (wifi->setDeviceIP() == SUCCESS) {
mfiore 115:b26176f23e89 67 printf("set IP\r\n");
mfiore 115:b26176f23e89 68 break;
mfiore 115:b26176f23e89 69 } else {
mfiore 115:b26176f23e89 70 printf("failed to set IP\r\n");
mfiore 115:b26176f23e89 71 }
mfiore 115:b26176f23e89 72 wait(1);
mfiore 115:b26176f23e89 73 }
mfiore 115:b26176f23e89 74
mfiore 115:b26176f23e89 75 i = 0;
mfiore 115:b26176f23e89 76 while (i++ < MAX_TRIES) {
mfiore 115:b26176f23e89 77 if (wifi->connect()) {
mfiore 115:b26176f23e89 78 printf("connected\r\n");
mfiore 115:b26176f23e89 79 break;
mfiore 115:b26176f23e89 80 } else {
mfiore 115:b26176f23e89 81 printf("failed to connect\r\n");
mfiore 115:b26176f23e89 82 }
mfiore 115:b26176f23e89 83 wait(1);
mfiore 115:b26176f23e89 84 }
mfiore 115:b26176f23e89 85
mfiore 115:b26176f23e89 86 printf("pinging %s\n\r", server.c_str());
mfiore 115:b26176f23e89 87 return wifi->ping(server);
mfiore 115:b26176f23e89 88 }
mfiore 115:b26176f23e89 89
mfiore 115:b26176f23e89 90 bool cellPingTest(const std::string& apn, const std::string& server) {
mfiore 115:b26176f23e89 91 int i;
mfiore 115:b26176f23e89 92
mfiore 115:b26176f23e89 93 Transport::setTransport(Transport::CELLULAR);
mfiore 26:f3e06d63967f 94 MTSSerialFlowControl* serial = new MTSSerialFlowControl(PTD3, PTD2, PTA12, PTC8);
mfiore 26:f3e06d63967f 95 serial->baud(115200);
mfiore 105:1977b7154940 96 Cellular* cell = Cellular::getInstance();
mfiore 105:1977b7154940 97 cell->init(serial);
mfiore 26:f3e06d63967f 98
mfiore 31:31b95ea90f80 99 printf("waiting for radio to come up\n\r");
mfiore 26:f3e06d63967f 100 wait(30);
mfiore 31:31b95ea90f80 101
mfiore 31:31b95ea90f80 102 i = 0;
mfiore 31:31b95ea90f80 103 while (i++ < MAX_REGISTRATION_TRIES) {
mfiore 31:31b95ea90f80 104 if (cell->getRegistration() == Cellular::REGISTERED) {
mfiore 31:31b95ea90f80 105 printf("registered with tower\n\r");
mfiore 31:31b95ea90f80 106 break;
mfiore 31:31b95ea90f80 107 } else if (i >= MAX_REGISTRATION_TRIES) {
mfiore 31:31b95ea90f80 108 printf("failed to register with tower\n\r");
mfiore 31:31b95ea90f80 109 return false;
mfiore 31:31b95ea90f80 110 }
mfiore 31:31b95ea90f80 111 wait(3);
mfiore 31:31b95ea90f80 112 }
mfiore 31:31b95ea90f80 113
mfiore 26:f3e06d63967f 114 i = 0;
mfiore 26:f3e06d63967f 115 printf("setting APN to %s\n\r", apn.c_str());
mfiore 26:f3e06d63967f 116 while (i++ < MAX_TRIES) {
mfiore 105:1977b7154940 117 if (cell->setApn(apn) == SUCCESS) {
mfiore 26:f3e06d63967f 118 printf("successfully set APN\n\r");
mfiore 26:f3e06d63967f 119 break;
mfiore 31:31b95ea90f80 120 } else if (i >= MAX_TRIES) {
mfiore 26:f3e06d63967f 121 printf("failed to set APN\n\r");
mfiore 26:f3e06d63967f 122 return false;
mfiore 26:f3e06d63967f 123 }
mfiore 26:f3e06d63967f 124 wait(1);
mfiore 26:f3e06d63967f 125 }
mfiore 26:f3e06d63967f 126
mfiore 26:f3e06d63967f 127 i = 0;
mfiore 26:f3e06d63967f 128 printf("bringing up PPP link\n\r");
mfiore 26:f3e06d63967f 129 while (i++ < MAX_TRIES) {
mfiore 26:f3e06d63967f 130 if (cell->connect()) {
mfiore 26:f3e06d63967f 131 printf("PPP link is up\n\r");
mfiore 26:f3e06d63967f 132 break;
mfiore 31:31b95ea90f80 133 } else if (i >= MAX_TRIES) {
mfiore 26:f3e06d63967f 134 printf("failed to bring PPP link up\n\r");
mfiore 26:f3e06d63967f 135 return false;
mfiore 26:f3e06d63967f 136 }
mfiore 26:f3e06d63967f 137 wait(1);
mfiore 26:f3e06d63967f 138 }
mfiore 26:f3e06d63967f 139
mfiore 26:f3e06d63967f 140 printf("pinging %s\n\r", server.c_str());
mfiore 26:f3e06d63967f 141 return cell->ping(server);
mfiore 26:f3e06d63967f 142 }
mfiore 26:f3e06d63967f 143
mfiore 26:f3e06d63967f 144 void blinkLed(DigitalOut led) {
mfiore 26:f3e06d63967f 145 led = 0;
mfiore 26:f3e06d63967f 146
mfiore 26:f3e06d63967f 147 while (true) {
mfiore 26:f3e06d63967f 148 wait(0.25);
mfiore 26:f3e06d63967f 149 led = !led;
mfiore 26:f3e06d63967f 150 }
mfiore 26:f3e06d63967f 151 }