this is using the mbed os version 5-13-1

Dependencies:   mbed-http

Revision:
98:65c2333a38b6
Parent:
97:0aa46e5ef15d
Child:
99:05398b3184f8
--- a/source/ATCmdManager.cpp	Fri Apr 19 10:26:58 2019 +0000
+++ b/source/ATCmdManager.cpp	Sun Apr 21 13:06:41 2019 +0000
@@ -54,7 +54,7 @@
     _parser.oob("AT+CPWROFF", callback(this, &ATCmdManager::_oob_reboot));
     _parser.oob("AT+CGMR", callback(this, &ATCmdManager::_oob_get_fw_ver));
     _parser.oob("AT+UWSCAN", callback(this, &ATCmdManager::_oob_scanWiFiNetworks));
-    _parser.oob("AT+UWSCA=", callback(this, &ATCmdManager::_oob_WiFiStationConfigurationAction));
+    _parser.oob("AT+UWSCA=", callback(this, &ATCmdManager::_oob_WiFiStationConfigAction));
     //_parser.oob("AT+UWSCD=", callback(this, &ATCmdManager::_oob_disconnectWiFiNetwork));
     _parser.oob("AT+UDDRP", callback(this, &ATCmdManager::_oob_setupInternetConnection));
     _parser.oob("AT+UWSC=0,2", callback(this, &ATCmdManager::_oob_setWiFiSSID));
@@ -68,8 +68,10 @@
     printf("\n --- ATCmdManager constructor completed ---\n");
     at_resp = AT_RESP_NONE;
     dataMode = AT_CMD_DATA_MODE;
-    print_heap_and_isr_stack_info();
-    event_queue.call_every(3600000,&print_memory_info);
+    debug_flag = 0;
+    _event_queue.call_in(10, &print_heap_and_isr_stack_info);
+    //print_heap_and_isr_stack_info();
+    _event_queue.call_every(3600000,&print_memory_info);
 }
 
 
@@ -86,9 +88,19 @@
 void ATCmdManager::processResponses(){
         dequeueATresponse();
         dequeueWiFidataResponse();
+        if(debug_flag>0){
+            //debug_flag--;
+            printf(" back to ProcessResponses in Main loop... at_resp = %d\r\n", at_resp);
+        }
         char * respStr;
+        //if(at_resp > AT_COMMAND_FAILED)
+        //return;
         switch(at_resp){
             case AT_RESP_NONE:
+                if(debug_flag>0){
+                    debug_flag--;
+                    printf(" In IDLE state \r\n");
+                }
                 // IDLE response state
                 break;
             case AT_SCAN_RESP:
@@ -204,23 +216,25 @@
                 at_resp = AT_RESP_NONE;
                 break;
             case AT_COMMAND_FAILED:  
+            {
                 // AT_HTTP_RESP response state 
                 printf("\n [ATCMD MAN] WIFI COMMAND FAILED!!\r\n");
                 //_smutex.lock();
                 //_parser.send("\r\nNACK\r\n");
                 //_smutex.unlock();
-                char * respStr = (char *) resp_data->buffer;
+                respStr = (char *) resp_data->buffer;
                 sendAtConfirmationFreeMpool(respStr);
-                AT_RESP_NONE;
+                at_resp = AT_RESP_NONE;
                 break;
-            default:
+            }
+            //default:
                 // UNKNOWN response state
                 //_smutex.lock();
-                printf("\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\r\n");
-                sendAtConfirmationFreeMpool(ERROR_RESP);   //_parser.send(OK_RESP);
+                //printf("\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\r\n");
+                //sendAtConfirmationFreeMpool(ERROR_RESP);   //_parser.send(OK_RESP);
                 //_smutex.unlock();
-                at_resp = AT_RESP_NONE;
-                break;
+                //at_resp = AT_RESP_NONE;
+                //break;
         }
 }
 
@@ -424,6 +438,9 @@
                 {
                     //_parser.process_oob();
                     while (_parser.process_oob() && all) {
+                        if(debug_flag>0){
+                            printf("finished queuing WIFI CONNECT CMD -- back to process_oob loop \r\n");
+                        }
                     }
                     break;
                 }
