Multi-Hackers / SocketModem

Dependents:   M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more

Committer:
sgodinez
Date:
Thu Dec 19 21:32:27 2013 +0000
Revision:
44:86fa8f50a1df
Parent:
41:81d035fb0b6a
Child:
53:27c9622de0f9
Merge conflicts were not resolved as expected

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgodinez 41:81d035fb0b6a 1 #ifndef _TEST_TCP_SOCKET_ECHO_H_
sgodinez 41:81d035fb0b6a 2 #define _TEST_TCP_SOCKET_ECHO_H_
sgodinez 41:81d035fb0b6a 3
sgodinez 41:81d035fb0b6a 4
sgodinez 41:81d035fb0b6a 5 //Setup a netcat server with command: ncat -l 5798 -k -c 'xargs -n1 --null echo'
sgodinez 41:81d035fb0b6a 6
sgodinez 41:81d035fb0b6a 7 void testTcpSocketEcho() {
sgodinez 44:86fa8f50a1df 8 using namespace mts;
sgodinez 44:86fa8f50a1df 9
sgodinez 41:81d035fb0b6a 10 Cellular::Code code;
sgodinez 41:81d035fb0b6a 11 const int TEST_PORT = 5798;
sgodinez 41:81d035fb0b6a 12 const std::string TEST_SERVER("204.26.122.96");
sgodinez 41:81d035fb0b6a 13 const char buffer[] = "*ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890*";
sgodinez 41:81d035fb0b6a 14 const int size = sizeof(buffer);
sgodinez 41:81d035fb0b6a 15 char echoData[size];
sgodinez 41:81d035fb0b6a 16
sgodinez 41:81d035fb0b6a 17 printf("TCP SOCKET TESTING\r\n");
sgodinez 41:81d035fb0b6a 18 printf("Setting APN\r\n");
sgodinez 41:81d035fb0b6a 19 code = Cellular::getInstance()->setApn("b2b.tmobile.com");
sgodinez 44:86fa8f50a1df 20 if(code == Cellular::CELL_OK) {
sgodinez 41:81d035fb0b6a 21 printf("Success!\r\n");
sgodinez 41:81d035fb0b6a 22 } else {
sgodinez 41:81d035fb0b6a 23 printf("Error during APN setup [%d]\r\n", (int)code);
sgodinez 41:81d035fb0b6a 24 }
sgodinez 41:81d035fb0b6a 25
sgodinez 41:81d035fb0b6a 26 printf("Setting Socket Closeable\r\n");
sgodinez 41:81d035fb0b6a 27 code = Cellular::getInstance()->setSocketCloseable();
sgodinez 44:86fa8f50a1df 28 if(code == Cellular::CELL_OK) {
sgodinez 41:81d035fb0b6a 29 printf("Success!\r\n");
sgodinez 41:81d035fb0b6a 30 } else {
sgodinez 41:81d035fb0b6a 31 printf("Error setting socket closeable [%d]\r\n", (int)code);
sgodinez 41:81d035fb0b6a 32 }
sgodinez 41:81d035fb0b6a 33
sgodinez 41:81d035fb0b6a 34 printf("Establishing PPP Connection\r\n");
sgodinez 41:81d035fb0b6a 35 if(Cellular::getInstance()->connect()) {
sgodinez 41:81d035fb0b6a 36 printf("Success!\r\n");
sgodinez 41:81d035fb0b6a 37 } else {
sgodinez 41:81d035fb0b6a 38 printf("Error during PPP connection\r\n");
sgodinez 41:81d035fb0b6a 39 }
sgodinez 41:81d035fb0b6a 40
sgodinez 41:81d035fb0b6a 41 printf("Opening a TCP Socket\r\n");
sgodinez 41:81d035fb0b6a 42 if(Cellular::getInstance()->open(TEST_SERVER, TEST_PORT, IPStack::TCP)) {
sgodinez 41:81d035fb0b6a 43 printf("Success!\r\n");
sgodinez 41:81d035fb0b6a 44 } else {
sgodinez 41:81d035fb0b6a 45 printf("Error during TCP socket open [%s:%d]\r\n", TEST_SERVER.c_str(), TEST_PORT);
sgodinez 41:81d035fb0b6a 46 }
sgodinez 41:81d035fb0b6a 47
sgodinez 41:81d035fb0b6a 48 printf("Sending buffer\r\n");
sgodinez 41:81d035fb0b6a 49 int bytesWritten = Cellular::getInstance()->write(buffer, size, 10000);
sgodinez 41:81d035fb0b6a 50 if(bytesWritten == size) {
sgodinez 41:81d035fb0b6a 51 printf("Successfully sent buffer\r\n");
sgodinez 41:81d035fb0b6a 52 } else {
sgodinez 41:81d035fb0b6a 53 printf("Failed to send buffer\r\n");
sgodinez 41:81d035fb0b6a 54 }
sgodinez 41:81d035fb0b6a 55
sgodinez 41:81d035fb0b6a 56 printf("Receiving echo (timeout = 15 seconds)\r\n");
sgodinez 41:81d035fb0b6a 57 Timer tmr;
sgodinez 41:81d035fb0b6a 58 int bytesRead = 0;
sgodinez 41:81d035fb0b6a 59 tmr.start();
sgodinez 41:81d035fb0b6a 60 do {
sgodinez 41:81d035fb0b6a 61 bytesRead += Cellular::getInstance()->read(&echoData[bytesRead], size - bytesRead, 1000);
sgodinez 41:81d035fb0b6a 62 printf("Total bytes read %d\r\n", bytesRead);
sgodinez 41:81d035fb0b6a 63 } while (tmr.read_ms() <= 15000 && bytesRead < size);
sgodinez 41:81d035fb0b6a 64
sgodinez 41:81d035fb0b6a 65 //Safely Cap at Max Size
sgodinez 41:81d035fb0b6a 66 echoData[size - 1] = '\0';
sgodinez 41:81d035fb0b6a 67 printf("Comparing Buffers\r\n");
sgodinez 41:81d035fb0b6a 68 printf("SENT: [%s]\r\n", buffer);
sgodinez 41:81d035fb0b6a 69 printf("RECV: [%s]\r\n", echoData);
sgodinez 41:81d035fb0b6a 70
sgodinez 41:81d035fb0b6a 71 for(int i = 0; i < size - 1; i++) {
sgodinez 41:81d035fb0b6a 72 if(buffer[i] != echoData[i]) {
sgodinez 41:81d035fb0b6a 73 printf("Buffers do not match at index %d\r\n", i);
sgodinez 41:81d035fb0b6a 74 break;
sgodinez 41:81d035fb0b6a 75 }
sgodinez 41:81d035fb0b6a 76 }
sgodinez 41:81d035fb0b6a 77
sgodinez 41:81d035fb0b6a 78 printf("Closing socket\r\n");
sgodinez 41:81d035fb0b6a 79 Cellular::getInstance()->close();
sgodinez 41:81d035fb0b6a 80
sgodinez 41:81d035fb0b6a 81
sgodinez 41:81d035fb0b6a 82 printf("Disconnecting\r\n");
sgodinez 41:81d035fb0b6a 83 Cellular::getInstance()->disconnect();
sgodinez 41:81d035fb0b6a 84 }
sgodinez 41:81d035fb0b6a 85
sgodinez 41:81d035fb0b6a 86 #endif