this is using the mbed os version 5-13-1
Revision 82:10072c1794d3, committed 2019-03-24
- Comitter:
- ocomeni
- Date:
- Sun Mar 24 17:32:06 2019 +0000
- Parent:
- 81:637a87eb8170
- Child:
- 83:9c271a50a70b
- Commit message:
- wifi configuration setup implemented
Changed in this revision
--- a/source/ATCmdManager.cpp Sat Mar 23 16:28:34 2019 +0000
+++ b/source/ATCmdManager.cpp Sun Mar 24 17:32:06 2019 +0000
@@ -51,12 +51,17 @@
_parser.oob("AT+UBTLE=2", callback(this, &ATCmdManager::_oob_ena_ble_peri));
_parser.oob("AT+CPWROFF", callback(this, &ATCmdManager::_oob_reboot));
_parser.oob("AT+CGMR", callback(this, &ATCmdManager::_oob_get_fw_ver));
- _parser.oob("AT+UWSC=", callback(this, &ATCmdManager::_oob_scanWiFiNetworks));
+ _parser.oob("AT+UWSCAN", callback(this, &ATCmdManager::_oob_scanWiFiNetworks));
_parser.oob("AT+UWSCA=", callback(this, &ATCmdManager::_oob_connect2WiFiNetwork));
_parser.oob("AT+UWSCD=", callback(this, &ATCmdManager::_oob_disconnectWiFiNetwork));
_parser.oob("AT+UDDRP", callback(this, &ATCmdManager::_oob_setupInternetConnection));
+ _parser.oob("AT+UWSC=0,2", callback(this, &ATCmdManager::_oob_setWiFiSSID));
+ _parser.oob("AT+UWSC=0,8", callback(this, &ATCmdManager::_oob_setWiFiPWD));
+ _parser.oob("AT+UWSC=0,5", callback(this, &ATCmdManager::_oob_setWiFiSecurity));
-
+//AT+UWSC=0,2,<SSID>
+//AT+UWSC=0,8,<PWD>
+//AT+UWSC=0,5,2 (WPA)
//_parser.oob("ATE0", callback(this, &ATCmdManager::_oob_startup_hdlr));
printf("\n --- ATCmdManager constructor completed ---\n");
at_resp = AT_RESP_NONE;
@@ -113,10 +118,10 @@
_smutex.unlock();
at_resp = AT_RESP_NONE;
break;
- case AT_HTTPS_RESP:
- // AT_HTTPS_RESP response state
+ case AT_CONFIG_RESP:
+ // AT_CONFIG_RESP response state
_smutex.lock();
- printf("\n [ATCMD MAN] WIFI HTTPS RESPONSE RECEIVED!!\n");
+ printf("\n [ATCMD MAN] WIFI CONFIG RESPONSE RECEIVED!!\n");
_parser.send("OK\n");
_smutex.unlock();
at_resp = AT_RESP_NONE;
@@ -131,6 +136,10 @@
break;
default:
// UNKNOWN response state
+ _smutex.lock();
+ printf("\n [ATCMD MAN] UNKNOWN RESPONSE RECEIVED!!\n");
+ _parser.send("OK\n");
+ _smutex.unlock();
at_resp = AT_RESP_NONE;
break;
}
@@ -364,7 +373,7 @@
int n;
internet_config_t internet_config;
_smutex.lock();
- n = _parser.scanf("=%1d,%200[^,],%1d", &internet_config.peer_id,
+ n = _parser.scanf("=%1d,%199[^,],%1d", &internet_config.peer_id,
url,
&internet_config.connectionScheme);
if(n>0)
@@ -378,14 +387,109 @@
data_msg.wifi_cmd = WIFI_CMD_INTERNET_CONFIG;
data_msg.dataLen = sizeof(internet_config) + internet_config.url.length();
memcpy(data_msg.buffer,&internet_config, data_msg.dataLen);
+ // queue next data request
queueWiFiDataRequest(data_msg);
+ _parser.send("OK\n");
} else {
printf("\n[ATCMD MAN]: internet configuration failed %d fields parsed \n", n);
- printf("\npeer_id = %d, url = %s, connScheme = %d\n", internet_config.peer_id,
- url,
- internet_config.connectionScheme);
+ _parser.send("NAK\n");
+ }
+ _smutex.unlock();
+}
+
+wifi_config_t ATCmdManager::init_wifi_config()
+{
+ wifi_config_t wifi_cfg;
+ wifi_cfg.ssid[0] = NULL;
+ wifi_cfg.pass[0] = NULL;
+ wifi_cfg.security = NSAPI_SECURITY_UNKNOWN;
+ return wifi_cfg;
+}
+
+int ATCmdManager::readBytes(uint8_t *buf, int maxBytes)
+{
+ int c;
+ int sptr = 0;
+ for(int i=0;i<maxBytes;i++){
+ c = _parser.getc();
+ if(c==-1){
+ buf[sptr] = '\0'; // null terminate if string
+ return i;
+ }
+ if(c != ',' && c!= '"'){
+ buf[sptr++] = (uint8_t) c;
+ }
}
- _parser.send("OK\n");
+}
+
+void ATCmdManager::_oob_setWiFiSSID()
+{
+ int n;
+ wifi_config_t wifi_cfg = init_wifi_config();
+ _smutex.lock();
+ n = readBytes((uint8_t *)wifi_cfg.ssid, 32);
+ printf("[ATCMD MAN]: number of bytes read = %d\n", n);
+ if(n>0)
+ {
+ printf("[ATCMD MAN]: wifi_cfg.ssid = %s\n", wifi_cfg.ssid);
+ // package and send on wifi data queue
+ wifi_data_msg_t data_msg;
+ data_msg.wifi_cmd = WIFI_CMD_CONFIG;
+ data_msg.dataLen = sizeof(wifi_config_t);
+ memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
+ queueWiFiDataRequest(data_msg);
+ _parser.send("OK\n");
+ } else {
+ printf("\n[ATCMD MAN]: wifi configuration failed \n");
+ _parser.send("NAK\n");
+ }
+ _smutex.unlock();
+}
+
+void ATCmdManager::_oob_setWiFiPWD()
+{
+ int n;
+ wifi_config_t wifi_cfg = init_wifi_config();
+ _smutex.lock();
+ //n = _parser.scanf("%31[^\r\n]", wifi_cfg.pass);
+ n = readBytes((uint8_t *)wifi_cfg.pass, 32);
+ if(n>0)
+ {
+ printf("ATCMD MAN]: wifi_cfg.pass = %s\n", wifi_cfg.pass);
+ // package and send on wifi data queue
+ wifi_data_msg_t data_msg;
+ data_msg.wifi_cmd = WIFI_CMD_CONFIG;
+ data_msg.dataLen = sizeof(wifi_config_t);
+ memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
+ queueWiFiDataRequest(data_msg);
+ _parser.send("OK\n");
+ } else {
+ printf("\n[ATCMD MAN]: wifi configuration failed \n");
+ _parser.send("NAK\n");
+ }
+ _smutex.unlock();
+}
+
+void ATCmdManager::_oob_setWiFiSecurity()
+{
+ int n;
+ wifi_config_t wifi_cfg = init_wifi_config();
+ _smutex.lock();
+ n = _parser.scanf(",%d", &wifi_cfg.security);
+ if(n>0)
+ {
+ printf("ATCMD MAN]: wifi_cfg.security = %s\n", sec2str(wifi_cfg.security));
+ // package and send on wifi data queue
+ wifi_data_msg_t data_msg;
+ data_msg.wifi_cmd = WIFI_CMD_CONFIG;
+ data_msg.dataLen = sizeof(wifi_config_t);
+ memcpy(data_msg.buffer,&wifi_cfg, data_msg.dataLen);
+ queueWiFiDataRequest(data_msg);
+ _parser.send("OK\n");
+ } else {
+ printf("\n[ATCMD MAN]: wifi configuration failed \n");
+ _parser.send("NAK\n");
+ }
_smutex.unlock();
}
--- a/source/ATCmdManager.h Sat Mar 23 16:28:34 2019 +0000
+++ b/source/ATCmdManager.h Sun Mar 24 17:32:06 2019 +0000
@@ -87,13 +87,18 @@
void _oob_connect2WiFiNetwork();
void _oob_disconnectWiFiNetwork();
void _oob_setupInternetConnection();
+ void _oob_setWiFiSSID();
+ void _oob_setWiFiPWD();
+ void _oob_setWiFiSecurity();
+ wifi_config_t init_wifi_config();
const char * sec2str(nsapi_security_t sec);
bool queueWiFiCommand(wifi_cmd_t cmd);
bool dequeueATresponse();
bool queueWiFiDataRequest(wifi_data_msg_t cmd);
bool dequeueATdataResponse();
void processResponses();
- bool setNextResponse(at_cmd_resp_t resp);
+ bool setNextResponse(at_cmd_resp_t resp);
+ int readBytes(uint8_t *buf, int maxBytes);
/**
--- a/source/WiFiManager.cpp Sat Mar 23 16:28:34 2019 +0000
+++ b/source/WiFiManager.cpp Sun Mar 24 17:32:06 2019 +0000
@@ -90,6 +90,7 @@
set_WIFI_CONFIG();
wifiCmd = WIFI_CMD_NONE;
queueATresponse(AT_CONFIG_RESP);
+ break;
case WIFI_CMD_INTERNET_CONFIG:
set_internet_config();
wifiCmd = WIFI_CMD_NONE;
@@ -209,27 +210,31 @@
void WiFiManager::set_WIFI_CONFIG()
{
wifi_config_t *wifi_cfg= (wifi_config_t *) data_msg->buffer;
- set_WIFI_SSID(wifi_cfg->ssid);
- set_WIFI_PASSWORD(wifi_cfg->pass);
- set_WIFI_SECURITY(wifi_cfg->security);
+ if(wifi_cfg->ssid[0] != NULL)set_WIFI_SSID(wifi_cfg->ssid);
+ if(wifi_cfg->pass[0] != NULL)set_WIFI_PASSWORD(wifi_cfg->pass);
+ if(wifi_cfg->security != NSAPI_SECURITY_UNKNOWN)set_WIFI_SECURITY(wifi_cfg->security);
free_DataMsg();
}
void WiFiManager::set_WIFI_SSID(char * wifi_ssid)
{
strcpy(wifi_config.ssid, wifi_ssid);
+ printf("[WIFI-MAN] wifi_ssid set to %s\n", wifi_config.ssid);
+
}
void WiFiManager::set_WIFI_PASSWORD(char * wifi_pass)
{
strcpy(wifi_config.pass, wifi_pass);
+ printf("[WIFI-MAN] wifi_pass set to %s\n", wifi_config.pass);
}
void WiFiManager::set_WIFI_SECURITY(nsapi_security_t wifi_security)
{
wifi_config.security = wifi_security;
+ printf("[WIFI-MAN] wifi_security set to %s\n", sec2str(wifi_config.security));
}
--- a/source/main-https.cpp Sat Mar 23 16:28:34 2019 +0000
+++ b/source/main-https.cpp Sun Mar 24 17:32:06 2019 +0000
@@ -524,7 +524,7 @@
&wiFi2ATmPool, &wiFi2ATCmdQueue,
&aT2WiFiDatamPool, &aT2WiFiDataQueue,
&wiFi2ATDatamPool, &wiFi2ATDataQueue,
- true);
+ false);
//aTCmdManager->runMain();
atcmd_thread.start(callback(aTCmdManager, &ATCmdManager::runMain));
while(1) wait(0.1);