parent
b1bcec08f8
commit
cf43d174b7
90
libraries/WiFi/examples/FTM/FTM_Initiator/FTM_Initiator.ino
Normal file
90
libraries/WiFi/examples/FTM/FTM_Initiator/FTM_Initiator.ino
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/* Wi-Fi FTM Initiator Arduino Example
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this
|
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
*/
|
||||||
|
#include "WiFi.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
THIS FEATURE IS SUPPORTED ONLY BY ESP32-S2 AND ESP32-C3
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Change the SSID and PASSWORD here if needed
|
||||||
|
const char * WIFI_FTM_SSID = "WiFi_FTM_Responder"; // SSID of AP that has FTM Enabled
|
||||||
|
const char * WIFI_FTM_PASS = "ftm_responder"; // STA Password
|
||||||
|
|
||||||
|
// FTM settings
|
||||||
|
// Number of FTM frames requested in terms of 4 or 8 bursts (allowed values - 0 (No pref), 16, 24, 32, 64)
|
||||||
|
const uint8_t FTM_FRAME_COUNT = 16;
|
||||||
|
// Requested time period between consecutive FTM bursts in 100’s of milliseconds (allowed values - 0 (No pref) or 2-255)
|
||||||
|
const uint16_t FTM_BURST_PERIOD = 2;
|
||||||
|
|
||||||
|
// Semaphore to signal when FTM Report has been received
|
||||||
|
xSemaphoreHandle ftmSemaphore;
|
||||||
|
// Status of the received FTM Report
|
||||||
|
bool ftmSuccess = true;
|
||||||
|
|
||||||
|
// FTM report handler with the calculated data from the round trip
|
||||||
|
void onFtmReport(arduino_event_t *event) {
|
||||||
|
const char * status_str[5] = {"SUCCESS", "UNSUPPORTED", "CONF_REJECTED", "NO_RESPONSE", "FAIL"};
|
||||||
|
wifi_event_ftm_report_t * report = &event->event_info.wifi_ftm_report;
|
||||||
|
// Set the global report status
|
||||||
|
ftmSuccess = report->status == FTM_STATUS_SUCCESS;
|
||||||
|
if (ftmSuccess) {
|
||||||
|
// The estimated distance in meters may vary depending on some factors (see README file)
|
||||||
|
Serial.printf("FTM Estimate: Distance: %.2f m, Return Time: %u ns\n", (float)report->dist_est / 100.0, report->rtt_est);
|
||||||
|
// Pointer to FTM Report with multiple entries, should be freed after use
|
||||||
|
free(report->ftm_report_data);
|
||||||
|
} else {
|
||||||
|
Serial.print("FTM Error: ");
|
||||||
|
Serial.println(status_str[report->status]);
|
||||||
|
}
|
||||||
|
// Signal that report is received
|
||||||
|
xSemaphoreGive(ftmSemaphore);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initiate FTM Session and wait for FTM Report
|
||||||
|
bool getFtmReport(){
|
||||||
|
if(!WiFi.initiateFTM(FTM_FRAME_COUNT, FTM_BURST_PERIOD)){
|
||||||
|
Serial.println("FTM Error: Initiate Session Failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Wait for signal that report is received and return true if status was success
|
||||||
|
return xSemaphoreTake(ftmSemaphore, portMAX_DELAY) == pdPASS && ftmSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// Create binary semaphore (initialized taken and can be taken/given from any thread/ISR)
|
||||||
|
ftmSemaphore = xSemaphoreCreateBinary();
|
||||||
|
|
||||||
|
// Listen for FTM Report events
|
||||||
|
WiFi.onEvent(onFtmReport, ARDUINO_EVENT_WIFI_FTM_REPORT);
|
||||||
|
|
||||||
|
// Connect to AP that has FTM Enabled
|
||||||
|
Serial.println("Connecting to FTM Responder");
|
||||||
|
WiFi.begin(WIFI_FTM_SSID, WIFI_FTM_PASS);
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(500);
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
Serial.println("");
|
||||||
|
Serial.println("WiFi Connected");
|
||||||
|
|
||||||
|
Serial.print("Initiating FTM session with Frame Count ");
|
||||||
|
Serial.print(FTM_FRAME_COUNT);
|
||||||
|
Serial.print(" and Burst Period ");
|
||||||
|
Serial.print(FTM_BURST_PERIOD * 100);
|
||||||
|
Serial.println(" ms");
|
||||||
|
|
||||||
|
// Request FTM reports until one fails
|
||||||
|
while(getFtmReport());
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
delay(1000);
|
||||||
|
}
|
110
libraries/WiFi/examples/FTM/FTM_Initiator/README.md
Normal file
110
libraries/WiFi/examples/FTM/FTM_Initiator/README.md
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Wi-Fi FTM Initiator Arduino Example
|
||||||
|
|
||||||
|
This example demonstrates how to use the Fine Timing Measurement (FTM) to calculate the distace from the Access Point and the device. This is calculated by the Wi-Fi Round Trip Time (Wi-Fi RTT) introduced on the [IEEE Std 802.11-2016](https://en.wikipedia.org/wiki/IEEE_802.11mc) standard.
|
||||||
|
|
||||||
|
This example was based on the [ESP-IDF FTM](https://github.com/espressif/esp-idf/tree/master/examples/wifi/ftm). See the README file for more details about on how to use this feature.
|
||||||
|
|
||||||
|
Some usages for this feature includes:
|
||||||
|
|
||||||
|
* Indoor positioning systems.
|
||||||
|
* Navigation.
|
||||||
|
* Device Location.
|
||||||
|
* Smart Devices.
|
||||||
|
* Alarms.
|
||||||
|
|
||||||
|
# Supported Targets
|
||||||
|
|
||||||
|
Currently, this example supports the following targets:
|
||||||
|
|
||||||
|
| Supported Targets | ESP32-S2 | ESP32-C3 |
|
||||||
|
| ----------------- | -------- | -------- |
|
||||||
|
|
||||||
|
## How to Use Example
|
||||||
|
|
||||||
|
In order to use the FTM, you will need a Responder or Wi-Fi router with FTM capabilities. If you don't own one, you can use a second ESP32-S2 or ESP32-C3 to simulate one.
|
||||||
|
See the **Responder** example to prepare the environment.
|
||||||
|
|
||||||
|
* How to install the Arduino IDE: [Install Arduino IDE](https://github.com/espressif/arduino-esp32/tree/master/docs/arduino-ide).
|
||||||
|
|
||||||
|
### Configure the Project
|
||||||
|
|
||||||
|
To configure this project, you can change the following configuration related to FTM feature:
|
||||||
|
|
||||||
|
```c
|
||||||
|
// Change the SSID and PASSWORD here if needed
|
||||||
|
const char * WIFI_FTM_SSID = "WiFi_FTM_Responder"; // SSID of AP that has FTM Enabled
|
||||||
|
const char * WIFI_FTM_PASS = "ftm_responder"; // STA Password
|
||||||
|
|
||||||
|
// FTM settings
|
||||||
|
// Number of FTM frames requested in terms of 4 or 8 bursts (allowed values - 0 (No pref), 16, 24, 32, 64)
|
||||||
|
const uint8_t FTM_FRAME_COUNT = 16;
|
||||||
|
// Requested time period between consecutive FTM bursts in 100’s of milliseconds (allowed values - 0 (No pref) or 2-255)
|
||||||
|
const uint16_t FTM_BURST_PERIOD = 2;
|
||||||
|
```
|
||||||
|
|
||||||
|
* Change the Wi-Fi `SSID` and `PASSWORD` as the same as the Responder/Router.
|
||||||
|
* Change `FTM_FRAME_COUNT` with the number of frames requested to the Responder.
|
||||||
|
* Change `FTM_BURST_PERIOD` with the time between each FTM burst.
|
||||||
|
|
||||||
|
To see more details about FTM, please see the [ESP-IDF docs](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/network/esp_wifi.html).
|
||||||
|
|
||||||
|
#### Using Arduino IDE
|
||||||
|
|
||||||
|
To get more information about the Espressif boards see [Espressif Development Kits](https://www.espressif.com/en/products/devkits).
|
||||||
|
|
||||||
|
* Before Compile/Verify, select the correct board: `Tools -> Board`.
|
||||||
|
* Select the COM port: `Tools -> Port: xxx` where the `xxx` is the detected COM port.
|
||||||
|
|
||||||
|
#### Using Platform IO
|
||||||
|
|
||||||
|
* Select the COM port: `Devices` or setting the `upload_port` option on the `platformio.ini` file.
|
||||||
|
|
||||||
|
## Log Output
|
||||||
|
|
||||||
|
Expected log output:
|
||||||
|
|
||||||
|
```
|
||||||
|
ESP-ROM:esp32s2-rc4-20191025
|
||||||
|
Build:Oct 25 2019
|
||||||
|
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
|
||||||
|
SPIWP:0xee
|
||||||
|
mode:DIO, clock div:1
|
||||||
|
load:0x3ffe6100,len:0x4b0
|
||||||
|
load:0x4004c000,len:0xa6c
|
||||||
|
load:0x40050000,len:0x25c4
|
||||||
|
entry 0x4004c198
|
||||||
|
Connecting to FTM Responder
|
||||||
|
.....
|
||||||
|
WiFi Connected
|
||||||
|
Initiating FTM session with Frame Count 16 and Burst Period 200 ms
|
||||||
|
FTM Estimate: Distance: 0.13 m, Return Time: 0 ns
|
||||||
|
FTM Estimate: Distance: 0.13 m, Return Time: 0 ns
|
||||||
|
FTM Estimate: Distance: 0.13 m, Return Time: 0 ns
|
||||||
|
FTM Estimate: Distance: 0.00 m, Return Time: 0 ns
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
***Important: Make sure you are using a good quality USB cable and that you have a reliable power source.***
|
||||||
|
|
||||||
|
* **Programming Fail:** If the programming/flash procedure fails, try reducing the serial connection speed.
|
||||||
|
* **COM port not detected:** Check the USB cable and the USB to Serial driver installation.
|
||||||
|
|
||||||
|
If the error persist, you can ask for help at the official [ESP32 forum](https://esp32.com) or see [Contribute](#contribute).
|
||||||
|
|
||||||
|
## Contribute
|
||||||
|
|
||||||
|
To know how to contribute to this project, see [How to contribute.](https://github.com/espressif/arduino-esp32/blob/master/CONTRIBUTING.rst)
|
||||||
|
|
||||||
|
If you have any **feedback** or **issue** to report on this example/library, please open an issue or fix it by creating a new PR. Contributions are more than welcome!
|
||||||
|
|
||||||
|
Before creating a new issue, be sure to try the Troubleshooting and to check if the same issue was already created by someone else.
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
* Official ESP32 Forum: [Link](https://esp32.com)
|
||||||
|
* Arduino-ESP32 Official Repository: [espressif/arduino-esp32](https://github.com/espressif/arduino-esp32)
|
||||||
|
* ESP32-S2 Datasheet: [Link to datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf)
|
||||||
|
* ESP32-C3 Datasheet: [Link to datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf)
|
||||||
|
* Official ESP-IDF documentation: [ESP-IDF](https://idf.espressif.com)
|
23
libraries/WiFi/examples/FTM/FTM_Responder/FTM_Responder.ino
Normal file
23
libraries/WiFi/examples/FTM/FTM_Responder/FTM_Responder.ino
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/* Wi-Fi FTM Responder Arduino Example
|
||||||
|
|
||||||
|
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, this
|
||||||
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
*/
|
||||||
|
#include "WiFi.h"
|
||||||
|
// Change the SSID and PASSWORD here if needed
|
||||||
|
const char * WIFI_FTM_SSID = "WiFi_FTM_Responder";
|
||||||
|
const char * WIFI_FTM_PASS = "ftm_responder";
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.println("Starting SoftAP with FTM Responder support");
|
||||||
|
// Enable AP with FTM support (last argument is 'true')
|
||||||
|
WiFi.softAP(WIFI_FTM_SSID, WIFI_FTM_PASS, 1, 0, 4, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
delay(1000);
|
||||||
|
}
|
94
libraries/WiFi/examples/FTM/FTM_Responder/README.md
Normal file
94
libraries/WiFi/examples/FTM/FTM_Responder/README.md
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# Wi-Fi FTM Responder Arduino Example
|
||||||
|
|
||||||
|
This example demonstrates how to use the Fine Timing Measurement (FTM) to calculate the distace from the Access Point and the device. This is calculated by the Wi-Fi Round Trip Time (Wi-Fi RTT) introduced on the [IEEE Std 802.11-2016](https://en.wikipedia.org/wiki/IEEE_802.11mc) standard.
|
||||||
|
|
||||||
|
This example will simulate the Router with FTM capability.
|
||||||
|
|
||||||
|
This example was based on the [ESP-IDF FTM](https://github.com/espressif/esp-idf/tree/master/examples/wifi/ftm). See the README file for more details about on how to use this feature.
|
||||||
|
|
||||||
|
Some usages for this feature includes:
|
||||||
|
|
||||||
|
* Indoor positioning systems.
|
||||||
|
* Navigation.
|
||||||
|
* Device Location.
|
||||||
|
* Smart Devices.
|
||||||
|
* Alarms.
|
||||||
|
|
||||||
|
# Supported Targets
|
||||||
|
|
||||||
|
Currently, this example supports the following targets:
|
||||||
|
|
||||||
|
| Supported Targets | ESP32-S2 | ESP32-C3 |
|
||||||
|
| ----------------- | -------- | -------- |
|
||||||
|
|
||||||
|
## How to Use Example
|
||||||
|
|
||||||
|
See the **Initiator** example to prepare the environment.
|
||||||
|
|
||||||
|
* How to install the Arduino IDE: [Install Arduino IDE](https://github.com/espressif/arduino-esp32/tree/master/docs/arduino-ide).
|
||||||
|
|
||||||
|
### Configure the Project
|
||||||
|
|
||||||
|
To configure this project, you can change the following configuration related to STA:
|
||||||
|
|
||||||
|
```c
|
||||||
|
// Change the SSID and PASSWORD here if needed
|
||||||
|
const char * WIFI_FTM_SSID = "WiFi_FTM_Responder";
|
||||||
|
const char * WIFI_FTM_PASS = "ftm_responder";
|
||||||
|
```
|
||||||
|
|
||||||
|
* Change the Wi-Fi `SSID` and `PASSWORD` as the same as the Initiator.
|
||||||
|
|
||||||
|
To see more details about FTM, please see the [ESP-IDF docs](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/api-reference/network/esp_wifi.html).
|
||||||
|
|
||||||
|
#### Using Arduino IDE
|
||||||
|
|
||||||
|
To get more information about the Espressif boards see [Espressif Development Kits](https://www.espressif.com/en/products/devkits).
|
||||||
|
|
||||||
|
* Before Compile/Verify, select the correct board: `Tools -> Board`.
|
||||||
|
* Select the COM port: `Tools -> Port: xxx` where the `xxx` is the detected COM port.
|
||||||
|
|
||||||
|
#### Using Platform IO
|
||||||
|
|
||||||
|
* Select the COM port: `Devices` or setting the `upload_port` option on the `platformio.ini` file.
|
||||||
|
|
||||||
|
## Log Output
|
||||||
|
|
||||||
|
Expected log output:
|
||||||
|
|
||||||
|
```
|
||||||
|
Build:Oct 25 2019
|
||||||
|
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
|
||||||
|
SPIWP:0xee
|
||||||
|
mode:DIO, clock div:1
|
||||||
|
load:0x3ffe6100,len:0x4b0
|
||||||
|
load:0x4004c000,len:0xa6c
|
||||||
|
load:0x40050000,len:0x25c4
|
||||||
|
entry 0x4004c198
|
||||||
|
Starting SoftAP with FTM Responder support
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
***Important: Make sure you are using a good quality USB cable and that you have a reliable power source.***
|
||||||
|
|
||||||
|
* **Programming Fail:** If the programming/flash procedure fails, try reducing the serial connection speed.
|
||||||
|
* **COM port not detected:** Check the USB cable and the USB to Serial driver installation.
|
||||||
|
|
||||||
|
If the error persist, you can ask for help at the official [ESP32 forum](https://esp32.com) or see [Contribute](#contribute).
|
||||||
|
|
||||||
|
## Contribute
|
||||||
|
|
||||||
|
To know how to contribute to this project, see [How to contribute.](https://github.com/espressif/arduino-esp32/blob/master/CONTRIBUTING.rst)
|
||||||
|
|
||||||
|
If you have any **feedback** or **issue** to report on this example/library, please open an issue or fix it by creating a new PR. Contributions are more than welcome!
|
||||||
|
|
||||||
|
Before creating a new issue, be sure to try the Troubleshooting and to check if the same issue was already created by someone else.
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
* Official ESP32 Forum: [Link](https://esp32.com)
|
||||||
|
* Arduino-ESP32 Official Repository: [espressif/arduino-esp32](https://github.com/espressif/arduino-esp32)
|
||||||
|
* ESP32-S2 Datasheet: [Link to datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf)
|
||||||
|
* ESP32-C3 Datasheet: [Link to datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf)
|
||||||
|
* Official ESP-IDF documentation: [ESP-IDF](https://idf.espressif.com)
|
@ -81,11 +81,14 @@ static bool softap_config_equal(const wifi_config_t& lhs, const wifi_config_t& r
|
|||||||
if(lhs.ap.pairwise_cipher != rhs.ap.pairwise_cipher) {
|
if(lhs.ap.pairwise_cipher != rhs.ap.pairwise_cipher) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if(lhs.ap.ftm_responder != rhs.ap.ftm_responder) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wifi_softap_config(wifi_config_t *wifi_config, const char * ssid=NULL, const char * password=NULL, uint8_t channel=6, wifi_auth_mode_t authmode=WIFI_AUTH_WPA2_PSK, uint8_t ssid_hidden=0, uint8_t max_connections=4, uint16_t beacon_interval=100){
|
void wifi_softap_config(wifi_config_t *wifi_config, const char * ssid=NULL, const char * password=NULL, uint8_t channel=6, wifi_auth_mode_t authmode=WIFI_AUTH_WPA2_PSK, uint8_t ssid_hidden=0, uint8_t max_connections=4, bool ftm_responder=false, uint16_t beacon_interval=100){
|
||||||
wifi_config->ap.channel = channel;
|
wifi_config->ap.channel = channel;
|
||||||
wifi_config->ap.max_connection = max_connections;
|
wifi_config->ap.max_connection = max_connections;
|
||||||
wifi_config->ap.beacon_interval = beacon_interval;
|
wifi_config->ap.beacon_interval = beacon_interval;
|
||||||
wifi_config->ap.ssid_hidden = ssid_hidden;
|
wifi_config->ap.ssid_hidden = ssid_hidden;
|
||||||
@ -93,6 +96,7 @@ void wifi_softap_config(wifi_config_t *wifi_config, const char * ssid=NULL, cons
|
|||||||
wifi_config->ap.ssid_len = 0;
|
wifi_config->ap.ssid_len = 0;
|
||||||
wifi_config->ap.ssid[0] = 0;
|
wifi_config->ap.ssid[0] = 0;
|
||||||
wifi_config->ap.password[0] = 0;
|
wifi_config->ap.password[0] = 0;
|
||||||
|
wifi_config->ap.ftm_responder = ftm_responder;
|
||||||
if(ssid != NULL && ssid[0] != 0){
|
if(ssid != NULL && ssid[0] != 0){
|
||||||
snprintf((char*)wifi_config->ap.ssid, 32, ssid);
|
snprintf((char*)wifi_config->ap.ssid, 32, ssid);
|
||||||
wifi_config->ap.ssid_len = strlen(ssid);
|
wifi_config->ap.ssid_len = strlen(ssid);
|
||||||
@ -117,7 +121,7 @@ void wifi_softap_config(wifi_config_t *wifi_config, const char * ssid=NULL, cons
|
|||||||
* @param ssid_hidden Network cloaking (0 = broadcast SSID, 1 = hide SSID)
|
* @param ssid_hidden Network cloaking (0 = broadcast SSID, 1 = hide SSID)
|
||||||
* @param max_connection Max simultaneous connected clients, 1 - 4.
|
* @param max_connection Max simultaneous connected clients, 1 - 4.
|
||||||
*/
|
*/
|
||||||
bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, int ssid_hidden, int max_connection)
|
bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, int ssid_hidden, int max_connection, bool ftm_responder)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(!WiFi.enableAP(true)) {
|
if(!WiFi.enableAP(true)) {
|
||||||
@ -140,7 +144,7 @@ bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel,
|
|||||||
|
|
||||||
wifi_config_t conf;
|
wifi_config_t conf;
|
||||||
wifi_config_t conf_current;
|
wifi_config_t conf_current;
|
||||||
wifi_softap_config(&conf, ssid, passphrase, channel, WIFI_AUTH_WPA2_PSK, ssid_hidden, max_connection);
|
wifi_softap_config(&conf, ssid, passphrase, channel, WIFI_AUTH_WPA2_PSK, ssid_hidden, max_connection, ftm_responder);
|
||||||
esp_err_t err = esp_wifi_get_config((wifi_interface_t)WIFI_IF_AP, &conf_current);
|
esp_err_t err = esp_wifi_get_config((wifi_interface_t)WIFI_IF_AP, &conf_current);
|
||||||
if(err){
|
if(err){
|
||||||
log_e("get AP config failed");
|
log_e("get AP config failed");
|
||||||
|
@ -37,7 +37,7 @@ class WiFiAPClass
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4);
|
bool softAP(const char* ssid, const char* passphrase = NULL, int channel = 1, int ssid_hidden = 0, int max_connection = 4, bool ftm_responder = false);
|
||||||
bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);
|
bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);
|
||||||
bool softAPdisconnect(bool wifioff = false);
|
bool softAPdisconnect(bool wifioff = false);
|
||||||
|
|
||||||
|
@ -395,6 +395,14 @@ static void _arduino_event_cb(void* arg, esp_event_base_t event_base, int32_t ev
|
|||||||
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_WPS_ER_PBC_OVERLAP) {
|
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_WPS_ER_PBC_OVERLAP) {
|
||||||
arduino_event.event_id = ARDUINO_EVENT_WPS_ER_PBC_OVERLAP;
|
arduino_event.event_id = ARDUINO_EVENT_WPS_ER_PBC_OVERLAP;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FTM
|
||||||
|
* */
|
||||||
|
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_FTM_REPORT) {
|
||||||
|
wifi_event_ftm_report_t * event = (wifi_event_ftm_report_t*)event_data;
|
||||||
|
arduino_event.event_id = ARDUINO_EVENT_WIFI_FTM_REPORT;
|
||||||
|
memcpy(&arduino_event.event_info.wifi_ftm_report, event_data, sizeof(wifi_event_ftm_report_t));
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SMART CONFIG
|
* SMART CONFIG
|
||||||
@ -778,7 +786,8 @@ const char * arduino_event_names[] = {
|
|||||||
"WIFI_READY",
|
"WIFI_READY",
|
||||||
"SCAN_DONE",
|
"SCAN_DONE",
|
||||||
"STA_START", "STA_STOP", "STA_CONNECTED", "STA_DISCONNECTED", "STA_AUTHMODE_CHANGE", "STA_GOT_IP", "STA_GOT_IP6", "STA_LOST_IP",
|
"STA_START", "STA_STOP", "STA_CONNECTED", "STA_DISCONNECTED", "STA_AUTHMODE_CHANGE", "STA_GOT_IP", "STA_GOT_IP6", "STA_LOST_IP",
|
||||||
"AP_START", "AP_STOP", "AP_STACONNECTED", "AP_STADISCONNECTED", "AP_STAIPASSIGNED", "AP_PROBEREQRECVED", "AP_GOT_IP6",
|
"AP_START", "AP_STOP", "AP_STACONNECTED", "AP_STADISCONNECTED", "AP_STAIPASSIGNED", "AP_PROBEREQRECVED", "AP_GOT_IP6",
|
||||||
|
"FTM_REPORT",
|
||||||
"ETH_START", "ETH_STOP", "ETH_CONNECTED", "ETH_DISCONNECTED", "ETH_GOT_IP", "ETH_GOT_IP6",
|
"ETH_START", "ETH_STOP", "ETH_CONNECTED", "ETH_DISCONNECTED", "ETH_GOT_IP", "ETH_GOT_IP6",
|
||||||
"WPS_ER_SUCCESS", "WPS_ER_FAILED", "WPS_ER_TIMEOUT", "WPS_ER_PIN", "WPS_ER_PBC_OVERLAP",
|
"WPS_ER_SUCCESS", "WPS_ER_FAILED", "WPS_ER_TIMEOUT", "WPS_ER_PIN", "WPS_ER_PBC_OVERLAP",
|
||||||
"SC_SCAN_DONE", "SC_FOUND_CHANNEL", "SC_GOT_SSID_PSWD", "SC_SEND_ACK_DONE",
|
"SC_SCAN_DONE", "SC_FOUND_CHANNEL", "SC_GOT_SSID_PSWD", "SC_SEND_ACK_DONE",
|
||||||
@ -1125,6 +1134,32 @@ wifi_power_t WiFiGenericClass::getTxPower(){
|
|||||||
return (wifi_power_t)power;
|
return (wifi_power_t)power;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiate FTM Session.
|
||||||
|
* @param frm_count Number of FTM frames requested in terms of 4 or 8 bursts (allowed values - 0(No pref), 16, 24, 32, 64)
|
||||||
|
* @param burst_period Requested time period between consecutive FTM bursts in 100's of milliseconds (allowed values - 0(No pref), 2 - 255)
|
||||||
|
* @param channel Primary channel of the FTM Responder
|
||||||
|
* @param mac MAC address of the FTM Responder
|
||||||
|
* @return true on success
|
||||||
|
*/
|
||||||
|
bool WiFiGenericClass::initiateFTM(uint8_t frm_count, uint16_t burst_period, uint8_t channel, const uint8_t * mac) {
|
||||||
|
wifi_ftm_initiator_cfg_t ftmi_cfg = {
|
||||||
|
.resp_mac = {0,0,0,0,0,0},
|
||||||
|
.channel = channel,
|
||||||
|
.frm_count = frm_count,
|
||||||
|
.burst_period = burst_period,
|
||||||
|
};
|
||||||
|
if(mac != NULL){
|
||||||
|
memcpy(ftmi_cfg.resp_mac, mac, 6);
|
||||||
|
}
|
||||||
|
// Request FTM session with the Responder
|
||||||
|
if (ESP_OK != esp_wifi_ftm_initiate_session(&ftmi_cfg)) {
|
||||||
|
log_e("Failed to initiate FTM session");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------------
|
||||||
// ------------------------------------------------ Generic Network function ---------------------------------------------
|
// ------------------------------------------------ Generic Network function ---------------------------------------------
|
||||||
// -----------------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -51,6 +51,7 @@ typedef enum {
|
|||||||
ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED,
|
ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED,
|
||||||
ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED,
|
ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED,
|
||||||
ARDUINO_EVENT_WIFI_AP_GOT_IP6,
|
ARDUINO_EVENT_WIFI_AP_GOT_IP6,
|
||||||
|
ARDUINO_EVENT_WIFI_FTM_REPORT,
|
||||||
ARDUINO_EVENT_ETH_START,
|
ARDUINO_EVENT_ETH_START,
|
||||||
ARDUINO_EVENT_ETH_STOP,
|
ARDUINO_EVENT_ETH_STOP,
|
||||||
ARDUINO_EVENT_ETH_CONNECTED,
|
ARDUINO_EVENT_ETH_CONNECTED,
|
||||||
@ -86,6 +87,7 @@ typedef union {
|
|||||||
wifi_event_ap_probe_req_rx_t wifi_ap_probereqrecved;
|
wifi_event_ap_probe_req_rx_t wifi_ap_probereqrecved;
|
||||||
wifi_event_ap_staconnected_t wifi_ap_staconnected;
|
wifi_event_ap_staconnected_t wifi_ap_staconnected;
|
||||||
wifi_event_ap_stadisconnected_t wifi_ap_stadisconnected;
|
wifi_event_ap_stadisconnected_t wifi_ap_stadisconnected;
|
||||||
|
wifi_event_ftm_report_t wifi_ftm_report;
|
||||||
ip_event_ap_staipassigned_t wifi_ap_staipassigned;
|
ip_event_ap_staipassigned_t wifi_ap_staipassigned;
|
||||||
ip_event_got_ip_t got_ip;
|
ip_event_got_ip_t got_ip;
|
||||||
ip_event_got_ip6_t got_ip6;
|
ip_event_got_ip6_t got_ip6;
|
||||||
@ -170,6 +172,8 @@ class WiFiGenericClass
|
|||||||
bool setTxPower(wifi_power_t power);
|
bool setTxPower(wifi_power_t power);
|
||||||
wifi_power_t getTxPower();
|
wifi_power_t getTxPower();
|
||||||
|
|
||||||
|
bool initiateFTM(uint8_t frm_count=16, uint16_t burst_period=2, uint8_t channel=0, const uint8_t * mac=NULL);
|
||||||
|
|
||||||
static const char * getHostname();
|
static const char * getHostname();
|
||||||
static bool setHostname(const char * hostname);
|
static bool setHostname(const char * hostname);
|
||||||
static bool hostname(const String& aHostname) { return setHostname(aHostname.c_str()); }
|
static bool hostname(const String& aHostname) { return setHostname(aHostname.c_str()); }
|
||||||
|
Loading…
Reference in New Issue
Block a user