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
tests/test_TCP_Socket.h@115:b26176f23e89, 2013-12-31 (annotated)
- 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?
User | Revision | Line number | New 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 |