Fork with SeeedStudio Xadow GPS v2 enabled
Dependencies: FXOS8700CQ MODSERIAL XadowGPS mbed
Fork of Avnet_ATT_Cellular_IOT by
Diff: wnc_control.cpp
- Revision:
- 75:8cc98a3b9c62
- Parent:
- 74:3e3ee15584e5
- Parent:
- 73:da723fedfdd2
- Child:
- 77:c65eae5b9958
--- a/wnc_control.cpp Sat Aug 13 15:08:11 2016 +0000 +++ b/wnc_control.cpp Sat Aug 13 17:46:30 2016 +0000 @@ -59,12 +59,12 @@ cmd_str += MY_APN_STR; cmd_str += ",IP"; at_send_wnc_cmd(cmd_str.c_str(), &pRespStr, 4*WNC_TIMEOUT_MS); // Set APN, cmd seems to take a little longer sometimes - PUTS(cmd_str.c_str()); } static bool reportStatus = true; do { + PUTS("------------ software_init_mdm! --------->\r\n"); if (check_wnc_ready() == 0) { if (reportStatus == false) @@ -290,6 +290,8 @@ // SIM card OK, now check for signal and cellular network registration cmdRes1 = at_send_wnc_cmd("AT+CREG?", &pRespStr, WNC_TIMEOUT_MS); // Check if registered on network + if (pRespStr->size() > 0) + { pos = pRespStr->find("CREG: "); if (pos != string::npos) { @@ -309,7 +311,15 @@ #ifdef WNC_CMD_DEBUG_ON_VERBOSE PUTS("------------ WNC Ready ---------------->\r\n"); #endif - + } + else + { +#ifdef WNC_CMD_DEBUG_ON_VERBOSE + PUTS("------------ CREG No Reply !----------->\r\n"); +#endif + return (-2); + } + return (0); } @@ -326,6 +336,7 @@ PUTS("FAIL send cmd: "); #ifdef WNC_CMD_DEBUG_ON_VERBOSE PUTS(s); + #else string truncStr(s, 50); truncStr += "\r\n"; @@ -366,7 +377,7 @@ pc.printf("[[WNC_MDM_ERR = WNC_EXTERR]] \r\n"); } - if (cmdRes == 0) + if (cmdRes == 0) WNC_MDM_ERR = WNC_OK; return (cmdRes); @@ -375,8 +386,7 @@ int at_send_wnc_cmd(const char * s, string ** r, int ms_timeout) { //Eaddy - static const char * rsp_lst[] = { "OK", "ERROR","@EXTERR", "+CME",NULL }; - //static const char * rsp_lst[] = { "OK", "ERROR", NULL }; + static const char * rsp_lst[] = { "OK", "ERROR","@EXTERR", "+CME", NULL }; int len; #ifdef WNC_CMD_DEBUG_ON @@ -416,6 +426,7 @@ PUTS("]\r\n"); #endif #endif + #if 0 if (res > 0) return -1; @@ -428,7 +439,7 @@ return 0; } else if (res == 2) { /* @EXTERR */ - pc.printf("@EXTERR and res = %d \r\n", res); + PRINTF("@EXTERR and res = %d \r\n", res); return -3; } else return -1; @@ -522,7 +533,11 @@ cmd_str += "\","; cmd_str += port; cmd_str += ",30"; - send_wnc_cmd(cmd_str.c_str(), &pRespStr, 31000); + int cmd = send_wnc_cmd(cmd_str.c_str(), &pRespStr, 31000); + if (cmd != WNC_OK) { + // Per WNC: re-close even if open fails! + at_sockclose_wnc(); + } } void at_sockclose_wnc(void) @@ -588,7 +603,6 @@ } cmd_str += "\""; res = send_wnc_cmd(cmd_str.c_str(), &pRespStr, 120000); - if (res == -3) PUTS("sockwrite is disconnect \r\n"); } @@ -619,29 +633,35 @@ // between each retry. wait_ms(10); - send_wnc_cmd(cmd_str.c_str(), &pRespStr, WNC_TIMEOUT_MS); - - size_t pos_start = pRespStr->find("\"") + 1; - size_t pos_end = pRespStr->rfind("\"") - 1; + if (send_wnc_cmd(cmd_str.c_str(), &pRespStr, WNC_TIMEOUT_MS) == 0) + { + size_t pos_start = pRespStr->find("\"") + 1; + size_t pos_end = pRespStr->rfind("\"") - 1; - // Make sure search finds what it's looking for! - if (pos_start != string::npos && pos_end != string::npos) + // Make sure search finds what it's looking for! + if (pos_start != string::npos && pos_end != string::npos) i = (pos_end - pos_start + 1); // Num hex chars, 2 per byte - else + else i = 0; - if (i > 0) + if (i > 0) + { + retries = 1; // If any data found retry 1 more time to catch data that might be in another + // WNC payload + string byte; + while (pos_start < pos_end) + { + byte = pRespStr->substr(pos_start, 2); + *pS += (char)strtol(byte.c_str(), NULL, 16); + pos_start += 2; + } + numBytes += i/2; + } + } + else { - retries = 1; // If any data found retry 1 more time to catch data that might be in another - // WNC payload - string byte; - while (pos_start < pos_end) - { - byte = pRespStr->substr(pos_start, 2); - *pS += (char)strtol(byte.c_str(), NULL, 16); - pos_start += 2; - } - numBytes += i/2; + PUTS("no readsock reply!\r\n"); + return (0); } } }