本文主要是介绍ESP-CSI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在frameworks\esp-idf-v5.2.1\components\esp_wifi\include\esp_wifi_types.h有关于csi的结构体数据:
typedef struct {wifi_pkt_rx_ctrl_t rx_ctrl;/**< 接收到的 CSI 数据的无线数据包元数据头 */uint8_t mac[6]; /**< CSI 数据的源 MAC 地址 */uint8_t dmac[6]; /**< CSI 数据的目的 MAC 地址 */bool first_word_invalid; /**< CSI 数据的前四个字节是否无效,true 表示前四个字节由于硬件限制而无效 */int8_t *buf; /**< CSI 数据的有效缓冲区 */uint16_t len; /**< CSI 数据的有效长度 */uint8_t *hdr; /**< Wi-Fi 数据包的头部 */uint8_t *payload; /**< Wi-Fi 数据包的有效载荷 */uint16_t payload_len; /**< Wi-Fi 数据包的有效载荷长度 */
} wifi_csi_info_t;
其中wifi_pkt_rx_ctrl_t 内容为:
typedef struct {signed rssi:8; /**< 接收到的数据包的接收信号强度指示(RSSI),单位:dBm */unsigned rate:5; /**< 数据包的物理层速率编码。仅适用于非 HT(11bg) 数据包 */unsigned :1; /**< 保留位 */unsigned sig_mode:2; /**< 接收到的数据包的协议类型,0: 非 HT(11bg) 数据包;1: HT(11n) 数据包;3: VHT(11ac) 数据包 */unsigned :16; /**< 保留位 */unsigned mcs:7; /**< 调制编码方案。如果是 HT(11n) 数据包,表示调制方式,范围从 0 到 76(MSC0 ~ MCS76) */unsigned cwb:1; /**< 数据包的信道带宽。0: 20MHz; 1: 40MHz */unsigned :16; /**< 保留位 */unsigned smoothing:1; /**< 设置为 1 表示推荐使用信道估计平滑。设置为 0 表示仅推荐使用每个载波独立的(非平滑的)信道估计。 */unsigned not_sounding:1; /**< 设置为 0 表示 PPDU 是 sounding PPDU。设置为 1 表示 PPDU 不是 sounding PPDU。sounding PPDU 用于接收方进行信道估计 */unsigned :1; /**< 保留位 */unsigned aggregation:1; /**< 数据包聚合。0: MPDU 数据包; 1: AMPDU 数据包 */unsigned stbc:2; /**< 空时分组编码(STBC)。0: 非 STBC 数据包; 1: STBC 数据包 */unsigned fec_coding:1; /**< 前向错误纠正(FEC)。对于是 LDPC 的 11n 数据包设置标志 */unsigned sgi:1; /**< 短导频间隔(SGI)。0: 长 GI; 1: 短 GI */
#if CONFIG_IDF_TARGET_ESP32signed noise_floor:8; /**< 无线频率模块(RF)的噪声水平。单位:dBm */
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2unsigned :8; /**< 保留位 */
#endifunsigned ampdu_cnt:8; /**< 在 AMPDU 中聚合的子帧数 */unsigned channel:4; /**< 接收到该数据包的主要信道 */unsigned secondary_channel:4; /**< 接收到该数据包的次要信道。0: 无; 1: 上方; 2: 下方 */unsigned :8; /**< 保留位 */unsigned timestamp:32; /**< 时间戳。接收到该数据包时的本地时间。仅当未启用调制解调器睡眠或轻度睡眠时才精确。单位:微秒 */unsigned :32; /**< 保留位 */
#if CONFIG_IDF_TARGET_ESP32S2unsigned :32; /**< 保留位 */
#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2signed noise_floor:8; /**< 无线频率模块(RF)的噪声水平。单位:dBm */unsigned :24; /**< 保留位 */unsigned :32; /**< 保留位 */
#endifunsigned :31; /**< 保留位 */unsigned ant:1; /**< 接收到该数据包的天线编号。0: Wi-Fi 天线 0; 1: Wi-Fi 天线 1 */
#if CONFIG_IDF_TARGET_ESP32S2signed noise_floor:8; /**< 无线频率模块(RF)的噪声水平。单位:dBm */unsigned :24; /**< 保留位 */
#elif CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C2unsigned :32; /**< 保留位 */unsigned :32; /**< 保留位 */
#endifunsigned sig_len:12; /**< 数据包长度,包括帧校验序列(FCS) */unsigned :12; /**< 保留位 */unsigned rx_state:8; /**< 数据包的状态。0: 无错误; 其他: 不公开的错误号 */
} wifi_pkt_rx_ctrl_t;
#endif
这篇关于ESP-CSI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!