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:
Thu Jan 02 18:11:25 2014 +0000
Revision:
124:6d964b4343c8
Parent:
tests/blinky_ping_test.h@115:b26176f23e89
Child:
141:571e0ef6c8dc
finish cleaning up test directory; socket, socket echo, and ping tests can be run on wifi or cellular by changing #define value in each test header; test_main.cpp has commented out main function with all tests ready to go

Who changed what in which revision?

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