mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 12:14:32 +02:00
feat(802.15.4): IEEE802.15.4 add rx buffer statistic
This commit is contained in:
@@ -97,17 +97,31 @@ menu "IEEE 802.15.4"
|
|||||||
Enabling this option allows different kinds of IEEE802154 debug output.
|
Enabling this option allows different kinds of IEEE802154 debug output.
|
||||||
All IEEE802154 debug features increase the size of the final binary.
|
All IEEE802154 debug features increase the size of the final binary.
|
||||||
|
|
||||||
config IEEE802154_ASSERT
|
config IEEE802154_RX_BUFFER_STATISTIC
|
||||||
bool "Enrich the assert information with IEEE802154 state and event"
|
bool "Rx buffer statistic"
|
||||||
depends on IEEE802154_DEBUG
|
depends on IEEE802154_DEBUG
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Enabling this option to add some probe codes in the driver, and these informations
|
Enabling this option to count IEEE802154 rx buffer when allocating or freeing.
|
||||||
will be printed when assert.
|
|
||||||
|
config IEEE802154_ASSERT
|
||||||
|
bool "Enrich the assert information"
|
||||||
|
depends on IEEE802154_DEBUG
|
||||||
|
select IEEE802154_RECORD
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Enabling this option to print more information when assert.
|
||||||
|
|
||||||
|
config IEEE802154_RECORD
|
||||||
|
bool "Record the information with IEEE802154 state and event"
|
||||||
|
depends on IEEE802154_DEBUG
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Enabling this option to add some probe codes in the driver, and record these information.
|
||||||
|
|
||||||
config IEEE802154_RECORD_EVENT
|
config IEEE802154_RECORD_EVENT
|
||||||
bool "Enable record event information for debugging"
|
bool "Enable record event information for debugging"
|
||||||
depends on IEEE802154_DEBUG
|
depends on IEEE802154_RECORD
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Enabling this option to record event, when assert, the recorded event will be printed.
|
Enabling this option to record event, when assert, the recorded event will be printed.
|
||||||
@@ -122,7 +136,7 @@ menu "IEEE 802.15.4"
|
|||||||
|
|
||||||
config IEEE802154_RECORD_STATE
|
config IEEE802154_RECORD_STATE
|
||||||
bool "Enable record state information for debugging"
|
bool "Enable record state information for debugging"
|
||||||
depends on IEEE802154_DEBUG
|
depends on IEEE802154_RECORD
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Enabling this option to record state, when assert, the recorded state will be printed.
|
Enabling this option to record state, when assert, the recorded state will be printed.
|
||||||
@@ -137,7 +151,7 @@ menu "IEEE 802.15.4"
|
|||||||
|
|
||||||
config IEEE802154_RECORD_CMD
|
config IEEE802154_RECORD_CMD
|
||||||
bool "Enable record command information for debugging"
|
bool "Enable record command information for debugging"
|
||||||
depends on IEEE802154_DEBUG
|
depends on IEEE802154_RECORD
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Enabling this option to record the command, when assert, the recorded
|
Enabling this option to record the command, when assert, the recorded
|
||||||
@@ -153,7 +167,7 @@ menu "IEEE 802.15.4"
|
|||||||
|
|
||||||
config IEEE802154_RECORD_ABORT
|
config IEEE802154_RECORD_ABORT
|
||||||
bool "Enable record abort information for debugging"
|
bool "Enable record abort information for debugging"
|
||||||
depends on IEEE802154_DEBUG
|
depends on IEEE802154_RECORD
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Enabling this option to record the abort, when assert, the recorded
|
Enabling this option to record the abort, when assert, the recorded
|
||||||
|
@@ -171,8 +171,8 @@ static char *ieee80154_tx_abort_reason_string[] = {
|
|||||||
|
|
||||||
#endif // CONFIG_IEEE802154_RECORD_EVENT
|
#endif // CONFIG_IEEE802154_RECORD_EVENT
|
||||||
|
|
||||||
#if CONFIG_IEEE802154_ASSERT
|
#if CONFIG_IEEE802154_RECORD
|
||||||
void ieee802154_assert_print(void)
|
void ieee802154_record_print(void)
|
||||||
{
|
{
|
||||||
#if CONFIG_IEEE802154_RECORD_EVENT
|
#if CONFIG_IEEE802154_RECORD_EVENT
|
||||||
ESP_EARLY_LOGW(IEEE802154_TAG, "Print the record event, current event index: %d", g_ieee802154_probe.event_index);
|
ESP_EARLY_LOGW(IEEE802154_TAG, "Print the record event, current event index: %d", g_ieee802154_probe.event_index);
|
||||||
@@ -235,7 +235,7 @@ void ieee802154_assert_print(void)
|
|||||||
ESP_EARLY_LOGW(IEEE802154_TAG,"Print the record abort done.");
|
ESP_EARLY_LOGW(IEEE802154_TAG,"Print the record abort done.");
|
||||||
#endif // CONFIG_IEEE802154_RECORD_ABORT
|
#endif // CONFIG_IEEE802154_RECORD_ABORT
|
||||||
}
|
}
|
||||||
#endif // CONFIG_IEEE802154_ASSERT
|
#endif // CONFIG_IEEE802154_RECORD
|
||||||
|
|
||||||
#if CONFIG_IEEE802154_TXRX_STATISTIC
|
#if CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
static ieee802154_txrx_statistic_t s_ieee802154_txrx_statistic;
|
static ieee802154_txrx_statistic_t s_ieee802154_txrx_statistic;
|
||||||
@@ -370,4 +370,47 @@ void ieee802154_txrx_statistic_print(void)
|
|||||||
|
|
||||||
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
#define IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL 10
|
||||||
|
#define IEEE802154_RX_BUFFER_GET_USED_LEVEL(a) (((a) * IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL) / (CONFIG_IEEE802154_RX_BUFFER_SIZE + 1))
|
||||||
|
static uint16_t s_rx_buffer_used_nums = 0;
|
||||||
|
static uint64_t s_rx_buffer_used_water_level[IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL + 1];
|
||||||
|
void ieee802154_rx_buffer_statistic_is_free(bool is_free)
|
||||||
|
{
|
||||||
|
if (is_free) {
|
||||||
|
s_rx_buffer_used_nums--;
|
||||||
|
} else {
|
||||||
|
s_rx_buffer_used_nums++;
|
||||||
|
// (CONFIG_IEEE802154_RX_BUFFER_SIZE + 1) means buffer full.
|
||||||
|
if (s_rx_buffer_used_nums > (CONFIG_IEEE802154_RX_BUFFER_SIZE + 1)) {
|
||||||
|
s_rx_buffer_used_nums = CONFIG_IEEE802154_RX_BUFFER_SIZE + 1;
|
||||||
|
}
|
||||||
|
s_rx_buffer_used_water_level[IEEE802154_RX_BUFFER_GET_USED_LEVEL(s_rx_buffer_used_nums)]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ieee802154_rx_buffer_statistic_clear(void)
|
||||||
|
{
|
||||||
|
memset((void*)s_rx_buffer_used_water_level, 0, sizeof(uint64_t)*(IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ieee802154_rx_buffer_statistic_printf(void)
|
||||||
|
{
|
||||||
|
uint64_t total_times = 0;
|
||||||
|
for (uint8_t i = 0; i < (IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL + 1); i++) {
|
||||||
|
total_times += s_rx_buffer_used_water_level[i];
|
||||||
|
}
|
||||||
|
ESP_LOGW(IEEE802154_TAG, "+--------------------+-------------------------+-------------------------+");
|
||||||
|
ESP_LOGW(IEEE802154_TAG, "|%-20s|%-25s|%-25u|", "rx buff total size:", "", CONFIG_IEEE802154_RX_BUFFER_SIZE);
|
||||||
|
ESP_LOGW(IEEE802154_TAG, "|%-20s|%-25s|%-25llu|", "buffer alloc times:", "", total_times);
|
||||||
|
ESP_LOGW(IEEE802154_TAG, "+--------------------+-------------------------+-------------------------+");
|
||||||
|
for (uint8_t i = 0; i < (IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL); i++) {
|
||||||
|
ESP_LOGW(IEEE802154_TAG, "|%-20s|%4d%%%5s%4d%%%-10s|%-15llu%9.2f%%|", "", ((i) * 100 / IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL), "~", ((i + 1) * 100 / IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL), " used:", s_rx_buffer_used_water_level[i], ((float)s_rx_buffer_used_water_level[i] / (float)total_times)*100);
|
||||||
|
}
|
||||||
|
ESP_LOGW(IEEE802154_TAG, "|%-20s|%-25s|%-15llu%9.2f%%|", "", "full used:", s_rx_buffer_used_water_level[IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL], ((float)s_rx_buffer_used_water_level[IEEE802154_RX_BUFFER_USED_TOTAL_LEVEL] / (float)total_times)*100);
|
||||||
|
ESP_LOGW(IEEE802154_TAG, "+--------------------+-------------------------+-------------------------+");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
|
||||||
#endif // CONFIG_IEEE802154_DEBUG
|
#endif // CONFIG_IEEE802154_DEBUG
|
||||||
|
@@ -87,7 +87,10 @@ static pending_tx_t s_pending_tx = { 0 };
|
|||||||
static void ieee802154_receive_done(uint8_t *data, esp_ieee802154_frame_info_t *frame_info)
|
static void ieee802154_receive_done(uint8_t *data, esp_ieee802154_frame_info_t *frame_info)
|
||||||
{
|
{
|
||||||
// If the RX done packet is written in the stub buffer, drop it silently.
|
// If the RX done packet is written in the stub buffer, drop it silently.
|
||||||
if (s_rx_index != CONFIG_IEEE802154_RX_BUFFER_SIZE) {
|
IEEE802154_RX_BUFFER_STAT_IS_FREE(false);
|
||||||
|
if (s_rx_index == CONFIG_IEEE802154_RX_BUFFER_SIZE) {
|
||||||
|
esp_rom_printf("receive buffer full, drop the current frame.\n");
|
||||||
|
} else {
|
||||||
// Otherwise, post it to the upper layer.
|
// Otherwise, post it to the upper layer.
|
||||||
// Ignore bit8 for the frame length, due to the max frame length is 127 based 802.15.4 spec.
|
// Ignore bit8 for the frame length, due to the max frame length is 127 based 802.15.4 spec.
|
||||||
data[0] = data[0] & 0x7f;
|
data[0] = data[0] & 0x7f;
|
||||||
@@ -99,6 +102,7 @@ static void ieee802154_receive_done(uint8_t *data, esp_ieee802154_frame_info_t *
|
|||||||
static void ieee802154_transmit_done(const uint8_t *frame, const uint8_t *ack, esp_ieee802154_frame_info_t *ack_frame_info)
|
static void ieee802154_transmit_done(const uint8_t *frame, const uint8_t *ack, esp_ieee802154_frame_info_t *ack_frame_info)
|
||||||
{
|
{
|
||||||
if (ack && ack_frame_info) {
|
if (ack && ack_frame_info) {
|
||||||
|
IEEE802154_RX_BUFFER_STAT_IS_FREE(false);
|
||||||
if (s_rx_index == CONFIG_IEEE802154_RX_BUFFER_SIZE) {
|
if (s_rx_index == CONFIG_IEEE802154_RX_BUFFER_SIZE) {
|
||||||
esp_ieee802154_transmit_failed(frame, ESP_IEEE802154_TX_ERR_NO_ACK);
|
esp_ieee802154_transmit_failed(frame, ESP_IEEE802154_TX_ERR_NO_ACK);
|
||||||
} else {
|
} else {
|
||||||
@@ -118,6 +122,7 @@ esp_err_t ieee802154_receive_handle_done(const uint8_t *data)
|
|||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
s_rx_frame_info[size / IEEE802154_RX_FRAME_SIZE].process = false;
|
s_rx_frame_info[size / IEEE802154_RX_FRAME_SIZE].process = false;
|
||||||
|
IEEE802154_RX_BUFFER_STAT_IS_FREE(true);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2020-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2020-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -416,3 +416,22 @@ void esp_ieee802154_txrx_statistic_print(void)
|
|||||||
ieee802154_txrx_statistic_print();
|
ieee802154_txrx_statistic_print();
|
||||||
}
|
}
|
||||||
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
void esp_ieee802154_rx_buffer_statistic_clear(void)
|
||||||
|
{
|
||||||
|
ieee802154_rx_buffer_statistic_clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp_ieee802154_rx_buffer_statistic_printf(void)
|
||||||
|
{
|
||||||
|
ieee802154_rx_buffer_statistic_printf();
|
||||||
|
}
|
||||||
|
#endif // CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RECORD
|
||||||
|
void esp_ieee802154_record_print(void)
|
||||||
|
{
|
||||||
|
ieee802154_record_print();
|
||||||
|
}
|
||||||
|
#endif // CONFIG_IEEE802154_RECORD
|
||||||
|
@@ -623,6 +623,29 @@ void esp_ieee802154_txrx_statistic_clear(void);
|
|||||||
void esp_ieee802154_txrx_statistic_print(void);
|
void esp_ieee802154_txrx_statistic_print(void);
|
||||||
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Print the current IEEE802.15.4 rx buffer statistic.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void esp_ieee802154_rx_buffer_statistic_clear(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear the current IEEE802.15.4 rx buffer statistic.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void esp_ieee802154_rx_buffer_statistic_printf(void);
|
||||||
|
#endif // CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RECORD
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Print the current IEEE802.15.4 event/command/state record.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void esp_ieee802154_record_print(void);
|
||||||
|
#endif // CONFIG_IEEE802154_RECORD
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -168,19 +168,27 @@ typedef struct {
|
|||||||
|
|
||||||
extern ieee802154_probe_info_t g_ieee802154_probe;
|
extern ieee802154_probe_info_t g_ieee802154_probe;
|
||||||
|
|
||||||
#if CONFIG_IEEE802154_ASSERT
|
#if CONFIG_IEEE802154_RECORD
|
||||||
/**
|
/**
|
||||||
* @brief This function print rich information, which is useful for debug.
|
* @brief This function print rich information, which is useful for debug.
|
||||||
* Only can be used when `IEEE802154_ASSERT` is enabled.
|
* Only can be used when `IEEE802154_ASSERT` is enabled.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void ieee802154_assert_print(void);
|
void ieee802154_record_print(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_ASSERT
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RECORD
|
||||||
#define IEEE802154_ASSERT(a) do { \
|
#define IEEE802154_ASSERT(a) do { \
|
||||||
if(unlikely(!(a))) { \
|
if(unlikely(!(a))) { \
|
||||||
ieee802154_assert_print(); \
|
ieee802154_record_print(); \
|
||||||
assert(a); \
|
assert(a); \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
#else
|
||||||
|
#error "CONFIG_IEEE802154_RECORD must be enabled when CONFIG_IEEE802154_ASSERT enabled"
|
||||||
|
#endif
|
||||||
#else // CONFIG_IEEE802154_ASSERT
|
#else // CONFIG_IEEE802154_ASSERT
|
||||||
#define IEEE802154_ASSERT(a) assert(a)
|
#define IEEE802154_ASSERT(a) assert(a)
|
||||||
#endif // CONFIG_IEEE802154_ASSERT
|
#endif // CONFIG_IEEE802154_ASSERT
|
||||||
@@ -249,6 +257,33 @@ void ieee802154_tx_break_coex_nums_update(void);
|
|||||||
#define IEEE802154_TX_BREAK_COEX_NUMS_UPDATE()
|
#define IEEE802154_TX_BREAK_COEX_NUMS_UPDATE()
|
||||||
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Count the rx buffer used.
|
||||||
|
*
|
||||||
|
* @param[in] is_free True for rx buffer frees and false for rx buffer allocates.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void ieee802154_rx_buffer_statistic_is_free(bool is_free);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clear the current IEEE802.15.4 rx buffer statistic.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void ieee802154_rx_buffer_statistic_clear(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Print the current IEEE802.15.4 rx buffer statistic.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void ieee802154_rx_buffer_statistic_printf(void);
|
||||||
|
|
||||||
|
#define IEEE802154_RX_BUFFER_STAT_IS_FREE(a) ieee802154_rx_buffer_statistic_is_free(a)
|
||||||
|
#else
|
||||||
|
#define IEEE802154_RX_BUFFER_STAT_IS_FREE(a)
|
||||||
|
#endif
|
||||||
|
|
||||||
// TODO: replace etm code using common interface
|
// TODO: replace etm code using common interface
|
||||||
|
|
||||||
#define IEEE802154_ETM_CHANNEL0 0
|
#define IEEE802154_ETM_CHANNEL0 0
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
*/
|
*/
|
||||||
|
@@ -0,0 +1,3 @@
|
|||||||
|
idf_component_register(SRCS "ieee802154_stats.c"
|
||||||
|
INCLUDE_DIRS "."
|
||||||
|
REQUIRES ieee802154 console esp_phy)
|
@@ -0,0 +1,174 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "esp_ieee802154.h"
|
||||||
|
#include "esp_console.h"
|
||||||
|
#include "argtable3/argtable3.h"
|
||||||
|
#include "ieee802154_stats.h"
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_DEBUG
|
||||||
|
static const char* TAG = "i154cmd";
|
||||||
|
#if CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
static void register_rx_buffer_statistic(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
|
static void register_txrx_statistic(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RECORD
|
||||||
|
static void register_record(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void register_ieee802154_debug_cmd(void)
|
||||||
|
{
|
||||||
|
#if CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
register_rx_buffer_statistic();
|
||||||
|
#endif
|
||||||
|
#if CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
|
register_txrx_statistic();
|
||||||
|
#endif
|
||||||
|
#if CONFIG_IEEE802154_RECORD
|
||||||
|
register_record();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_DEBUG
|
||||||
|
#if CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
static struct {
|
||||||
|
struct arg_lit *clear;
|
||||||
|
struct arg_lit *print;
|
||||||
|
struct arg_end *end;
|
||||||
|
} rx_buff_stat_args;
|
||||||
|
|
||||||
|
static int process_rx_buffer_statistic(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int nerrors = arg_parse(argc, argv, (void **) &rx_buff_stat_args);
|
||||||
|
if (nerrors != 0) {
|
||||||
|
arg_print_errors(stderr, rx_buff_stat_args.end, argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (rx_buff_stat_args.print->count) {
|
||||||
|
esp_ieee802154_rx_buffer_statistic_printf();
|
||||||
|
}
|
||||||
|
if (rx_buff_stat_args.clear->count) {
|
||||||
|
esp_ieee802154_rx_buffer_statistic_clear();
|
||||||
|
}
|
||||||
|
if (!rx_buff_stat_args.print->count && !rx_buff_stat_args.clear->count) {
|
||||||
|
ESP_LOGE(TAG, "no valid arguments");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void register_rx_buffer_statistic(void)
|
||||||
|
{
|
||||||
|
rx_buff_stat_args.print =
|
||||||
|
arg_lit0("p", "print", "print the result of rx buffer statistic");
|
||||||
|
rx_buff_stat_args.clear =
|
||||||
|
arg_lit0("c", "clear", "clear the result of rx buffer statistic");
|
||||||
|
rx_buff_stat_args.end = arg_end(2);
|
||||||
|
|
||||||
|
const esp_console_cmd_t cmd = {
|
||||||
|
.command = "rxbufstat",
|
||||||
|
.help = "rx buffer statistic",
|
||||||
|
.hint = NULL,
|
||||||
|
.func = &process_rx_buffer_statistic,
|
||||||
|
.argtable = &rx_buff_stat_args
|
||||||
|
};
|
||||||
|
ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
|
||||||
|
}
|
||||||
|
#endif // CONFIG_IEEE802154_RX_BUFFER_STATISTIC
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
|
static struct {
|
||||||
|
struct arg_lit *clear;
|
||||||
|
struct arg_lit *print;
|
||||||
|
struct arg_end *end;
|
||||||
|
} txrx_stat_args;
|
||||||
|
|
||||||
|
static int process_txrx_statistic(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int nerrors = arg_parse(argc, argv, (void **) &txrx_stat_args);
|
||||||
|
if (nerrors != 0) {
|
||||||
|
arg_print_errors(stderr, txrx_stat_args.end, argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (txrx_stat_args.print->count) {
|
||||||
|
esp_ieee802154_txrx_statistic_print();
|
||||||
|
}
|
||||||
|
if (txrx_stat_args.clear->count) {
|
||||||
|
esp_ieee802154_txrx_statistic_clear();
|
||||||
|
}
|
||||||
|
if (!txrx_stat_args.print->count && !txrx_stat_args.clear->count) {
|
||||||
|
ESP_LOGE(TAG, "no valid arguments");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void register_txrx_statistic(void)
|
||||||
|
{
|
||||||
|
txrx_stat_args.print =
|
||||||
|
arg_lit0("p", "print", "print the result of txrx statistic");
|
||||||
|
txrx_stat_args.clear =
|
||||||
|
arg_lit0("c", "clear", "clear the result of txrx statistic");
|
||||||
|
txrx_stat_args.end = arg_end(2);
|
||||||
|
|
||||||
|
const esp_console_cmd_t cmd = {
|
||||||
|
.command = "txrxstat",
|
||||||
|
.help = "txrx statistic",
|
||||||
|
.hint = NULL,
|
||||||
|
.func = &process_txrx_statistic,
|
||||||
|
.argtable = &txrx_stat_args
|
||||||
|
};
|
||||||
|
ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
|
||||||
|
}
|
||||||
|
#endif // CONFIG_IEEE802154_TXRX_STATISTIC
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_RECORD
|
||||||
|
static struct {
|
||||||
|
struct arg_lit *print;
|
||||||
|
struct arg_end *end;
|
||||||
|
} record_args;
|
||||||
|
|
||||||
|
static int process_record(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int nerrors = arg_parse(argc, argv, (void **) &record_args);
|
||||||
|
if (nerrors != 0) {
|
||||||
|
arg_print_errors(stderr, record_args.end, argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (record_args.print->count) {
|
||||||
|
esp_ieee802154_record_print();
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(TAG, "no valid arguments");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void register_record(void)
|
||||||
|
{
|
||||||
|
record_args.print =
|
||||||
|
arg_lit0("p", "print", "print the result of the recording");
|
||||||
|
record_args.end = arg_end(2);
|
||||||
|
|
||||||
|
const esp_console_cmd_t cmd = {
|
||||||
|
.command = "record",
|
||||||
|
.help = "print the recorded IEEE802154 state/event/cmd etc.",
|
||||||
|
.hint = NULL,
|
||||||
|
.func = &process_record,
|
||||||
|
.argtable = &record_args
|
||||||
|
};
|
||||||
|
ESP_ERROR_CHECK(esp_console_cmd_register(&cmd));
|
||||||
|
}
|
||||||
|
#endif // CONFIG_IEEE802154_RECORD
|
||||||
|
#endif // CONFIG_IEEE802154_DEBUG
|
@@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if CONFIG_IEEE802154_DEBUG
|
||||||
|
void register_ieee802154_debug_cmd(void);
|
||||||
|
#endif
|
@@ -6,5 +6,6 @@ set(include "."
|
|||||||
# In order for the cases defined by `TEST_CASE` to be linked into the final elf,
|
# In order for the cases defined by `TEST_CASE` to be linked into the final elf,
|
||||||
# the component can be registered as WHOLE_ARCHIVE
|
# the component can be registered as WHOLE_ARCHIVE
|
||||||
idf_component_register(SRCS ${srcs}
|
idf_component_register(SRCS ${srcs}
|
||||||
PRIV_REQUIRES ieee802154 console fatfs nvs_flash esp_phy cmd_ieee802154 cmd_system
|
PRIV_REQUIRES ieee802154 console fatfs nvs_flash esp_phy cmd_ieee802154
|
||||||
|
cmd_ieee802154_stats cmd_system
|
||||||
WHOLE_ARCHIVE)
|
WHOLE_ARCHIVE)
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
#include "esp_ieee802154.h"
|
#include "esp_ieee802154.h"
|
||||||
#include "esp_phy_init.h"
|
#include "esp_phy_init.h"
|
||||||
#include "cmd_system.h"
|
#include "cmd_system.h"
|
||||||
|
#include "ieee802154_stats.h"
|
||||||
|
|
||||||
#define PROMPT_STR "ieee802154"
|
#define PROMPT_STR "ieee802154"
|
||||||
|
|
||||||
@@ -46,6 +47,9 @@ void app_main(void)
|
|||||||
esp_console_register_help_command();
|
esp_console_register_help_command();
|
||||||
register_ieee802154_cmd();
|
register_ieee802154_cmd();
|
||||||
register_system_common();
|
register_system_common();
|
||||||
|
#if CONFIG_IEEE802154_DEBUG
|
||||||
|
register_ieee802154_debug_cmd();
|
||||||
|
#endif
|
||||||
|
|
||||||
esp_console_dev_uart_config_t hw_config = ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT();
|
esp_console_dev_uart_config_t hw_config = ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT();
|
||||||
ESP_ERROR_CHECK(esp_console_new_repl_uart(&hw_config, &repl_config, &repl));
|
ESP_ERROR_CHECK(esp_console_new_repl_uart(&hw_config, &repl_config, &repl));
|
||||||
|
Reference in New Issue
Block a user