doubao_chat/apps/common/net/testbox/include/wbcp.h

252 lines
6.9 KiB
C

#ifndef _WIFIBOX_WBCP_H_
#define _WIFIBOX_WBCP_H_
#include "typedef.h"
#include "asm/crc16.h"
// ==================================== WBCP 配置 ====================================
#define WBCP_CONN_SERIAL ("WIFIBOX")
#define WBCP_VERSION_ID (1) //版本号
#define MAC_ADDR_SIZE (6) //MAC地址大小
#define WBCP_WAIT_ACK_TIMEOUT (50) //等待ack的超时时间(ticks)
#define WBCP_SEND_WITHACK_RETRY_PERIOD (5) //重发间隔(ticks)
#define MAX_RESPOND_CNT (50) //从机发送连接响应的最大次数
#define AUDIO_DATA_SIZE (32) //音频数据包大小
//#define WBCP_CAL_DUT
// ==================================== WBCP 命令 ====================================
enum fsm_status {
PWRTHR_ADJ_STATUS = 0, //功率阈值校准状态
SENTHR_ADJ_STATUS, //灵敏度阈值校准状态
FINISH_ADJ_STATUS, //结束校准状态
PWR_TEST_STATUS, //功率测试状态
SEN_TEST_STATUS, //灵敏度测试状态
FREQ_TEST_STATUS, //频偏测试状态
FINISH_TEST_STATUS, //结束测试状态
};
enum wbcp_event {
ENTER_TEST_EVENT = 0, //进入测试命令
PWRTHR_ADJ_EVENT, //功率阈值校准命令
SENTHR_ADJ_EVENT, //灵敏度阈值校准命令
FINISH_ADJ_EVENT, //结束校准命令
PWR_TEST_EVENT, //功率测试命令
SEN_TEST_EVENT, //灵敏度测试命令
FREQ_TEST_EVENT, //频偏测试命令
FINISH_TEST_EVENT, //结束测试命令
};
typedef struct {
u8 stat;
u32 pcnt;
s32 sen;
} senthr_adj_event_params_type;
typedef struct {
u8 bt_mac[MAC_ADDR_SIZE];
s32 sen;
s32 pcnt;
} freq_test_event_params_type;
typedef struct {
u8 result;
} finish_test_event_params_type;
typedef struct {
float pwr;
float evm;
s32 freq;
s32 sen;
u32 loss_pag;
float rx_rate;
} calibrate_params_type;
typedef struct {
u32 thradj_fsm[2];
u32 test_fsm[4];
} fsm_timeout_type;
typedef struct {
u32 wifi_pwr_option: 1;
u32 wifi_sen_option: 1;
u32 wifi_rx_rate_option: 1;
u32 wifi_freq_option: 1;
u32 reserved: 28;
} test_option_type;
typedef struct {
u8 serial[8];
u8 mac[6];
u8 mode;
u8 channel;
u8 conn_mcs;
u8 conn_phymode;
u8 test_mcs;
u8 test_phymode;
s8 rssi_thr;
u8 dut_reset_flag;
u8 freq_adj_flag;
fsm_timeout_type fsm_timeout;
test_option_type test_option;
} wbcp_conn_params_type;
typedef union {
senthr_adj_event_params_type senthr_adj_event_params;
freq_test_event_params_type freq_test_event_params;
finish_test_event_params_type finish_test_event_params;
calibrate_params_type cal_params;
wbcp_conn_params_type conn_params;
} event_params_type;
// ================================== WBCP 数据结构 ==================================
typedef struct {
s32 pcnt;
s32 pwr;
s32 evm;
s32 freq;
} stat_res_type;
enum {
START_SEARCH_MSG,
STOP_SEARCH_MSG,
UPDATE_CH_MSG,
ENTER_TEST_SUCC_MSG,
ENTER_TEST_FAIL_MSG,
NEW_EVENT_MSG,
RECV_AUDIO_MSG,
};
enum wbcp_data_type {
EVENT_DATA_TYPE,
RESP_DATA_TYPE,
AUDIO_DATA_TYPE,
NULL_DATA_TYPE,
};
typedef struct {
u8 event;
event_params_type params;
} event_data_type;
typedef struct {
u16 total_size;
u8 total_seq;
u8 data[AUDIO_DATA_SIZE];
} audio_data_type;
typedef union {
event_data_type event_data;
audio_data_type audio_data;
} wbcp_data_type;
typedef struct {
u8 version; //协议版本号
u8 type; //数据类型
u8 ack;
u8 seq; //连续包序号
u32 idx; //数据包编号,全局唯一
wbcp_data_type wbcp_data;
} wbcp_payload_type;
typedef struct {
u8 none_data_1[34];
u8 src_mac[6];
u8 dest_mac[6];
u8 none_data_2[46];
u16 crc;
wbcp_conn_params_type conn_params;
wbcp_payload_type payload;
} wbcp_rx_packet_type;
typedef struct {
u8 none_data_1[30];
u8 src_mac[6];
u8 dest_mac[6];
u8 none_data_2[42];
u16 crc;
wbcp_conn_params_type conn_params;
wbcp_payload_type payload;
// u8 none[32];
} wbcp_tx_packet_type;
// ================================== WBCP 接口 ==================================
typedef struct {
s8(*init)(u8 mode, u8 is_assist);
s32(*update_seach_status)(u8 type, u8 ch);
s8(*build_conn)(void *params);
void (*break_conn)(void);
void (*rx_shield)(void);
s8(*send_event_data)(event_data_type *event_data, u8 *dest_mac, u8 ack);
s8(*send_audio_data)(audio_data_type *audio_data, u8 *dest_mac, u8 seq);
s8(*send_null_data)(u8 *dest_mac);
s32(*start_send_test_data)(u8 *dest_mac, u32 periodic, u32 count);
void (*stop_send_test_data)(void);
void (*regist_usr_handler)(void *priv);
void (*regist_audio_data_user_handler)(void *priv);
void *(*start_stat_prop)(u32 count, u32 timeout);
void *(*stop_stat_prop)(void);
} wbcp_operations_interface_type;
u8 is_cal_client_mac(void);
void wbcp_rx_frame_cb(void *rxwi, void *header, void *data, u32 len, void *reserve);
void get_wbcp_operations_interface(wbcp_operations_interface_type **ops);
u8 get_wbcp_connect_status(void);
void set_wbcp_mode(u8 mode);
#define WBCP_RX_PACKET_SIZE (sizeof(wbcp_rx_packet_type))
#define WBCP_TX_PACKET_SIZE (sizeof(wbcp_tx_packet_type))
#define WBCP_CONN_PARAMS_SIZE (sizeof(wbcp_conn_params_type))
#define WBCP_PAYLOAD_SIZE (sizeof(wbcp_payload_type))
#define WBCP_DATA_SIZE (sizeof(wbcp_data_type))
#define WBCP_EVENT_DATA_SIZE (sizeof(event_data_type))
#define WBCP_AUDIO_DATA_SIZE (sizeof(audio_data_type))
#define WBCP_CONN_PARAMS(packet) (packet->conn_params)
#define WBCP_CONN_SER(packet) (packet->conn_params.serial)
#define WBCP_CRC(packet) (packet->crc)
#define WBCP_SRC_MAC(packet) (packet->src_mac)
#define WBCP_DEST_MAC(packet) (packet->dest_mac)
#define WBCP_PAYLOAD(packet) (packet->payload)
#define WBCP_VERSION(packet) (packet->payload.version)
#define WBCP_TYPE(packet) (packet->payload.type)
#define WBCP_ACK(packet) (packet->payload.ack)
#define WBCP_SEQ(packet) (packet->payload.seq)
#define WBCP_IDX(packet) (packet->payload.idx)
#define WBCP_DATA(packet) (packet->payload.wbcp_data)
#define WBCP_EVENT_DATA(packet) (packet->payload.wbcp_data.event_data)
#define WBCP_AUDIO_DATA(packet) (packet->payload.wbcp_data.audio_data)
#define WBCP_EVENT(packet) (packet->payload.wbcp_data.event_data.event)
#define WBCP_PACKET_CRC_CAL(packet) (CRC16(&packet->payload, WBCP_PAYLOAD_SIZE))
#define WBCP_CONN_PARAMS_CRC_CAL(packet) (CRC16(&packet->conn_params, WBCP_CONN_PARAMS_SIZE))
#endif