mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'feature/refactor_ftm_code_v5.2' into 'release/v5.2'
Refactor and improve FTM code (Backport v5.2) See merge request espressif/esp-idf!29843
This commit is contained in:
commit
9da552c409
@ -1294,6 +1294,26 @@ esp_err_t esp_wifi_ftm_end_session(void);
|
|||||||
*/
|
*/
|
||||||
esp_err_t esp_wifi_ftm_resp_set_offset(int16_t offset_cm);
|
esp_err_t esp_wifi_ftm_resp_set_offset(int16_t offset_cm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get FTM measurements report copied into a user provided buffer.
|
||||||
|
*
|
||||||
|
* @attention 1. To get the FTM report, user first needs to allocate a buffer of size
|
||||||
|
* (sizeof(wifi_ftm_report_entry_t) * num_entries) where the API will fill up to num_entries
|
||||||
|
* valid FTM measurements in the buffer. Total number of entries can be found in the event
|
||||||
|
* WIFI_EVENT_FTM_REPORT as ftm_report_num_entries
|
||||||
|
* @attention 2. The internal FTM report is freed upon use of this API which means the API can only be used
|
||||||
|
* once afer every FTM session initiated
|
||||||
|
* @attention 3. Passing the buffer as NULL merely frees the FTM report
|
||||||
|
*
|
||||||
|
* @param report Pointer to the buffer for receiving the FTM report
|
||||||
|
* @param num_entries Number of FTM report entries to be filled in the report
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* - ESP_OK: succeed
|
||||||
|
* - others: failed
|
||||||
|
*/
|
||||||
|
esp_err_t esp_wifi_ftm_get_report(wifi_ftm_report_entry_t *report, uint8_t num_entries);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enable or disable 11b rate of specified interface
|
* @brief Enable or disable 11b rate of specified interface
|
||||||
*
|
*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -661,7 +661,9 @@ typedef struct {
|
|||||||
uint8_t resp_mac[6]; /**< MAC address of the FTM Responder */
|
uint8_t resp_mac[6]; /**< MAC address of the FTM Responder */
|
||||||
uint8_t channel; /**< Primary channel of the FTM Responder */
|
uint8_t channel; /**< Primary channel of the FTM Responder */
|
||||||
uint8_t frm_count; /**< No. of FTM frames requested in terms of 4 or 8 bursts (allowed values - 0(No pref), 16, 24, 32, 64) */
|
uint8_t frm_count; /**< No. of FTM frames requested in terms of 4 or 8 bursts (allowed values - 0(No pref), 16, 24, 32, 64) */
|
||||||
uint16_t burst_period; /**< Requested time period between consecutive FTM bursts in 100's of milliseconds (0 - No pref) */
|
uint16_t burst_period; /**< Requested period between FTM bursts in 100's of milliseconds (allowed values 0(No pref) - 100) */
|
||||||
|
bool use_get_report_api; /**< True - Using esp_wifi_ftm_get_report to get FTM report, False - Using ftm_report_data from
|
||||||
|
WIFI_EVENT_FTM_REPORT to get FTM report */
|
||||||
} wifi_ftm_initiator_cfg_t;
|
} wifi_ftm_initiator_cfg_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1015,6 +1017,8 @@ typedef enum {
|
|||||||
FTM_STATUS_CONF_REJECTED, /**< Peer rejected FTM configuration in FTM Request */
|
FTM_STATUS_CONF_REJECTED, /**< Peer rejected FTM configuration in FTM Request */
|
||||||
FTM_STATUS_NO_RESPONSE, /**< Peer did not respond to FTM Requests */
|
FTM_STATUS_NO_RESPONSE, /**< Peer did not respond to FTM Requests */
|
||||||
FTM_STATUS_FAIL, /**< Unknown error during FTM exchange */
|
FTM_STATUS_FAIL, /**< Unknown error during FTM exchange */
|
||||||
|
FTM_STATUS_NO_VALID_MSMT, /**< FTM session did not result in any valid measurements */
|
||||||
|
FTM_STATUS_USER_TERM, /**< User triggered termination */
|
||||||
} wifi_ftm_status_t;
|
} wifi_ftm_status_t;
|
||||||
|
|
||||||
/** Argument structure for */
|
/** Argument structure for */
|
||||||
@ -1035,7 +1039,8 @@ typedef struct {
|
|||||||
uint32_t rtt_raw; /**< Raw average Round-Trip-Time with peer in Nano-Seconds */
|
uint32_t rtt_raw; /**< Raw average Round-Trip-Time with peer in Nano-Seconds */
|
||||||
uint32_t rtt_est; /**< Estimated Round-Trip-Time with peer in Nano-Seconds */
|
uint32_t rtt_est; /**< Estimated Round-Trip-Time with peer in Nano-Seconds */
|
||||||
uint32_t dist_est; /**< Estimated one-way distance in Centi-Meters */
|
uint32_t dist_est; /**< Estimated one-way distance in Centi-Meters */
|
||||||
wifi_ftm_report_entry_t *ftm_report_data; /**< Pointer to FTM Report with multiple entries, should be freed after use */
|
wifi_ftm_report_entry_t *ftm_report_data; /**< Pointer to FTM Report, should be freed after use. Note: Highly recommended
|
||||||
|
to use API esp_wifi_ftm_get_report to get the report instead of using this */
|
||||||
uint8_t ftm_report_num_entries; /**< Number of entries in the FTM Report data */
|
uint8_t ftm_report_num_entries; /**< Number of entries in the FTM Report data */
|
||||||
} wifi_event_ftm_report_t;
|
} wifi_event_ftm_report_t;
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 25e4696bc346576c48d76f9e0c7cf1e6d3de909e
|
Subproject commit bb386048d34c44dbb2295d33b78540ecb8560f8e
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -25,6 +25,9 @@
|
|||||||
#ifdef CONFIG_ESP_WIFI_NAN_ENABLE
|
#ifdef CONFIG_ESP_WIFI_NAN_ENABLE
|
||||||
#include "apps_private/wifi_apps_private.h"
|
#include "apps_private/wifi_apps_private.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_ESP_WIFI_FTM_ENABLE
|
||||||
|
#include "esp_chip_info.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
static bool s_wifi_inited = false;
|
static bool s_wifi_inited = false;
|
||||||
|
|
||||||
@ -318,6 +321,13 @@ esp_err_t esp_wifi_init(const wifi_init_config_t *config)
|
|||||||
#endif
|
#endif
|
||||||
esp_wifi_set_log_level();
|
esp_wifi_set_log_level();
|
||||||
esp_wifi_power_domain_on();
|
esp_wifi_power_domain_on();
|
||||||
|
#ifdef CONFIG_ESP_WIFI_FTM_ENABLE
|
||||||
|
esp_chip_info_t info = {0};
|
||||||
|
esp_chip_info(&info);
|
||||||
|
if (info.model == CHIP_ESP32C6 && info.revision <= 1) {
|
||||||
|
((wifi_init_config_t *)config)->feature_caps &= ~(CONFIG_FEATURE_FTM_INITIATOR_BIT);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
result = esp_wifi_init_internal(config);
|
result = esp_wifi_init_internal(config);
|
||||||
if (result == ESP_OK) {
|
if (result == ESP_OK) {
|
||||||
#if CONFIG_MAC_BB_PD
|
#if CONFIG_MAC_BB_PD
|
||||||
@ -395,9 +405,10 @@ void wifi_apb80m_release(void)
|
|||||||
#endif //CONFIG_PM_ENABLE
|
#endif //CONFIG_PM_ENABLE
|
||||||
|
|
||||||
#ifndef CONFIG_ESP_WIFI_FTM_ENABLE
|
#ifndef CONFIG_ESP_WIFI_FTM_ENABLE
|
||||||
void ieee80211_ftm_attach(void)
|
esp_err_t ieee80211_ftm_attach(void)
|
||||||
{
|
{
|
||||||
/* Do not remove, stub to overwrite weak link in Wi-Fi Lib */
|
/* Do not remove, stub to overwrite weak link in Wi-Fi Lib */
|
||||||
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1325,7 +1325,7 @@ config SOC_WIFI_HW_TSF
|
|||||||
|
|
||||||
config SOC_WIFI_FTM_SUPPORT
|
config SOC_WIFI_FTM_SUPPORT
|
||||||
bool
|
bool
|
||||||
default n
|
default y
|
||||||
|
|
||||||
config SOC_WIFI_GCMP_SUPPORT
|
config SOC_WIFI_GCMP_SUPPORT
|
||||||
bool
|
bool
|
||||||
|
@ -544,7 +544,7 @@
|
|||||||
|
|
||||||
/*------------------------------------ WI-FI CAPS ------------------------------------*/
|
/*------------------------------------ WI-FI CAPS ------------------------------------*/
|
||||||
#define SOC_WIFI_HW_TSF (1) /*!< Support hardware TSF */
|
#define SOC_WIFI_HW_TSF (1) /*!< Support hardware TSF */
|
||||||
#define SOC_WIFI_FTM_SUPPORT (0) /*!< Support FTM */
|
#define SOC_WIFI_FTM_SUPPORT (1) /*!< Support FTM */
|
||||||
#define SOC_WIFI_GCMP_SUPPORT (1) /*!< Support GCMP(GCMP128 and GCMP256) */
|
#define SOC_WIFI_GCMP_SUPPORT (1) /*!< Support GCMP(GCMP128 and GCMP256) */
|
||||||
#define SOC_WIFI_WAPI_SUPPORT (1) /*!< Support WAPI */
|
#define SOC_WIFI_WAPI_SUPPORT (1) /*!< Support WAPI */
|
||||||
#define SOC_WIFI_CSI_SUPPORT (1) /*!< Support CSI */
|
#define SOC_WIFI_CSI_SUPPORT (1) /*!< Support CSI */
|
||||||
|
@ -1745,7 +1745,13 @@ A config option :ref:`CONFIG_ESP_WIFI_11R_SUPPORT` and configuration parameter :
|
|||||||
- {IDF_TARGET_NAME} as FTM Initiator in station mode.
|
- {IDF_TARGET_NAME} as FTM Initiator in station mode.
|
||||||
- {IDF_TARGET_NAME} as FTM Responder in AP mode.
|
- {IDF_TARGET_NAME} as FTM Responder in AP mode.
|
||||||
|
|
||||||
Distance measurement using RTT is not accurate, and factors such as RF interference, multi-path travel, antenna orientation, and lack of calibration increase these inaccuracies. For better results, it is suggested to perform FTM between two ESP32 chip series devices (except ESP32-C2) as station and AP.
|
.. only:: esp32c6
|
||||||
|
|
||||||
|
{IDF_TARGET_NAME} ECO1 and older versions do not support FTM Initiator mode.
|
||||||
|
|
||||||
|
.. attention::
|
||||||
|
|
||||||
|
Distance measurement using RTT is not accurate, and factors such as RF interference, multi-path travel, antenna orientation, and lack of calibration increase these inaccuracies. For better results, it is suggested to perform FTM between two ESP32 chip series devices as station and AP.
|
||||||
|
|
||||||
Refer to ESP-IDF example :idf_file:`examples/wifi/ftm/README.md` for steps on how to set up and perform FTM.
|
Refer to ESP-IDF example :idf_file:`examples/wifi/ftm/README.md` for steps on how to set up and perform FTM.
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 |
|
| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-S2 | ESP32-S3 |
|
||||||
| ----------------- | -------- | -------- | -------- | -------- |
|
| ----------------- | -------- | -------- | -------- | -------- | -------- |
|
||||||
|
|
||||||
# FTM Example
|
# FTM Example
|
||||||
|
|
||||||
|
@ -70,6 +70,8 @@ wifi_config_t g_ap_config = {
|
|||||||
|
|
||||||
#define ETH_ALEN 6
|
#define ETH_ALEN 6
|
||||||
#define MAX_CONNECT_RETRY_ATTEMPTS 5
|
#define MAX_CONNECT_RETRY_ATTEMPTS 5
|
||||||
|
#define DEFAULT_WAIT_TIME_MS (10 * 1000)
|
||||||
|
#define MAX_FTM_BURSTS 8
|
||||||
#define DEFAULT_AP_CHANNEL 1
|
#define DEFAULT_AP_CHANNEL 1
|
||||||
#define DEFAULT_AP_BANDWIDTH 20
|
#define DEFAULT_AP_BANDWIDTH 20
|
||||||
|
|
||||||
@ -85,7 +87,6 @@ static const int DISCONNECTED_BIT = BIT1;
|
|||||||
static EventGroupHandle_t s_ftm_event_group;
|
static EventGroupHandle_t s_ftm_event_group;
|
||||||
static const int FTM_REPORT_BIT = BIT0;
|
static const int FTM_REPORT_BIT = BIT0;
|
||||||
static const int FTM_FAILURE_BIT = BIT1;
|
static const int FTM_FAILURE_BIT = BIT1;
|
||||||
static wifi_ftm_report_entry_t *s_ftm_report;
|
|
||||||
static uint8_t s_ftm_report_num_entries;
|
static uint8_t s_ftm_report_num_entries;
|
||||||
static uint32_t s_rtt_est, s_dist_est;
|
static uint32_t s_rtt_est, s_dist_est;
|
||||||
static bool s_ap_started;
|
static bool s_ap_started;
|
||||||
@ -137,10 +138,12 @@ static void event_handler(void *arg, esp_event_base_t event_base,
|
|||||||
|
|
||||||
s_rtt_est = event->rtt_est;
|
s_rtt_est = event->rtt_est;
|
||||||
s_dist_est = event->dist_est;
|
s_dist_est = event->dist_est;
|
||||||
s_ftm_report = event->ftm_report_data;
|
|
||||||
s_ftm_report_num_entries = event->ftm_report_num_entries;
|
s_ftm_report_num_entries = event->ftm_report_num_entries;
|
||||||
if (event->status == FTM_STATUS_SUCCESS) {
|
if (event->status == FTM_STATUS_SUCCESS) {
|
||||||
xEventGroupSetBits(s_ftm_event_group, FTM_REPORT_BIT);
|
xEventGroupSetBits(s_ftm_event_group, FTM_REPORT_BIT);
|
||||||
|
} else if (event->status == FTM_STATUS_USER_TERM) {
|
||||||
|
/* Do Nothing */
|
||||||
|
ESP_LOGI(TAG_STA, "User terminated FTM procedure");
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG_STA, "FTM procedure with Peer("MACSTR") failed! (Status - %d)",
|
ESP_LOGI(TAG_STA, "FTM procedure with Peer("MACSTR") failed! (Status - %d)",
|
||||||
MAC2STR(event->peer_mac), event->status);
|
MAC2STR(event->peer_mac), event->status);
|
||||||
@ -153,21 +156,38 @@ static void event_handler(void *arg, esp_event_base_t event_base,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ftm_process_report(void)
|
static void ftm_print_report(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *log = NULL;
|
char *log = NULL;
|
||||||
|
wifi_ftm_report_entry_t *ftm_report = NULL;
|
||||||
|
|
||||||
if (s_ftm_report_num_entries == 0)
|
if (s_ftm_report_num_entries == 0) {
|
||||||
|
/* FTM Failure case */
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!g_report_lvl)
|
if (!g_report_lvl) {
|
||||||
return;
|
/* No need to print, just free the internal FTM report */
|
||||||
|
esp_wifi_ftm_get_report(NULL, 0);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ftm_report = malloc(sizeof(wifi_ftm_report_entry_t) * s_ftm_report_num_entries);
|
||||||
|
if (!ftm_report) {
|
||||||
|
ESP_LOGE(TAG_STA, "Failed to alloc buffer for FTM report");
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
bzero(ftm_report, sizeof(wifi_ftm_report_entry_t) * s_ftm_report_num_entries);
|
||||||
|
if (ESP_OK != esp_wifi_ftm_get_report(ftm_report, s_ftm_report_num_entries)) {
|
||||||
|
ESP_LOGE(TAG_STA, "Could not get FTM report");
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
log = malloc(200);
|
log = malloc(200);
|
||||||
if (!log) {
|
if (!log) {
|
||||||
ESP_LOGE(TAG_STA, "Failed to alloc buffer for FTM report");
|
ESP_LOGE(TAG_STA, "Failed to alloc buffer for FTM report");
|
||||||
return;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
bzero(log, 200);
|
bzero(log, 200);
|
||||||
@ -181,24 +201,32 @@ static void ftm_process_report(void)
|
|||||||
|
|
||||||
bzero(log, 200);
|
bzero(log, 200);
|
||||||
if (g_report_lvl & BIT0) {
|
if (g_report_lvl & BIT0) {
|
||||||
log_ptr += sprintf(log_ptr, "%6d|", s_ftm_report[i].dlog_token);
|
log_ptr += sprintf(log_ptr, "%6d|", ftm_report[i].dlog_token);
|
||||||
}
|
}
|
||||||
if (g_report_lvl & BIT1) {
|
if (g_report_lvl & BIT1) {
|
||||||
if (s_ftm_report[i].rtt != UINT32_MAX)
|
if (ftm_report[i].rtt != UINT32_MAX)
|
||||||
log_ptr += sprintf(log_ptr, "%7" PRIi32 " |", s_ftm_report[i].rtt);
|
log_ptr += sprintf(log_ptr, "%7" PRIi32 " |", ftm_report[i].rtt);
|
||||||
else
|
else
|
||||||
log_ptr += sprintf(log_ptr, " INVALID |");
|
log_ptr += sprintf(log_ptr, " INVALID |");
|
||||||
}
|
}
|
||||||
if (g_report_lvl & BIT2) {
|
if (g_report_lvl & BIT2) {
|
||||||
log_ptr += sprintf(log_ptr, "%14llu |%14llu |%14llu |%14llu |", s_ftm_report[i].t1,
|
log_ptr += sprintf(log_ptr, "%14llu |%14llu |%14llu |%14llu |", ftm_report[i].t1,
|
||||||
s_ftm_report[i].t2, s_ftm_report[i].t3, s_ftm_report[i].t4);
|
ftm_report[i].t2, ftm_report[i].t3, ftm_report[i].t4);
|
||||||
}
|
}
|
||||||
if (g_report_lvl & BIT3) {
|
if (g_report_lvl & BIT3) {
|
||||||
log_ptr += sprintf(log_ptr, "%6d |", s_ftm_report[i].rssi);
|
log_ptr += sprintf(log_ptr, "%6d |", ftm_report[i].rssi);
|
||||||
}
|
}
|
||||||
ESP_LOGI(TAG_STA, "|%s", log);
|
ESP_LOGI(TAG_STA, "|%s", log);
|
||||||
}
|
}
|
||||||
free(log);
|
|
||||||
|
exit:
|
||||||
|
if (log) {
|
||||||
|
free(log);
|
||||||
|
}
|
||||||
|
if (ftm_report) {
|
||||||
|
free(ftm_report);
|
||||||
|
}
|
||||||
|
s_ftm_report_num_entries = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialise_wifi(void)
|
void initialise_wifi(void)
|
||||||
@ -245,7 +273,7 @@ static bool wifi_cmd_sta_join(const char *ssid, const char *pass)
|
|||||||
s_reconnect = false;
|
s_reconnect = false;
|
||||||
xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);
|
xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);
|
||||||
ESP_ERROR_CHECK( esp_wifi_disconnect() );
|
ESP_ERROR_CHECK( esp_wifi_disconnect() );
|
||||||
xEventGroupWaitBits(s_wifi_event_group, DISCONNECTED_BIT, 0, 1, portTICK_PERIOD_MS);
|
xEventGroupWaitBits(s_wifi_event_group, DISCONNECTED_BIT, 0, 1, portMAX_DELAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
s_reconnect = true;
|
s_reconnect = true;
|
||||||
@ -271,7 +299,7 @@ static int wifi_cmd_sta(int argc, char **argv)
|
|||||||
s_reconnect = false;
|
s_reconnect = false;
|
||||||
xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);
|
xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);
|
||||||
esp_wifi_disconnect();
|
esp_wifi_disconnect();
|
||||||
xEventGroupWaitBits(s_wifi_event_group, DISCONNECTED_BIT, 0, 1, portTICK_PERIOD_MS);
|
xEventGroupWaitBits(s_wifi_event_group, DISCONNECTED_BIT, 0, 1, portMAX_DELAY);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,11 +489,13 @@ static int wifi_cmd_ftm(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int nerrors = arg_parse(argc, argv, (void **) &ftm_args);
|
int nerrors = arg_parse(argc, argv, (void **) &ftm_args);
|
||||||
wifi_ap_record_t *ap_record;
|
wifi_ap_record_t *ap_record;
|
||||||
|
uint32_t wait_time_ms = DEFAULT_WAIT_TIME_MS;
|
||||||
EventBits_t bits;
|
EventBits_t bits;
|
||||||
|
|
||||||
wifi_ftm_initiator_cfg_t ftmi_cfg = {
|
wifi_ftm_initiator_cfg_t ftmi_cfg = {
|
||||||
.frm_count = 32,
|
.frm_count = 32,
|
||||||
.burst_period = 2,
|
.burst_period = 2,
|
||||||
|
.use_get_report_api = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (nerrors != 0) {
|
if (nerrors != 0) {
|
||||||
@ -509,11 +539,11 @@ static int wifi_cmd_ftm(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ftm_args.burst_period->count != 0) {
|
if (ftm_args.burst_period->count != 0) {
|
||||||
if (ftm_args.burst_period->ival[0] >= 2 &&
|
if (ftm_args.burst_period->ival[0] >= 0 &&
|
||||||
ftm_args.burst_period->ival[0] < 256) {
|
ftm_args.burst_period->ival[0] <= 100) {
|
||||||
ftmi_cfg.burst_period = ftm_args.burst_period->ival[0];
|
ftmi_cfg.burst_period = ftm_args.burst_period->ival[0];
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGE(TAG_STA, "Invalid Burst Period! Valid range is 2-255");
|
ESP_LOGE(TAG_STA, "Invalid Burst Period! Valid range is 0-100");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -526,18 +556,24 @@ static int wifi_cmd_ftm(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ftmi_cfg.burst_period) {
|
||||||
|
/* Wait at least double the duration of maximum FTM bursts */
|
||||||
|
wait_time_ms = (ftmi_cfg.burst_period * 100) * (MAX_FTM_BURSTS * 2);
|
||||||
|
}
|
||||||
bits = xEventGroupWaitBits(s_ftm_event_group, FTM_REPORT_BIT | FTM_FAILURE_BIT,
|
bits = xEventGroupWaitBits(s_ftm_event_group, FTM_REPORT_BIT | FTM_FAILURE_BIT,
|
||||||
pdTRUE, pdFALSE, portMAX_DELAY);
|
pdTRUE, pdFALSE, wait_time_ms / portTICK_PERIOD_MS);
|
||||||
/* Processing data from FTM session */
|
|
||||||
ftm_process_report();
|
|
||||||
free(s_ftm_report);
|
|
||||||
s_ftm_report = NULL;
|
|
||||||
s_ftm_report_num_entries = 0;
|
|
||||||
if (bits & FTM_REPORT_BIT) {
|
if (bits & FTM_REPORT_BIT) {
|
||||||
|
/* Print detailed data from FTM session */
|
||||||
|
ftm_print_report();
|
||||||
ESP_LOGI(TAG_STA, "Estimated RTT - %" PRId32 " nSec, Estimated Distance - %" PRId32 ".%02" PRId32 " meters",
|
ESP_LOGI(TAG_STA, "Estimated RTT - %" PRId32 " nSec, Estimated Distance - %" PRId32 ".%02" PRId32 " meters",
|
||||||
s_rtt_est, s_dist_est / 100, s_dist_est % 100);
|
s_rtt_est, s_dist_est / 100, s_dist_est % 100);
|
||||||
|
} else if (bits & FTM_FAILURE_BIT) {
|
||||||
|
/* FTM Failure case */
|
||||||
|
ESP_LOGE(TAG_STA, "FTM procedure failed!");
|
||||||
} else {
|
} else {
|
||||||
/* Failure case */
|
/* Timeout, end session gracefully */
|
||||||
|
ESP_LOGE(TAG_STA, "FTM procedure timed out!");
|
||||||
|
esp_wifi_ftm_end_session();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -632,7 +668,7 @@ void register_wifi(void)
|
|||||||
ftm_args.initiator = arg_lit0("I", "ftm_initiator", "FTM Initiator mode");
|
ftm_args.initiator = arg_lit0("I", "ftm_initiator", "FTM Initiator mode");
|
||||||
ftm_args.ssid = arg_str0("s", "ssid", "SSID", "SSID of AP");
|
ftm_args.ssid = arg_str0("s", "ssid", "SSID", "SSID of AP");
|
||||||
ftm_args.frm_count = arg_int0("c", "frm_count", "<0/8/16/24/32/64>", "FTM frames to be exchanged (0: No preference)");
|
ftm_args.frm_count = arg_int0("c", "frm_count", "<0/8/16/24/32/64>", "FTM frames to be exchanged (0: No preference)");
|
||||||
ftm_args.burst_period = arg_int0("p", "burst_period", "<2-255 (x 100 mSec)>", "Periodicity of FTM bursts in 100's of miliseconds (0: No preference)");
|
ftm_args.burst_period = arg_int0("p", "burst_period", "<0-100 (x 100 mSec)>", "Periodicity of FTM bursts in 100's of miliseconds (0: No preference)");
|
||||||
/* FTM Responder commands */
|
/* FTM Responder commands */
|
||||||
ftm_args.responder = arg_lit0("R", "ftm_responder", "FTM Responder mode");
|
ftm_args.responder = arg_lit0("R", "ftm_responder", "FTM Responder mode");
|
||||||
ftm_args.enable = arg_lit0("e", "enable", "Restart SoftAP with FTM enabled");
|
ftm_args.enable = arg_lit0("e", "enable", "Restart SoftAP with FTM enabled");
|
||||||
|
Loading…
Reference in New Issue
Block a user