@@ -457,6 +474,7 @@
                             printf("DATA_EVENT received!\n");
                             break;
                         case DATA_COMMAND:
+                        {
                             printf("DATA_COMMAND received!\n");
                             sendAtConfirmation(OK_RESP);   //_parser.send(OK_RESP);
                             if(createHttpRequest() == true){
@@ -474,6 +492,7 @@
                             int stop = Kernel::get_ms_count();
                             printf("\n Time Elapsed = %d\n", stop-start);
                             break;
+                        }
                         case AT_REQUEST:
                             printf("AT_REQUEST received!\n");
                             break;
@@ -499,7 +518,12 @@
     else
     {
         // Poll for inbound packets
+        static int msgCnt = 0;
         while (_parser.process_oob() && all) {
+                        printf("inbound message found... msgCnt = %d \r\n", ++msgCnt);
+                        if(debug_flag>0){
+                            printf("finished queuing WIFI CONNECT CMD -- back to process_oob loop \r\n");
+                        }
         }
     }        
     set_timeout();
@@ -603,7 +627,8 @@
             case 2:
                 printf("\nATCmdParser: Extended data Mode request received\n");
                 dataMode = AT_EXT_DATA_MODE;
-                print_heap_and_isr_stack_info();
+                _event_queue.call_in(10, &print_heap_and_isr_stack_info);
+                //print_heap_and_isr_stack_info();
                 break;
             default:
                 printf("\nATCmdParser: ERROR - UNKNOWN DATA MODE RECEIVED!!! \n");
@@ -703,16 +728,17 @@
 
 
 
-void ATCmdManager::_oob_WiFiStationConfigurationAction()
+void ATCmdManager::_oob_WiFiStationConfigAction()
 {
-    uint8_t if_id; // interface id for request
-    action_id_t action_id; // interface id for request
-    _parser.scanf("%d,%d", &if_id, &action_id);
+    int if_id; // interface id for request
+    int aId; // interface id for request
+    _parser.recv("%d,%d", &if_id, &aId);
     //_smutex.lock();
-    printf("\n Received WiFi Configuration Action command!!\r\n");
+    printf("\n Received WiFi Configuration Action command %d %d!!\r\n", if_id, aId);
     sendAtConfirmation(OK_RESP);   //_parser.send(OK_RESP);
-    if(if_id == WIFI_CONFIG_ID && (uint8_t)action_id <5){
+    if(if_id == WIFI_CONFIG_ID && aId <5){
         wifi_cmd_t cmd;
+        action_id_t action_id = (action_id_t) aId;
         switch(action_id){
             case WIFI_CONFIG_RESET:
                 break;
@@ -738,6 +764,9 @@
                 break;
         }
     }
+    if(debug_flag>0){
+        printf("finished queuing WIFI CONNECT CMD \r\n");
+    }
     return;
 }
 
@@ -989,19 +1018,27 @@
 #else
     wifi_cmd_message_t *wifiCmd = (wifi_cmd_message_t *) malloc(sizeof(wifi_cmd_message_t));
     if(wifiCmd == NULL){
-        printf("[ATCMD MAN] tr malloc() : queued memory allocation failed\n");
-        print_memory_info();
-        print_heap_and_isr_stack_info();
+        printf("[ATCMD MAN] try malloc() : queued memory allocation failed\n");
+        //_event_queue.call_in(10, &print_memory_info);
+        _event_queue.call_in(10, &print_heap_and_isr_stack_info);
+        //print_memory_info();
+        //print_heap_and_isr_stack_info();
         return false;
     }
 #endif
     wifiCmd->wifi_cmd            = cmd;
     _aT2WiFiCmdQueue->put(wifiCmd);
     printf("[ATCMD MAN] queued wifi_cmd = %d\n", wifiCmd->wifi_cmd);
+    if((int)cmd == 5)
+    debug_flag = 3;
     return true;
 }
 
 bool  ATCmdManager::dequeueATresponse(){
+    if(debug_flag>0){
+        debug_flag--;
+        printf("Called dequeueATresponse after WIFI CONNECT CMD \r\n");
+    }
     if(at_resp != AT_RESP_NONE) return false; // busy
     osEvent evt = _wiFi2ATCmdQueue->get(0);
     if(evt.status == osEventMessage){
@@ -1020,7 +1057,8 @@
 
 bool  ATCmdManager::queueWiFiDataRequest(wifi_data_msg_t data_req){
     //print_memory_info();
-    print_heap_and_isr_stack_info();
+    _event_queue.call_in(10, &print_heap_and_isr_stack_info);
+    //print_heap_and_isr_stack_info();
     wifi_data_msg_t *wifiData = _aT2WiFiDatamPool->alloc();
     wifiData->wifi_cmd        = data_req.wifi_cmd;
     wifiData->dataLen        = data_req.dataLen;
@@ -1032,12 +1070,17 @@
 }
 
 bool  ATCmdManager::dequeueWiFidataResponse(){
+    if(debug_flag>0){
+        debug_flag--;
+        printf("Called dequeueWiFidataResponse after WIFI CONNECT CMD \r\n");
+    }
     if(at_resp != AT_RESP_NONE) return false; // busy
     osEvent evt = _wiFi2ATDataQueue->get(0);
     if(evt.status == osEventMessage){
         resp_data = (at_data_msg_t*)evt.value.p;
         setNextResponse(resp_data->at_resp);
-        print_heap_and_isr_stack_info();
+        _event_queue.call_in(10, &print_heap_and_isr_stack_info);
+        //print_heap_and_isr_stack_info();
     }
     return true;
 }
@@ -1048,17 +1091,19 @@
     _smutex.lock();
     switch(dataMode){
         case AT_CMD_DATA_MODE:
-            _parser.send(buf);
+            _parser.send("%s", buf);
             break;
         case AT_STD_DATA_MODE:
-            _parser.send(buf);
+            _parser.send("%s", buf);
             break;
         case AT_EXT_DATA_MODE:
+        {
             int len =  strlen(buf);
             outputEDMdata((const uint8_t *) buf, len, AT_MSG_ID, CONFIRMATION_MSG_TYPE, NO_CHANNEL);
             break;
+        }
         default:
-            _parser.send(buf);
+            _parser.send("%s", buf);
             break;
     }
     //wait_ms(1);
@@ -1078,9 +1123,9 @@
             int len =  strlen(buf);
             outputEDMdata((const uint8_t *) buf, len, AT_MSG_ID, EVENT_MSG_TYPE, NO_CHANNEL);
             break;
-        default:
-            _parser.send(buf);
-            break;
+        //default:
+            //_parser.send(buf);
+            //break;
     }
     _smutex.unlock();
 }
@@ -1108,14 +1153,14 @@
     _parser.write((const char *)buf, pLen);
     // send EDM Message stop byte
     _parser.putc(EDM_STOP_BYTE);
+    _smutex.unlock();
     int msWait = (pLen + 5+20)/20;
     wait_ms(msWait);
-    _smutex.unlock();
 }
 
 void ATCmdManager::return_response(bool download) {
     char * resp = (char *) resp_data->buffer;
-    _smutex.lock();
+    //_smutex.lock();
     printf("\n[ATCMD MAN] received response:\n");
     if(download == false) // not download must be ascii header
     {
@@ -1128,9 +1173,10 @@
     //_parser.write(resp, resp_data->dataLen);
     outputEDMdata((const uint8_t *)resp, resp_data->dataLen, DATA_MSG_ID, 
                   EVENT_MSG_TYPE, WIFI_CHANNEL);
-    _smutex.unlock();
+    //_smutex.unlock();
     _wiFi2ATDatamPool->free(resp_data);
     resp_data = NULL;
     //print_memory_info();
-    print_heap_and_isr_stack_info();   
+    _event_queue.call_in(10, &print_heap_and_isr_stack_info);
+    //print_heap_and_isr_stack_info();   
 }