252 lines
6.9 KiB
C
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
|
|
|
|
|