diff --git a/src/WiFi.cpp b/src/WiFi.cpp index e4a34dd4..f01863c0 100644 --- a/src/WiFi.cpp +++ b/src/WiFi.cpp @@ -156,6 +156,11 @@ uint8_t WiFiClass::beginAP(const char *ssid, const char* passphrase, uint8_t cha return status; } +uint8_t WiFiClass::beginProvision() +{ + return WiFiDrv::beginProvision(); +} + void WiFiClass::config(IPAddress local_ip) { WiFiDrv::config(1, (uint32_t)local_ip, 0, 0); diff --git a/src/WiFi.h b/src/WiFi.h index 3bb5db60..e02fac9a 100644 --- a/src/WiFi.h +++ b/src/WiFi.h @@ -80,6 +80,14 @@ class WiFiClass uint8_t beginAP(const char *ssid, const char* passphrase); uint8_t beginAP(const char *ssid, const char* passphrase, uint8_t channel); + /* Start Wifi connection using provisioner + * If the previously configured network can't be found, + * an Access point will be turned on, serving a configuration landing page + */ + + uint8_t beginProvision(); + uint8_t beginProvision(uint8_t channel); + /* Change Ip configuration settings disabling the dhcp client * * param local_ip: Static ip configuration diff --git a/src/utility/wifi_drv.cpp b/src/utility/wifi_drv.cpp index 3575d797..a9c5428e 100644 --- a/src/utility/wifi_drv.cpp +++ b/src/utility/wifi_drv.cpp @@ -1078,4 +1078,26 @@ void WiFiDrv::analogWrite(uint8_t pin, uint8_t value) SpiDrv::spiSlaveDeselect(); } +uint8_t WiFiDrv::beginProvision() +{ + WAIT_FOR_SLAVE_SELECT(); + + // Send Command + SpiDrv::sendCmd(BEGIN_PROVISION_CMD, PARAM_NUMS_0); + + SpiDrv::spiSlaveDeselect(); + //Wait the reply elaboration + SpiDrv::waitForSlaveReady(); + SpiDrv::spiSlaveSelect(); + + // Wait for reply + uint8_t _data = 1; + uint8_t _dataLen = 0; + SpiDrv::waitResponseCmd(BEGIN_PROVISION_CMD, PARAM_NUMS_1, &_data, &_dataLen); + + SpiDrv::spiSlaveDeselect(); + + return 1; +} + WiFiDrv wiFiDrv; diff --git a/src/utility/wifi_drv.h b/src/utility/wifi_drv.h index d9bfeff2..107f3109 100644 --- a/src/utility/wifi_drv.h +++ b/src/utility/wifi_drv.h @@ -286,6 +286,10 @@ class WiFiDrv static void digitalWrite(uint8_t pin, uint8_t value); static void analogWrite(uint8_t pin, uint8_t value); + static uint8_t beginProvision(); + static uint8_t beginProvision(uint8_t channel); + static uint32_t provisioned(); + friend class WiFiUDP; friend class WiFiClient; }; diff --git a/src/utility/wifi_spi.h b/src/utility/wifi_spi.h index 7402e434..5a46f8a8 100644 --- a/src/utility/wifi_spi.h +++ b/src/utility/wifi_spi.h @@ -47,7 +47,7 @@ enum { SET_NET_CMD = 0x10, SET_PASSPHRASE_CMD = 0x11, SET_KEY_CMD = 0x12, -// TEST_CMD = 0x13, + BEGIN_PROVISION_CMD = 0x13, SET_IP_CONFIG_CMD = 0x14, SET_DNS_CONFIG_CMD = 0x15, SET_HOSTNAME_CMD = 0x16,