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

Dependencies:   mbed-http

Committer:
ocomeni
Date:
Thu May 02 21:50:17 2019 +0000
Revision:
103:7b566b522427
Parent:
102:9748f290a1a5
Child:
104:11e9605093c9
reached cloud hello message in box comms sequence

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ocomeni 103:7b566b522427 1 #include "debug.h"
ocomeni 74:f26e846adfe9 2 #include "ATCmdManager.h"
ocomeni 74:f26e846adfe9 3 #include "common_config.h"
ocomeni 79:a2187bbfa407 4 #include "common_types.h"
ocomeni 84:7c7add00f4bf 5 #include "http_request.h"
ocomeni 92:ec9550034276 6 #include "mbed_memory_status.h"
ocomeni 84:7c7add00f4bf 7 //#include "mbed_memory_status.h"
ocomeni 103:7b566b522427 8 #define FILE_CODE "atcmd"
ocomeni 74:f26e846adfe9 9
ocomeni 78:07bb86e3ce14 10 ATCmdManager::ATCmdManager(PinName tx, PinName rx, SMDevicePeripheral *blePeripheral,
ocomeni 79:a2187bbfa407 11 events::EventQueue &event_queue, WiFiManager *wifi,
ocomeni 79:a2187bbfa407 12 MemoryPool<wifi_cmd_message_t, 16> *aT2WiFimPool,
ocomeni 80:e8f0e92e3ac9 13 Queue<wifi_cmd_message_t, 16> *aT2WiFiCmdQueue,
ocomeni 81:637a87eb8170 14 MemoryPool<at_resp_message_t, 16> *wiFi2ATmPool,
ocomeni 81:637a87eb8170 15 Queue<at_resp_message_t, 16> *wiFi2ATCmdQueue,
ocomeni 87:99b37d26ff2a 16 MemoryPool<wifi_data_msg_t, PQDSZ> *aT2WiFiDatamPool,
ocomeni 87:99b37d26ff2a 17 Queue<wifi_data_msg_t, PQDSZ> *aT2WiFiDataQueue,
ocomeni 87:99b37d26ff2a 18 MemoryPool<at_data_msg_t, PQDSZ> *wiFi2ATDatamPool,
ocomeni 87:99b37d26ff2a 19 Queue<at_data_msg_t, PQDSZ> *wiFi2ATDataQueue,
ocomeni 79:a2187bbfa407 20 bool debug)
ocomeni 74:f26e846adfe9 21 :
ocomeni 74:f26e846adfe9 22 _serial(tx, rx, DEFAULT_BAUD_RATE),
ocomeni 78:07bb86e3ce14 23 blePeripheral(blePeripheral),
ocomeni 79:a2187bbfa407 24 _event_queue(event_queue),
ocomeni 79:a2187bbfa407 25 wiFiManager(wiFiManager),
ocomeni 79:a2187bbfa407 26 _aT2WiFimPool(aT2WiFimPool),
ocomeni 80:e8f0e92e3ac9 27 _aT2WiFiCmdQueue(aT2WiFiCmdQueue),
ocomeni 80:e8f0e92e3ac9 28
ocomeni 80:e8f0e92e3ac9 29 _wiFi2ATmPool(wiFi2ATmPool),
ocomeni 80:e8f0e92e3ac9 30 _wiFi2ATCmdQueue(wiFi2ATCmdQueue),
ocomeni 80:e8f0e92e3ac9 31
ocomeni 80:e8f0e92e3ac9 32 _aT2WiFiDatamPool(aT2WiFiDatamPool),
ocomeni 80:e8f0e92e3ac9 33 _aT2WiFiDataQueue(aT2WiFiDataQueue),
ocomeni 80:e8f0e92e3ac9 34
ocomeni 80:e8f0e92e3ac9 35 _wiFi2ATDatamPool(wiFi2ATDatamPool),
ocomeni 80:e8f0e92e3ac9 36 _wiFi2ATDataQueue(wiFi2ATDataQueue),
ocomeni 80:e8f0e92e3ac9 37
ocomeni 80:e8f0e92e3ac9 38 _parser(&_serial)
ocomeni 80:e8f0e92e3ac9 39
ocomeni 74:f26e846adfe9 40
ocomeni 74:f26e846adfe9 41 {
ocomeni 74:f26e846adfe9 42 // constructor
ocomeni 103:7b566b522427 43 _serial.set_baud(2*DEFAULT_BAUD_RATE);
ocomeni 103:7b566b522427 44 //Flow flowCtrl = Flow::Disabled;
ocomeni 103:7b566b522427 45 //_serial.set_flow_control(mbed::SerialBase::Disabled);
ocomeni 74:f26e846adfe9 46 _parser.debug_on(debug);
ocomeni 74:f26e846adfe9 47 _parser.set_delimiter("\r\n");
ocomeni 103:7b566b522427 48 _parser.send("+STARTUP\r\n\r\n");
ocomeni 103:7b566b522427 49 _parser.oob("AT\r", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 75:08eff6258e1b 50 _parser.oob("ATE0", callback(this, &ATCmdManager::_oob_echo_off));
ocomeni 75:08eff6258e1b 51 _parser.oob("ATE1", callback(this, &ATCmdManager::_oob_echo_on));
ocomeni 75:08eff6258e1b 52 _parser.oob("AT+UMRS", callback(this, &ATCmdManager::_oob_uart_setup));
ocomeni 75:08eff6258e1b 53
ocomeni 75:08eff6258e1b 54 _parser.oob("ATO", callback(this, &ATCmdManager::_oob_data_mode));
ocomeni 75:08eff6258e1b 55 _parser.oob("AT+UMLA", callback(this, &ATCmdManager::_oob_get_mac_addr));
ocomeni 75:08eff6258e1b 56 _parser.oob("AT+UBTLE?", callback(this, &ATCmdManager::_oob_get_ble_role));
ocomeni 75:08eff6258e1b 57 _parser.oob("AT+UBTLE=2", callback(this, &ATCmdManager::_oob_ena_ble_peri));
ocomeni 75:08eff6258e1b 58 _parser.oob("AT+CPWROFF", callback(this, &ATCmdManager::_oob_reboot));
ocomeni 75:08eff6258e1b 59 _parser.oob("AT+CGMR", callback(this, &ATCmdManager::_oob_get_fw_ver));
ocomeni 82:10072c1794d3 60 _parser.oob("AT+UWSCAN", callback(this, &ATCmdManager::_oob_scanWiFiNetworks));
ocomeni 98:65c2333a38b6 61 _parser.oob("AT+UWSCA=", callback(this, &ATCmdManager::_oob_WiFiStationConfigAction));
ocomeni 102:9748f290a1a5 62
ocomeni 102:9748f290a1a5 63 _parser.oob("AT+UMLA=", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 102:9748f290a1a5 64 _parser.oob("AT+UBTLN", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 102:9748f290a1a5 65 _parser.oob("AT+UBTSM?", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 102:9748f290a1a5 66 _parser.oob("AT+UBTPM", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 102:9748f290a1a5 67
ocomeni 102:9748f290a1a5 68 _parser.oob("AT+UDSC=", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 102:9748f290a1a5 69 _parser.oob("AT&W", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 102:9748f290a1a5 70 //_parser.oob("AT+UBTPM", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 102:9748f290a1a5 71 //_parser.oob("AT+UBTPM", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 95:290859010c8c 72 //_parser.oob("AT+UWSCD=", callback(this, &ATCmdManager::_oob_disconnectWiFiNetwork));
ocomeni 81:637a87eb8170 73 _parser.oob("AT+UDDRP", callback(this, &ATCmdManager::_oob_setupInternetConnection));
ocomeni 103:7b566b522427 74 _parser.oob("AT+UWSC=0,0,0", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 82:10072c1794d3 75 _parser.oob("AT+UWSC=0,2", callback(this, &ATCmdManager::_oob_setWiFiSSID));
ocomeni 82:10072c1794d3 76 _parser.oob("AT+UWSC=0,8", callback(this, &ATCmdManager::_oob_setWiFiPWD));
ocomeni 82:10072c1794d3 77 _parser.oob("AT+UWSC=0,5", callback(this, &ATCmdManager::_oob_setWiFiSecurity));
ocomeni 95:290859010c8c 78 _parser.oob("AT+UNSTAT=", callback(this, &ATCmdManager::_oob_getNetworkStatus));
ocomeni 95:290859010c8c 79 _parser.oob("AT+UWSSTAT", callback(this, &ATCmdManager::_oob_WiFiNetworkStatus));
ocomeni 95:290859010c8c 80
ocomeni 84:7c7add00f4bf 81 //_parser.oob("AT+UWSC=0,5", callback(this, &ATCmdManager::_oob_sendHttpMessage));
ocomeni 103:7b566b522427 82 //sendAtConfirmation("Testing:: +UBTLE:2\r\nOK\r\n");
ocomeni 103:7b566b522427 83 dbg_printf(LOG, "\n --- ATCmdManager constructor completed ---\n");
ocomeni 81:637a87eb8170 84 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 85 dataMode = AT_CMD_DATA_MODE;
ocomeni 98:65c2333a38b6 86 debug_flag = 0;
ocomeni 98:65c2333a38b6 87 _event_queue.call_in(10, &print_heap_and_isr_stack_info);
ocomeni 98:65c2333a38b6 88 //print_heap_and_isr_stack_info();
ocomeni 98:65c2333a38b6 89 _event_queue.call_every(3600000,&print_memory_info);
ocomeni 103:7b566b522427 90 #ifdef BOX_UBLOX_DEMO_TESTING
ocomeni 103:7b566b522427 91 check_for_at_cmd = false;
ocomeni 103:7b566b522427 92 #endif
ocomeni 74:f26e846adfe9 93 }
ocomeni 74:f26e846adfe9 94
ocomeni 74:f26e846adfe9 95
ocomeni 74:f26e846adfe9 96 void ATCmdManager::runMain(){
ocomeni 103:7b566b522427 97 dbg_printf(LOG, "\r\n [ATCMD MAN] Thread Id = %X\r\n", (uint32_t)ThisThread::get_id());
ocomeni 74:f26e846adfe9 98 while(true){
ocomeni 74:f26e846adfe9 99 _process_oob(UBLOX_ODIN_W2_RECV_TIMEOUT, true);
ocomeni 81:637a87eb8170 100 wait_ms(MAIN_LOOP_WAIT_TIME_MS); // allow BTLE/WiFi some time
ocomeni 81:637a87eb8170 101 processResponses();
ocomeni 74:f26e846adfe9 102 }
ocomeni 74:f26e846adfe9 103
ocomeni 74:f26e846adfe9 104 }
ocomeni 74:f26e846adfe9 105
ocomeni 81:637a87eb8170 106 void ATCmdManager::processResponses(){
ocomeni 81:637a87eb8170 107 dequeueATresponse();
ocomeni 87:99b37d26ff2a 108 dequeueWiFidataResponse();
ocomeni 98:65c2333a38b6 109 if(debug_flag>0){
ocomeni 98:65c2333a38b6 110 //debug_flag--;
ocomeni 103:7b566b522427 111 dbg_printf(LOG, " back to ProcessResponses in Main loop... at_resp = %d\r\n", at_resp);
ocomeni 98:65c2333a38b6 112 }
ocomeni 95:290859010c8c 113 char * respStr;
ocomeni 98:65c2333a38b6 114 //if(at_resp > AT_COMMAND_FAILED)
ocomeni 98:65c2333a38b6 115 //return;
ocomeni 81:637a87eb8170 116 switch(at_resp){
ocomeni 81:637a87eb8170 117 case AT_RESP_NONE:
ocomeni 98:65c2333a38b6 118 if(debug_flag>0){
ocomeni 98:65c2333a38b6 119 debug_flag--;
ocomeni 103:7b566b522427 120 dbg_printf(LOG, " In IDLE state \r\n");
ocomeni 98:65c2333a38b6 121 }
ocomeni 81:637a87eb8170 122 // IDLE response state
ocomeni 81:637a87eb8170 123 break;
ocomeni 81:637a87eb8170 124 case AT_SCAN_RESP:
ocomeni 81:637a87eb8170 125 // AT_SCAN_RESP response state
ocomeni 103:7b566b522427 126 dbg_printf(LOG, "\n [ATCMD MAN] WIFI SCAN RESPONSE RECEIVED!!\r\n");
ocomeni 95:290859010c8c 127 //_smutex.lock();
ocomeni 95:290859010c8c 128 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 129 //_smutex.unlock();
ocomeni 95:290859010c8c 130 respStr = (char *) resp_data->buffer;
ocomeni 96:f5ed273881af 131 sendAtConfirmationFreeMpool(respStr);
ocomeni 81:637a87eb8170 132 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 133 break;
ocomeni 81:637a87eb8170 134 case AT_DETAILED_SCAN_RESP:
ocomeni 81:637a87eb8170 135 // AT_DETAILED_SCAN_RESP response state
ocomeni 103:7b566b522427 136 dbg_printf(LOG, "\n [ATCMD MAN] WIFI DETAILED SCAN RESPONSE RECEIVED!!\r\n");
ocomeni 95:290859010c8c 137 //_smutex.lock();
ocomeni 95:290859010c8c 138 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 139 //_smutex.unlock();
ocomeni 95:290859010c8c 140 respStr = (char *) resp_data->buffer;
ocomeni 96:f5ed273881af 141 sendAtConfirmationFreeMpool(respStr);
ocomeni 81:637a87eb8170 142 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 143 break;
ocomeni 81:637a87eb8170 144 case AT_CONNECT_RESP:
ocomeni 99:05398b3184f8 145 {
ocomeni 81:637a87eb8170 146 // AT_CONNECT_RESP response state
ocomeni 103:7b566b522427 147 dbg_printf(LOG, "\n [ATCMD MAN] WIFI CONNECT RESPONSE RECEIVED!!\r\n");
ocomeni 95:290859010c8c 148 //_smutex.lock();
ocomeni 103:7b566b522427 149 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 150 respStr = (char *) resp_data->buffer;
ocomeni 96:f5ed273881af 151 sendAtConfirmationFreeMpool(respStr);
ocomeni 99:05398b3184f8 152 char * urc = new char[20];
ocomeni 99:05398b3184f8 153 sprintf(urc, "\r\n%s=%d\r\n", NETWORK_UP_URC, WIFI_INTERFACE_ID);
ocomeni 99:05398b3184f8 154 sendAtEvent(urc);
ocomeni 99:05398b3184f8 155 delete urc;
ocomeni 95:290859010c8c 156 //_smutex.unlock();
ocomeni 81:637a87eb8170 157 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 158 break;
ocomeni 99:05398b3184f8 159 }
ocomeni 81:637a87eb8170 160 case AT_DISCONNECT_RESP:
ocomeni 81:637a87eb8170 161 // AT_DISCONNECT_RESP response state
ocomeni 84:7c7add00f4bf 162 //////_smutex.lock();
ocomeni 103:7b566b522427 163 dbg_printf(LOG, "\n [ATCMD MAN] WIFI DISCONNECT RESPONSE RECEIVED!!\r\n");
ocomeni 95:290859010c8c 164 //_smutex.lock();
ocomeni 95:290859010c8c 165 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 166 //_smutex.unlock();
ocomeni 95:290859010c8c 167 respStr = (char *) resp_data->buffer;
ocomeni 96:f5ed273881af 168 sendAtConfirmationFreeMpool(respStr);
ocomeni 81:637a87eb8170 169 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 170 break;
ocomeni 82:10072c1794d3 171 case AT_CONFIG_RESP:
ocomeni 82:10072c1794d3 172 // AT_CONFIG_RESP response state
ocomeni 84:7c7add00f4bf 173 //////_smutex.lock();
ocomeni 103:7b566b522427 174 dbg_printf(LOG, "\n [ATCMD MAN] WIFI CONFIG RESPONSE RECEIVED!!\r\n");
ocomeni 96:f5ed273881af 175 //_smutex.lock();
ocomeni 95:290859010c8c 176 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 177 //_smutex.unlock();
ocomeni 84:7c7add00f4bf 178 at_resp = AT_RESP_NONE;
ocomeni 84:7c7add00f4bf 179 break;
ocomeni 95:290859010c8c 180 case AT_NETWORK_STATUS_RESP:
ocomeni 95:290859010c8c 181 // AT_CONFIG_RESP response state
ocomeni 95:290859010c8c 182 //////_smutex.lock();
ocomeni 103:7b566b522427 183 dbg_printf(LOG, "\n [ATCMD MAN] NETWORK STATUS RESPONSE RECEIVED!!\r\n");
ocomeni 95:290859010c8c 184 respStr = (char *) resp_data->buffer;
ocomeni 96:f5ed273881af 185 sendAtConfirmationFreeMpool(respStr);
ocomeni 95:290859010c8c 186 at_resp = AT_RESP_NONE;
ocomeni 95:290859010c8c 187 break;
ocomeni 95:290859010c8c 188 case AT_WIFI_STATUS_RESP:
ocomeni 95:290859010c8c 189 // AT_CONFIG_RESP response state
ocomeni 95:290859010c8c 190 //////_smutex.lock();
ocomeni 103:7b566b522427 191 dbg_printf(LOG, "\n [ATCMD MAN] WIFI RESPONSE RECEIVED!!\r\n");
ocomeni 95:290859010c8c 192 respStr = (char *) resp_data->buffer;
ocomeni 96:f5ed273881af 193 sendAtConfirmationFreeMpool(respStr);
ocomeni 95:290859010c8c 194 at_resp = AT_RESP_NONE;
ocomeni 95:290859010c8c 195 break;
ocomeni 84:7c7add00f4bf 196 case AT_INTERNET_CONFIG_RESP:
ocomeni 84:7c7add00f4bf 197 // AT_CONFIG_RESP response state
ocomeni 103:7b566b522427 198 dbg_printf(LOG, "\n [ATCMD MAN] WIFI INTERNET_CONFIG RESPONSE RECEIVED!!\r\n");
ocomeni 95:290859010c8c 199 //_smutex.lock();
ocomeni 96:f5ed273881af 200 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 201 //_smutex.unlock();
ocomeni 96:f5ed273881af 202 //respStr = (char *) resp_data->buffer;
ocomeni 96:f5ed273881af 203 //sendAtConfirmationFreeMpool(respStr);
ocomeni 84:7c7add00f4bf 204 at_resp = AT_RESP_NONE;
ocomeni 84:7c7add00f4bf 205 break;
ocomeni 84:7c7add00f4bf 206 case AT_HTTPS_RESP:
ocomeni 84:7c7add00f4bf 207 // AT_HTTP_RESP response state
ocomeni 103:7b566b522427 208 dbg_printf(LOG, "\n [ATCMD MAN] WIFI HTTPS RESPONSE RECEIVED!!\r\n");
ocomeni 87:99b37d26ff2a 209 return_response();
ocomeni 96:f5ed273881af 210 //_smutex.lock();
ocomeni 95:290859010c8c 211 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 212 //_smutex.unlock();
ocomeni 81:637a87eb8170 213 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 214 break;
ocomeni 89:45f6db09a76d 215 case AT_HTTPS_RESP_DOWNLOAD:
ocomeni 89:45f6db09a76d 216 // AT_HTTPS_RESP_DOWNLOAD response state
ocomeni 103:7b566b522427 217 dbg_printf(LOG, "\n [ATCMD MAN] WIFI HTTPS DOWNLOAD RESPONSE RECEIVED!!\r\n");
ocomeni 89:45f6db09a76d 218 return_response(true); // set download paramter to true
ocomeni 96:f5ed273881af 219 //_smutex.lock();
ocomeni 95:290859010c8c 220 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 221 //_smutex.unlock();
ocomeni 89:45f6db09a76d 222 at_resp = AT_RESP_NONE;
ocomeni 89:45f6db09a76d 223 break;
ocomeni 81:637a87eb8170 224 case AT_HTTP_RESP:
ocomeni 81:637a87eb8170 225 // AT_HTTP_RESP response state
ocomeni 103:7b566b522427 226 dbg_printf(LOG, "\n [ATCMD MAN] WIFI HTTP RESPONSE RECEIVED!!\r\n");
ocomeni 89:45f6db09a76d 227 return_response();
ocomeni 96:f5ed273881af 228 //_smutex.lock();
ocomeni 103:7b566b522427 229 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 230 //_smutex.unlock();
ocomeni 89:45f6db09a76d 231 at_resp = AT_RESP_NONE;
ocomeni 89:45f6db09a76d 232 break;
ocomeni 89:45f6db09a76d 233 case AT_HTTP_RESP_DOWNLOAD:
ocomeni 89:45f6db09a76d 234 // AT_HTTP_RESP response state
ocomeni 103:7b566b522427 235 dbg_printf(LOG, "\n [ATCMD MAN] WIFI HTTP RESPONSE RECEIVED!!\r\n");
ocomeni 89:45f6db09a76d 236 return_response(true); // set download paramter to true
ocomeni 95:290859010c8c 237 //_smutex.lock();
ocomeni 95:290859010c8c 238 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 239 //_smutex.unlock();
ocomeni 81:637a87eb8170 240 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 241 break;
ocomeni 99:05398b3184f8 242 case CONNECT_EVENT:
ocomeni 99:05398b3184f8 243 {
ocomeni 99:05398b3184f8 244 // Connect Event state
ocomeni 103:7b566b522427 245 dbg_printf(LOG, "\n [ATCMD MAN] CONNECT EVENT RECEIVED!!\r\n");
ocomeni 99:05398b3184f8 246 sendConnectEvent(resp_data->buffer, resp_data->dataLen);
ocomeni 99:05398b3184f8 247 at_resp = AT_RESP_NONE;
ocomeni 99:05398b3184f8 248 break;
ocomeni 99:05398b3184f8 249 }
ocomeni 100:80ef4bc31b7a 250 case AT_EVENT:
ocomeni 100:80ef4bc31b7a 251 {
ocomeni 100:80ef4bc31b7a 252 // AT Event state
ocomeni 103:7b566b522427 253 dbg_printf(LOG, "\n [ATCMD MAN] AT EVENT RECEIVED!!\r\n");
ocomeni 100:80ef4bc31b7a 254 respStr = (char *) resp_data->buffer;
ocomeni 100:80ef4bc31b7a 255 sendAtEvent(respStr);
ocomeni 100:80ef4bc31b7a 256 at_resp = AT_RESP_NONE;
ocomeni 100:80ef4bc31b7a 257 break;
ocomeni 100:80ef4bc31b7a 258 }
ocomeni 93:06e755a80187 259 case AT_COMMAND_FAILED:
ocomeni 98:65c2333a38b6 260 {
ocomeni 93:06e755a80187 261 // AT_HTTP_RESP response state
ocomeni 103:7b566b522427 262 dbg_printf(LOG, "\n [ATCMD MAN] WIFI COMMAND FAILED!!\r\n");
ocomeni 95:290859010c8c 263 //_smutex.lock();
ocomeni 95:290859010c8c 264 //_parser.send("\r\nNACK\r\n");
ocomeni 95:290859010c8c 265 //_smutex.unlock();
ocomeni 98:65c2333a38b6 266 respStr = (char *) resp_data->buffer;
ocomeni 96:f5ed273881af 267 sendAtConfirmationFreeMpool(respStr);
ocomeni 98:65c2333a38b6 268 at_resp = AT_RESP_NONE;
ocomeni 93:06e755a80187 269 break;
ocomeni 98:65c2333a38b6 270 }
ocomeni 100:80ef4bc31b7a 271 default:
ocomeni 100:80ef4bc31b7a 272 //UNKNOWN response state
ocomeni 95:290859010c8c 273 //_smutex.lock();
ocomeni 103:7b566b522427 274 dbg_printf(LOG, "\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\r\n");
ocomeni 100:80ef4bc31b7a 275 sendAtConfirmationFreeMpool(ERROR_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 276 //_smutex.unlock();
ocomeni 100:80ef4bc31b7a 277 at_resp = AT_RESP_NONE;
ocomeni 100:80ef4bc31b7a 278 break;
ocomeni 81:637a87eb8170 279 }
ocomeni 81:637a87eb8170 280 }
ocomeni 81:637a87eb8170 281
ocomeni 96:f5ed273881af 282
ocomeni 96:f5ed273881af 283 void ATCmdManager::sendAtConfirmationFreeMpool(const char *buf)
ocomeni 96:f5ed273881af 284 {
ocomeni 96:f5ed273881af 285 sendAtConfirmation(buf);
ocomeni 96:f5ed273881af 286 _wiFi2ATDatamPool->free(resp_data);
ocomeni 96:f5ed273881af 287 resp_data = NULL;
ocomeni 96:f5ed273881af 288 }
ocomeni 96:f5ed273881af 289
ocomeni 96:f5ed273881af 290
ocomeni 89:45f6db09a76d 291 void ATCmdManager::printBufferInHex(uint8_t *buf, int pLen)
ocomeni 89:45f6db09a76d 292 {
ocomeni 89:45f6db09a76d 293 for(int i =0;i<pLen;i++){
ocomeni 103:7b566b522427 294 if(i%8==0) dbg_printf(LOG, "\n[%3d]",i);
ocomeni 103:7b566b522427 295 dbg_printf(LOG, "%02x ", buf[i]);
ocomeni 89:45f6db09a76d 296 }
ocomeni 103:7b566b522427 297 dbg_printf(LOG, "\n");
ocomeni 89:45f6db09a76d 298 }
ocomeni 81:637a87eb8170 299
ocomeni 83:9c271a50a70b 300 bool ATCmdManager::validate(edm_header_t edm_header)
ocomeni 83:9c271a50a70b 301 {
ocomeni 83:9c271a50a70b 302 if(edm_header.startByte != EDM_START_BYTE)return false; // unexpected start byte found!
ocomeni 99:05398b3184f8 303 if(edm_header.payloadID != CONNECT_EVENT_ID &&
ocomeni 99:05398b3184f8 304 edm_header.payloadID != DISCONNECT_EVENT_ID &&
ocomeni 99:05398b3184f8 305 edm_header.payloadID != DATA_EVENT_ID &&
ocomeni 99:05398b3184f8 306 edm_header.payloadID != DATA_COMMAND_ID &&
ocomeni 99:05398b3184f8 307 edm_header.payloadID != AT_REQUEST_ID &&
ocomeni 99:05398b3184f8 308 edm_header.payloadID != AT_CONFIRMATION_ID &&
ocomeni 99:05398b3184f8 309 edm_header.payloadID != AT_EVENT_ID
ocomeni 83:9c271a50a70b 310 )return false; // unexpected payload ID found!
ocomeni 83:9c271a50a70b 311 if(edm_header.payloadLen > MAX_EDM_PAYLOAD_LEN ||
ocomeni 83:9c271a50a70b 312 edm_header.payloadLen < MIN_EDM_PAYLOAD_LEN
ocomeni 83:9c271a50a70b 313 ) return false; // unexpected length received!
ocomeni 90:ed0267eca7b5 314 if(edm_header.channel_id != WIFI_CHANNEL &&
ocomeni 90:ed0267eca7b5 315 edm_header.channel_id != BLE_CHANNEL
ocomeni 90:ed0267eca7b5 316 ) return false; // unexpected channel_id received!
ocomeni 83:9c271a50a70b 317 return true;
ocomeni 83:9c271a50a70b 318 }
ocomeni 74:f26e846adfe9 319
ocomeni 84:7c7add00f4bf 320 http_method ATCmdManager::str2HttpMethod(const char * methodStr)
ocomeni 84:7c7add00f4bf 321 {
ocomeni 84:7c7add00f4bf 322 http_method _http_method;
ocomeni 84:7c7add00f4bf 323 if(strstr(methodStr, "POST")!= NULL){
ocomeni 84:7c7add00f4bf 324 _http_method = HTTP_POST;
ocomeni 84:7c7add00f4bf 325 }
ocomeni 84:7c7add00f4bf 326 else if(strstr(methodStr, "GET")!= NULL){
ocomeni 84:7c7add00f4bf 327 _http_method = HTTP_GET;
ocomeni 84:7c7add00f4bf 328 }
ocomeni 84:7c7add00f4bf 329 else{
ocomeni 84:7c7add00f4bf 330 _http_method = HTTP_DELETE; // unsupported method - set to HTTP_DELETE
ocomeni 84:7c7add00f4bf 331 }
ocomeni 84:7c7add00f4bf 332 return _http_method;
ocomeni 84:7c7add00f4bf 333 }
ocomeni 84:7c7add00f4bf 334 bool ATCmdManager::createHttpRequest()
ocomeni 84:7c7add00f4bf 335 {
ocomeni 90:ed0267eca7b5 336 http_request_t *http_req; // = new http_request_t;
ocomeni 90:ed0267eca7b5 337 wifi_data_msg_t data_msg;
ocomeni 90:ed0267eca7b5 338 http_req = (http_request_t *)data_msg.buffer;
ocomeni 84:7c7add00f4bf 339 char s1[32];
ocomeni 84:7c7add00f4bf 340 char s2[32];
ocomeni 84:7c7add00f4bf 341 char s3[32];
ocomeni 90:ed0267eca7b5 342 int len = 0;
ocomeni 90:ed0267eca7b5 343 int n;
ocomeni 90:ed0267eca7b5 344 char * strPtr = (char *)rx_buf_ptr;
ocomeni 84:7c7add00f4bf 345 char * p;
ocomeni 84:7c7add00f4bf 346 char * p2 = strstr(strPtr, "\r\n\r\n");
ocomeni 84:7c7add00f4bf 347 char * nxtPtr = strPtr;
ocomeni 90:ed0267eca7b5 348 char * outPtr;
ocomeni 84:7c7add00f4bf 349 char * bodyPtr = p2+4;
ocomeni 103:7b566b522427 350 dbg_printf(LOG, "\nstrPtr address= %x",strPtr);
ocomeni 103:7b566b522427 351 dbg_printf(LOG, "\np2 address= %x", p2);
ocomeni 84:7c7add00f4bf 352 for(int i = 0; i < 5; i++){
ocomeni 84:7c7add00f4bf 353 if(i == 0)// firstline scan method uri and http_ver
ocomeni 84:7c7add00f4bf 354 {
ocomeni 84:7c7add00f4bf 355 n = sscanf(nxtPtr,"%s %s %s", s1, s2, s3);
ocomeni 90:ed0267eca7b5 356 if(n!=3) return false; // error in input abort
ocomeni 103:7b566b522427 357 dbg_printf(LOG, "\nmethod = %s\nuri = %s\nhttp_ver = %s",s1, s2, s3 );
ocomeni 84:7c7add00f4bf 358 //http_req.method = str2HttpMethod(s1.c_str());
ocomeni 90:ed0267eca7b5 359 http_req->method = str2HttpMethod(s1);
ocomeni 90:ed0267eca7b5 360 http_req->request_URI = (char *) http_req->buffer; // point 1st string to start of buffer
ocomeni 90:ed0267eca7b5 361 len = strlen(s2)+1;
ocomeni 90:ed0267eca7b5 362 strncpy(http_req->request_URI, s2, len);
ocomeni 90:ed0267eca7b5 363 http_req->http_version = http_req->request_URI + len; // point 2nd string to after 1st
ocomeni 90:ed0267eca7b5 364 len = strlen(s3)+1;
ocomeni 90:ed0267eca7b5 365 strncpy(http_req->http_version, s3, len);
ocomeni 103:7b566b522427 366 dbg_printf(LOG, "\nhttp_request 1st line:\n method = %d\nuri = %s\nhttp_ver = %s",http_req->method,
ocomeni 90:ed0267eca7b5 367 http_req->request_URI,
ocomeni 90:ed0267eca7b5 368 http_req->http_version );
ocomeni 103:7b566b522427 369 dbg_printf(LOG, "\nhttp_request str ptrs\nuri = %X\nhttp_ver = %X",http_req->request_URI,
ocomeni 90:ed0267eca7b5 370 http_req->http_version );
ocomeni 90:ed0267eca7b5 371 outPtr = http_req->http_version + len; // point output buffer ptr to after 2nd string
ocomeni 84:7c7add00f4bf 372 }
ocomeni 84:7c7add00f4bf 373 else{ // scan header pairs
ocomeni 84:7c7add00f4bf 374 //n = sscanf(nxtPtr,"%s %s", &s1[0], &s2[0]);
ocomeni 84:7c7add00f4bf 375 n = sscanf(nxtPtr,"%s %s", s1, s2);
ocomeni 90:ed0267eca7b5 376 if(n!=2) return false; // error in input abort
ocomeni 84:7c7add00f4bf 377 p = strstr(s1,":");
ocomeni 84:7c7add00f4bf 378 *p = NULL;
ocomeni 103:7b566b522427 379 dbg_printf(LOG, "\nname = %s value = %s",s1, s2);
ocomeni 86:04fc2fcda7ec 380 if(strstr(s1, "Host")!= NULL){
ocomeni 90:ed0267eca7b5 381 http_req->hostName = outPtr;
ocomeni 90:ed0267eca7b5 382 len = strlen(s2)+1;
ocomeni 90:ed0267eca7b5 383 strncpy(outPtr, s2, len);
ocomeni 103:7b566b522427 384 dbg_printf(LOG, "\nname = %s value = %s",s1, outPtr);
ocomeni 90:ed0267eca7b5 385 outPtr += len; // point output buffer ptr to after current string
ocomeni 86:04fc2fcda7ec 386 }
ocomeni 86:04fc2fcda7ec 387 else if(strstr(s1, "Accept")!= NULL){
ocomeni 90:ed0267eca7b5 388 http_req->AcceptVal = outPtr;
ocomeni 90:ed0267eca7b5 389 len = strlen(s2)+1;
ocomeni 90:ed0267eca7b5 390 strncpy(outPtr, s2, len);
ocomeni 103:7b566b522427 391 dbg_printf(LOG, "\nname = %s value = %s",s1, outPtr);
ocomeni 90:ed0267eca7b5 392 outPtr += len; // point output buffer ptr to after current string
ocomeni 86:04fc2fcda7ec 393 }
ocomeni 86:04fc2fcda7ec 394 else if(strstr(s1, "Content-Type")!= NULL){
ocomeni 90:ed0267eca7b5 395 http_req->contentType = outPtr;
ocomeni 90:ed0267eca7b5 396 len = strlen(s2)+1;
ocomeni 90:ed0267eca7b5 397 strncpy(outPtr, s2, len);
ocomeni 103:7b566b522427 398 dbg_printf(LOG, "\nname = %s value = %s",s1, outPtr);
ocomeni 90:ed0267eca7b5 399 outPtr += len; // point output buffer ptr to after current string
ocomeni 86:04fc2fcda7ec 400 }
ocomeni 86:04fc2fcda7ec 401 else if(strstr(s1, "Content-Length")!= NULL){
ocomeni 90:ed0267eca7b5 402 //http_req.contentLen.assign(s2);
ocomeni 90:ed0267eca7b5 403 http_req->contentLen = outPtr;
ocomeni 90:ed0267eca7b5 404 len = strlen(s2)+1;
ocomeni 90:ed0267eca7b5 405 strncpy(outPtr, s2, len);
ocomeni 103:7b566b522427 406 dbg_printf(LOG, "\nname = %s value = %s",s1, outPtr);
ocomeni 90:ed0267eca7b5 407 outPtr += len; // point output buffer ptr to after current string
ocomeni 84:7c7add00f4bf 408 }
ocomeni 84:7c7add00f4bf 409
ocomeni 103:7b566b522427 410 dbg_printf(LOG, "\noutPtr = %X len = %d\n", outPtr, len);
ocomeni 84:7c7add00f4bf 411 }
ocomeni 84:7c7add00f4bf 412 nxtPtr = strstr(nxtPtr, "\r\n")+2; // goto next line
ocomeni 84:7c7add00f4bf 413 if(nxtPtr >= p2) break;
ocomeni 84:7c7add00f4bf 414 }
ocomeni 90:ed0267eca7b5 415 // print header from http_req_struct
ocomeni 103:7b566b522427 416 dbg_printf(LOG, "\nhttp request header: \n %s\n", http_req->buffer);
ocomeni 84:7c7add00f4bf 417 int bodyLen = edm_hdr.payloadLen -(p2+7-strPtr);
ocomeni 103:7b566b522427 418 dbg_printf(LOG, "\nLen = %d\n", bodyLen);
ocomeni 90:ed0267eca7b5 419 http_req->body = (uint8_t *) outPtr;
ocomeni 90:ed0267eca7b5 420 memcpy(outPtr, bodyPtr, bodyLen);
ocomeni 90:ed0267eca7b5 421 if(bodyLen > 10){
ocomeni 103:7b566b522427 422 dbg_printf(LOG, "\n Message Body:\n");
ocomeni 90:ed0267eca7b5 423 printBufferInHex(http_req->body, bodyLen);
ocomeni 90:ed0267eca7b5 424 }
ocomeni 90:ed0267eca7b5 425 outPtr += bodyLen; // move output pointer to end output (header + body)
ocomeni 84:7c7add00f4bf 426 // package and send on wifi data queue
ocomeni 84:7c7add00f4bf 427 data_msg.wifi_cmd = WIFI_CMD_SEND_HTTPS_REQ;
ocomeni 103:7b566b522427 428 dbg_printf(LOG, "\nsizeof(http_req) on population = %d\n", sizeof(*http_req));
ocomeni 90:ed0267eca7b5 429 data_msg.dataLen = (uint8_t *)outPtr - http_req->buffer;//sizeof(http_request_t);
ocomeni 103:7b566b522427 430 dbg_printf(LOG, "\ndata_msg.dataLen = %d\n", data_msg.dataLen);
ocomeni 84:7c7add00f4bf 431 // queue next data request
ocomeni 84:7c7add00f4bf 432 queueWiFiDataRequest(data_msg);
ocomeni 84:7c7add00f4bf 433 return true;
ocomeni 84:7c7add00f4bf 434 }
ocomeni 74:f26e846adfe9 435 // OOB processing
ocomeni 74:f26e846adfe9 436 void ATCmdManager::_process_oob(uint32_t timeout, bool all){
ocomeni 74:f26e846adfe9 437 set_timeout(timeout);
ocomeni 92:ec9550034276 438 int cnt = 0;
ocomeni 84:7c7add00f4bf 439 int start;
ocomeni 90:ed0267eca7b5 440 //channel_id_t chan_id;
ocomeni 83:9c271a50a70b 441 if(dataMode == AT_EXT_DATA_MODE)
ocomeni 83:9c271a50a70b 442 {
ocomeni 83:9c271a50a70b 443 int n;
ocomeni 103:7b566b522427 444 //if(cnt++ % 10 == 0)dbg_printf(LOG, "In EDM mode\n");
ocomeni 84:7c7add00f4bf 445 uint8_t edm[EDM_HDR_LEN];
ocomeni 92:ec9550034276 446 char cmdType[16];
ocomeni 83:9c271a50a70b 447 // Poll for edm packets
ocomeni 83:9c271a50a70b 448 do{
ocomeni 92:ec9550034276 449 n = _parser.read((char *)edm, EDM_HDR_LEN-1);
ocomeni 84:7c7add00f4bf 450 edm_hdr.startByte = edm[0];
ocomeni 84:7c7add00f4bf 451 edm_hdr.payloadLen = edm[1]*256 + edm[2];
ocomeni 84:7c7add00f4bf 452 edm_hdr.payloadID = edm[3]*256 + edm[4];
ocomeni 92:ec9550034276 453 edm_hdr.channel_id = (channel_id_t) 0;
ocomeni 84:7c7add00f4bf 454 start = Kernel::get_ms_count();
ocomeni 83:9c271a50a70b 455 if(n == -1) break; // break if it times out
ocomeni 92:ec9550034276 456 int pT;
ocomeni 99:05398b3184f8 457 if(edm_hdr.payloadID < AT_REQUEST_ID) //
ocomeni 92:ec9550034276 458 {
ocomeni 92:ec9550034276 459 n += _parser.read((char *)edm, 1);
ocomeni 92:ec9550034276 460 edm_hdr.channel_id = (channel_id_t) edm[0];
ocomeni 92:ec9550034276 461 pT = 0;
ocomeni 92:ec9550034276 462 strcpy(cmdType, "DATA COMMAND");
ocomeni 92:ec9550034276 463 }
ocomeni 92:ec9550034276 464 else
ocomeni 92:ec9550034276 465 {
ocomeni 92:ec9550034276 466 pT = 1;
ocomeni 92:ec9550034276 467 strcpy(cmdType, "AT REQUEST");
ocomeni 92:ec9550034276 468 }
ocomeni 103:7b566b522427 469 //dbg_printf(LOG, "%d bytes read! : type = %s\n", n, cmdType2str(edm_hdr.payloadID));
ocomeni 103:7b566b522427 470 dbg_printf(LOG, "%d bytes read! : CMD type = %s\n", n, cmdType);
ocomeni 92:ec9550034276 471 if(n==(EDM_HDR_LEN-pT))
ocomeni 103:7b566b522427 472 dbg_printf(LOG, "Start = %d, payloadID = %d len = %d chan_id = %d\n", edm_hdr.startByte,
ocomeni 90:ed0267eca7b5 473 edm_hdr.payloadID,
ocomeni 90:ed0267eca7b5 474 edm_hdr.payloadLen,
ocomeni 90:ed0267eca7b5 475 edm_hdr.channel_id);
ocomeni 92:ec9550034276 476 if(n == (EDM_HDR_LEN-pT) && validate(edm_hdr)) // if AT command use process oob to decode
ocomeni 83:9c271a50a70b 477 {
ocomeni 99:05398b3184f8 478 if(edm_hdr.payloadID == AT_REQUEST_ID)
ocomeni 83:9c271a50a70b 479 {
ocomeni 92:ec9550034276 480 //_parser.process_oob();
ocomeni 92:ec9550034276 481 while (_parser.process_oob() && all) {
ocomeni 98:65c2333a38b6 482 if(debug_flag>0){
ocomeni 103:7b566b522427 483 dbg_printf(LOG, "finished queuing WIFI CONNECT CMD -- back to process_oob loop \r\n");
ocomeni 98:65c2333a38b6 484 }
ocomeni 92:ec9550034276 485 }
ocomeni 83:9c271a50a70b 486 break;
ocomeni 83:9c271a50a70b 487 }
ocomeni 83:9c271a50a70b 488 else
ocomeni 83:9c271a50a70b 489 {
ocomeni 92:ec9550034276 490 int pLen = edm_hdr.payloadLen-2-pT;
ocomeni 83:9c271a50a70b 491 rx_buf_ptr = (uint8_t *) malloc (pLen); // we already read 2 bytes from payload but expect 1 stop byte
ocomeni 83:9c271a50a70b 492 rx_buf_ptr[pLen-1] = 0x00; // clear last byte so the readback value is as expected
ocomeni 83:9c271a50a70b 493 n = _parser.read((char *)rx_buf_ptr, pLen);
ocomeni 83:9c271a50a70b 494 if(n == -1) break; // timeout!
ocomeni 103:7b566b522427 495 dbg_printf(LOG, "%d bytes read - expected %d!\n", n, pLen);
ocomeni 89:45f6db09a76d 496 printBufferInHex(rx_buf_ptr, pLen);
ocomeni 103:7b566b522427 497 dbg_printf(LOG, "rx_buf_ptr[pLen-1] = %0x\n",rx_buf_ptr[pLen-1]);
ocomeni 83:9c271a50a70b 498 if(rx_buf_ptr[pLen-1] != EDM_STOP_BYTE) {
ocomeni 90:ed0267eca7b5 499 _smutex.lock();
ocomeni 90:ed0267eca7b5 500 _parser.send("ERR");
ocomeni 90:ed0267eca7b5 501 _smutex.unlock();
ocomeni 97:0aa46e5ef15d 502 free(rx_buf_ptr); // make sure to free buffer
ocomeni 97:0aa46e5ef15d 503 rx_buf_ptr = NULL;
ocomeni 90:ed0267eca7b5 504 break; // exit if stop byte not found - possible data corruption!
ocomeni 83:9c271a50a70b 505 }
ocomeni 83:9c271a50a70b 506 switch(edm_hdr.payloadID)
ocomeni 83:9c271a50a70b 507 {
ocomeni 99:05398b3184f8 508 case CONNECT_EVENT_ID:
ocomeni 103:7b566b522427 509 dbg_printf(LOG, "Connection Event received!\n");
ocomeni 83:9c271a50a70b 510 break;
ocomeni 99:05398b3184f8 511 case DISCONNECT_EVENT_ID:
ocomeni 103:7b566b522427 512 dbg_printf(LOG, "DISCONNECT_EVENT received!\n");
ocomeni 83:9c271a50a70b 513 break;
ocomeni 99:05398b3184f8 514 case DATA_EVENT_ID:
ocomeni 103:7b566b522427 515 dbg_printf(LOG, "DATA_EVENT received!\n");
ocomeni 83:9c271a50a70b 516 break;
ocomeni 99:05398b3184f8 517 case DATA_COMMAND_ID:
ocomeni 98:65c2333a38b6 518 {
ocomeni 103:7b566b522427 519 dbg_printf(LOG, "DATA_COMMAND received!\n");
ocomeni 103:7b566b522427 520 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 84:7c7add00f4bf 521 if(createHttpRequest() == true){
ocomeni 96:f5ed273881af 522 //_smutex.lock();
ocomeni 96:f5ed273881af 523 //sendAtConfirmation(OK_RESP); //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 524 //_smutex.unlock();
ocomeni 83:9c271a50a70b 525 }
ocomeni 84:7c7add00f4bf 526 else{
ocomeni 90:ed0267eca7b5 527 _smutex.lock();
ocomeni 84:7c7add00f4bf 528 _parser.send("NACK");
ocomeni 90:ed0267eca7b5 529 _smutex.unlock();
ocomeni 84:7c7add00f4bf 530 }
ocomeni 92:ec9550034276 531 free(rx_buf_ptr);
ocomeni 96:f5ed273881af 532 rx_buf_ptr = NULL;
ocomeni 84:7c7add00f4bf 533 int stop = Kernel::get_ms_count();
ocomeni 103:7b566b522427 534 dbg_printf(LOG, "\n Time Elapsed = %d\n", stop-start);
ocomeni 83:9c271a50a70b 535 break;
ocomeni 98:65c2333a38b6 536 }
ocomeni 99:05398b3184f8 537 case AT_REQUEST_ID:
ocomeni 103:7b566b522427 538 dbg_printf(LOG, "AT_REQUEST received!\n");
ocomeni 83:9c271a50a70b 539 break;
ocomeni 99:05398b3184f8 540 case AT_CONFIRMATION_ID:
ocomeni 103:7b566b522427 541 dbg_printf(LOG, "AT_CONFIRMATION received!\n");
ocomeni 83:9c271a50a70b 542 break;
ocomeni 99:05398b3184f8 543 case AT_EVENT_ID:
ocomeni 103:7b566b522427 544 dbg_printf(LOG, "AT_EVENT received!\n");
ocomeni 83:9c271a50a70b 545 break;
ocomeni 83:9c271a50a70b 546 default:
ocomeni 103:7b566b522427 547 dbg_printf(LOG, "UNKNOWN MESSAGE received!\n");
ocomeni 83:9c271a50a70b 548 break;
ocomeni 83:9c271a50a70b 549 }
ocomeni 83:9c271a50a70b 550 }
ocomeni 83:9c271a50a70b 551 //_parser.process_oob();
ocomeni 83:9c271a50a70b 552 }
ocomeni 83:9c271a50a70b 553 else // incorrect # of bytes received abort!!
ocomeni 83:9c271a50a70b 554 {
ocomeni 83:9c271a50a70b 555 break;
ocomeni 83:9c271a50a70b 556 }
ocomeni 83:9c271a50a70b 557 }while (all); // continue to process until timeout
ocomeni 74:f26e846adfe9 558 }
ocomeni 83:9c271a50a70b 559 else
ocomeni 83:9c271a50a70b 560 {
ocomeni 83:9c271a50a70b 561 // Poll for inbound packets
ocomeni 98:65c2333a38b6 562 static int msgCnt = 0;
ocomeni 103:7b566b522427 563 static char * ATCMD = new char[32];
ocomeni 103:7b566b522427 564 int n = 0;
ocomeni 103:7b566b522427 565 #ifdef BOX_UBLOX_DEMO_TESTING
ocomeni 103:7b566b522427 566 if(check_for_at_cmd)
ocomeni 103:7b566b522427 567 {
ocomeni 103:7b566b522427 568 while (n>=0 && all) {
ocomeni 103:7b566b522427 569 n = readAtCommandString(ATCMD, 32);
ocomeni 103:7b566b522427 570 if(strstr(ATCMD,"AT\r") != NULL)
ocomeni 103:7b566b522427 571 {
ocomeni 103:7b566b522427 572 _oob_ok_hdlr();
ocomeni 103:7b566b522427 573 check_for_at_cmd = false;
ocomeni 103:7b566b522427 574 break;
ocomeni 103:7b566b522427 575 }
ocomeni 103:7b566b522427 576 }
ocomeni 103:7b566b522427 577 }
ocomeni 103:7b566b522427 578 else
ocomeni 103:7b566b522427 579 #endif
ocomeni 103:7b566b522427 580 {
ocomeni 83:9c271a50a70b 581 while (_parser.process_oob() && all) {
ocomeni 103:7b566b522427 582 dbg_printf(LOG, "inbound message found... msgCnt = %d \r\n", ++msgCnt);
ocomeni 98:65c2333a38b6 583 if(debug_flag>0){
ocomeni 103:7b566b522427 584 dbg_printf(LOG, "finished queuing WIFI CONNECT CMD -- back to process_oob loop \r\n");
ocomeni 98:65c2333a38b6 585 }
ocomeni 83:9c271a50a70b 586 }
ocomeni 103:7b566b522427 587 }
ocomeni 83:9c271a50a70b 588 }
ocomeni 74:f26e846adfe9 589 set_timeout();
ocomeni 74:f26e846adfe9 590 }
ocomeni 74:f26e846adfe9 591
ocomeni 74:f26e846adfe9 592
ocomeni 103:7b566b522427 593 int ATCmdManager::readAtCommandString(char *strbuf, size_t bufLen)
ocomeni 103:7b566b522427 594 {
ocomeni 103:7b566b522427 595 int n;
ocomeni 103:7b566b522427 596 bool atstr_found = false;
ocomeni 103:7b566b522427 597 int i = 0;
ocomeni 103:7b566b522427 598 while(n != -1)
ocomeni 103:7b566b522427 599 {
ocomeni 103:7b566b522427 600 char c;
ocomeni 103:7b566b522427 601 n = _parser.read(&c, 1);
ocomeni 103:7b566b522427 602 if(n)
ocomeni 103:7b566b522427 603 strbuf[i++] = c;
ocomeni 103:7b566b522427 604 if(c=='\r')
ocomeni 103:7b566b522427 605 {
ocomeni 103:7b566b522427 606 strbuf[i++] = NULL; // terminate string and exit
ocomeni 103:7b566b522427 607 atstr_found = true;
ocomeni 103:7b566b522427 608 break;
ocomeni 103:7b566b522427 609 }
ocomeni 103:7b566b522427 610 }
ocomeni 103:7b566b522427 611 if(atstr_found)
ocomeni 103:7b566b522427 612 {
ocomeni 103:7b566b522427 613 return i;
ocomeni 103:7b566b522427 614 }
ocomeni 103:7b566b522427 615 else
ocomeni 103:7b566b522427 616 {
ocomeni 103:7b566b522427 617 return -1;
ocomeni 103:7b566b522427 618 }
ocomeni 103:7b566b522427 619 }
ocomeni 103:7b566b522427 620
ocomeni 74:f26e846adfe9 621 // OOB message handlers
ocomeni 74:f26e846adfe9 622 void ATCmdManager::_oob_startup_hdlr(){
ocomeni 74:f26e846adfe9 623 }
ocomeni 74:f26e846adfe9 624
ocomeni 81:637a87eb8170 625 void ATCmdManager::_oob_ok_hdlr(){
ocomeni 96:f5ed273881af 626 //_smutex.lock();
ocomeni 95:290859010c8c 627 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 628 //_smutex.unlock();
ocomeni 81:637a87eb8170 629 }
ocomeni 81:637a87eb8170 630
ocomeni 74:f26e846adfe9 631
ocomeni 74:f26e846adfe9 632 void ATCmdManager::_oob_bleRole_hdlr(){
ocomeni 74:f26e846adfe9 633 }
ocomeni 74:f26e846adfe9 634
ocomeni 74:f26e846adfe9 635
ocomeni 74:f26e846adfe9 636 void ATCmdManager::_oob_wifiMode_err(){
ocomeni 74:f26e846adfe9 637 }
ocomeni 74:f26e846adfe9 638
ocomeni 74:f26e846adfe9 639
ocomeni 74:f26e846adfe9 640 void ATCmdManager::_oob_conn_already(){
ocomeni 74:f26e846adfe9 641 }
ocomeni 74:f26e846adfe9 642
ocomeni 74:f26e846adfe9 643
ocomeni 74:f26e846adfe9 644 void ATCmdManager::_oob_err(){
ocomeni 74:f26e846adfe9 645 }
ocomeni 74:f26e846adfe9 646
ocomeni 79:a2187bbfa407 647 void ATCmdManager::_oob_get_fw_ver()
ocomeni 79:a2187bbfa407 648 {
ocomeni 102:9748f290a1a5 649 #ifdef MBED_MAJOR_VERSION
ocomeni 102:9748f290a1a5 650 char * fw_ver_str = new char[20];
ocomeni 102:9748f290a1a5 651 sprintf(fw_ver_str, "Mbed OS version %d.%d.%d.0\n\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
ocomeni 102:9748f290a1a5 652 sendAtConfirmation(fw_ver_str);
ocomeni 102:9748f290a1a5 653 delete fw_ver_str;
ocomeni 102:9748f290a1a5 654 #endif
ocomeni 79:a2187bbfa407 655 }
ocomeni 79:a2187bbfa407 656
ocomeni 103:7b566b522427 657 #define TTP_DEBUGGING
ocomeni 75:08eff6258e1b 658 void ATCmdManager::_oob_uart_setup(){
ocomeni 75:08eff6258e1b 659 int uOpts[NUM_UART_OPTIONS];
ocomeni 75:08eff6258e1b 660 //if(_parser.recv("=%d,%d,%d,%d,%d,%d", &uOpts[0], &uOpts[1], &uOpts[2], &uOpts[3], &uOpts[4], &uOpts[5])) {
ocomeni 75:08eff6258e1b 661 if(_parser.scanf("=%d,%d,%d,%d,%d,%d", &uOpts[0], &uOpts[1], &uOpts[2], &uOpts[3], &uOpts[4], &uOpts[5]) >0) {
ocomeni 103:7b566b522427 662 dbg_printf(LOG, "\nATCmdParser: Uart Options=%d,%d,%d,%d,%d,%d\n", uOpts[0], uOpts[1], uOpts[2], uOpts[3], uOpts[4], uOpts[5]);
ocomeni 103:7b566b522427 663 //printf("\nATCmdParser: Uart Options=%d,%d,%d,%d,%d,%d\n", uOpts[0], uOpts[1], uOpts[2], uOpts[3], uOpts[4], uOpts[5]);
ocomeni 81:637a87eb8170 664 //AT+UMRS=230400,2,8,1,1,1
ocomeni 103:7b566b522427 665 dbg_printf(LOG, "\n Changing Baud Rate to %d\n", uOpts[0]);
ocomeni 103:7b566b522427 666 #ifdef TTP_DEBUGGING
ocomeni 103:7b566b522427 667 sendAtConfirmation(OK_RESP);
ocomeni 103:7b566b522427 668 #else
ocomeni 81:637a87eb8170 669
ocomeni 95:290859010c8c 670 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 92:ec9550034276 671 wait(0.1);
ocomeni 81:637a87eb8170 672 _serial.set_baud(uOpts[0]);
ocomeni 92:ec9550034276 673 wait(0.1);
ocomeni 103:7b566b522427 674 dbg_printf(LOG, "\n Baud Rate now %d\n", uOpts[0]);
ocomeni 103:7b566b522427 675 #endif
ocomeni 103:7b566b522427 676 #ifdef BOX_UBLOX_DEMO_TESTING
ocomeni 103:7b566b522427 677 check_for_at_cmd = true;
ocomeni 103:7b566b522427 678 #endif
ocomeni 81:637a87eb8170 679
ocomeni 75:08eff6258e1b 680 } else {
ocomeni 103:7b566b522427 681 dbg_printf(LOG, "\nATCmdParser: Retrieving Uart Options failed");
ocomeni 75:08eff6258e1b 682 }
ocomeni 75:08eff6258e1b 683 }
ocomeni 75:08eff6258e1b 684
ocomeni 74:f26e846adfe9 685 void ATCmdManager::set_timeout(uint32_t timeout_ms)
ocomeni 74:f26e846adfe9 686 {
ocomeni 74:f26e846adfe9 687 _parser.set_timeout(timeout_ms);
ocomeni 74:f26e846adfe9 688 }
ocomeni 74:f26e846adfe9 689
ocomeni 75:08eff6258e1b 690
ocomeni 75:08eff6258e1b 691 void ATCmdManager::_oob_echo_off()
ocomeni 75:08eff6258e1b 692 {
ocomeni 96:f5ed273881af 693 //_smutex.lock();
ocomeni 103:7b566b522427 694 dbg_printf(LOG, "\n Received ATEO OOB command!!\n");
ocomeni 103:7b566b522427 695 dbg_printf(LOG, "\n turning echo OFF!!\n");
ocomeni 103:7b566b522427 696 //printf("\n turning echo OFF!!\n");
ocomeni 75:08eff6258e1b 697 _parser.debug_on(false);
ocomeni 95:290859010c8c 698 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 699 //_smutex.unlock();
ocomeni 75:08eff6258e1b 700 }
ocomeni 75:08eff6258e1b 701
ocomeni 75:08eff6258e1b 702
ocomeni 75:08eff6258e1b 703 void ATCmdManager::_oob_echo_on()
ocomeni 75:08eff6258e1b 704 {
ocomeni 96:f5ed273881af 705 //_smutex.lock();
ocomeni 103:7b566b522427 706 dbg_printf(LOG, "\n Received ATE1 OOB command!!\n");
ocomeni 103:7b566b522427 707 dbg_printf(LOG, "\n turning echo ON!!\n");
ocomeni 75:08eff6258e1b 708 _parser.debug_on(true);
ocomeni 95:290859010c8c 709 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 710 //_smutex.unlock();
ocomeni 75:08eff6258e1b 711 }
ocomeni 75:08eff6258e1b 712
ocomeni 75:08eff6258e1b 713
ocomeni 75:08eff6258e1b 714 void ATCmdManager::_oob_data_mode(){
ocomeni 96:f5ed273881af 715 //_smutex.lock();
ocomeni 103:7b566b522427 716 dbg_printf(LOG, "\n Received EDM mode command!!\n");
ocomeni 103:7b566b522427 717 int dmode;
ocomeni 103:7b566b522427 718 if(_parser.scanf("%d", &dmode) >0) {
ocomeni 103:7b566b522427 719 dbg_printf(LOG, "\nATCmdParser: Data mode=%d\r\n", dataMode);
ocomeni 96:f5ed273881af 720 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 103:7b566b522427 721 switch(dmode)
ocomeni 75:08eff6258e1b 722 {
ocomeni 75:08eff6258e1b 723 case 0:
ocomeni 103:7b566b522427 724 dbg_printf(LOG, "\nATCmdParser: Command Mode request received\n");
ocomeni 81:637a87eb8170 725 dataMode = AT_CMD_DATA_MODE;
ocomeni 75:08eff6258e1b 726 break;
ocomeni 75:08eff6258e1b 727 case 1:
ocomeni 103:7b566b522427 728 dbg_printf(LOG, "\nATCmdParser: Data Mode request received\n");
ocomeni 81:637a87eb8170 729 dataMode = AT_STD_DATA_MODE;
ocomeni 75:08eff6258e1b 730 break;
ocomeni 75:08eff6258e1b 731 case 2:
ocomeni 103:7b566b522427 732 dbg_printf(LOG, "\nATCmdParser: Extended data Mode request received\n");
ocomeni 81:637a87eb8170 733 dataMode = AT_EXT_DATA_MODE;
ocomeni 98:65c2333a38b6 734 _event_queue.call_in(10, &print_heap_and_isr_stack_info);
ocomeni 98:65c2333a38b6 735 //print_heap_and_isr_stack_info();
ocomeni 75:08eff6258e1b 736 break;
ocomeni 75:08eff6258e1b 737 default:
ocomeni 103:7b566b522427 738 dbg_printf(LOG, "\nATCmdParser: ERROR - UNKNOWN DATA MODE RECEIVED!!! \n");
ocomeni 75:08eff6258e1b 739 break;
ocomeni 75:08eff6258e1b 740 }
ocomeni 75:08eff6258e1b 741 } else {
ocomeni 103:7b566b522427 742 dbg_printf(LOG, "\nATCmdParser: Retrieving Uart Options failed\n");
ocomeni 75:08eff6258e1b 743 }
ocomeni 96:f5ed273881af 744 //_smutex.unlock();
ocomeni 75:08eff6258e1b 745 }
ocomeni 75:08eff6258e1b 746
ocomeni 75:08eff6258e1b 747 void ATCmdManager::_oob_get_mac_addr(){
ocomeni 75:08eff6258e1b 748 int bleOrWifi;
ocomeni 96:f5ed273881af 749 //_smutex.lock();
ocomeni 75:08eff6258e1b 750 if(_parser.scanf("=%d", &bleOrWifi) >0) {
ocomeni 75:08eff6258e1b 751 switch(bleOrWifi)
ocomeni 75:08eff6258e1b 752 {
ocomeni 75:08eff6258e1b 753 case 1:
ocomeni 103:7b566b522427 754 dbg_printf(LOG, "\nATCmdParser: BLE MAC Address request received");
ocomeni 75:08eff6258e1b 755 break;
ocomeni 75:08eff6258e1b 756 case 2:
ocomeni 103:7b566b522427 757 dbg_printf(LOG, "\nATCmdParser: WiFi MAC Address request received");
ocomeni 75:08eff6258e1b 758 break;
ocomeni 75:08eff6258e1b 759 default:
ocomeni 103:7b566b522427 760 dbg_printf(LOG, "\nATCmdParser: ERROR - UNKNOWN MAC ADDRESS REQUEST RECEIVED!!! \n");
ocomeni 75:08eff6258e1b 761 break;
ocomeni 75:08eff6258e1b 762 }
ocomeni 75:08eff6258e1b 763 } else {
ocomeni 103:7b566b522427 764 dbg_printf(LOG, "\nATCmdParser: Retrieving Uart Options failed");
ocomeni 75:08eff6258e1b 765 }
ocomeni 95:290859010c8c 766 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 767 //_smutex.unlock();
ocomeni 75:08eff6258e1b 768 }
ocomeni 75:08eff6258e1b 769
ocomeni 75:08eff6258e1b 770 void ATCmdManager::_oob_get_ble_role(){
ocomeni 96:f5ed273881af 771 //_smutex.lock();
ocomeni 103:7b566b522427 772 dbg_printf(LOG, "\n Received get BLE role command!!\n");
ocomeni 103:7b566b522427 773 //printf("\n Received get BLE role command!!\n");
ocomeni 103:7b566b522427 774 sendAtConfirmation("+UBTLE:2\r\nOK\r\n"); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 775 //_smutex.unlock();
ocomeni 75:08eff6258e1b 776 }
ocomeni 75:08eff6258e1b 777
ocomeni 75:08eff6258e1b 778 void ATCmdManager::_oob_ena_ble_peri(){
ocomeni 96:f5ed273881af 779 //_smutex.lock();
ocomeni 103:7b566b522427 780 dbg_printf(LOG, "\n Received enable BLE Peripheral command!!\n");
ocomeni 95:290859010c8c 781 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 782 //_smutex.unlock();
ocomeni 75:08eff6258e1b 783 }
ocomeni 75:08eff6258e1b 784
ocomeni 75:08eff6258e1b 785 void ATCmdManager::_oob_reboot(){
ocomeni 96:f5ed273881af 786 //_smutex.lock();
ocomeni 103:7b566b522427 787 dbg_printf(LOG, "\n Received reboot command!!\n");
ocomeni 95:290859010c8c 788 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 103:7b566b522427 789 //_parser.send("System Resetting....\n");
ocomeni 75:08eff6258e1b 790 system_reset();
ocomeni 96:f5ed273881af 791 //_smutex.unlock();
ocomeni 75:08eff6258e1b 792 }
ocomeni 75:08eff6258e1b 793
ocomeni 79:a2187bbfa407 794 const char * ATCmdManager::sec2str(nsapi_security_t sec)
ocomeni 79:a2187bbfa407 795 {
ocomeni 79:a2187bbfa407 796 switch (sec) {
ocomeni 79:a2187bbfa407 797 case NSAPI_SECURITY_NONE:
ocomeni 79:a2187bbfa407 798 return "None";
ocomeni 79:a2187bbfa407 799 case NSAPI_SECURITY_WEP:
ocomeni 79:a2187bbfa407 800 return "WEP";
ocomeni 79:a2187bbfa407 801 case NSAPI_SECURITY_WPA:
ocomeni 79:a2187bbfa407 802 return "WPA";
ocomeni 79:a2187bbfa407 803 case NSAPI_SECURITY_WPA2:
ocomeni 79:a2187bbfa407 804 return "WPA2";
ocomeni 79:a2187bbfa407 805 case NSAPI_SECURITY_WPA_WPA2:
ocomeni 79:a2187bbfa407 806 return "WPA/WPA2";
ocomeni 79:a2187bbfa407 807 case NSAPI_SECURITY_UNKNOWN:
ocomeni 79:a2187bbfa407 808 default:
ocomeni 79:a2187bbfa407 809 return "Unknown";
ocomeni 79:a2187bbfa407 810 }
ocomeni 79:a2187bbfa407 811 }
ocomeni 81:637a87eb8170 812
ocomeni 81:637a87eb8170 813 bool ATCmdManager::setNextResponse(at_cmd_resp_t resp)
ocomeni 81:637a87eb8170 814 {
ocomeni 81:637a87eb8170 815 if(at_resp == AT_RESP_NONE){
ocomeni 81:637a87eb8170 816 at_resp = resp;
ocomeni 81:637a87eb8170 817 return true; // success
ocomeni 81:637a87eb8170 818 }
ocomeni 81:637a87eb8170 819 return false; // wiFiManager busy
ocomeni 79:a2187bbfa407 820 }
ocomeni 79:a2187bbfa407 821
ocomeni 81:637a87eb8170 822
ocomeni 79:a2187bbfa407 823 void ATCmdManager::_oob_scanWiFiNetworks(){
ocomeni 96:f5ed273881af 824 //_smutex.lock();
ocomeni 103:7b566b522427 825 dbg_printf(LOG, "\n Received scanWiFiNetworks command!!\n");
ocomeni 95:290859010c8c 826 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 96:f5ed273881af 827 //_smutex.unlock();
ocomeni 79:a2187bbfa407 828 wifi_cmd_t cmd = WIFI_CMD_SCAN;
ocomeni 79:a2187bbfa407 829 // queue next command
ocomeni 79:a2187bbfa407 830 queueWiFiCommand(cmd);
ocomeni 81:637a87eb8170 831 return;
ocomeni 75:08eff6258e1b 832 }
ocomeni 75:08eff6258e1b 833
ocomeni 95:290859010c8c 834
ocomeni 95:290859010c8c 835
ocomeni 98:65c2333a38b6 836 void ATCmdManager::_oob_WiFiStationConfigAction()
ocomeni 79:a2187bbfa407 837 {
ocomeni 98:65c2333a38b6 838 int if_id; // interface id for request
ocomeni 98:65c2333a38b6 839 int aId; // interface id for request
ocomeni 98:65c2333a38b6 840 _parser.recv("%d,%d", &if_id, &aId);
ocomeni 92:ec9550034276 841 //_smutex.lock();
ocomeni 103:7b566b522427 842 dbg_printf(LOG, "\n Received WiFi Configuration Action command %d %d!!\r\n", if_id, aId);
ocomeni 103:7b566b522427 843 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 98:65c2333a38b6 844 if(if_id == WIFI_CONFIG_ID && aId <5){
ocomeni 95:290859010c8c 845 wifi_cmd_t cmd;
ocomeni 98:65c2333a38b6 846 action_id_t action_id = (action_id_t) aId;
ocomeni 95:290859010c8c 847 switch(action_id){
ocomeni 95:290859010c8c 848 case WIFI_CONFIG_RESET:
ocomeni 95:290859010c8c 849 break;
ocomeni 95:290859010c8c 850 case WIFI_CONFIG_STORE:
ocomeni 95:290859010c8c 851 break;
ocomeni 95:290859010c8c 852 case WIFI_CONFIG_LOAD:
ocomeni 95:290859010c8c 853 break;
ocomeni 95:290859010c8c 854 case WIFI_CONFIG_ACTIVATE:
ocomeni 95:290859010c8c 855 cmd = WIFI_CMD_CONNECT;
ocomeni 103:7b566b522427 856 dbg_printf(LOG, "\n About to Queue wifi cmd = %d!!\n", cmd);
ocomeni 95:290859010c8c 857 //_smutex.unlock();
ocomeni 95:290859010c8c 858 // queue next command
ocomeni 95:290859010c8c 859 queueWiFiCommand(cmd);
ocomeni 95:290859010c8c 860 break;
ocomeni 95:290859010c8c 861 case WIFI_CONFIG_DEACTIVATE:
ocomeni 95:290859010c8c 862 cmd = WIFI_CMD_DISCONNECT;
ocomeni 103:7b566b522427 863 dbg_printf(LOG, "\n About to Queue wifi cmd = %d!!\n", cmd);
ocomeni 95:290859010c8c 864 //_smutex.unlock();
ocomeni 95:290859010c8c 865 // queue next command
ocomeni 95:290859010c8c 866 queueWiFiCommand(cmd);
ocomeni 95:290859010c8c 867 break;
ocomeni 95:290859010c8c 868 default:
ocomeni 95:290859010c8c 869 break;
ocomeni 95:290859010c8c 870 }
ocomeni 95:290859010c8c 871 }
ocomeni 98:65c2333a38b6 872 if(debug_flag>0){
ocomeni 103:7b566b522427 873 dbg_printf(LOG, "finished queuing WIFI CONNECT CMD \r\n");
ocomeni 98:65c2333a38b6 874 }
ocomeni 81:637a87eb8170 875 return;
ocomeni 79:a2187bbfa407 876 }
ocomeni 79:a2187bbfa407 877
ocomeni 79:a2187bbfa407 878
ocomeni 79:a2187bbfa407 879 void ATCmdManager::_oob_disconnectWiFiNetwork()
ocomeni 79:a2187bbfa407 880 {
ocomeni 96:f5ed273881af 881 //_smutex.lock();
ocomeni 103:7b566b522427 882 dbg_printf(LOG, "\n Received WiFi Disconnect command!!\n");
ocomeni 95:290859010c8c 883 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 81:637a87eb8170 884 wifi_cmd_t cmd = WIFI_CMD_DISCONNECT;
ocomeni 96:f5ed273881af 885 //_smutex.unlock();
ocomeni 81:637a87eb8170 886 // queue next command
ocomeni 81:637a87eb8170 887 queueWiFiCommand(cmd);
ocomeni 81:637a87eb8170 888 return;
ocomeni 81:637a87eb8170 889 }
ocomeni 81:637a87eb8170 890
ocomeni 81:637a87eb8170 891 void ATCmdManager::_oob_setupInternetConnection()
ocomeni 81:637a87eb8170 892 {
ocomeni 90:ed0267eca7b5 893 char str[MAX_URL_LEN];
ocomeni 90:ed0267eca7b5 894 char url[MAX_URL_LEN];
ocomeni 81:637a87eb8170 895 int n;
ocomeni 81:637a87eb8170 896 internet_config_t internet_config;
ocomeni 96:f5ed273881af 897 //_smutex.lock();
ocomeni 103:7b566b522427 898 dbg_printf(LOG, "sizeof internet_config_t = %d\n", sizeof(internet_config_t));
ocomeni 90:ed0267eca7b5 899 n = ReadBytes((uint8_t *)str, MAX_URL_LEN);
ocomeni 84:7c7add00f4bf 900 str[n]=NULL;
ocomeni 103:7b566b522427 901 dbg_printf(LOG, "\n read string = %s , n = %d\n", str, n);
ocomeni 90:ed0267eca7b5 902 //n = sscanf(str, "=%1d,%199[^,],%1d", &(uint8_t)internet_config.peer_id,
ocomeni 90:ed0267eca7b5 903 n = sscanf(str, "=%1d,%99[^,],%1d", &internet_config.peer_id,
ocomeni 92:ec9550034276 904 url, //internet_config.url,
ocomeni 92:ec9550034276 905 &internet_config.connectionScheme);
ocomeni 103:7b566b522427 906 #ifdef BOX_UBLOX_DEMO_TESTING
ocomeni 103:7b566b522427 907 char *p = strstr(url,"/https:");
ocomeni 103:7b566b522427 908 #else
ocomeni 92:ec9550034276 909 char *p = strstr(url,"\"");
ocomeni 103:7b566b522427 910 #endif
ocomeni 92:ec9550034276 911 if(p!=NULL)
ocomeni 92:ec9550034276 912 {
ocomeni 92:ec9550034276 913 strncpy(internet_config.url, &p[1], strlen(url));
ocomeni 92:ec9550034276 914 p = strstr(internet_config.url,"\"");
ocomeni 92:ec9550034276 915 *p = NULL;
ocomeni 92:ec9550034276 916 }
ocomeni 92:ec9550034276 917 else
ocomeni 92:ec9550034276 918 {
ocomeni 92:ec9550034276 919 strncpy(internet_config.url, url, strlen(url)+1);
ocomeni 92:ec9550034276 920 }
ocomeni 103:7b566b522427 921 dbg_printf(LOG, "\n read string = %s , n = %d -- strlen(url) = %d\n", internet_config.url, n, strlen(internet_config.url));
ocomeni 81:637a87eb8170 922 if(n>0)
ocomeni 81:637a87eb8170 923 {
ocomeni 103:7b566b522427 924 dbg_printf(LOG, "peer_id = %1d, url = %s, connScheme = %1d\n", internet_config.peer_id,
ocomeni 90:ed0267eca7b5 925 internet_config.url,
ocomeni 90:ed0267eca7b5 926 internet_config.connectionScheme);
ocomeni 81:637a87eb8170 927 // package and send on wifi data queue
ocomeni 90:ed0267eca7b5 928 wifi_data_msg_t data_msg;
ocomeni 81:637a87eb8170 929 data_msg.wifi_cmd = WIFI_CMD_INTERNET_CONFIG;
ocomeni 84:7c7add00f4bf 930 data_msg.dataLen = sizeof(internet_config_t); // + strlen(internet_config.url);
ocomeni 103:7b566b522427 931 dbg_printf(LOG, "\n url size = %d url str = %s\n",strlen(internet_config.url), internet_config.url );
ocomeni 81:637a87eb8170 932 memcpy(data_msg.buffer,&internet_config, data_msg.dataLen);
ocomeni 103:7b566b522427 933 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 82:10072c1794d3 934 // queue next data request
ocomeni 81:637a87eb8170 935 queueWiFiDataRequest(data_msg);
ocomeni 84:7c7add00f4bf 936 print_memory_info();
ocomeni 81:637a87eb8170 937 } else {
ocomeni 103:7b566b522427 938 dbg_printf(LOG, "\n[ATCMD MAN]: internet configuration failed %d fields parsed \r\n", n);
ocomeni 82:10072c1794d3 939 _parser.send("NAK\n");
ocomeni 82:10072c1794d3 940 }
ocomeni 96:f5ed273881af 941 //_smutex.unlock();
ocomeni 82:10072c1794d3 942 }
ocomeni 82:10072c1794d3 943
ocomeni 82:10072c1794d3 944 wifi_config_t ATCmdManager::init_wifi_config()
ocomeni 82:10072c1794d3 945 {
ocomeni 82:10072c1794d3 946 wifi_config_t wifi_cfg;
ocomeni 82:10072c1794d3 947 wifi_cfg.ssid[0] = NULL;
ocomeni 82:10072c1794d3 948 wifi_cfg.pass[0] = NULL;
ocomeni 82:10072c1794d3 949 wifi_cfg.security = NSAPI_SECURITY_UNKNOWN;
ocomeni 82:10072c1794d3 950 return wifi_cfg;
ocomeni 82:10072c1794d3 951 }
ocomeni 83:9c271a50a70b 952 /* read ASCII characters into buffer and null terminate */
ocomeni 83:9c271a50a70b 953 int ATCmdManager::readStringBytes(uint8_t *buf, int maxBytes)
ocomeni 82:10072c1794d3 954 {
ocomeni 82:10072c1794d3 955 int c;
ocomeni 82:10072c1794d3 956 int sptr = 0;
ocomeni 93:06e755a80187 957 int quoteCnt = 0;
ocomeni 82:10072c1794d3 958 for(int i=0;i<maxBytes;i++){
ocomeni 82:10072c1794d3 959 c = _parser.getc();
ocomeni 93:06e755a80187 960 if(c== '"')quoteCnt++;
ocomeni 93:06e755a80187 961 if(c==-1 || quoteCnt==2){
ocomeni 83:9c271a50a70b 962 buf[sptr] = NULL; // null terminate if string
ocomeni 82:10072c1794d3 963 return i;
ocomeni 82:10072c1794d3 964 }
ocomeni 82:10072c1794d3 965 if(c != ',' && c!= '"'){
ocomeni 82:10072c1794d3 966 buf[sptr++] = (uint8_t) c;
ocomeni 82:10072c1794d3 967 }
ocomeni 81:637a87eb8170 968 }
ocomeni 83:9c271a50a70b 969 return maxBytes;
ocomeni 83:9c271a50a70b 970 }
ocomeni 83:9c271a50a70b 971
ocomeni 83:9c271a50a70b 972 int ATCmdManager::ReadBytes(uint8_t *buf, int maxBytes)
ocomeni 83:9c271a50a70b 973 {
ocomeni 83:9c271a50a70b 974 int c;
ocomeni 83:9c271a50a70b 975 int sptr = 0;
ocomeni 83:9c271a50a70b 976 for(int i=0;i<maxBytes;i++){
ocomeni 83:9c271a50a70b 977 c = _parser.getc();
ocomeni 83:9c271a50a70b 978 if(c==-1){
ocomeni 83:9c271a50a70b 979 return i;
ocomeni 83:9c271a50a70b 980 }
ocomeni 83:9c271a50a70b 981 buf[sptr++] = (uint8_t) c;
ocomeni 83:9c271a50a70b 982 }
ocomeni 83:9c271a50a70b 983 return maxBytes;
ocomeni 82:10072c1794d3 984 }
ocomeni 82:10072c1794d3 985
ocomeni 82:10072c1794d3 986 void ATCmdManager::_oob_setWiFiSSID()
ocomeni 82:10072c1794d3 987 {
ocomeni 82:10072c1794d3 988 int n;
ocomeni 82:10072c1794d3 989 wifi_config_t wifi_cfg = init_wifi_config();
ocomeni 96:f5ed273881af 990 //_smutex.lock();
ocomeni 83:9c271a50a70b 991 n = readStringBytes((uint8_t *)wifi_cfg.ssid, 32);
ocomeni 103:7b566b522427 992 dbg_printf(LOG, "[ATCMD MAN]: number of bytes read = %d\n", n);
ocomeni 82:10072c1794d3 993 if(n>0)
ocomeni 82:10072c1794d3 994 {
ocomeni 103:7b566b522427 995 dbg_printf(LOG, "[ATCMD MAN]: wifi_cfg.ssid = %s\n", wifi_cfg.ssid);
ocomeni 82:10072c1794d3 996 // package and send on wifi data queue
ocomeni 82:10072c1794d3 997 wifi_data_msg_t data_msg;
ocomeni 82:10072c1794d3 998 data_msg.wifi_cmd = WIFI_CMD_CONFIG;
ocomeni 82:10072c1794d3 999 data_msg.dataLen = sizeof(wifi_config_t);
ocomeni 82:10072c1794d3 1000 memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
ocomeni 103:7b566b522427 1001 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 82:10072c1794d3 1002 queueWiFiDataRequest(data_msg);
ocomeni 82:10072c1794d3 1003 } else {
ocomeni 103:7b566b522427 1004 dbg_printf(LOG, "\n[ATCMD MAN]: wifi configuration failed \n");
ocomeni 82:10072c1794d3 1005 _parser.send("NAK\n");
ocomeni 82:10072c1794d3 1006 }
ocomeni 96:f5ed273881af 1007 //_smutex.unlock();
ocomeni 82:10072c1794d3 1008 }
ocomeni 82:10072c1794d3 1009
ocomeni 82:10072c1794d3 1010 void ATCmdManager::_oob_setWiFiPWD()
ocomeni 82:10072c1794d3 1011 {
ocomeni 82:10072c1794d3 1012 int n;
ocomeni 82:10072c1794d3 1013 wifi_config_t wifi_cfg = init_wifi_config();
ocomeni 96:f5ed273881af 1014 //_smutex.lock();
ocomeni 82:10072c1794d3 1015 //n = _parser.scanf("%31[^\r\n]", wifi_cfg.pass);
ocomeni 83:9c271a50a70b 1016 n = readStringBytes((uint8_t *)wifi_cfg.pass, 32);
ocomeni 82:10072c1794d3 1017 if(n>0)
ocomeni 82:10072c1794d3 1018 {
ocomeni 103:7b566b522427 1019 dbg_printf(LOG, "ATCMD MAN]: wifi_cfg.pass = %s\n", "****************");
ocomeni 82:10072c1794d3 1020 // package and send on wifi data queue
ocomeni 82:10072c1794d3 1021 wifi_data_msg_t data_msg;
ocomeni 82:10072c1794d3 1022 data_msg.wifi_cmd = WIFI_CMD_CONFIG;
ocomeni 82:10072c1794d3 1023 data_msg.dataLen = sizeof(wifi_config_t);
ocomeni 82:10072c1794d3 1024 memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
ocomeni 103:7b566b522427 1025 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 82:10072c1794d3 1026 queueWiFiDataRequest(data_msg);
ocomeni 82:10072c1794d3 1027 } else {
ocomeni 103:7b566b522427 1028 dbg_printf(LOG, "\n[ATCMD MAN]: wifi configuration failed \n");
ocomeni 82:10072c1794d3 1029 _parser.send("NAK\n");
ocomeni 82:10072c1794d3 1030 }
ocomeni 96:f5ed273881af 1031 //_smutex.unlock();
ocomeni 82:10072c1794d3 1032 }
ocomeni 82:10072c1794d3 1033
ocomeni 82:10072c1794d3 1034 void ATCmdManager::_oob_setWiFiSecurity()
ocomeni 82:10072c1794d3 1035 {
ocomeni 82:10072c1794d3 1036 int n;
ocomeni 82:10072c1794d3 1037 wifi_config_t wifi_cfg = init_wifi_config();
ocomeni 90:ed0267eca7b5 1038 _smutex.lock();
ocomeni 82:10072c1794d3 1039 n = _parser.scanf(",%d", &wifi_cfg.security);
ocomeni 90:ed0267eca7b5 1040 _smutex.unlock();
ocomeni 82:10072c1794d3 1041 if(n>0)
ocomeni 82:10072c1794d3 1042 {
ocomeni 103:7b566b522427 1043 dbg_printf(LOG, "ATCMD MAN]: wifi_cfg.security = %s\n", sec2str(wifi_cfg.security));
ocomeni 82:10072c1794d3 1044 // package and send on wifi data queue
ocomeni 82:10072c1794d3 1045 wifi_data_msg_t data_msg;
ocomeni 82:10072c1794d3 1046 data_msg.wifi_cmd = WIFI_CMD_CONFIG;
ocomeni 82:10072c1794d3 1047 data_msg.dataLen = sizeof(wifi_config_t);
ocomeni 82:10072c1794d3 1048 memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
ocomeni 103:7b566b522427 1049 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 82:10072c1794d3 1050 queueWiFiDataRequest(data_msg);
ocomeni 82:10072c1794d3 1051 } else {
ocomeni 103:7b566b522427 1052 dbg_printf(LOG, "\n[ATCMD MAN]: wifi configuration failed \n");
ocomeni 90:ed0267eca7b5 1053 _smutex.lock();
ocomeni 82:10072c1794d3 1054 _parser.send("NAK\n");
ocomeni 90:ed0267eca7b5 1055 _smutex.unlock();
ocomeni 82:10072c1794d3 1056 }
ocomeni 84:7c7add00f4bf 1057 //_smutex.unlock();
ocomeni 79:a2187bbfa407 1058 }
ocomeni 81:637a87eb8170 1059
ocomeni 83:9c271a50a70b 1060
ocomeni 95:290859010c8c 1061
ocomeni 95:290859010c8c 1062 void ATCmdManager::_oob_getNetworkStatus()
ocomeni 95:290859010c8c 1063 {
ocomeni 95:290859010c8c 1064 uint8_t if_id; // interface id for request
ocomeni 95:290859010c8c 1065 _parser.scanf(",%d", &if_id);
ocomeni 95:290859010c8c 1066 //_smutex.lock();
ocomeni 103:7b566b522427 1067 dbg_printf(LOG, "\n Received Get Network Status command!!\n");
ocomeni 103:7b566b522427 1068 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 1069 if(if_id == WIFI_INTERFACE_ID){
ocomeni 95:290859010c8c 1070 wifi_cmd_t cmd = WIFI_CMD_NETWORK_STATUS;
ocomeni 103:7b566b522427 1071 dbg_printf(LOG, "\n About to Queue wifi cmd = %d!!\n", cmd);
ocomeni 95:290859010c8c 1072 //_smutex.unlock();
ocomeni 95:290859010c8c 1073 // queue next command
ocomeni 95:290859010c8c 1074 queueWiFiCommand(cmd);
ocomeni 95:290859010c8c 1075 }
ocomeni 95:290859010c8c 1076 return;
ocomeni 95:290859010c8c 1077 }
ocomeni 95:290859010c8c 1078
ocomeni 95:290859010c8c 1079
ocomeni 95:290859010c8c 1080 void ATCmdManager::_oob_WiFiNetworkStatus()
ocomeni 95:290859010c8c 1081 {
ocomeni 95:290859010c8c 1082 //_smutex.lock();
ocomeni 103:7b566b522427 1083 dbg_printf(LOG, "\n Received Get WiFi Network Status command!!\n");
ocomeni 103:7b566b522427 1084 //sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 95:290859010c8c 1085 wifi_cmd_t cmd = WIFI_CMD_WIFI_STATUS;
ocomeni 103:7b566b522427 1086 dbg_printf(LOG, "\n About to Queue wifi cmd = %d!!\n", cmd);
ocomeni 95:290859010c8c 1087 //_smutex.unlock();
ocomeni 95:290859010c8c 1088 // queue next command
ocomeni 95:290859010c8c 1089 queueWiFiCommand(cmd);
ocomeni 95:290859010c8c 1090 return;
ocomeni 95:290859010c8c 1091 }
ocomeni 95:290859010c8c 1092
ocomeni 83:9c271a50a70b 1093 void ATCmdManager::_oob_sendHttpMessage()
ocomeni 83:9c271a50a70b 1094 {
ocomeni 83:9c271a50a70b 1095 int n;
ocomeni 84:7c7add00f4bf 1096 http_request_t http_post_request;
ocomeni 84:7c7add00f4bf 1097 //_smutex.lock();
ocomeni 83:9c271a50a70b 1098 /*
ocomeni 83:9c271a50a70b 1099 n = _parser.scanf(",%d", &wifi_cfg.security);
ocomeni 83:9c271a50a70b 1100 if(n>0)
ocomeni 83:9c271a50a70b 1101 {
ocomeni 103:7b566b522427 1102 dbg_printf(LOG, "ATCMD MAN]: wifi_cfg.security = %s\n", sec2str(wifi_cfg.security));
ocomeni 83:9c271a50a70b 1103 // package and send on wifi data queue
ocomeni 83:9c271a50a70b 1104 wifi_data_msg_t data_msg;
ocomeni 83:9c271a50a70b 1105 data_msg.wifi_cmd = WIFI_CMD_CONFIG;
ocomeni 83:9c271a50a70b 1106 data_msg.dataLen = sizeof(wifi_config_t);
ocomeni 83:9c271a50a70b 1107 memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
ocomeni 83:9c271a50a70b 1108 queueWiFiDataRequest(data_msg);
ocomeni 95:290859010c8c 1109 sendAtConfirmation(OK_RESP); //_parser.send(OK_RESP);
ocomeni 83:9c271a50a70b 1110 } else {
ocomeni 103:7b566b522427 1111 dbg_printf(LOG, "\n[ATCMD MAN]: wifi configuration failed \n");
ocomeni 83:9c271a50a70b 1112 _parser.send("NAK\n");
ocomeni 83:9c271a50a70b 1113 }
ocomeni 83:9c271a50a70b 1114 */
ocomeni 84:7c7add00f4bf 1115 //_smutex.unlock();
ocomeni 83:9c271a50a70b 1116
ocomeni 83:9c271a50a70b 1117 }
ocomeni 83:9c271a50a70b 1118
ocomeni 81:637a87eb8170 1119 bool ATCmdManager::queueWiFiCommand(wifi_cmd_t cmd){
ocomeni 103:7b566b522427 1120 dbg_printf(LOG, "[ATCMD MAN] about to be queued with wifi_cmd = %d\n", cmd);
ocomeni 92:ec9550034276 1121 #ifndef USE_MALLOC_FOR_COMMAND_MEMORY_POOL
ocomeni 81:637a87eb8170 1122 wifi_cmd_message_t *wifiCmd = _aT2WiFimPool->alloc();
ocomeni 92:ec9550034276 1123 if(wifiCmd == NULL){
ocomeni 103:7b566b522427 1124 dbg_printf(LOG, "[ATCMD MAN] queued memory allocation failed\n");
ocomeni 92:ec9550034276 1125 return false;
ocomeni 92:ec9550034276 1126 }
ocomeni 92:ec9550034276 1127 #else
ocomeni 92:ec9550034276 1128 wifi_cmd_message_t *wifiCmd = (wifi_cmd_message_t *) malloc(sizeof(wifi_cmd_message_t));
ocomeni 92:ec9550034276 1129 if(wifiCmd == NULL){
ocomeni 103:7b566b522427 1130 dbg_printf(LOG, "[ATCMD MAN] try malloc() : queued memory allocation failed\n");
ocomeni 98:65c2333a38b6 1131 //_event_queue.call_in(10, &print_memory_info);
ocomeni 98:65c2333a38b6 1132 _event_queue.call_in(10, &print_heap_and_isr_stack_info);
ocomeni 98:65c2333a38b6 1133 //print_memory_info();
ocomeni 98:65c2333a38b6 1134 //print_heap_and_isr_stack_info();
ocomeni 92:ec9550034276 1135 return false;
ocomeni 92:ec9550034276 1136 }
ocomeni 92:ec9550034276 1137 #endif
ocomeni 81:637a87eb8170 1138 wifiCmd->wifi_cmd = cmd;
ocomeni 81:637a87eb8170 1139 _aT2WiFiCmdQueue->put(wifiCmd);
ocomeni 103:7b566b522427 1140 dbg_printf(LOG, "[ATCMD MAN] queued wifi_cmd = %d\n", wifiCmd->wifi_cmd);
ocomeni 98:65c2333a38b6 1141 if((int)cmd == 5)
ocomeni 98:65c2333a38b6 1142 debug_flag = 3;
ocomeni 81:637a87eb8170 1143 return true;
ocomeni 81:637a87eb8170 1144 }
ocomeni 81:637a87eb8170 1145
ocomeni 81:637a87eb8170 1146 bool ATCmdManager::dequeueATresponse(){
ocomeni 98:65c2333a38b6 1147 if(debug_flag>0){
ocomeni 98:65c2333a38b6 1148 debug_flag--;
ocomeni 103:7b566b522427 1149 dbg_printf(LOG, "Called dequeueATresponse after WIFI CONNECT CMD \r\n");
ocomeni 98:65c2333a38b6 1150 }
ocomeni 81:637a87eb8170 1151 if(at_resp != AT_RESP_NONE) return false; // busy
ocomeni 81:637a87eb8170 1152 osEvent evt = _wiFi2ATCmdQueue->get(0);
ocomeni 81:637a87eb8170 1153 if(evt.status == osEventMessage){
ocomeni 81:637a87eb8170 1154 at_resp_message_t *resp = (at_resp_message_t*)evt.value.p;
ocomeni 81:637a87eb8170 1155 setNextResponse(resp->at_resp);
ocomeni 103:7b566b522427 1156 dbg_printf(LOG, "[ATCMD MAN] dequeued AT CMD : at_resp = %d\n", resp->at_resp);
ocomeni 92:ec9550034276 1157 #ifndef USE_MALLOC_FOR_COMMAND_MEMORY_POOL
ocomeni 81:637a87eb8170 1158 _wiFi2ATmPool->free(resp);
ocomeni 96:f5ed273881af 1159 resp = NULL;
ocomeni 92:ec9550034276 1160 #else
ocomeni 92:ec9550034276 1161 free(resp);
ocomeni 96:f5ed273881af 1162 resp = NULL;
ocomeni 92:ec9550034276 1163 #endif
ocomeni 81:637a87eb8170 1164 }
ocomeni 81:637a87eb8170 1165 return true;
ocomeni 81:637a87eb8170 1166 }
ocomeni 81:637a87eb8170 1167
ocomeni 81:637a87eb8170 1168 bool ATCmdManager::queueWiFiDataRequest(wifi_data_msg_t data_req){
ocomeni 93:06e755a80187 1169 //print_memory_info();
ocomeni 98:65c2333a38b6 1170 _event_queue.call_in(10, &print_heap_and_isr_stack_info);
ocomeni 98:65c2333a38b6 1171 //print_heap_and_isr_stack_info();
ocomeni 81:637a87eb8170 1172 wifi_data_msg_t *wifiData = _aT2WiFiDatamPool->alloc();
ocomeni 81:637a87eb8170 1173 wifiData->wifi_cmd = data_req.wifi_cmd;
ocomeni 81:637a87eb8170 1174 wifiData->dataLen = data_req.dataLen;
ocomeni 81:637a87eb8170 1175 memcpy(wifiData->buffer, data_req.buffer, data_req.dataLen);
ocomeni 81:637a87eb8170 1176 _aT2WiFiDataQueue->put(wifiData);
ocomeni 103:7b566b522427 1177 dbg_printf(LOG, "[ATCMD MAN] queued data size = %d : wifi_cmd = %d\n", data_req.dataLen, data_req.wifi_cmd);
ocomeni 84:7c7add00f4bf 1178 //free(&data_req);
ocomeni 81:637a87eb8170 1179 return true;
ocomeni 81:637a87eb8170 1180 }
ocomeni 81:637a87eb8170 1181
ocomeni 87:99b37d26ff2a 1182 bool ATCmdManager::dequeueWiFidataResponse(){
ocomeni 98:65c2333a38b6 1183 if(debug_flag>0){
ocomeni 98:65c2333a38b6 1184 debug_flag--;
ocomeni 103:7b566b522427 1185 dbg_printf(LOG, "Called dequeueWiFidataResponse after WIFI CONNECT CMD \r\n");
ocomeni 98:65c2333a38b6 1186 }
ocomeni 81:637a87eb8170 1187 if(at_resp != AT_RESP_NONE) return false; // busy
ocomeni 81:637a87eb8170 1188 osEvent evt = _wiFi2ATDataQueue->get(0);
ocomeni 81:637a87eb8170 1189 if(evt.status == osEventMessage){
ocomeni 81:637a87eb8170 1190 resp_data = (at_data_msg_t*)evt.value.p;
ocomeni 81:637a87eb8170 1191 setNextResponse(resp_data->at_resp);
ocomeni 103:7b566b522427 1192 dbg_printf(LOG, "[ATCMD MAN] dequeued data size = %d : at_resp = %d\n", resp_data->dataLen, resp_data->at_resp);
ocomeni 98:65c2333a38b6 1193 _event_queue.call_in(10, &print_heap_and_isr_stack_info);
ocomeni 98:65c2333a38b6 1194 //print_heap_and_isr_stack_info();
ocomeni 81:637a87eb8170 1195 }
ocomeni 81:637a87eb8170 1196 return true;
ocomeni 81:637a87eb8170 1197 }
ocomeni 81:637a87eb8170 1198
ocomeni 93:06e755a80187 1199
ocomeni 93:06e755a80187 1200 void ATCmdManager::sendAtConfirmation(const char *buf)
ocomeni 93:06e755a80187 1201 {
ocomeni 96:f5ed273881af 1202 _smutex.lock();
ocomeni 95:290859010c8c 1203 switch(dataMode){
ocomeni 95:290859010c8c 1204 case AT_CMD_DATA_MODE:
ocomeni 98:65c2333a38b6 1205 _parser.send("%s", buf);
ocomeni 95:290859010c8c 1206 break;
ocomeni 95:290859010c8c 1207 case AT_STD_DATA_MODE:
ocomeni 98:65c2333a38b6 1208 _parser.send("%s", buf);
ocomeni 95:290859010c8c 1209 break;
ocomeni 95:290859010c8c 1210 case AT_EXT_DATA_MODE:
ocomeni 98:65c2333a38b6 1211 {
ocomeni 96:f5ed273881af 1212 int len = strlen(buf);
ocomeni 95:290859010c8c 1213 outputEDMdata((const uint8_t *) buf, len, AT_MSG_ID, CONFIRMATION_MSG_TYPE, NO_CHANNEL);
ocomeni 95:290859010c8c 1214 break;
ocomeni 98:65c2333a38b6 1215 }
ocomeni 95:290859010c8c 1216 default:
ocomeni 98:65c2333a38b6 1217 _parser.send("%s", buf);
ocomeni 95:290859010c8c 1218 break;
ocomeni 95:290859010c8c 1219 }
ocomeni 96:f5ed273881af 1220 //wait_ms(1);
ocomeni 96:f5ed273881af 1221 _smutex.unlock();
ocomeni 93:06e755a80187 1222 }
ocomeni 93:06e755a80187 1223 void ATCmdManager::sendAtEvent(const char *buf)
ocomeni 93:06e755a80187 1224 {
ocomeni 96:f5ed273881af 1225 _smutex.lock();
ocomeni 95:290859010c8c 1226 switch(dataMode){
ocomeni 95:290859010c8c 1227 case AT_CMD_DATA_MODE:
ocomeni 95:290859010c8c 1228 _parser.send(buf);
ocomeni 95:290859010c8c 1229 break;
ocomeni 95:290859010c8c 1230 case AT_STD_DATA_MODE:
ocomeni 95:290859010c8c 1231 _parser.send(buf);
ocomeni 95:290859010c8c 1232 break;
ocomeni 95:290859010c8c 1233 case AT_EXT_DATA_MODE:
ocomeni 99:05398b3184f8 1234 {
ocomeni 96:f5ed273881af 1235 int len = strlen(buf);
ocomeni 95:290859010c8c 1236 outputEDMdata((const uint8_t *) buf, len, AT_MSG_ID, EVENT_MSG_TYPE, NO_CHANNEL);
ocomeni 95:290859010c8c 1237 break;
ocomeni 99:05398b3184f8 1238 }
ocomeni 99:05398b3184f8 1239 default:
ocomeni 99:05398b3184f8 1240 _parser.send(buf);
ocomeni 99:05398b3184f8 1241 break;
ocomeni 95:290859010c8c 1242 }
ocomeni 96:f5ed273881af 1243 _smutex.unlock();
ocomeni 100:80ef4bc31b7a 1244 _wiFi2ATDatamPool->free(resp_data);
ocomeni 100:80ef4bc31b7a 1245 resp_data = NULL;
ocomeni 93:06e755a80187 1246 }
ocomeni 93:06e755a80187 1247
ocomeni 99:05398b3184f8 1248
ocomeni 99:05398b3184f8 1249 void ATCmdManager::sendConnectEvent(const uint8_t *buf, int len)
ocomeni 99:05398b3184f8 1250 {
ocomeni 99:05398b3184f8 1251 //_smutex.lock();
ocomeni 99:05398b3184f8 1252 switch(dataMode){
ocomeni 99:05398b3184f8 1253 case AT_CMD_DATA_MODE:
ocomeni 99:05398b3184f8 1254 _parser.send((const char*) buf);
ocomeni 99:05398b3184f8 1255 break;
ocomeni 99:05398b3184f8 1256 case AT_STD_DATA_MODE:
ocomeni 99:05398b3184f8 1257 _parser.send((const char*)buf);
ocomeni 99:05398b3184f8 1258 break;
ocomeni 99:05398b3184f8 1259 case AT_EXT_DATA_MODE:
ocomeni 99:05398b3184f8 1260 outputEDMdata((const uint8_t *) buf, len, CONNECT_MSG_ID, EVENT_MSG_TYPE, WIFI_CHANNEL);
ocomeni 99:05398b3184f8 1261 break;
ocomeni 99:05398b3184f8 1262 }
ocomeni 100:80ef4bc31b7a 1263 _wiFi2ATDatamPool->free(resp_data);
ocomeni 100:80ef4bc31b7a 1264 resp_data = NULL;
ocomeni 100:80ef4bc31b7a 1265
ocomeni 99:05398b3184f8 1266 }
ocomeni 99:05398b3184f8 1267
ocomeni 99:05398b3184f8 1268
ocomeni 90:ed0267eca7b5 1269 void ATCmdManager::outputEDMdata(const uint8_t *buf, int pLen,
ocomeni 91:d6b6319ad681 1270 edm_msg_id_t identifier, edm_msg_type_t type,
ocomeni 91:d6b6319ad681 1271 channel_id_t channel_id)
ocomeni 90:ed0267eca7b5 1272 {
ocomeni 90:ed0267eca7b5 1273 int epLen = pLen + 2; // edm payload length = data length + 2
ocomeni 96:f5ed273881af 1274 if(channel_id != NO_CHANNEL)
ocomeni 96:f5ed273881af 1275 epLen += 1;
ocomeni 90:ed0267eca7b5 1276 _smutex.lock();
ocomeni 90:ed0267eca7b5 1277 // send EDM Message start byte
ocomeni 90:ed0267eca7b5 1278 _parser.putc(EDM_START_BYTE);
ocomeni 90:ed0267eca7b5 1279 // send EDM Message length
ocomeni 90:ed0267eca7b5 1280 _parser.putc(epLen>>8);
ocomeni 90:ed0267eca7b5 1281 _parser.putc(epLen%256);
ocomeni 90:ed0267eca7b5 1282 // send EDM Identifier + Type
ocomeni 90:ed0267eca7b5 1283 _parser.putc(identifier>>8);
ocomeni 90:ed0267eca7b5 1284 _parser.putc(identifier%256 | type);
ocomeni 93:06e755a80187 1285 // send channel id if valid
ocomeni 93:06e755a80187 1286 if(channel_id != NO_CHANNEL)
ocomeni 93:06e755a80187 1287 _parser.putc(channel_id);
ocomeni 90:ed0267eca7b5 1288 // send the data
ocomeni 90:ed0267eca7b5 1289 _parser.write((const char *)buf, pLen);
ocomeni 90:ed0267eca7b5 1290 // send EDM Message stop byte
ocomeni 90:ed0267eca7b5 1291 _parser.putc(EDM_STOP_BYTE);
ocomeni 98:65c2333a38b6 1292 _smutex.unlock();
ocomeni 96:f5ed273881af 1293 int msWait = (pLen + 5+20)/20;
ocomeni 96:f5ed273881af 1294 wait_ms(msWait);
ocomeni 90:ed0267eca7b5 1295 }
ocomeni 81:637a87eb8170 1296
ocomeni 89:45f6db09a76d 1297 void ATCmdManager::return_response(bool download) {
ocomeni 87:99b37d26ff2a 1298 char * resp = (char *) resp_data->buffer;
ocomeni 98:65c2333a38b6 1299 //_smutex.lock();
ocomeni 103:7b566b522427 1300 dbg_printf(LOG, "\n[ATCMD MAN] received response:\n");
ocomeni 89:45f6db09a76d 1301 if(download == false) // not download must be ascii header
ocomeni 89:45f6db09a76d 1302 {
ocomeni 103:7b566b522427 1303 dbg_printf(LOG, "%.*s\r\n", resp_data->dataLen, resp);
ocomeni 89:45f6db09a76d 1304 }
ocomeni 89:45f6db09a76d 1305 else // dump payload as hex
ocomeni 89:45f6db09a76d 1306 {
ocomeni 89:45f6db09a76d 1307 printBufferInHex((uint8_t *)resp, resp_data->dataLen);
ocomeni 89:45f6db09a76d 1308 }
ocomeni 90:ed0267eca7b5 1309 //_parser.write(resp, resp_data->dataLen);
ocomeni 91:d6b6319ad681 1310 outputEDMdata((const uint8_t *)resp, resp_data->dataLen, DATA_MSG_ID,
ocomeni 91:d6b6319ad681 1311 EVENT_MSG_TYPE, WIFI_CHANNEL);
ocomeni 98:65c2333a38b6 1312 //_smutex.unlock();
ocomeni 87:99b37d26ff2a 1313 _wiFi2ATDatamPool->free(resp_data);
ocomeni 96:f5ed273881af 1314 resp_data = NULL;
ocomeni 93:06e755a80187 1315 //print_memory_info();
ocomeni 98:65c2333a38b6 1316 _event_queue.call_in(10, &print_heap_and_isr_stack_info);
ocomeni 98:65c2333a38b6 1317 //print_heap_and_isr_stack_info();
ocomeni 87:99b37d26ff2a 1318 }