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

Dependencies:   mbed-http

Committer:
ocomeni
Date:
Sat Mar 23 16:28:34 2019 +0000
Revision:
81:637a87eb8170
Parent:
80:e8f0e92e3ac9
Child:
82:10072c1794d3
first data queue/dequeue implemented for internet configuration.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ocomeni 74:f26e846adfe9 1 #include "ATCmdManager.h"
ocomeni 74:f26e846adfe9 2 #include "common_config.h"
ocomeni 79:a2187bbfa407 3 #include "common_types.h"
ocomeni 79:a2187bbfa407 4
ocomeni 74:f26e846adfe9 5
ocomeni 78:07bb86e3ce14 6 ATCmdManager::ATCmdManager(PinName tx, PinName rx, SMDevicePeripheral *blePeripheral,
ocomeni 79:a2187bbfa407 7 events::EventQueue &event_queue, WiFiManager *wifi,
ocomeni 79:a2187bbfa407 8 MemoryPool<wifi_cmd_message_t, 16> *aT2WiFimPool,
ocomeni 80:e8f0e92e3ac9 9 Queue<wifi_cmd_message_t, 16> *aT2WiFiCmdQueue,
ocomeni 81:637a87eb8170 10 MemoryPool<at_resp_message_t, 16> *wiFi2ATmPool,
ocomeni 81:637a87eb8170 11 Queue<at_resp_message_t, 16> *wiFi2ATCmdQueue,
ocomeni 80:e8f0e92e3ac9 12 MemoryPool<wifi_data_msg_t, 4> *aT2WiFiDatamPool,
ocomeni 80:e8f0e92e3ac9 13 Queue<wifi_data_msg_t, 4> *aT2WiFiDataQueue,
ocomeni 81:637a87eb8170 14 MemoryPool<at_data_msg_t, 4> *wiFi2ATDatamPool,
ocomeni 81:637a87eb8170 15 Queue<at_data_msg_t, 4> *wiFi2ATDataQueue,
ocomeni 79:a2187bbfa407 16 bool debug)
ocomeni 74:f26e846adfe9 17 :
ocomeni 74:f26e846adfe9 18 _serial(tx, rx, DEFAULT_BAUD_RATE),
ocomeni 78:07bb86e3ce14 19 blePeripheral(blePeripheral),
ocomeni 79:a2187bbfa407 20 _event_queue(event_queue),
ocomeni 79:a2187bbfa407 21 wiFiManager(wiFiManager),
ocomeni 79:a2187bbfa407 22 _aT2WiFimPool(aT2WiFimPool),
ocomeni 80:e8f0e92e3ac9 23 _aT2WiFiCmdQueue(aT2WiFiCmdQueue),
ocomeni 80:e8f0e92e3ac9 24
ocomeni 80:e8f0e92e3ac9 25 _wiFi2ATmPool(wiFi2ATmPool),
ocomeni 80:e8f0e92e3ac9 26 _wiFi2ATCmdQueue(wiFi2ATCmdQueue),
ocomeni 80:e8f0e92e3ac9 27
ocomeni 80:e8f0e92e3ac9 28 _aT2WiFiDatamPool(aT2WiFiDatamPool),
ocomeni 80:e8f0e92e3ac9 29 _aT2WiFiDataQueue(aT2WiFiDataQueue),
ocomeni 80:e8f0e92e3ac9 30
ocomeni 80:e8f0e92e3ac9 31 _wiFi2ATDatamPool(wiFi2ATDatamPool),
ocomeni 80:e8f0e92e3ac9 32 _wiFi2ATDataQueue(wiFi2ATDataQueue),
ocomeni 80:e8f0e92e3ac9 33
ocomeni 80:e8f0e92e3ac9 34 _parser(&_serial)
ocomeni 80:e8f0e92e3ac9 35
ocomeni 74:f26e846adfe9 36
ocomeni 74:f26e846adfe9 37 {
ocomeni 74:f26e846adfe9 38 // constructor
ocomeni 74:f26e846adfe9 39 _serial.set_baud(DEFAULT_BAUD_RATE);
ocomeni 74:f26e846adfe9 40 _parser.debug_on(debug);
ocomeni 74:f26e846adfe9 41 _parser.set_delimiter("\r\n");
ocomeni 75:08eff6258e1b 42 _parser.send("+STARTUP");
ocomeni 81:637a87eb8170 43 _parser.oob("AT\n", callback(this, &ATCmdManager::_oob_ok_hdlr));
ocomeni 75:08eff6258e1b 44 _parser.oob("ATE0", callback(this, &ATCmdManager::_oob_echo_off));
ocomeni 75:08eff6258e1b 45 _parser.oob("ATE1", callback(this, &ATCmdManager::_oob_echo_on));
ocomeni 75:08eff6258e1b 46 _parser.oob("AT+UMRS", callback(this, &ATCmdManager::_oob_uart_setup));
ocomeni 75:08eff6258e1b 47
ocomeni 75:08eff6258e1b 48 _parser.oob("ATO", callback(this, &ATCmdManager::_oob_data_mode));
ocomeni 75:08eff6258e1b 49 _parser.oob("AT+UMLA", callback(this, &ATCmdManager::_oob_get_mac_addr));
ocomeni 75:08eff6258e1b 50 _parser.oob("AT+UBTLE?", callback(this, &ATCmdManager::_oob_get_ble_role));
ocomeni 75:08eff6258e1b 51 _parser.oob("AT+UBTLE=2", callback(this, &ATCmdManager::_oob_ena_ble_peri));
ocomeni 75:08eff6258e1b 52 _parser.oob("AT+CPWROFF", callback(this, &ATCmdManager::_oob_reboot));
ocomeni 75:08eff6258e1b 53 _parser.oob("AT+CGMR", callback(this, &ATCmdManager::_oob_get_fw_ver));
ocomeni 79:a2187bbfa407 54 _parser.oob("AT+UWSC=", callback(this, &ATCmdManager::_oob_scanWiFiNetworks));
ocomeni 79:a2187bbfa407 55 _parser.oob("AT+UWSCA=", callback(this, &ATCmdManager::_oob_connect2WiFiNetwork));
ocomeni 81:637a87eb8170 56 _parser.oob("AT+UWSCD=", callback(this, &ATCmdManager::_oob_disconnectWiFiNetwork));
ocomeni 81:637a87eb8170 57 _parser.oob("AT+UDDRP", callback(this, &ATCmdManager::_oob_setupInternetConnection));
ocomeni 81:637a87eb8170 58
ocomeni 75:08eff6258e1b 59
ocomeni 75:08eff6258e1b 60 //_parser.oob("ATE0", callback(this, &ATCmdManager::_oob_startup_hdlr));
ocomeni 74:f26e846adfe9 61 printf("\n --- ATCmdManager constructor completed ---\n");
ocomeni 81:637a87eb8170 62 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 63 dataMode = AT_CMD_DATA_MODE;
ocomeni 75:08eff6258e1b 64 //AT+UMRS=230400,2,8,1,1,1
ocomeni 74:f26e846adfe9 65 // AT+UBTLE
ocomeni 74:f26e846adfe9 66 }
ocomeni 74:f26e846adfe9 67
ocomeni 74:f26e846adfe9 68
ocomeni 74:f26e846adfe9 69 void ATCmdManager::runMain(){
ocomeni 74:f26e846adfe9 70 while(true){
ocomeni 74:f26e846adfe9 71 _process_oob(UBLOX_ODIN_W2_RECV_TIMEOUT, true);
ocomeni 81:637a87eb8170 72 wait_ms(MAIN_LOOP_WAIT_TIME_MS); // allow BTLE/WiFi some time
ocomeni 81:637a87eb8170 73 processResponses();
ocomeni 74:f26e846adfe9 74 }
ocomeni 74:f26e846adfe9 75
ocomeni 74:f26e846adfe9 76 }
ocomeni 74:f26e846adfe9 77
ocomeni 81:637a87eb8170 78 void ATCmdManager::processResponses(){
ocomeni 81:637a87eb8170 79 dequeueATresponse();
ocomeni 81:637a87eb8170 80 switch(at_resp){
ocomeni 81:637a87eb8170 81 case AT_RESP_NONE:
ocomeni 81:637a87eb8170 82 // IDLE response state
ocomeni 81:637a87eb8170 83 break;
ocomeni 81:637a87eb8170 84 case AT_SCAN_RESP:
ocomeni 81:637a87eb8170 85 // AT_SCAN_RESP response state
ocomeni 81:637a87eb8170 86 _smutex.lock();
ocomeni 81:637a87eb8170 87 printf("\n [ATCMD MAN] WIFI SCAN RESPONSE RECEIVED!!\n");
ocomeni 81:637a87eb8170 88 _parser.send("OK\n");
ocomeni 81:637a87eb8170 89 _smutex.unlock();
ocomeni 81:637a87eb8170 90 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 91 break;
ocomeni 81:637a87eb8170 92 case AT_DETAILED_SCAN_RESP:
ocomeni 81:637a87eb8170 93 // AT_DETAILED_SCAN_RESP response state
ocomeni 81:637a87eb8170 94 _smutex.lock();
ocomeni 81:637a87eb8170 95 printf("\n [ATCMD MAN] WIFI DETAILED SCAN RESPONSE RECEIVED!!\n");
ocomeni 81:637a87eb8170 96 _parser.send("OK\n");
ocomeni 81:637a87eb8170 97 _smutex.unlock();
ocomeni 81:637a87eb8170 98 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 99 break;
ocomeni 81:637a87eb8170 100 case AT_CONNECT_RESP:
ocomeni 81:637a87eb8170 101 // AT_CONNECT_RESP response state
ocomeni 81:637a87eb8170 102 _smutex.lock();
ocomeni 81:637a87eb8170 103 printf("\n [ATCMD MAN] WIFI CONNECT RESPONSE RECEIVED!!\n");
ocomeni 81:637a87eb8170 104 _parser.send("OK\n");
ocomeni 81:637a87eb8170 105 _smutex.unlock();
ocomeni 81:637a87eb8170 106 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 107 break;
ocomeni 81:637a87eb8170 108 case AT_DISCONNECT_RESP:
ocomeni 81:637a87eb8170 109 // AT_DISCONNECT_RESP response state
ocomeni 81:637a87eb8170 110 _smutex.lock();
ocomeni 81:637a87eb8170 111 printf("\n [ATCMD MAN] WIFI DISCONNECT RESPONSE RECEIVED!!\n");
ocomeni 81:637a87eb8170 112 _parser.send("OK\n");
ocomeni 81:637a87eb8170 113 _smutex.unlock();
ocomeni 81:637a87eb8170 114 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 115 break;
ocomeni 81:637a87eb8170 116 case AT_HTTPS_RESP:
ocomeni 81:637a87eb8170 117 // AT_HTTPS_RESP response state
ocomeni 81:637a87eb8170 118 _smutex.lock();
ocomeni 81:637a87eb8170 119 printf("\n [ATCMD MAN] WIFI HTTPS RESPONSE RECEIVED!!\n");
ocomeni 81:637a87eb8170 120 _parser.send("OK\n");
ocomeni 81:637a87eb8170 121 _smutex.unlock();
ocomeni 81:637a87eb8170 122 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 123 break;
ocomeni 81:637a87eb8170 124 case AT_HTTP_RESP:
ocomeni 81:637a87eb8170 125 // AT_HTTP_RESP response state
ocomeni 81:637a87eb8170 126 _smutex.lock();
ocomeni 81:637a87eb8170 127 printf("\n [ATCMD MAN] WIFI HTTP RESPONSE RECEIVED!!\n");
ocomeni 81:637a87eb8170 128 _parser.send("OK\n");
ocomeni 81:637a87eb8170 129 _smutex.unlock();
ocomeni 81:637a87eb8170 130 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 131 break;
ocomeni 81:637a87eb8170 132 default:
ocomeni 81:637a87eb8170 133 // UNKNOWN response state
ocomeni 81:637a87eb8170 134 at_resp = AT_RESP_NONE;
ocomeni 81:637a87eb8170 135 break;
ocomeni 81:637a87eb8170 136 }
ocomeni 81:637a87eb8170 137 }
ocomeni 81:637a87eb8170 138
ocomeni 81:637a87eb8170 139
ocomeni 81:637a87eb8170 140
ocomeni 74:f26e846adfe9 141
ocomeni 74:f26e846adfe9 142 // OOB processing
ocomeni 74:f26e846adfe9 143 void ATCmdManager::_process_oob(uint32_t timeout, bool all){
ocomeni 74:f26e846adfe9 144 set_timeout(timeout);
ocomeni 74:f26e846adfe9 145 // Poll for inbound packets
ocomeni 74:f26e846adfe9 146 while (_parser.process_oob() && all) {
ocomeni 74:f26e846adfe9 147 }
ocomeni 74:f26e846adfe9 148 set_timeout();
ocomeni 74:f26e846adfe9 149 }
ocomeni 74:f26e846adfe9 150
ocomeni 74:f26e846adfe9 151
ocomeni 74:f26e846adfe9 152 // OOB message handlers
ocomeni 74:f26e846adfe9 153 void ATCmdManager::_oob_startup_hdlr(){
ocomeni 74:f26e846adfe9 154 }
ocomeni 74:f26e846adfe9 155
ocomeni 81:637a87eb8170 156 void ATCmdManager::_oob_ok_hdlr(){
ocomeni 81:637a87eb8170 157 _smutex.lock();
ocomeni 81:637a87eb8170 158 _parser.send("OK\n");
ocomeni 81:637a87eb8170 159 _smutex.unlock();
ocomeni 81:637a87eb8170 160 }
ocomeni 81:637a87eb8170 161
ocomeni 74:f26e846adfe9 162
ocomeni 74:f26e846adfe9 163 void ATCmdManager::_oob_bleRole_hdlr(){
ocomeni 74:f26e846adfe9 164 }
ocomeni 74:f26e846adfe9 165
ocomeni 74:f26e846adfe9 166
ocomeni 74:f26e846adfe9 167 void ATCmdManager::_oob_wifiMode_err(){
ocomeni 74:f26e846adfe9 168 }
ocomeni 74:f26e846adfe9 169
ocomeni 74:f26e846adfe9 170
ocomeni 74:f26e846adfe9 171 void ATCmdManager::_oob_conn_already(){
ocomeni 74:f26e846adfe9 172 }
ocomeni 74:f26e846adfe9 173
ocomeni 74:f26e846adfe9 174
ocomeni 74:f26e846adfe9 175 void ATCmdManager::_oob_err(){
ocomeni 74:f26e846adfe9 176 }
ocomeni 74:f26e846adfe9 177
ocomeni 79:a2187bbfa407 178 void ATCmdManager::_oob_get_fw_ver()
ocomeni 79:a2187bbfa407 179 {
ocomeni 79:a2187bbfa407 180 }
ocomeni 79:a2187bbfa407 181
ocomeni 79:a2187bbfa407 182
ocomeni 75:08eff6258e1b 183 void ATCmdManager::_oob_uart_setup(){
ocomeni 75:08eff6258e1b 184 int uOpts[NUM_UART_OPTIONS];
ocomeni 75:08eff6258e1b 185 //if(_parser.recv("=%d,%d,%d,%d,%d,%d", &uOpts[0], &uOpts[1], &uOpts[2], &uOpts[3], &uOpts[4], &uOpts[5])) {
ocomeni 75:08eff6258e1b 186 if(_parser.scanf("=%d,%d,%d,%d,%d,%d", &uOpts[0], &uOpts[1], &uOpts[2], &uOpts[3], &uOpts[4], &uOpts[5]) >0) {
ocomeni 75:08eff6258e1b 187 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 188 //AT+UMRS=230400,2,8,1,1,1
ocomeni 81:637a87eb8170 189 printf("\n Changing Baud Rate to %d\n", uOpts[0]);
ocomeni 81:637a87eb8170 190
ocomeni 81:637a87eb8170 191 _serial.set_baud(uOpts[0]);
ocomeni 81:637a87eb8170 192 printf("\n Baud Rate now %d\n", uOpts[0]);
ocomeni 81:637a87eb8170 193
ocomeni 75:08eff6258e1b 194 } else {
ocomeni 75:08eff6258e1b 195 printf("\nATCmdParser: Retrieving Uart Options failed");
ocomeni 75:08eff6258e1b 196 }
ocomeni 75:08eff6258e1b 197 }
ocomeni 75:08eff6258e1b 198
ocomeni 74:f26e846adfe9 199 void ATCmdManager::set_timeout(uint32_t timeout_ms)
ocomeni 74:f26e846adfe9 200 {
ocomeni 74:f26e846adfe9 201 _parser.set_timeout(timeout_ms);
ocomeni 74:f26e846adfe9 202 }
ocomeni 74:f26e846adfe9 203
ocomeni 75:08eff6258e1b 204
ocomeni 75:08eff6258e1b 205 void ATCmdManager::_oob_echo_off()
ocomeni 75:08eff6258e1b 206 {
ocomeni 75:08eff6258e1b 207 _smutex.lock();
ocomeni 75:08eff6258e1b 208 printf("\n Received ATEO OOB command!!\n");
ocomeni 75:08eff6258e1b 209 printf("\n turning echo OFF!!\n");
ocomeni 75:08eff6258e1b 210 _parser.debug_on(false);
ocomeni 75:08eff6258e1b 211 _parser.send("OK\n");
ocomeni 75:08eff6258e1b 212 _smutex.unlock();
ocomeni 75:08eff6258e1b 213 }
ocomeni 75:08eff6258e1b 214
ocomeni 75:08eff6258e1b 215
ocomeni 75:08eff6258e1b 216 void ATCmdManager::_oob_echo_on()
ocomeni 75:08eff6258e1b 217 {
ocomeni 75:08eff6258e1b 218 _smutex.lock();
ocomeni 75:08eff6258e1b 219 printf("\n Received ATE1 OOB command!!\n");
ocomeni 75:08eff6258e1b 220 printf("\n turning echo ON!!\n");
ocomeni 75:08eff6258e1b 221 _parser.debug_on(true);
ocomeni 75:08eff6258e1b 222 _parser.send("OK\n");
ocomeni 75:08eff6258e1b 223 _smutex.unlock();
ocomeni 75:08eff6258e1b 224 }
ocomeni 75:08eff6258e1b 225
ocomeni 75:08eff6258e1b 226
ocomeni 75:08eff6258e1b 227 void ATCmdManager::_oob_data_mode(){
ocomeni 75:08eff6258e1b 228 int dataMode;
ocomeni 75:08eff6258e1b 229 _smutex.lock();
ocomeni 75:08eff6258e1b 230 printf("\n Received EDM mode command!!\n");
ocomeni 75:08eff6258e1b 231 if(_parser.scanf("%d", &dataMode) >0) {
ocomeni 75:08eff6258e1b 232 printf("\nATCmdParser: Data mode=%d\n", dataMode);
ocomeni 75:08eff6258e1b 233 switch(dataMode)
ocomeni 75:08eff6258e1b 234 {
ocomeni 75:08eff6258e1b 235 case 0:
ocomeni 75:08eff6258e1b 236 printf("\nATCmdParser: Command Mode request received");
ocomeni 81:637a87eb8170 237 dataMode = AT_CMD_DATA_MODE;
ocomeni 75:08eff6258e1b 238 break;
ocomeni 75:08eff6258e1b 239 case 1:
ocomeni 75:08eff6258e1b 240 printf("\nATCmdParser: Data Mode request received");
ocomeni 81:637a87eb8170 241 dataMode = AT_STD_DATA_MODE;
ocomeni 75:08eff6258e1b 242 break;
ocomeni 75:08eff6258e1b 243 case 2:
ocomeni 75:08eff6258e1b 244 printf("\nATCmdParser: Extended data Mode request received");
ocomeni 81:637a87eb8170 245 dataMode = AT_EXT_DATA_MODE;
ocomeni 75:08eff6258e1b 246 break;
ocomeni 75:08eff6258e1b 247 default:
ocomeni 75:08eff6258e1b 248 printf("\nATCmdParser: ERROR - UNKNOWN DATA MODE RECEIVED!!! \n");
ocomeni 75:08eff6258e1b 249 break;
ocomeni 75:08eff6258e1b 250 }
ocomeni 75:08eff6258e1b 251 } else {
ocomeni 75:08eff6258e1b 252 printf("\nATCmdParser: Retrieving Uart Options failed");
ocomeni 75:08eff6258e1b 253 }
ocomeni 75:08eff6258e1b 254 _parser.send("OK\n");
ocomeni 75:08eff6258e1b 255 _smutex.unlock();
ocomeni 75:08eff6258e1b 256 }
ocomeni 75:08eff6258e1b 257
ocomeni 75:08eff6258e1b 258 void ATCmdManager::_oob_get_mac_addr(){
ocomeni 75:08eff6258e1b 259 int bleOrWifi;
ocomeni 75:08eff6258e1b 260 _smutex.lock();
ocomeni 75:08eff6258e1b 261 if(_parser.scanf("=%d", &bleOrWifi) >0) {
ocomeni 75:08eff6258e1b 262 switch(bleOrWifi)
ocomeni 75:08eff6258e1b 263 {
ocomeni 75:08eff6258e1b 264 case 1:
ocomeni 75:08eff6258e1b 265 printf("\nATCmdParser: BLE MAC Address request received");
ocomeni 75:08eff6258e1b 266 break;
ocomeni 75:08eff6258e1b 267 case 2:
ocomeni 75:08eff6258e1b 268 printf("\nATCmdParser: WiFi MAC Address request received");
ocomeni 75:08eff6258e1b 269 break;
ocomeni 75:08eff6258e1b 270 default:
ocomeni 75:08eff6258e1b 271 printf("\nATCmdParser: ERROR - UNKNOWN MAC ADDRESS REQUEST RECEIVED!!! \n");
ocomeni 75:08eff6258e1b 272 break;
ocomeni 75:08eff6258e1b 273 }
ocomeni 75:08eff6258e1b 274 } else {
ocomeni 75:08eff6258e1b 275 printf("\nATCmdParser: Retrieving Uart Options failed");
ocomeni 75:08eff6258e1b 276 }
ocomeni 75:08eff6258e1b 277 _parser.send("OK\n");
ocomeni 75:08eff6258e1b 278 _smutex.unlock();
ocomeni 75:08eff6258e1b 279 }
ocomeni 75:08eff6258e1b 280
ocomeni 75:08eff6258e1b 281 void ATCmdManager::_oob_get_ble_role(){
ocomeni 75:08eff6258e1b 282 _smutex.lock();
ocomeni 75:08eff6258e1b 283 printf("\n Received get BLE role command!!\n");
ocomeni 75:08eff6258e1b 284 _parser.send("OK\n");
ocomeni 75:08eff6258e1b 285 _smutex.unlock();
ocomeni 75:08eff6258e1b 286 }
ocomeni 75:08eff6258e1b 287
ocomeni 75:08eff6258e1b 288 void ATCmdManager::_oob_ena_ble_peri(){
ocomeni 75:08eff6258e1b 289 _smutex.lock();
ocomeni 75:08eff6258e1b 290 printf("\n Received enable BLE Peripheral command!!\n");
ocomeni 75:08eff6258e1b 291 _parser.send("OK\n");
ocomeni 75:08eff6258e1b 292 _smutex.unlock();
ocomeni 75:08eff6258e1b 293 }
ocomeni 75:08eff6258e1b 294
ocomeni 75:08eff6258e1b 295 void ATCmdManager::_oob_reboot(){
ocomeni 75:08eff6258e1b 296 _smutex.lock();
ocomeni 75:08eff6258e1b 297 printf("\n Received reboot command!!\n");
ocomeni 75:08eff6258e1b 298 _parser.send("OK\n");
ocomeni 75:08eff6258e1b 299 _parser.send("System Resetting....\n");
ocomeni 75:08eff6258e1b 300 system_reset();
ocomeni 75:08eff6258e1b 301 _smutex.unlock();
ocomeni 75:08eff6258e1b 302 }
ocomeni 75:08eff6258e1b 303
ocomeni 79:a2187bbfa407 304 const char * ATCmdManager::sec2str(nsapi_security_t sec)
ocomeni 79:a2187bbfa407 305 {
ocomeni 79:a2187bbfa407 306 switch (sec) {
ocomeni 79:a2187bbfa407 307 case NSAPI_SECURITY_NONE:
ocomeni 79:a2187bbfa407 308 return "None";
ocomeni 79:a2187bbfa407 309 case NSAPI_SECURITY_WEP:
ocomeni 79:a2187bbfa407 310 return "WEP";
ocomeni 79:a2187bbfa407 311 case NSAPI_SECURITY_WPA:
ocomeni 79:a2187bbfa407 312 return "WPA";
ocomeni 79:a2187bbfa407 313 case NSAPI_SECURITY_WPA2:
ocomeni 79:a2187bbfa407 314 return "WPA2";
ocomeni 79:a2187bbfa407 315 case NSAPI_SECURITY_WPA_WPA2:
ocomeni 79:a2187bbfa407 316 return "WPA/WPA2";
ocomeni 79:a2187bbfa407 317 case NSAPI_SECURITY_UNKNOWN:
ocomeni 79:a2187bbfa407 318 default:
ocomeni 79:a2187bbfa407 319 return "Unknown";
ocomeni 79:a2187bbfa407 320 }
ocomeni 79:a2187bbfa407 321 }
ocomeni 81:637a87eb8170 322
ocomeni 81:637a87eb8170 323 bool ATCmdManager::setNextResponse(at_cmd_resp_t resp)
ocomeni 81:637a87eb8170 324 {
ocomeni 81:637a87eb8170 325 if(at_resp == AT_RESP_NONE){
ocomeni 81:637a87eb8170 326 at_resp = resp;
ocomeni 81:637a87eb8170 327 return true; // success
ocomeni 81:637a87eb8170 328 }
ocomeni 81:637a87eb8170 329 return false; // wiFiManager busy
ocomeni 79:a2187bbfa407 330 }
ocomeni 79:a2187bbfa407 331
ocomeni 81:637a87eb8170 332
ocomeni 79:a2187bbfa407 333 void ATCmdManager::_oob_scanWiFiNetworks(){
ocomeni 75:08eff6258e1b 334 _smutex.lock();
ocomeni 79:a2187bbfa407 335 printf("\n Received scanWiFiNetworks command!!\n");
ocomeni 75:08eff6258e1b 336 _parser.send("OK\n");
ocomeni 75:08eff6258e1b 337 _smutex.unlock();
ocomeni 79:a2187bbfa407 338 wifi_cmd_t cmd = WIFI_CMD_SCAN;
ocomeni 79:a2187bbfa407 339 // queue next command
ocomeni 79:a2187bbfa407 340 queueWiFiCommand(cmd);
ocomeni 81:637a87eb8170 341 return;
ocomeni 75:08eff6258e1b 342 }
ocomeni 75:08eff6258e1b 343
ocomeni 79:a2187bbfa407 344 void ATCmdManager::_oob_connect2WiFiNetwork()
ocomeni 79:a2187bbfa407 345 {
ocomeni 81:637a87eb8170 346 wifi_cmd_t cmd = WIFI_CMD_CONNECT;
ocomeni 81:637a87eb8170 347 // queue next command
ocomeni 81:637a87eb8170 348 queueWiFiCommand(cmd);
ocomeni 81:637a87eb8170 349 return;
ocomeni 79:a2187bbfa407 350 }
ocomeni 79:a2187bbfa407 351
ocomeni 79:a2187bbfa407 352
ocomeni 79:a2187bbfa407 353 void ATCmdManager::_oob_disconnectWiFiNetwork()
ocomeni 79:a2187bbfa407 354 {
ocomeni 81:637a87eb8170 355 wifi_cmd_t cmd = WIFI_CMD_DISCONNECT;
ocomeni 81:637a87eb8170 356 // queue next command
ocomeni 81:637a87eb8170 357 queueWiFiCommand(cmd);
ocomeni 81:637a87eb8170 358 return;
ocomeni 81:637a87eb8170 359 }
ocomeni 81:637a87eb8170 360
ocomeni 81:637a87eb8170 361 void ATCmdManager::_oob_setupInternetConnection()
ocomeni 81:637a87eb8170 362 {
ocomeni 81:637a87eb8170 363 char url[200];
ocomeni 81:637a87eb8170 364 int n;
ocomeni 81:637a87eb8170 365 internet_config_t internet_config;
ocomeni 81:637a87eb8170 366 _smutex.lock();
ocomeni 81:637a87eb8170 367 n = _parser.scanf("=%1d,%200[^,],%1d", &internet_config.peer_id,
ocomeni 81:637a87eb8170 368 url,
ocomeni 81:637a87eb8170 369 &internet_config.connectionScheme);
ocomeni 81:637a87eb8170 370 if(n>0)
ocomeni 81:637a87eb8170 371 {
ocomeni 81:637a87eb8170 372 internet_config.url = url;
ocomeni 81:637a87eb8170 373 printf("peer_id = %1d, url = %s, connScheme = %1d\n", internet_config.peer_id,
ocomeni 81:637a87eb8170 374 internet_config.url.c_str(),
ocomeni 81:637a87eb8170 375 internet_config.connectionScheme);
ocomeni 81:637a87eb8170 376 // package and send on wifi data queue
ocomeni 81:637a87eb8170 377 wifi_data_msg_t data_msg;
ocomeni 81:637a87eb8170 378 data_msg.wifi_cmd = WIFI_CMD_INTERNET_CONFIG;
ocomeni 81:637a87eb8170 379 data_msg.dataLen = sizeof(internet_config) + internet_config.url.length();
ocomeni 81:637a87eb8170 380 memcpy(data_msg.buffer,&internet_config, data_msg.dataLen);
ocomeni 81:637a87eb8170 381 queueWiFiDataRequest(data_msg);
ocomeni 81:637a87eb8170 382 } else {
ocomeni 81:637a87eb8170 383 printf("\n[ATCMD MAN]: internet configuration failed %d fields parsed \n", n);
ocomeni 81:637a87eb8170 384 printf("\npeer_id = %d, url = %s, connScheme = %d\n", internet_config.peer_id,
ocomeni 81:637a87eb8170 385 url,
ocomeni 81:637a87eb8170 386 internet_config.connectionScheme);
ocomeni 81:637a87eb8170 387 }
ocomeni 81:637a87eb8170 388 _parser.send("OK\n");
ocomeni 81:637a87eb8170 389 _smutex.unlock();
ocomeni 79:a2187bbfa407 390 }
ocomeni 81:637a87eb8170 391
ocomeni 81:637a87eb8170 392 bool ATCmdManager::queueWiFiCommand(wifi_cmd_t cmd){
ocomeni 81:637a87eb8170 393 wifi_cmd_message_t *wifiCmd = _aT2WiFimPool->alloc();
ocomeni 81:637a87eb8170 394 wifiCmd->wifi_cmd = cmd;
ocomeni 81:637a87eb8170 395 _aT2WiFiCmdQueue->put(wifiCmd);
ocomeni 81:637a87eb8170 396 return true;
ocomeni 81:637a87eb8170 397 }
ocomeni 81:637a87eb8170 398
ocomeni 81:637a87eb8170 399 bool ATCmdManager::dequeueATresponse(){
ocomeni 81:637a87eb8170 400 if(at_resp != AT_RESP_NONE) return false; // busy
ocomeni 81:637a87eb8170 401 osEvent evt = _wiFi2ATCmdQueue->get(0);
ocomeni 81:637a87eb8170 402 if(evt.status == osEventMessage){
ocomeni 81:637a87eb8170 403 at_resp_message_t *resp = (at_resp_message_t*)evt.value.p;
ocomeni 81:637a87eb8170 404 setNextResponse(resp->at_resp);
ocomeni 81:637a87eb8170 405 _wiFi2ATmPool->free(resp);
ocomeni 81:637a87eb8170 406 }
ocomeni 81:637a87eb8170 407 return true;
ocomeni 81:637a87eb8170 408 }
ocomeni 81:637a87eb8170 409
ocomeni 81:637a87eb8170 410 bool ATCmdManager::queueWiFiDataRequest(wifi_data_msg_t data_req){
ocomeni 81:637a87eb8170 411 wifi_data_msg_t *wifiData = _aT2WiFiDatamPool->alloc();
ocomeni 81:637a87eb8170 412 wifiData->wifi_cmd = data_req.wifi_cmd;
ocomeni 81:637a87eb8170 413 wifiData->dataLen = data_req.dataLen;
ocomeni 81:637a87eb8170 414 memcpy(wifiData->buffer, data_req.buffer, data_req.dataLen);
ocomeni 81:637a87eb8170 415 _aT2WiFiDataQueue->put(wifiData);
ocomeni 81:637a87eb8170 416 printf("[ATCMD MAN] queued data size = %d : wifi_cmd = %d\n", data_req.dataLen, data_req.wifi_cmd);
ocomeni 81:637a87eb8170 417 return true;
ocomeni 81:637a87eb8170 418 }
ocomeni 81:637a87eb8170 419
ocomeni 81:637a87eb8170 420 bool ATCmdManager::dequeueATdataResponse(){
ocomeni 81:637a87eb8170 421 if(at_resp != AT_RESP_NONE) return false; // busy
ocomeni 81:637a87eb8170 422 osEvent evt = _wiFi2ATDataQueue->get(0);
ocomeni 81:637a87eb8170 423 if(evt.status == osEventMessage){
ocomeni 81:637a87eb8170 424 resp_data = (at_data_msg_t*)evt.value.p;
ocomeni 81:637a87eb8170 425 setNextResponse(resp_data->at_resp);
ocomeni 81:637a87eb8170 426 //_wiFi2ATDatamPool->free(resp_data);
ocomeni 81:637a87eb8170 427 }
ocomeni 81:637a87eb8170 428 return true;
ocomeni 81:637a87eb8170 429 }
ocomeni 81:637a87eb8170 430
ocomeni 81:637a87eb8170 431
ocomeni 81:637a87eb8170 432