1
0
mirror of https://github.com/bdring/Grbl_Esp32.git synced 2025-09-01 10:23:19 +02:00

Start a default AP if no comms: config

This commit is contained in:
Mitch Bradley
2021-06-02 12:37:17 -10:00
parent 8738b4ea71
commit 9f79d12119
2 changed files with 44 additions and 41 deletions

View File

@@ -424,6 +424,12 @@ void MachineConfig::afterParse() {
log_info("Using null spindle");
_spindle = new Spindles::Null();
}
if (_comms == nullptr) {
log_info("Comms config missing; building default comms");
_comms = new Communications();
_comms->_apConfig = new WifiAPConfig();
}
}
size_t MachineConfig::readFile(const char* filename, char*& buffer) {

View File

@@ -278,8 +278,6 @@ namespace WebUI {
bool WiFiConfig::StartSTA() {
auto commsConfig = config->_comms;
//stop active service
wifi_services.end();
//Sanity check
if ((WiFi.getMode() == WIFI_STA) || (WiFi.getMode() == WIFI_AP_STA)) {
WiFi.disconnect();
@@ -292,6 +290,9 @@ namespace WebUI {
auto comms = config->_comms; // Should be there; startSTA is called with a null check
auto sta = comms->_staConfig; // Should be there; startSTA is called with a null check
if (!sta) {
return false;
}
//Get parameters for STA
WiFi.setHostname(comms->_hostname.c_str());
@@ -303,7 +304,7 @@ namespace WebUI {
}
//password
String password = wifi_sta_password->get();
int8_t IP_mode = sta->_dhcp ? DHCP_MODE : STATIC_MODE;
int8_t IP_mode = sta->_dhcp ? DHCP_MODE : STATIC_MODE;
//if not DHCP
if (IP_mode != DHCP_MODE) {
@@ -326,9 +327,6 @@ namespace WebUI {
*/
bool WiFiConfig::StartAP() {
//stop active services
wifi_services.end();
//Sanity check
if ((WiFi.getMode() == WIFI_STA) || (WiFi.getMode() == WIFI_AP_STA)) {
WiFi.disconnect();
@@ -340,8 +338,13 @@ namespace WebUI {
WiFi.enableSTA(false);
WiFi.mode(WIFI_AP);
auto comms = config->_comms; // Should be there; startSTA is called with a null check
auto ap = comms->_apConfig; // Should be there; startSTA is called with a null check
auto comms = config->_comms; // _comms is automatically created in afterParse
auto ap = comms->_apConfig;
// ap might be nullpt if there is an explicit comms: with no wifi_ap:
// If a _comms node is created automatically, a default AP config is created too
if (!ap) {
return false;
}
//Get parameters for AP
//SSID
@@ -401,40 +404,34 @@ namespace WebUI {
void WiFiConfig::begin() {
//stop active services
wifi_services.end();
if (hasWiFi()) {
//setup events
if (!_events_registered) {
//cumulative function and no remove so only do once
WiFi.onEvent(WiFiConfig::WiFiEvent);
_events_registered = true;
}
//Get hostname
_hostname = config->_comms->_hostname;
if (config->_comms->_staConfig != nullptr) {
// WIFI mode is STA; fall back on AP if necessary
if (!StartSTA()) {
grbl_sendf(CLIENT_ALL, "[MSG:Cannot connect to %s]\r\n", config->_comms->_staConfig->_ssid.c_str());
if (config->_comms->_apConfig != nullptr) {
StartAP();
}
}
//start services
wifi_services.begin();
} else if (config->_comms->_apConfig != nullptr) {
StartAP();
//start services
wifi_services.begin();
} else {
WiFi.mode(WIFI_OFF);
}
} else {
WiFi.mode(WIFI_OFF);
if (!hasWiFi()) {
goto wifi_off;
}
//setup events
if (!_events_registered) {
//cumulative function and no remove so only do once
WiFi.onEvent(WiFiConfig::WiFiEvent);
_events_registered = true;
}
//Get hostname
_hostname = config->_comms->_hostname;
if (config->_comms->_staConfig != nullptr) {
// WIFI mode is STA; fall back on AP if necessary
if (StartSTA()) {
goto wifi_on;
}
}
if (StartAP()) {
goto wifi_on;
}
wifi_off:
WiFi.mode(WIFI_OFF);
return;
wifi_on:
wifi_services.begin();
}
/**