Simple detection for LE910-NA1 modules
Fork of MTS-Cellular by
Diff: Cellular/EasyIP.h
- Revision:
- 52:2cb58398a4f9
- Parent:
- 49:1fc51c53cebf
- Child:
- 56:43205bd2752a
--- a/Cellular/EasyIP.h Tue Aug 05 18:35:22 2014 +0000 +++ b/Cellular/EasyIP.h Mon Aug 11 16:03:19 2014 +0000 @@ -1,5 +1,5 @@ -#ifndef SMC_H -#define SMC_H +#ifndef EASYIP_H +#define EASYIP_H #include <string> #include <vector> @@ -23,287 +23,7 @@ * the mbed library. * The default baud rate for the cellular radio is 115200 bps. * - * @code - * #include "mbed.h" - * #include "mtsas.h" - * #include "TCPSocketConnection.h" - * - * int main(){ - * //Modify to match your apn if you are using an HSPA radio with a SIM card - * const char APN[] = ""; - * - * //Sets the log level to INFO, which is about midway on priority levels - * //Possible levels: FATAL, ERROR, WARNING, INFO, DEBUG, TRACE, NONE - * MTSLog::setLogLevel(MTSLog::TRACE_LEVEL); - * - * // STMicro Nucelo F401RE - * // The supported jumper configurations of the MTSAS do not line up with - * // the pin mapping of the Nucleo F401RE. Therefore, the MTSAS serial TX - * // pin (JP8 Pin 2) must be manually jumped to Serial1 RX (Shield pin D2) - * // and the MTSAS serial RX pin (JP9 Pin 2) pin must be manually jumped to - * // Serial1 TX (Shield pin D8). - * // Uncomment the following line to use the STMicro Nuceleo F401RE - * MTSSerialFlowControl* io = new MTSSerialFlowControl(D8, D2, D3, D6); - * - * // Freescale KL46Z - * // To configure the pins for the Freescale KL46Z board, use configuration B - * // for the SocketModem. - * // Uncomment the following line to use the Freescale KL46Z board - * // MTSSerialFlowControl* io = new MTSSerialFlowControl(D2, D9, D3, D6); - * - * // Freescale KL64F - * // To configure the pins for the Freescale KL46Z board, use configuration A - * // for the SocketModem. - * // Uncomment te following line to use the Freescale KL46F board - * // MTSSerialFlowControl* io = new MTSSerialFlowControl(D1, D0, D3, D6); - * - * // Sets the baudrate for communicating with the radio - * io->baud(115200); - * - * // Sets up the interfacing with the radio through the MTS library - * Cellular* radio = CellularFactory::create(io); - * radio->configureSignals(D4, D7, RESET); - * Transport::setTransport(radio); - * - * // Sets the APN on the device (if necessary) - * for (int i = 0; i < 10; i++) { - * if (i >= 10) { - * logError("Failed to set APN to %s", APN); - * } - * if (radio->setApn(APN) == MTS_SUCCESS) { - * logInfo("Successfully set APN to %s", APN); - * break; - * } else { - * wait(1); - * } - * } - * - * //Establish PPP link - * for (int i = 0; i < 10; i++) { - * if (i >= 10) { - * logError("Failed to establish PPP link"); - * } - * if (radio->connect() == true) { - * logInfo("Successfully established PPP link"); - * break; - * } else { - * wait(1); - * } - * } - * - * //Ping google.com (optional) - * for (int i = 0; i < 10; i++) { - * if (i >= 10) { - * logError("Failed to ping www.google.com"); - * } - * if (radio->ping("www.google.com") == true) { - * logInfo("Successfully pinged www.google.com"); - * break; - * } else { - * wait(1); - * } - * } - * - * //Used for packet verification from server's data response - * const char PATTERN_LINE1[] = "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|"; - * const char PATTERN[] = "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|\r\n" - * "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}/\r\n" - * "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}-\r\n" - * "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}\\\r\n" - * "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|\r\n" - * "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}/\r\n" - * "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}-\r\n" - * "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}\\\r\n" - * "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}*\r\n"; - * - * const char MENU_LINE1[] = "send ascii pattern until keypress"; - * const char MENU[] = "1 send ascii pattern until keypress" - * "2 send ascii pattern (numbered)" - * "3 send pattern and close socket" - * "4 send [ETX] and wait for keypress" - * "5 send [DLE] and wait for keypress" - * "6 send all hex values (00-FF)" - * "q quit" - * ">:"; - * - * const char TCP_TEST_SERVER[] = "204.26.122.5"; - * const int TCP_TEST_PORT = 7000; - * - * //Creates TCP socket pointer instance - * TCPSocketConnection* sock = new TCPSocketConnection(); - * //Turns off read_blocking and sets socket timeout to 2s - * sock->set_blocking(false, 2); - * - * Timer tmr; //Used for timeouts - * int bytesRead = 0; //Number of bytes read - * const int readSize = 1024; //Size of buffer - * char buffer[readSize] = {0}; //Read buffer - * string result; //Result as a string - * - * //Open TCP socket - * for (int i = 0; i < 5; i++) { - * if (i >= 5) { - * logError("Failed to open socket"); - * } - * if (! sock->connect(TCP_TEST_SERVER, TCP_TEST_PORT)) { - * logInfo("Opened TCP server"); - * break; - * } else { - * wait(1); - * } - * } - * - * //Waiting for menu from remote server - * logInfo("Receiving Menu"); - * tmr.reset(); - * tmr.start(); - * do { - * bytesRead = sock->receive(buffer, readSize); - * if (bytesRead > 0) { - * result.append(buffer, bytesRead); - * } - * logInfo("Total Bytes Read: %d", result.size()); - * if(result.find(MENU_LINE1) != std::string::npos) { - * break; - * } - * } while(tmr.read() <= 40); - * - * wait(5); - * - * logInfo("Received: [%d] [%s]", result.size(), result.c_str()); - * - * //Checking that menu was successfully received - * size_t pos = result.find(MENU_LINE1); - * if(pos != string::npos) { - * logInfo("Found Menu 1st Line"); - * } else { - * logError("Failed To Find Menu 1st Line"); - * sock->close(); - * return 0; - * } - * - * result.clear(); - * - * //Sends a response of '2' back to choose option 2 from the menu - * logInfo("Writing To Socket: 2"); - * if(sock->send("2\r\n", 3) == 3) { - * logInfo("Successfully Wrote '2'"); - * } else { - * logError("Failed To Write '2'"); - * sock->close(); - * return 0; - * } - * logInfo("Expecting 'how many ? >:'"); - * tmr.reset(); - * tmr.start(); - * do { - * bytesRead = sock->receive(buffer, readSize); - * if (bytesRead > 0) { - * result.append(buffer, bytesRead); - * } - * logInfo("Total Bytes Read: %d", result.size()); - * if(result.find("how many") != std::string::npos) { - * break; - * } - * } while(tmr.read() <= 40); - * - * logInfo("Received: [%d] [%s]", result.size(), result.c_str()); - * - * //Sends 2 to have the server send the pattern twice - * if(result.find("how many") != std::string::npos) { - * logInfo("Successfully Found 'how many'"); - * logInfo("Writing To Socket: 2"); - * if(sock->send("2\r\n", 3) == 3) { - * logInfo("Successfully wrote '2'"); - * } else { - * logError("Failed to write '2'"); - * sock->close(); - * return 0; - * } - * } else { - * logError("didn't receive 'how many'"); - * sock->close(); - * return 0; - * } - * - * result.clear(); - * - * //Receives data from request sent to server - * logInfo("Receiving Data"); - * tmr.reset(); - * tmr.start(); - * do { - * bytesRead = sock->receive(buffer, readSize); - * if (bytesRead > 0) { - * result.append(buffer, bytesRead); - * } - * logInfo("Total Bytes Read: %d", result.size()); - * if(result.size() >= 1645) { - * break; - * } - * } while(tmr.read() <= 40); - * - * logInfo("Received Data: [%d] [%s]", result.size(), result.c_str()); - * - * //Compares received data with expected data - * pos = result.find(PATTERN_LINE1); - * if(pos != string::npos) { - * int patternSize = sizeof(PATTERN) - 1; - * const char* ptr = &result.data()[pos]; - * bool match = true; - * for(int i = 0; i < patternSize; i++) { - * if(PATTERN[i] != ptr[i]) { - * logError("1st Pattern Doesn't Match At [%d]", i); - * logError("Pattern [%02X] Buffer [%02X]", PATTERN[i], ptr[i]); - * match = false; - * break; - * } - * } - * if(match) { - * logInfo("Found 1st Pattern"); - * } else { - * logError("Failed To Find 1st Pattern"); - * sock->close(); - * return 0; - * } - * - * pos = result.find(PATTERN_LINE1, pos + patternSize); - * if(pos != std::string::npos) { - * ptr = &result.data()[pos]; - * match = true; - * for(int i = 0; i < patternSize; i++) { - * if(PATTERN[i] != ptr[i]) { - * logError("2nd Pattern Doesn't Match At [%d]", i); - * logError("Pattern [%02X] Buffer [%02X]", PATTERN[i], ptr[i]); - * match = false; - * break; - * } - * } - * if(match) { - * logInfo("Found 2nd Pattern"); - * } else { - * logError("Failed To Find 2nd Pattern"); - * sock->close(); - * return 0; - * } - * } - * } else { - * logError("Failed To Find Pattern 1st Line"); - * sock->close(); - * return 0; - * } - * - * //Clears the result, and closes the socket connection. - * result.clear(); - * sock->close(); - * - * //Disconnect ppp link - * radio->disconnect(); - * - * logInfo("End of example code"); - * return 0; - * } - * @endcode + * Example code is found under Cellular.h */ class EasyIP : public Cellular { @@ -371,7 +91,12 @@ virtual int write(const char* data, int length, int timeout = -1); virtual unsigned int readable(); virtual unsigned int writeable(); - virtual bool ping(const std::string& address = "8.8.8.8"); //Google DNS server used as default ping address + + /** Pings specified DNS or IP address + * Google DNS server used as default ping address + * @returns true if ping received alive response else false + */ + virtual bool ping(const std::string& address = "8.8.8.8"); virtual std::string getDeviceIP(); virtual bool setDeviceIP(std::string address = "DHCP"); @@ -434,4 +159,4 @@ } -#endif /* SMC_H */ +#endif /* EASYIP_H */