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:
96:27bdf4aa3a31
Child:
124:6d964b4343c8
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
sgodinez 19:38794784e009 1 #ifndef _TEST_TCP_SOCKET_H_
sgodinez 19:38794784e009 2 #define _TEST_TCP_SOCKET_H_
sgodinez 19:38794784e009 3
mfiore 115:b26176f23e89 4 #define CELL_SHIELD 0 // if using a cell shield board, change to 1
mfiore 115:b26176f23e89 5
mfiore 39:6e94520a3217 6 using namespace mts;
sgodinez 96:27bdf4aa3a31 7 const char PATTERN_LINE1[] = "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|";
sgodinez 96:27bdf4aa3a31 8 const char PATTERN[] = "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|\r\n"
sgodinez 96:27bdf4aa3a31 9 "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}/\r\n"
sgodinez 96:27bdf4aa3a31 10 "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}-\r\n"
sgodinez 96:27bdf4aa3a31 11 "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}\\\r\n"
sgodinez 96:27bdf4aa3a31 12 "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|\r\n"
sgodinez 96:27bdf4aa3a31 13 "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}/\r\n"
sgodinez 96:27bdf4aa3a31 14 "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}-\r\n"
sgodinez 96:27bdf4aa3a31 15 "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}\\\r\n"
sgodinez 96:27bdf4aa3a31 16 "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}*";
sgodinez 96:27bdf4aa3a31 17
sgodinez 96:27bdf4aa3a31 18
sgodinez 96:27bdf4aa3a31 19 const char MENU[] = "1 send ascii pattern until keypress\r\n"
sgodinez 96:27bdf4aa3a31 20 "2 send ascii pattern (numbered)\r\n"
sgodinez 96:27bdf4aa3a31 21 "3 send pattern and close socket\r\n"
sgodinez 96:27bdf4aa3a31 22 "4 send [ETX] and wait for keypress\r\n"
sgodinez 96:27bdf4aa3a31 23 "5 send [DLE] and wait for keypress\r\n"
sgodinez 96:27bdf4aa3a31 24 "6 send all hex values (00-FF)\r\n"
sgodinez 96:27bdf4aa3a31 25 "q quit\r\n"
sgodinez 96:27bdf4aa3a31 26 ">:\r\n";
sgodinez 96:27bdf4aa3a31 27
sgodinez 96:27bdf4aa3a31 28 const char WELCOME[] = "Connected to: TCP test server";
sgodinez 96:27bdf4aa3a31 29
sgodinez 96:27bdf4aa3a31 30 bool testTcpSocketIteration();
mfiore 39:6e94520a3217 31
sgodinez 19:38794784e009 32 void testTcpSocket() {
sgodinez 71:82205735732b 33 Code code;
sgodinez 19:38794784e009 34 const int TEST_PORT = 7000;
sgodinez 19:38794784e009 35 const std::string TEST_SERVER("204.26.122.5");
sgodinez 19:38794784e009 36
sgodinez 19:38794784e009 37 printf("TCP SOCKET TESTING\r\n");
mfiore 115:b26176f23e89 38 #if CELL_SHIELD
mfiore 115:b26176f23e89 39 Transport::setTransport(Transport::CELLULAR);
mfiore 115:b26176f23e89 40 MTSSerialFlowControl* serial = new MTSSerialFlowControl(PTD3, PTD2, PTA12, PTC8);
mfiore 115:b26176f23e89 41 serial->baud(115200);
mfiore 115:b26176f23e89 42 Cellular::getInstance()->init(serial);
mfiore 115:b26176f23e89 43
sgodinez 19:38794784e009 44 printf("Setting APN\r\n");
mfiore 115:b26176f23e89 45 code = Cellular::getInstance()->setApn("wap.cingular");
sgodinez 71:82205735732b 46 if(code == SUCCESS) {
sgodinez 19:38794784e009 47 printf("Success!\r\n");
sgodinez 19:38794784e009 48 } else {
sgodinez 19:38794784e009 49 printf("Error during APN setup [%d]\r\n", (int)code);
sgodinez 19:38794784e009 50 }
sgodinez 19:38794784e009 51
sgodinez 19:38794784e009 52 printf("Setting Socket Closeable\r\n");
sgodinez 19:38794784e009 53 code = Cellular::getInstance()->setSocketCloseable();
sgodinez 71:82205735732b 54 if(code == SUCCESS) {
sgodinez 19:38794784e009 55 printf("Success!\r\n");
sgodinez 19:38794784e009 56 } else {
sgodinez 19:38794784e009 57 printf("Error setting socket closeable [%d]\r\n", (int)code);
sgodinez 19:38794784e009 58 }
mfiore 115:b26176f23e89 59 #else
mfiore 115:b26176f23e89 60 Transport::setTransport(Transport::WIFI);
mfiore 115:b26176f23e89 61 MTSSerial* serial = new MTSSerial(PTD3, PTD2, 256, 256);
mfiore 115:b26176f23e89 62 serial->baud(9600);
mfiore 115:b26176f23e89 63 Wifi::getInstance()->init(serial);
sgodinez 19:38794784e009 64
mfiore 115:b26176f23e89 65 code = Wifi::getInstance()->setNetwork("Mtech_guest", Wifi::WPA2, "MultiModem2!");
mfiore 115:b26176f23e89 66 if(code == SUCCESS) {
sgodinez 19:38794784e009 67 printf("Success!\r\n");
sgodinez 19:38794784e009 68 } else {
mfiore 115:b26176f23e89 69 printf("Error during network setup [%d]\r\n", (int)code);
mfiore 115:b26176f23e89 70 }
mfiore 115:b26176f23e89 71 code = Wifi::getInstance()->setDeviceIP();
mfiore 115:b26176f23e89 72 if(code == SUCCESS) {
mfiore 115:b26176f23e89 73 printf("Success!\r\n");
mfiore 115:b26176f23e89 74 } else {
mfiore 115:b26176f23e89 75 printf("Error during IP setup [%d]\r\n", (int)code);
mfiore 115:b26176f23e89 76 }
mfiore 115:b26176f23e89 77 #endif
mfiore 115:b26176f23e89 78
mfiore 115:b26176f23e89 79 printf("Establishing Connection\r\n");
mfiore 115:b26176f23e89 80 #if CELL_SHIELD
mfiore 115:b26176f23e89 81 if(Cellular::getInstance()->connect()) {
mfiore 115:b26176f23e89 82 #else
mfiore 115:b26176f23e89 83 if(Wifi::getInstance()->connect()) {
mfiore 115:b26176f23e89 84 #endif
mfiore 115:b26176f23e89 85 printf("Success!\r\n");
mfiore 115:b26176f23e89 86 } else {
mfiore 115:b26176f23e89 87 printf("Error during connection\r\n");
sgodinez 19:38794784e009 88 }
sgodinez 19:38794784e009 89
sgodinez 19:38794784e009 90 printf("Opening a TCP Socket\r\n");
mfiore 115:b26176f23e89 91 #if CELL_SHIELD
sgodinez 19:38794784e009 92 if(Cellular::getInstance()->open(TEST_SERVER, TEST_PORT, IPStack::TCP)) {
mfiore 115:b26176f23e89 93 #else
mfiore 115:b26176f23e89 94 if(Wifi::getInstance()->open(TEST_SERVER, TEST_PORT, IPStack::TCP)) {
mfiore 115:b26176f23e89 95 #endif
sgodinez 19:38794784e009 96 printf("Success!\r\n");
sgodinez 19:38794784e009 97 } else {
sgodinez 19:38794784e009 98 printf("Error during TCP socket open [%s:%d]\r\n", TEST_SERVER.c_str(), TEST_PORT);
sgodinez 19:38794784e009 99 }
sgodinez 19:38794784e009 100
sgodinez 96:27bdf4aa3a31 101 //Find Welcome Message and Menu
sgodinez 19:38794784e009 102
sgodinez 96:27bdf4aa3a31 103 int count = 0;
sgodinez 96:27bdf4aa3a31 104 while(testTcpSocketIteration()) {
sgodinez 96:27bdf4aa3a31 105 count++;
sgodinez 96:27bdf4aa3a31 106 printf("Successful Iterations: %d\r\n", count);
sgodinez 19:38794784e009 107 }
sgodinez 19:38794784e009 108
sgodinez 96:27bdf4aa3a31 109
sgodinez 19:38794784e009 110 printf("Closing socket\r\n");
mfiore 115:b26176f23e89 111 #if CELL_SHIELD
sgodinez 19:38794784e009 112 Cellular::getInstance()->close();
mfiore 115:b26176f23e89 113 #else
mfiore 115:b26176f23e89 114 Wifi::getInstance()->close();
mfiore 115:b26176f23e89 115 #endif
sgodinez 19:38794784e009 116
sgodinez 58:408f67fa292f 117 wait(10);
sgodinez 19:38794784e009 118
sgodinez 19:38794784e009 119 printf("Disconnecting\r\n");
mfiore 115:b26176f23e89 120 #if CELL_SHIELD
sgodinez 19:38794784e009 121 Cellular::getInstance()->disconnect();
mfiore 115:b26176f23e89 122 #else
mfiore 115:b26176f23e89 123 Wifi::getInstance()->disconnect();
mfiore 115:b26176f23e89 124 #endif
sgodinez 19:38794784e009 125 }
sgodinez 19:38794784e009 126
sgodinez 96:27bdf4aa3a31 127 bool testTcpSocketIteration() {
sgodinez 96:27bdf4aa3a31 128
sgodinez 96:27bdf4aa3a31 129 Timer tmr;
sgodinez 96:27bdf4aa3a31 130 int bytesRead = 0;
sgodinez 96:27bdf4aa3a31 131 const int bufferSize = 1024;
sgodinez 96:27bdf4aa3a31 132 char buffer[bufferSize] = { 0 };
sgodinez 96:27bdf4aa3a31 133 std::string result;
sgodinez 96:27bdf4aa3a31 134
sgodinez 96:27bdf4aa3a31 135 printf("Receiving Data\r\n");
sgodinez 96:27bdf4aa3a31 136 tmr.start();
sgodinez 96:27bdf4aa3a31 137 do {
mfiore 115:b26176f23e89 138 #if CELL_SHIELD
sgodinez 96:27bdf4aa3a31 139 int size = Cellular::getInstance()->read(buffer, bufferSize, 1000);
mfiore 115:b26176f23e89 140 #else
mfiore 115:b26176f23e89 141 int size = Wifi::getInstance()->read(buffer, bufferSize, 1000);
mfiore 115:b26176f23e89 142 #endif
sgodinez 96:27bdf4aa3a31 143 if(size != -1) {
sgodinez 96:27bdf4aa3a31 144 result.append(buffer, size);
sgodinez 96:27bdf4aa3a31 145 } else {
sgodinez 96:27bdf4aa3a31 146 printf("Error reading from socket\r\n");
sgodinez 96:27bdf4aa3a31 147 return false;
sgodinez 96:27bdf4aa3a31 148 }
sgodinez 96:27bdf4aa3a31 149 printf("Total bytes read %d\r\n", result.size());
sgodinez 96:27bdf4aa3a31 150 } while (tmr.read() <= 15 && bytesRead < bufferSize);
sgodinez 96:27bdf4aa3a31 151
sgodinez 96:27bdf4aa3a31 152 printf("READ: [%d] [%s]\r\n", bytesRead, result.c_str());
sgodinez 96:27bdf4aa3a31 153
sgodinez 96:27bdf4aa3a31 154 size_t pos = result.find(PATTERN_LINE1);
sgodinez 96:27bdf4aa3a31 155 if(pos != std::string::npos) {
sgodinez 96:27bdf4aa3a31 156 //compare buffers
sgodinez 96:27bdf4aa3a31 157 int patternSize = sizeof(PATTERN) - 1;
sgodinez 96:27bdf4aa3a31 158 const char* ptr = &result.data()[pos];
sgodinez 96:27bdf4aa3a31 159 bool match = true;
sgodinez 96:27bdf4aa3a31 160 for(int i = 0; i < patternSize; i++) {
sgodinez 96:27bdf4aa3a31 161 if(PATTERN[i] != ptr[i]) {
sgodinez 96:27bdf4aa3a31 162 printf("1ST PATTERN DOESN'T MATCH AT [%d]\r\n", i);
sgodinez 96:27bdf4aa3a31 163 printf("PATTERN [%02X] BUFFER [%02X]\r\n", PATTERN[i], ptr[i]);
sgodinez 96:27bdf4aa3a31 164 match = false;
sgodinez 96:27bdf4aa3a31 165 break;
sgodinez 96:27bdf4aa3a31 166 }
sgodinez 96:27bdf4aa3a31 167 }
sgodinez 96:27bdf4aa3a31 168 if(match) {
sgodinez 96:27bdf4aa3a31 169 printf("FOUND 1ST PATTERN\r\n");
sgodinez 96:27bdf4aa3a31 170 }
sgodinez 96:27bdf4aa3a31 171
sgodinez 96:27bdf4aa3a31 172 pos = result.find(PATTERN_LINE1, pos + patternSize);
sgodinez 96:27bdf4aa3a31 173 if(pos != std::string::npos) {
sgodinez 96:27bdf4aa3a31 174 //compare buffers
sgodinez 96:27bdf4aa3a31 175 ptr = &result.data()[pos];
sgodinez 96:27bdf4aa3a31 176 match = true;
sgodinez 96:27bdf4aa3a31 177 for(int i = 0; i < patternSize; i++) {
sgodinez 96:27bdf4aa3a31 178 if(PATTERN[i] != ptr[i]) {
sgodinez 96:27bdf4aa3a31 179 printf("2ND PATTERN DOESN'T MATCH AT [%d]\r\n", i);
sgodinez 96:27bdf4aa3a31 180 printf("PATTERN [%02X] BUFFER [%02X]\r\n", PATTERN[i], ptr[i]);
sgodinez 96:27bdf4aa3a31 181 match = false;
sgodinez 96:27bdf4aa3a31 182 break;
sgodinez 96:27bdf4aa3a31 183 }
sgodinez 96:27bdf4aa3a31 184 }
sgodinez 96:27bdf4aa3a31 185 if(match) {
sgodinez 96:27bdf4aa3a31 186 printf("FOUND 2ND PATTERN\r\n");
sgodinez 96:27bdf4aa3a31 187 }
sgodinez 96:27bdf4aa3a31 188 }
sgodinez 96:27bdf4aa3a31 189 }
sgodinez 96:27bdf4aa3a31 190
sgodinez 96:27bdf4aa3a31 191
sgodinez 96:27bdf4aa3a31 192
sgodinez 96:27bdf4aa3a31 193 result.clear();
sgodinez 96:27bdf4aa3a31 194
sgodinez 96:27bdf4aa3a31 195 printf("Writing to socket: 2\r\n");
mfiore 115:b26176f23e89 196 #if CELL_SHIELD
sgodinez 96:27bdf4aa3a31 197 if(Cellular::getInstance()->write("2\r\n", 3, 10000) == 3) {
mfiore 115:b26176f23e89 198 #else
mfiore 115:b26176f23e89 199 if(Wifi::getInstance()->write("2\r\n", 3, 10000) == 3) {
mfiore 115:b26176f23e89 200 #endif
sgodinez 96:27bdf4aa3a31 201 printf("Successfully wrote '2'\r\n");
sgodinez 96:27bdf4aa3a31 202 } else {
sgodinez 96:27bdf4aa3a31 203 printf("Failed to write '2'\r\n");
sgodinez 96:27bdf4aa3a31 204 return false;
sgodinez 96:27bdf4aa3a31 205 }
sgodinez 96:27bdf4aa3a31 206 printf("Expecting 'how many ? >:\r\n");
mfiore 115:b26176f23e89 207 #if CELL_SHIELD
sgodinez 96:27bdf4aa3a31 208 bytesRead = Cellular::getInstance()->read(buffer, bufferSize, 10000);
mfiore 115:b26176f23e89 209 #else
mfiore 115:b26176f23e89 210 bytesRead = Wifi::getInstance()->read(buffer, bufferSize, 10000);
mfiore 115:b26176f23e89 211 #endif
sgodinez 96:27bdf4aa3a31 212 if(bytesRead != -1) {
sgodinez 96:27bdf4aa3a31 213 result.append(buffer, bytesRead);
sgodinez 96:27bdf4aa3a31 214 printf("READ: [%d] [%s]\r\n", bytesRead, result.c_str());
sgodinez 96:27bdf4aa3a31 215 if(result.find("how many") != std::string::npos) {
sgodinez 96:27bdf4aa3a31 216 printf("Successfully found 'how many'\r\n");
sgodinez 96:27bdf4aa3a31 217 printf("Writing to socket: 2\r\n");
mfiore 115:b26176f23e89 218 #if CELL_SHIELD
sgodinez 96:27bdf4aa3a31 219 if(Cellular::getInstance()->write("2\r\n", 3, 10000) == 3) {
mfiore 115:b26176f23e89 220 #else
mfiore 115:b26176f23e89 221 if(Wifi::getInstance()->write("2\r\n", 3, 10000) == 3) {
mfiore 115:b26176f23e89 222 #endif
sgodinez 96:27bdf4aa3a31 223 printf("Successfully wrote '2'\r\n");
sgodinez 96:27bdf4aa3a31 224 } else {
sgodinez 96:27bdf4aa3a31 225 printf("Failed to write '2'\r\n");
sgodinez 96:27bdf4aa3a31 226 return false;
sgodinez 96:27bdf4aa3a31 227 }
sgodinez 96:27bdf4aa3a31 228 } else {
sgodinez 96:27bdf4aa3a31 229 printf("Missing second option to menu item 2\r\n");
sgodinez 96:27bdf4aa3a31 230 }
sgodinez 96:27bdf4aa3a31 231 } else {
sgodinez 96:27bdf4aa3a31 232 printf("Error reading from socket\r\n");
sgodinez 96:27bdf4aa3a31 233 return false;
sgodinez 96:27bdf4aa3a31 234 }
sgodinez 96:27bdf4aa3a31 235
sgodinez 96:27bdf4aa3a31 236
sgodinez 96:27bdf4aa3a31 237 return true;
sgodinez 96:27bdf4aa3a31 238 }
sgodinez 96:27bdf4aa3a31 239
sgodinez 96:27bdf4aa3a31 240
sgodinez 19:38794784e009 241 #endif