this is using the mbed os version 5-13-1
Diff: source/ATCmdManager.cpp
- 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();
}