Viktor Shin
/
WIZnet-IoTShield-AMM592-Ping
WIZnet-IoTShield-AMM592
Diff: main.cpp
- Revision:
- 1:8b209e861bb1
- Parent:
- 0:5cd6077e0a8e
- Child:
- 2:957b12467039
--- a/main.cpp Tue Mar 19 00:25:29 2019 +0000 +++ b/main.cpp Wed Mar 20 05:32:43 2019 +0000 @@ -55,9 +55,9 @@ // Cat.M1 #define MBED_CONF_IOTSHIELD_CATM1_TX D8 #define MBED_CONF_IOTSHIELD_CATM1_RX D2 -#define MBED_CONF_IOTSHIELD_CATM1_RESET D6 +#define MBED_CONF_IOTSHIELD_CATM1_RESET D7 #define MBED_CONF_IOTSHIELD_CATM1_PWRKEY D9 -#define MBED_CONF_IOTSHIELD_CATM1_WAKE NC + // Sensors #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0 #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1 @@ -77,6 +77,7 @@ // Functions: PDP context int8_t setContextActivate_BG96(void); // Activate a PDP Context int8_t setContextDeactivate_BG96(void); // Deactivate a PDP Context +int8_t getIpAddress_BG96(char * ipstr); // Functions: Ping test void pingToHost_BG96(char * host, int timeout, int pingnum); @@ -87,6 +88,8 @@ UARTSerial *_serial; // Cat.M1 module ATCmdParser *_parser; +DigitalOut _RESET_BG96(MBED_CONF_IOTSHIELD_CATM1_RESET); +DigitalOut _PWRKEY_BG96(MBED_CONF_IOTSHIELD_CATM1_PWRKEY); void serialPcInit(void) { @@ -117,35 +120,24 @@ BG96_PARSER_DEBUG); } -void printPingToHost_BG96(char * host, int timeout, int pingnum) -{ - int i; - char resp_str[50] = {0, }; - - if((timeout < 1) || (timeout > 255)) { - devlog("Ping timeout range is 1-255, and the default value is 4 (unit: sec)\r\n"); - return; - } +void catm1DeviceReset_BG96(void) +{ + _RESET_BG96 = 1; + _PWRKEY_BG96 = 1; + wait_ms(300); - if((pingnum < 1) || (pingnum > 10)) { - devlog("The maximum number of sending Ping request range is 1-10, and the default value is 4\r\n"); - return; - } - - _parser->set_timeout((1000 * timeout) + 2000); + _RESET_BG96 = 0; + _PWRKEY_BG96 = 0; + wait_ms(400); - if(_parser->send("AT+QPING=%d,\"%s\",%d,%d", 1, host, timeout, pingnum) && _parser->recv("OK")) { - for(i = 0; i < (pingnum); i++) { - _parser->recv("+QPING: %s\n", resp_str); - devlog("%s: %s\r\n", host, resp_str); - } - - } - - _parser->set_timeout(BG96_DEFAULT_TIMEOUT); - _parser->flush(); + _RESET_BG96 = 1; + wait_ms(1000); } +// ---------------------------------------------------------------- +// Main routine +// ---------------------------------------------------------------- + int main() { serialPcInit(); @@ -153,9 +145,11 @@ myprintf("Waiting for Cat.M1 Module Ready...\r\n"); - // Todo: BG96 Hardware Init (hardware reset & pwrkey act) + catm1DeviceReset_BG96(); waitCatM1Ready(); + + wait_ms(5000); myprintf("System Init Complete\r\n"); @@ -190,6 +184,10 @@ setContextDeactivate_BG96(); } +// ---------------------------------------------------------------- +// Functions: Cat.M1 Status +// ---------------------------------------------------------------- + void waitCatM1Ready(void) { while(1) @@ -286,8 +284,8 @@ return RET_NOK; // failed } } - devlog("APN Check Done\r\n"); - + devlog("APN Check Done\r\n"); + return RET_OK; } @@ -313,6 +311,10 @@ return ret; } +// ---------------------------------------------------------------- +// Functions: Cat.M1 DNS +// ---------------------------------------------------------------- + int8_t getIpAddressByName_BG96(const char * name, char * ipstr) { char buf2[50]; @@ -338,18 +340,9 @@ return ret; } -int8_t getIpAddress_BG96(char * ipstr) // IPv4 or IPv6 -{ - int8_t ret = RET_NOK; - int id, state, type; // not used - - _parser->send("AT+QIACT?"); - if(_parser->recv("+QIACT: %d,%d,%d,\"%[^\"]\"", &id, &state, &type, ipstr) - && _parser->recv("OK")) { - ret = RET_OK; - } - return ret; -} +// ---------------------------------------------------------------- +// Functions: Cat.M1 PDP context activate / deactivate +// ---------------------------------------------------------------- int8_t setContextActivate_BG96(void) // Activate a PDP Context { @@ -361,7 +354,7 @@ ret = RET_OK; } else { devlog("PDP Context Activation failed\r\n"); - } + } return ret; } @@ -379,111 +372,49 @@ return ret; } -int8_t sockOpenConnect_BG96(const char * type, const char * addr, int port) + +int8_t getIpAddress_BG96(char * ipstr) // IPv4 or IPv6 { - int8_t ret = RET_NOK; - int err = 1; - int id = 0; - - bool done = false; - Timer t; - - _parser->set_timeout(BG96_CONNECT_TIMEOUT); - - if((strcmp(type, "TCP") != 0) && (strcmp(type, "UDP") != 0)) { - return RET_NOK; - } + int8_t ret = RET_NOK; + int id, state, type; // not used - t.start(); - - _parser->send("AT+QIOPEN=1,%d,\"%s\",\"%s\",%d", id, type, addr, port); - do { - done = (_parser->recv("+QIOPEN: %d,%d", &id, &err) && (err == 0)); - } while(!done && t.read_ms() < BG96_CONNECT_TIMEOUT); - - if(done) ret = RET_OK; - - _parser->set_timeout(BG96_DEFAULT_TIMEOUT); - _parser->flush(); - - return ret; -} - -int8_t sockClose_BG96(void) -{ - int8_t ret = RET_NOK; - int id = 0; - - _parser->set_timeout(BG96_CONNECT_TIMEOUT); - - if(_parser->send("AT+QICLOSE=%d", id) && _parser->recv("OK")) { - ret = RET_OK; - } - _parser->set_timeout(BG96_DEFAULT_TIMEOUT); - + _parser->send("AT+QIACT?"); + if(_parser->recv("+QIACT: %d,%d,%d,\"%[^\"]\"", &id, &state, &type, ipstr) + && _parser->recv("OK")) { + ret = RET_OK; + } return ret; } -int8_t dataSend_BG96(char * data, int len) -{ - int8_t ret = RET_NOK; - int id = 0; - bool done = false; +// ---------------------------------------------------------------- +// Functions: Cat.M1 Ping test +// ---------------------------------------------------------------- + +void printPingToHost_BG96(char * host, int timeout, int pingnum) +{ + int i; + char resp_str[50] = {0, }; + + if((timeout < 1) || (timeout > 255)) { + devlog("Ping timeout range is 1-255, and the default value is 4 (unit: sec)\r\n"); + return; + } - _parser->set_timeout(BG96_SEND_TIMEOUT); + if((pingnum < 1) || (pingnum > 10)) { + devlog("The maximum number of sending Ping request range is 1-10, and the default value is 4\r\n"); + return; + } + + _parser->set_timeout((1000 * timeout) + 2000); - _parser->send("AT+QISEND=%d,%ld", id, len); - if( !done && _parser->recv(">") ) - done = (_parser->write(data, len) <= 0); - - if( !done ) - done = _parser->recv("SEND OK"); + if(_parser->send("AT+QPING=%d,\"%s\",%d,%d", 1, host, timeout, pingnum) && _parser->recv("OK")) { + for(i = 0; i < (pingnum); i++) { + _parser->recv("+QPING: %s\n", resp_str); + devlog("%s: %s\r\n", host, resp_str); + } + + } _parser->set_timeout(BG96_DEFAULT_TIMEOUT); - - return ret; -} - -int8_t checkDataRecv_BG96(void) -{ - int8_t ret = RET_NOK; - int id = 0; - char cmd[20]; - - bool received = false; - - sprintf(cmd, "+QIURC: \"recv\",%d", id); - _parser->set_timeout(1); - received = _parser->recv(cmd); - _parser->set_timeout(BG96_DEFAULT_TIMEOUT); - - if(received) ret = RET_OK; - return ret; + _parser->flush(); } - -int8_t dataRecv_BG96(char * data, int * len) -{ - int8_t ret = RET_NOK; - int id = 0; - int recvCount = 0; - - _parser->set_timeout(BG96_RECV_TIMEOUT); - - if( _parser->send("AT+QIRD=%d", id) && _parser->recv("+QIRD:%d\r\n",&recvCount) ) { - if(recvCount > 0) { - _parser->getc(); - _parser->read(data, recvCount); - if(_parser->recv("OK")) { - ret = RET_OK; - } else { - recvCount = 0; - } - } - } - _parser->set_timeout(BG96_DEFAULT_TIMEOUT); - _parser->flush(); - - *len = recvCount; - - return ret; -}