Files
kunlun/ftm/inc/iot_ftm_msg.h
2024-09-28 14:24:04 +08:00

1272 lines
42 KiB
C
Executable File

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef IOT_FTM_MSG_H
#define IOT_FTM_MSG_H
/* os shim includes */
#include "os_types.h"
#include "mac_sched_hw.h"
#include "plc_protocol.h"
#ifdef __cplusplus
extern "C" {
#endif
/* pack for the structures in the whole file */
#pragma pack(push) /* save the pack status */
#pragma pack(1) /* 1 byte align */
/* define max packet length for command */
#define IOT_FTM_CMD_MAX_LEN 8000
/* define max packet length for event */
#define IOT_FTM_EVENT_MAX_LEN 8000
#define MAX_FTM_CMD_CNT 6
#define MAX_FTM_HWQ_NUM 24
#define MAX_FTM_RF_HWQ_NUM 8
#define MAX_PKT_SIZE 520
/* ftm command id definition */
#define IOT_FTM_CMD_ID_PING 0x0001 /* ping command for test purose */
#define IOT_FTM_CMD_ID_READ 0x0002
#define IOT_FTM_CMD_ID_WRITE 0x0003
#define IOT_FTM_CMD_ID_TX 0x0004
#define IOT_FTM_CMD_ID_RX 0x0005
#define IOT_FTM_CMD_ID_TONE 0x0006
#define IOT_FTM_CMD_ID_STS 0x0007
#define IOT_FTM_CMD_ID_SET 0x0008
#define IOT_FTM_CMD_ID_GET 0x0009
#define IOT_FTM_CMD_ID_SCAN 0x000a
#define IOT_FTM_CMD_ID_HWQCFG 0X000b
#define IOT_FTM_CMD_ID_PKTCFG 0X000c
#define IOT_FTM_CMD_ID_TESTCASE 0X000d
#define IOT_FTM_CMD_ID_MAC_RECE 0X000e
#define IOT_FTM_CMD_ID_MAC_RECE_SNIFFER 0X000f
#define IOT_FTM_CMD_ID_RINGCFG 0x0010
#define IOT_FTM_CMD_ID_SET_FILTERSEL 0x0011
#define IOT_FTM_CMD_ID_SET_FILTER 0x0012
#define IOT_FTM_CMD_ID_SET_RINGDIS 0x0013
#define IOT_FTM_CMD_ID_SNIFFERCFG 0x0014
#define IOT_FTM_CMD_ID_RX_MSG_SHOW 0x0015
#define IOT_FTM_CMD_ID_CMD_CFG 0x0016
#define IOT_FTM_CMD_ID_CRC_CFG 0x0017
#define IOT_FTM_CMD_ID_MAC_PING 0x0018
#define IOT_FTM_CMD_ID_SET_TEINID 0x0019
#define IOT_FTM_CMD_ID_CLEAR_COUNT 0x001A
#define IOT_FTM_CMD_ID_SEND_COUNT 0x001B
#define IOT_FTM_CMD_ID_TPUT_TEST 0x001C
#define IOT_FTM_CMD_ID_DIS_HWQ 0x001D
#define IOT_FTM_CMD_ID_LOAD_DATA 0x001E
#define IOT_FTM_CMD_ID_I2C_WRITE 0x001F
#define IOT_FTM_CMD_ID_I2C_READ 0x0020
#define IOT_FTM_CMD_ID_GPIO_OUT 0x0021
#define IOT_FTM_CMD_ID_GPIO_IN 0x0022
#define IOT_FTM_CMD_ID_UART_LOOPBACK 0x0023
#define IOT_FTM_CMD_ID_SPI_FLASH 0x0024
#define IOT_FTM_CMD_ID_READ_CHIPID 0x0025
#define IOT_FTM_CMD_ID_READ_FW_VER 0x0026
#define IOT_FTM_CMD_ID_BURN_MAC 0x0027
#define IOT_FTM_CMD_ID_SEND_REV_DATA 0x0028
#define IOT_FTM_CMD_ID_GOLDEN_REV_DATA 0x0029
#define IOT_FTM_CMD_ID_SET_PHY_PARA 0x002a
#define IOT_FTM_CMD_ID_READ_MAC 0x002b
#define IOT_FTM_CMD_ID_INIT_DONE 0x002c
#define IOT_FTM_CMD_ID_EFUSE_LOCK 0x002d
#define IOT_FTM_CMD_ID_SPUR_MASK_SET 0x002e
#define IOT_FTM_CMD_ID_OEM_MODULETYPE_SET 0x002f
#define IOT_FTM_CMD_ID_OEM_MODULETYPE_GET 0x0030
#define IOT_FTM_CMD_ID_VENDOR_ID_SET 0x0031
#define IOT_FTM_CMD_ID_CHIP_CODE_SET 0x0032
#define IOT_FTM_CMD_ID_CHIP_CODE_GET 0x0033
#define IOT_FTM_CMD_ID_SET_PPM_NID 0x0034
#define IOT_FTM_CMD_ID_GLB_NID_SET 0x0035
#define IOT_FTM_CMD_ID_CUS_CMD 0x0036
#define IOT_FTM_CMD_ID_VENDOR_ID_GET 0x0037
#define IOT_FTM_CMD_ID_CHIP_MMID_GET 0x0038
#define IOT_FTM_CMD_ID_ZC_CIRCUIT_CHECK 0x0039
#define IOT_FTM_CMD_ID_DISABEL_GPIO_RESET 0x003a
#define IOT_FTM_CMD_ID_DUT_CHARGE_VOL_GET 0x003b
#define IOT_FTM_CMD_ID_FW_CRC_CHECK 0x003c
#define IOT_FTM_CMD_ID_DEV_ID_SET 0x003d
#define IOT_FTM_CMD_ID_DEV_ID_GET 0x003e
#define IOT_FTM_CMD_ID_PT_FW_VER_GET 0x003f
#define IOT_FTM_CMD_ID_HW_VER_SET 0x0040
#define IOT_FTM_CMD_ID_HW_VER_GET 0x0041
#define IOT_FTM_CMD_ID_DUT_CHANNEL_VOL_GET 0x0042
#define IOT_FTM_CMD_ID_DUT_TXRX_MODE_SET 0x0043
#define IOT_FTM_CMD_ID_FLASH_ID_GET 0x0044
#define IOT_FTM_CMD_ID_MAC_ADDR_UPDATE 0x0045
#define IOT_FTM_CMD_ID_BURN_IP_INFO 0x0046
#define IOT_FTM_CMD_ID_READ_IP_INFO 0x0047
#define IOT_FTM_CMD_ID_CHIP_MMID_SET 0x0048
#define IOT_FTM_CMD_ID_CHECK_IMG_CRC 0x0049
#define IOT_FTM_CMD_ID_METER_CROSSTALK_SET 0x004a
#define IOT_FTM_CMD_ID_METER_CROSSTALK_GET 0x004b
#define IOT_FTM_CMD_ID_SOFT_RESTART 0x004c
#define IOT_FTM_CMD_ID_EM_EXT_FUNC 0x004d
#define IOT_FTM_CMD_ID_PASSCODE_GET 0x004e
#define IOT_FTM_CMD_ID_EXT_FLASH_CHECK 0x004f
#define IOT_FTM_CMD_ID_BRK_START_STOP_LOOPBACK 0x0050
#define IOT_FTM_CMD_ID_BRK_ENABLE_INT 0x0051
#define IOT_FTM_CMD_ID_BRK_QUERY_TRIGGER_CNT 0x0052
#define IOT_FTM_CMD_ID_READ_BCD_MAC 0x0053
#define IOT_FTM_CMD_ID_LOADER_TSFM 0x0054
#define IOT_FTM_CMD_ID_CHANNEL_ADC_READ 0x0055
#define IOT_FTM_CMD_ID_METER_PORT_UART_LOOPBACK 0x0056
#define IOT_FTM_CMD_ID_SET_PT_FW_VER 0x0057
#define IOT_FTM_CMD_ID_TEMP_CALI_SET 0x0058
#define IOT_FTM_CMD_ID_TEMP_CALI_GET 0x0059
#define IOT_FTM_CMD_ID_MAC_PHY_DIAGNOSTIC 0x005A
#define IOT_FTM_CMD_ID_ADC_CALI_SET 0x005B
#define IOT_FTM_CMD_ID_ADC_CALI_GET 0x005C
#define IOT_FTM_CMD_ID_ADC_READ_REAL 0x005D
#define IOT_FTM_CMD_ID_PHY_RF_TXIQM_CAL_W 0x005E
#define IOT_FTM_CMD_ID_PHY_RF_TXIQM_CAL_R 0x005F
#define IOT_FTM_CMD_ID_RF_PHY_TX_TONE 0x0060
#define IOT_FTM_CMD_ID_RF_SPI_SYNC 0x0061
#define IOT_FTM_CMD_ID_PHY_RF_TXF_CAL_W 0x0062
#define IOT_FTM_CMD_ID_PHY_RF_TXF_CAL_R 0x0063
#define IOT_FTM_CMD_ID_MP_RF_TEST 0x0064
#define IOT_FTM_CMD_ID_RF_TRS_CHK 0x0065
#define IOT_FTM_CMD_ID_EFUSE_CHECK 0x0066
#define IOT_FTM_CMD_ID_MP_RF_CAL_CFG 0x0067
#define IOT_FTM_CMD_ID_MP_RF_CAL_MEAS 0x0068
#define IOT_FTM_CMD_ID_MP_RF_CAL_UPDATE 0x0069
#define IOT_FTM_CMD_ID_POWER_SYNC 0x006A
#define IOT_FTM_CMD_ID_SECURITY_CFG_SET 0x006B
#define IOT_FTM_CMD_ID_SECURITY_CFG_GET 0x006C
#define IOT_FTM_CMD_ID_RF_PHY_TX_TONE_RAW 0x006D
#define IOT_FTM_CMD_ID_TOPO_ADC_DUMP 0x006E
#define IOT_FTM_CMD_ID_IR_LOOPBACK_TEST 0x006F
#define IOT_FTM_CMD_ID_RF_TX_DC_LOOP_CALI 0x0070
#define IOT_FTM_CMD_ID_SET_GET_PT_INFO 0x0071
#define IOT_FTM_CMD_ID_DUMP_TO_MEM 0x0072
#define IOT_FTM_CMD_ID_MAX 0x0072 /* total event supported */
/* ftm event id definition */
#define IOT_FTM_EVENT_ID_PONG 0x0001 /* pong event for test purose */
#define IOT_FTM_EVENT_ID_READ 0x0002
#define IOT_FTM_EVENT_ID_WRITE 0x0003
#define IOT_FTM_EVENT_ID_TX 0x0004
#define IOT_FTM_EVENT_ID_RX 0x0005
#define IOT_FTM_EVENT_ID_TONE 0x0006
#define IOT_FTM_EVENT_ID_STS 0x0007
#define IOT_FTM_EVENT_ID_SET 0x0008
#define IOT_FTM_EVENT_ID_GET 0x0009
#define IOT_FTM_EVENT_ID_SCAN 0x000a
#define IOT_FTM_EVENT_ID_HWQCFG 0X000b
#define IOT_FTM_EVENT_ID_PKTCFG 0X000c
#define IOT_FTM_EVENT_ID_TESTCASE 0X000d
#define IOT_FTM_EVENT_ID_MAC_RECE 0X000e
#define IOT_FTM_EVENT_ID_MAC_RECE_SNIFFER 0x000f
#define IOT_FTM_EVENT_ID_RINGCFG 0x0010
#define IOT_FTM_EVENT_ID_SET_FILTERSEL 0x0011
#define IOT_FTM_EVENT_ID_SET_FILTER 0x0012
#define IOT_FTM_EVENT_ID_SET_RINGDIS 0x0013
#define IOT_FTM_EVENT_ID_SNIFFERCFG 0x0014
#define IOT_FTM_EVENT_ID_RX_MSG_SHOW 0x0015
#define IOT_FTM_EVENT_ID_CMDCFG 0x0016
#define IOT_FTM_EVENT_ID_CRC_CFG 0x0017
#define IOT_FTM_EVENT_ID_MAC_PING 0x0018
#define IOT_FTM_EVENT_ID_SET_TEINID 0x0019
#define IOT_FTM_EVENT_ID_CLEAR_COUNT 0x001A
#define IOT_FTM_EVENT_ID_SEND_COUNT 0x001B
#define IOT_FTM_EVENT_ID_TPUT_TEST 0x001C
#define IOT_FTM_EVENT_ID_DIS_HWQ 0x001D
#define IOT_FTM_EVENT_ID_LOAD_DATA 0x001E
#define IOT_FTM_EVENT_ID_I2C_WRITE 0x001F
#define IOT_FTM_EVENT_ID_I2C_READ 0x0020
#define IOT_FTM_EVENT_ID_GPIO_OUT 0x0021
#define IOT_FTM_EVENT_ID_GPIO_IN 0x0022
#define IOT_FTM_EVENT_ID_UART_LOOPBACK 0x0023
#define IOT_FTM_EVENT_ID_SPI_FLASH 0x0024
#define IOT_FTM_EVENT_ID_READ_CHIPID 0x0025
#define IOT_FTM_EVENT_ID_READ_FW_VER 0x0026
#define IOT_FTM_EVENT_ID_BURN_MAC 0x0027
#define IOT_FTM_EVENT_ID_SEND_REV_DATA 0x0028
#define IOT_FTM_EVENT_ID_GOLDEN_REV_DATA 0x0029
#define IOT_FTM_EVENT_ID_SET_PHY_PARA 0x002a
#define IOT_FTM_EVENT_ID_READ_MAC 0x002b
#define IOT_FTM_EVENT_ID_INIT_DONE 0x002c
#define IOT_FTM_EVENT_ID_EFUSE_LOCK 0x002d
#define IOT_FTM_EVENT_ID_SPUR_MASK_SET 0x002e
#define IOT_FTM_EVENT_ID_OEM_MODULETYPE_SET 0x002f
#define IOT_FTM_EVENT_ID_OEM_MODULETYPE_GET 0x0030
#define IOT_FTM_EVENT_ID_VENDOR_ID_SET 0x0031
#define IOT_FTM_EVENT_ID_CHIP_CODE_SET 0x0032
#define IOT_FTM_EVENT_ID_CHIP_CODE_GET 0x0033
#define IOT_FTM_EVENT_ID_SET_PPM_NID 0x0034
#define IOT_FTM_EVENT_ID_GLB_NID_SET 0x0035
#define IOT_FTM_EVENT_ID_CUS_CMD 0x0036
#define IOT_FTM_EVENT_ID_VENDOR_ID_GET 0x0037
#define IOT_FTM_EVENT_ID_CHIP_MMID_GET 0x0038
#define IOT_FTM_EVENT_ID_ZC_CIRCUIT_CHECK 0x0039
#define IOT_FTM_EVENT_ID_DISABEL_GPIO_RESET 0x003a
#define IOT_FTM_EVENT_ID_DUT_CHARGE_VOL_GET 0x003b
#define IOT_FTM_EVENT_ID_FW_CRC_CHECK 0x003c
#define IOT_FTM_EVENT_ID_DEV_ID_SET 0x003d
#define IOT_FTM_EVENT_ID_DEV_ID_GET 0x003e
#define IOT_FTM_EVENT_ID_PT_FW_VER_GET 0x003f
#define IOT_FTM_EVENT_ID_HW_VER_SET 0x0040
#define IOT_FTM_EVENT_ID_HW_VER_GET 0x0041
#define IOT_FTM_EVENT_ID_DUT_CHANNEL_VOL_GET 0x0042
#define IOT_FTM_EVENT_ID_DUT_TXRX_MODE_SET 0x0043
#define IOT_FTM_EVENT_ID_FLASH_ID_GET 0x0044
#define IOT_FTM_EVENT_ID_MAC_ADDR_UPDATE 0x0045
#define IOT_FTM_EVENT_ID_BURN_IP_INFO 0x0046
#define IOT_FTM_EVENT_ID_READ_IP_INFO 0x0047
#define IOT_FTM_EVENT_ID_CHIP_MMID_SET 0x0048
#define IOT_FTM_EVENT_ID_CHECK_IMG_CRC 0x0049
#define IOT_FTM_EVENT_ID_METER_CROSSTALK_SET 0x004a
#define IOT_FTM_EVENT_ID_METER_CROSSTALK_GET 0x004b
#define IOT_FTM_EVENT_ID_SOFT_RESTART 0x004c
#define IOT_FTM_EVENT_ID_EM_EXT_FUNC 0x004d
#define IOT_FTM_EVENT_ID_PASSCODE_GET 0x004e
#define IOT_FTM_EVENT_ID_EXT_FLASH_CHECK 0x004f
#define IOT_FTM_EVENT_ID_BRK_START_STOP_LOOPBACK 0x0050
#define IOT_FTM_EVENT_ID_BRK_ENABLE_INT 0x0051
#define IOT_FTM_EVENT_ID_BRK_QUERY_TRIGGER_CNT 0x0052
#define IOT_FTM_EVENT_ID_READ_BCD_MAC 0x0053
#define IOT_FTM_EVENT_ID_LOADER_TSFM 0x0054
#define IOT_FTM_EVENT_ID_CHANNEL_ADC_READ 0x0055
#define IOT_FTM_EVENT_ID_METER_PORT_UART_LOOPBACK 0x0056
#define IOT_FTM_EVENT_ID_SET_PT_FW_VER 0x0057
#define IOT_FTM_EVENT_ID_TEMP_CALI_SET 0x0058
#define IOT_FTM_EVENT_ID_TEMP_CALI_GET 0x0059
#define IOT_FTM_EVENT_ID_MAC_PHY_DIAGNOSTIC 0x005A
#define IOT_FTM_EVENT_ID_ADC_CALI_SET 0x005B
#define IOT_FTM_EVENT_ID_ADC_CALI_GET 0x005C
#define IOT_FTM_EVENT_ID_ADC_READ_REAL 0x005D
#define IOT_FTM_EVENT_ID_PHY_RF_TXIQM_CAL_W 0x005E
#define IOT_FTM_EVENT_ID_PHY_RF_TXIQM_CAL_R 0x005F
#define IOT_FTM_EVENT_ID_RF_PHY_TX_TONE 0x0060
#define IOT_FTM_EVENT_ID_RF_SPI_SYNC 0x0061
#define IOT_FTM_EVENT_ID_PHY_RF_TXF_CAL_W 0x0062
#define IOT_FTM_EVENT_ID_PHY_RF_TXF_CAL_R 0x0063
#define IOT_FTM_EVENT_ID_MP_RF_TEST 0x0064
#define IOT_FTM_CMD_ID_RF_TRS_CHK 0x0065
#define IOT_FTM_EVENT_ID_EFUSE_CHECK 0x0066
#define IOT_FTM_EVENT_ID_MP_RF_CAL_CFG 0x0067
#define IOT_FTM_EVENT_ID_MP_RF_CAL_MEAS 0x0068
#define IOT_FTM_EVENT_ID_MP_RF_CAL_UPDATE 0x0069
#define IOT_FTM_EVENT_ID_POWER_SYNC 0x006A
#define IOT_FTM_EVENT_ID_SECURITY_CFG_SET 0x006B
#define IOT_FTM_EVENT_ID_SECURITY_CFG_GET 0x006C
#define IOT_FTM_EVENT_ID_RF_PHY_TX_TONE_RAW 0x006D
#define IOT_FTM_EVENT_ID_TOPO_ADC_DUMP 0x006E
#define IOT_FTM_EVENT_ID_IR_LOOPBACK_TEST 0x006F
#define IOT_FTM_EVENT_ID_RF_TX_DC_LOOP_CALI 0x0070
#define IOT_FTM_EVENT_ID_SET_GET_PT_INFO 0x0071
#define IOT_FTM_EVENT_ID_DUMP_TO_MEM 0x0072
#define IOT_FTM_EVENT_ID_MAX 0x0072 /* total event supported */
/* PT K48 ftm command id definition */
#define IOT_PT_FTM_CMD_ID_PWR_OFF 0x0000
#define IOT_PT_FTM_CMD_ID_PWR_ON 0x0001
/* future add */
#define IOT_PT_FTM_CMD_ID_STATUS_R 0x0006
#define IOT_PT_FTM_CMD_ID_GET_JIG 0x0007
#define IOT_PT_FTM_CMD_ID_GET_CURRENT 0x0008
#define IOT_PT_FTM_CMD_ID_THD_CURRENT 0x0009
#define IOT_PT_FTM_CMD_ID_VOLTAGE_GET 0x000a
#define IOT_PT_FTM_CMD_ID_GPIO_LEVEL_SET 0x000b
#define IOT_PT_FTM_CMD_ID_GPIO_LEVEL_GET 0x000c
#define IOT_PT_FTM_CMD_ID_PT_RELAY_SET 0x000d
#define IOT_PT_FTM_CMD_ID_PT_ACK 0x000e
#define IOT_PT_FTM_CMD_ID_SINGLE_GPIO_LEVEL_SET 0x000f
#define IOT_PT_FTM_CMD_ID_PT_HARDWARE_ID_GET 0x0010
/* future add */
#define IOT_PT_FTM_CMD_ID_EDGE_RISE 0x0011
#define IOT_PT_FTM_CMD_ID_EDGE_FALL 0x0012
#define IOT_PT_FTM_CMD_ID_GPB4_INT_CNT 0x0013
#define IOT_PT_FTM_CMD_ID_GPB1_2_INT_CNT 0x0014
#define IOT_PT_FTM_CMD_ID_SET_GPB3_LEVEL 0x0015
#define IOT_PT_FTM_CMD_ID_DUT_SEC_PULSE_ENABLE 0x0016
#define IOT_PT_FTM_CMD_ID_DUT_PULSE_ENABLE 0x0017
#define IOT_PT_FTM_CMD_ID_OPEN_UART1 0x0018
#define IOT_PT_FTM_CMD_ID_UART1_RECV 0x0019
#define IOT_PT_FTM_CMD_ID_PT_FW_VER_GET 0x001a
#define IOT_PT_FTM_CMD_ID_PT_SENSOR_TEMP_GET 0x001c
/* FTM PHY type */
#define IOT_FTM_PHY_TYPE_PLC 0
#define IOT_FTM_PHY_TYPE_RF 1
/* FTM HWQ type */
#define IOT_FTM_HWQ_TYPE_PLC 0
#define IOT_FTM_HWQ_TYPE_RF 1
#define IOT_FTM_CMD_DUMP_TYPE_FFT 1
/* ftm command from host to target */
typedef struct _iot_ftm_cmd {
/* command id, see IOT_FTM_CMD_ID_XXX */
uint16_t cmd_id;
/* total data length of the command. one command can be splitted into
* multiple packets.
*/
uint16_t total_len;
/* data length in current packet */
uint16_t len;
/* data in current packet */
uint8_t data[0];
} iot_ftm_cmd_t;
/* ftm event from target to host */
typedef struct _iot_ftm_event {
/* event id, see IOT_FTM_EVENT_ID_XXX */
uint16_t event_id;
/* total data length of the event. one event can be splitted into
* multiple packets.
*/
uint16_t total_len;
/* data length in current packet */
uint16_t len;
/* data in current packet */
uint8_t data[0];
} iot_ftm_event_t;
/* ftm cmd tx from host to target */
typedef struct _iot_ftm_tx_cmd {
/* phase */
uint8_t phase;
/* mac type */
uint8_t m_type;
/* packet type */
uint16_t p_type;
/* tx total num */
uint32_t total_num;
/* tmi or ext tmi */
uint8_t mac_tmi;
} iot_ftm_tx_cmd_t;
/* ftm cmd txrx mode set */
typedef struct _iot_ftm_txrx_mode_cmd {
/* mode en */
uint8_t mode_en;
/* mode value */
uint8_t mode_val;
} iot_ftm_txrx_mode_cmd_t;
/* define ftm tx cmd parameters */
typedef enum _iot_ftm_tx_cmdid {
FTM_CMD_TX_PHASE = 1, /* tx phase id */
FTM_CMD_TX_CALI, /* tx calibration id */
FTM_CMD_TX_CSI, /* tx csi dump id */
FTM_CMD_TX_CSR, /* tx csr detection id */
FTM_CMD_TX_MODE_OFFSET = 4, /* tx ftm/mp mode id */
FTM_CMD_TX_BAND, /* tx band id */
FTM_CMD_TX_GET_GOLDEN_INFO, /* tx query golden info id */
FTM_CMD_TX_GAIN = 0xFC, /* tx gain set id */
FTM_CMD_TX_END, /* tx end id */
FTM_CMD_TX_LONG, /* tx long id */
FTM_CMD_TX_INIT, /* tx init id */
} iot_ftm_tx_cmdid_t;
/* mp rx command id define */
typedef enum _iot_ftm_rx_cmdid {
FTM_CMD_RX_GOLDEN, /* rx pt golden mode */
FTM_CMD_RX_INIT, /* rx init */
FTM_CMD_RX_START, /* rx single mode start */
FTM_CMD_RX_END, /* rx mode end */
} iot_ftm_rx_cmdid_t;
/* ftm cmd read from host to target */
typedef struct _iot_ftm_read_cmd {
/* addr */
uint32_t addr;
/* len */
uint16_t len;
} iot_ftm_read_cmd_t;
/* ftm cmd write from host to target */
typedef struct _iot_ftm_write_cmd {
/* addr */
uint32_t addr;
/* data */
uint32_t data;
} iot_ftm_write_cmd_t;
typedef struct _ana_i2c_cmd {
uint8_t reg_id;
uint32_t wdata;
uint32_t mask;
} ana_i2c_cmd_t;
/* ftm scan id */
typedef enum _iot_ftm_scan_id {
AUTO_ALL =0,
AUTO_DUMP =1,
AUTO_UART =2,
AUTO_VPP =3,
AUTO_SNR =4,
AUTO_FA =5,
AUTO_CSI =6,
AUTO_LOOPBACK =7,
AUTO_NF =8,
AUTO_DC_TX =9,
AUTO_DC_RX =10,
AUTO_END =11,
AUTO_FFT =12,
} iot_ftm_scan_id_t;
/* ext flash cfg*/
typedef enum _iot_ftm_ext_flash_funcid {
FTM_CMD_EXT_QUERY, /* quert ext flash chip size */
FTM_CMD_EXT_CHECK, /* check ext flash */
} iot_ftm_ext_flash_funcid_t;
typedef struct _iot_ftm_ext_flash_cfg {
uint8_t flash_func;
uint16_t flash_offset;
uint16_t flash_index;
} iot_ftm_ext_flash_cfg_t;
typedef struct _iot_ftm_disable_hwq {
/* hwq num */
uint8_t hwq_num : 4,
/* the high 4bit indicates plc or rf, see IOT_FTM_HWQ_TYPE_XXX */
hwq_type : 4;
} iot_ftm_disable_hwq_t;
typedef struct _phy_proto_parameter_set {
/* phy protocol type, see PLC_PROTO_TYPE_XXX */
uint8_t phy_proto : 4,
/* physical layer type, see IOT_FTM_PHY_TYPE_XXX */
phy_type : 4;
union {
/* when phy_type is IOT_FTM_PHY_TYPE_PLC,
* plc_band mean band id of plc.
*/
uint8_t plc_band;
/* when phy_type is IOT_FTM_PHY_TYPE_RF,
* rf_option mean option of rf.
*/
uint8_t rf_option;
};
union {
/* when phy_type is IOT_FTM_PHY_TYPE_PLC,
* plc_maskid mean mask id of plc.
*/
uint8_t plc_maskid;
/* when phy_type is IOT_FTM_PHY_TYPE_RF,
* rf_channel mean channel of rf.
*/
uint8_t rf_channel;
};
} phy_proto_parameter_set;
/* rf version and phy tx iqm calibration info */
typedef struct _iot_ftm_phy_rf_ver_txiqm_cal {
/* tx I MAG balance calibration value, range range: 0~15 */
uint8_t tx_i_mag : 4,
/* rf version, see RF_VER_XXX */
rf_ver : 4;
/* tx Q MAG balance calibration value, range range: 0~15 */
uint8_t tx_q_mag;
/* tx I phase calibration value, range range: 0~31 */
uint8_t tx_i_phase;
/* tx Q phase calibration value, range range: 0~31 */
uint8_t tx_q_phase;
/* tx I dc calibration value, range range: -127~127 */
int8_t tx_i_dc;
/* tx I dc calibration value, range range: -127~127 */
int8_t tx_q_dc;
} iot_ftm_phy_rf_ver_txiqm_cal_t;
/* rf phy tx fiter calibration info */
typedef struct _iot_ftm_phy_rf_txf_cal {
/* flag mark if the value of the corresponding option is valid */
uint8_t valid_mask;
/* tx filter bw calibration value for each option */
uint16_t bw_sel_value[RF_OPTION_MAX];
} iot_ftm_phy_rf_txf_cal_t;
typedef struct _rf_phy_tx_tone_set {
/* rf tx tone on or off, 1: on, 0: off */
uint32_t rf_txtone_onoff;
/* rf option */
uint32_t rf_option;
/* local frequence */
uint32_t freq;
/* tone num */
uint32_t tone_num : 13,
/* tone attenuation */
tone_att : 3,
/* reserved for future */
rsvd : 16;
} rf_phy_tx_tone_set_t;
typedef struct _rf_spi_sync_ctxt {
/* read or write, 1:write, 0:read */
uint8_t r_w;
/* rf spi addr */
uint16_t spi_addr;
/* rf spi value */
uint16_t spi_value;
} rf_spi_sync_ctxt_t;
/* phy tx power sync massage */
typedef struct _phy_power_sync {
/* set or get, 1:set, 0:get */
uint8_t r_w;
/* tx power, rf:unit is dBm, hplc: unit is dBuV */
int8_t power;
/* flag to mark if it is test mode power, only valid for rf msg */
uint8_t is_test_mode : 1,
/* test mode code, only valid for rf msg */
test_mode : 2,
/* flag to mark if it is for hplc or not */
is_hplc : 1,
/* reserved for further use */
rsvd : 4;
} phy_power_sync_t;
/* topo adc data dump */
typedef struct _topo_adc_dump {
/* select dump phase, 1 - phase A, 2 - phase B, 3 - phase C */
uint8_t phase;
/* pga 1 gain index */
uint8_t gain1 : 4,
/* pga 2 gain index */
gain2 : 4;
/* adc data right shift num */
uint8_t shift_num;
/* discard num for each sample */
uint16_t discard_num;
/* data num for each sample */
uint16_t data_num;
/* number of samples to be sampled */
uint32_t samp_num;
} topo_adc_dump_t;
/* topo adc data dump response */
typedef struct _topo_adc_dump_rsp {
/* data buffer address */
uint32_t data_addr;
} topo_adc_dump_rsp_t;
typedef struct _iot_ftm_mac_recv_sniffer {
/* sniffer log seq */
uint32_t seq : 30,
/* indicates plc or rf, see FTM_INIT_xx_MODE */
mode : 2;
/* payload label */
uint8_t data[0];
} iot_ftm_mac_recv_sniffer_t;
/* define MP rf test case id */
#define IOT_FTM_MP_RF_CASE_ID_CSI 0
#define IOT_FTM_MP_RF_CASE_ID_CSR 1
#define IOT_FTM_MP_RF_CASE_ID_TX_EVM 2
#define IOT_FTM_MP_RF_CASE_ID_CHG_PHY 3
#define IOT_FTM_MP_RF_CASE_ID_TX_CALI_BY_SNR 4
/* rf power up/down cmd and rf version check request */
typedef struct _iot_ftm_mp_rf_chk_req {
/* read reg addr, after power up and power done, 0xffff is invalid addr */
uint16_t reg_addr;
} iot_ftm_mp_rf_chk_req_t;
/* rf power up/down cmd and rf version check response */
typedef struct _iot_ftm_mp_rf_chk_rsp {
/* rf check result, 0: ok, 1: fail */
uint8_t ret;
/* read reg value , after power down */
uint16_t reg_value_pd;
/* read reg value , after power up */
uint16_t reg_value_pu;
/* rf version, see RF_VER_XXX */
uint8_t ver;
} iot_ftm_mp_rf_chk_rsp_t;
/* MP rf test cmd header */
typedef struct _iot_ftm_mp_rf_cmd_hdr {
/* test case id, see IOT_FTM_MP_RF_CASE_ID_XXX */
uint8_t id;
/* rf option, see RF_OPTION_XXX */
uint8_t option;
/* rf channel, see RF_CHANNEL_XXX */
uint8_t channel;
/* payload header, see MCS_ID_XXX */
uint8_t phr_mcs;
/* payload msc, see MCS_ID_XXX */
uint8_t pld_mcs;
/* payload block size, see BLOCK_SIZE_XXX */
uint8_t pld_blkz;
/* dut tx power, unit is dbm */
int8_t dut_power;
/* golden tx power, uint is dbm */
int8_t golden_power;
/* cmd paload label */
uint8_t data[0];
} iot_ftm_mp_rf_cmd_hdr_t;
/* MP rf golden test cmd header */
typedef struct _iot_ftm_mp_rf_cmd_rx {
/* ftm rx command id, see FTM_CMD_RX_XXX */
uint8_t id;
/* rf option, see RF_OPTION_XXX */
uint8_t option;
/* rf channel, RF_CHANNEL_ID_XXX */
uint8_t channel;
} iot_ftm_mp_rf_cmd_rx_t;
/* MP rf test case CSI cmd payload layout */
typedef struct _iot_ftm_mp_rf_cmd_csi {
/* threshold of tx rssi */
int8_t tx_rssi_thr;
/* threshold of rx rssi */
int8_t rx_rssi_thr;
/* Threshold of tx snr */
int8_t tx_snr_thr;
/* Threshold of rx snr */
int8_t rx_snr_thr;
/* reserved for further use */
uint8_t rsvd[8];
} iot_ftm_mp_rf_cmd_csi_t;
/* MP rf test case CSR cmd payload layout */
typedef struct _iot_ftm_mp_rf_cmd_csr {
/* tx packet count */
uint16_t packet_num;
/* wait recv timeout, uint is ms */
uint16_t timeout;
/* if set, golden uses test mode power configuration. */
uint8_t is_test_mode : 1,
/* reserved field 0 for further use */
rsvd0 : 7;
/* golden sends sample packet interval, unit: us. */
uint16_t interval;
/* reserved field 0 for further use */
uint8_t rsvd1[5];
} iot_ftm_mp_rf_cmd_csr_t;
/* MP rf test case TX_EVM cmd payload layout */
typedef struct _iot_ftm_mp_rf_cmd_tx_evm {
/* tx packet count */
uint16_t packet_num;
/* flag to mark if normal power configuration is used */
uint8_t is_nor_pwr : 1,
/* not request rx result flag from golden */
no_req_flag : 1,
/* reserved for further use */
rsvd0 : 6;
/* DUT sends sample packet interval, unit: us. */
uint16_t interval;
/* reserved for further use */
uint8_t rsvd1[7];
} iot_ftm_mp_rf_cmd_tx_evm_t;
/* MP rf test case TX CALI cmd payload layout */
typedef struct _iot_ftm_mp_rf_cmd_tx_cali {
/* tx cali type, see RF_TEST_TX_CALI_REG_IQ_XXX */
uint8_t type;
/* step units when changing i/q */
uint8_t step;
/* number of times each data is sent repeatedly */
uint8_t repeat_cnt;
/* tx I/Q MAG calibration value, range range: 0~15 */
/* tx I/Q PHASE calibration value, range range: 0~31 */
/* tx I/Q DC calibration value, range range: -127~127 */
int8_t i_min;
int8_t i_max;
int8_t q_min;
int8_t q_max;
/* flag to mark using real data or fitted data */
uint8_t liner_fit_en : 1,
/* flag to mark if normal power configuration is used */
is_nor_pwr : 1,
/* indicates the number of rounds to send packets */
rounds : 3,
/* flag to mark whether to use i/q difference for calibration */
iq_delta_en : 1,
/* reserved for further use */
rsvd : 2;
/* reserved for further use */
uint8_t rsvd1[9];
} iot_ftm_mp_rf_cmd_tx_cali_t;
/* MP rf tx dc loop calibraton command */
typedef struct _iot_ftm_rf_tx_dc_loop_cali {
/* rf option, see RF_OPTION_XXX */
uint8_t option;
/* rf center frequency, unit Hz */
uint32_t freq;
/* delay time for obtaining adc data */
uint8_t interval;
/* step value of traversing iq */
uint8_t step;
/* pa power set */
uint16_t ldovs;
/* tx rf_att */
uint8_t rf_att;
/* rsvd for future */
uint8_t rsvd[4];
} iot_ftm_rf_tx_dc_loop_cali_t;
/* MP rf tx dc loop calibraton response */
typedef struct _iot_ftm_rf_tx_dc_loop_cali_rsp {
/* test result, see ERR_XXX */
uint8_t result;
/* compensation value of DC i */
int8_t i;
/* compensation value of DC q */
int8_t q;
/* rsvd for future */
uint8_t rsvd[4];
} iot_ftm_rf_tx_dc_loop_cali_rsp_t;
/* MP rf test CHG PHY cmd payload layout */
typedef struct _iot_ftm_mp_rf_cmd_chg_phy {
/* rf option, see RF_OPTION_XXX */
uint8_t option;
/* rf channel, RF_CHANNEL_ID_XXX */
uint8_t channel;
} iot_ftm_mp_rf_cmd_chg_phy_t;
/* MP rf test response header */
typedef struct _iot_ftm_mp_rf_rsp_hdr {
/* test result, see ERR_XXX */
uint8_t result;
/* test case id, see IOT_FTM_MP_RF_CASE_ID_XXX */
uint8_t id;
/* resp payload label */
uint8_t data[0];
} iot_ftm_mp_rf_rsp_hdr_t;
/* MP rf test CSI response payload layout */
typedef struct _iot_ftm_mp_rf_rsp_csi {
/* tx rssi */
int8_t tx_rssi;
/* rx rssi */
int8_t rx_rssi;
/* tx snr */
int8_t tx_snr;
/* rx snr */
int8_t rx_snr;
/* tx gain */
uint8_t tx_gain;
/* rx gain */
uint8_t rx_gain;
/* reserved for further use */
uint8_t rsvd[14];
} iot_ftm_mp_rf_rsp_csi_t;
/* MP rf test CSR response payload layout */
typedef struct _iot_ftm_mp_rf_rsp_csr {
/* rx success count */
uint16_t rx_cnt;
/* rx average rssi */
int8_t avg_rssi;
/* rx average snr */
int8_t avg_snr;
/* reserved for further use */
uint8_t rsvd[15];
} iot_ftm_mp_rf_rsp_csr_t;
/* MP rf test TX EVM response payload layout */
typedef struct _iot_ftm_mp_rf_rsp_tx_evm {
/* rx success count */
uint16_t rx_cnt;
/* 10 times the average RSSI of DUT tx evaluated by golden */
int16_t avg_rssi;
/* 10 times the average snr of DUT tx evaluated by golden */
int16_t avg_snr;
/* reserved for further use */
uint8_t rsvd[14];
} iot_ftm_mp_rf_rsp_tx_evm_t;
/* TX CALI result structure */
typedef struct {
/* rf phy i value of MAG/PHASE register */
int8_t i;
/* rf phy q value of MAG/PHASE register */
int8_t q;
/* snr */
float snr;
} iot_ftm_mp_rf_tx_cali_comen_result_t;
/* MP rf test TX CALI response payload layout */
typedef struct _iot_ftm_mp_rf_rsp_tx_cali {
/* indicates how many sets of i/q data are available next */
uint8_t cnt;
/* TX CALI result payload */
iot_ftm_mp_rf_tx_cali_comen_result_t result[0];
} iot_ftm_mp_rf_rsp_tx_cali_t;
/* MP rf calibration measurement cfg msg layout */
typedef struct _iot_ftm_mp_rf_cal_meas_cfg {
/* configure golden to measurement mode, 1 - enable / 0 - disable */
uint8_t meas_en;
/* rf option */
uint8_t option;
/* rf channel */
uint8_t ch;
/* communication power between DUT and golden (HPLC), uint is dBuV */
uint8_t comm_pwr;
/* communication power between DUT and golden (HPLC), see MAC_TMI_XX */
uint8_t comm_tmi;
} iot_ftm_mp_rf_cal_meas_cfg_t;
/* MP rf calibration measurement req msg layout */
typedef struct _iot_ftm_mp_rf_tx_cal_update {
/* tx I MAG balance calibration value, range range: 0~15 */
uint8_t tx_i_mag;
/* tx Q MAG balance calibration value, range range: 0~15 */
uint8_t tx_q_mag;
/* tx I phase calibration value, range range: 0~31 */
uint8_t tx_i_phase;
/* tx Q phase calibration value, range range: 0~31 */
uint8_t tx_q_phase;
/* tx I dc calibration value, range range: -127~127 */
int8_t tx_i_dc;
/* tx Q dc calibration value, range range: -127~127 */
int8_t tx_q_dc;
/* filter bandwidth sel value */
uint16_t filter_bw_sel;
/* options corresponding to filter bandwidth sel value */
uint8_t filter_option;
/* flag to mark if member tx_i_mag and tx_q_mag needs to be updated to RF */
uint8_t tx_iq_mag_update : 1,
/* flag to mark if member tx_i_phase and tx_q_phase needs to be updated
* to RF.
*/
tx_iq_phase_update : 1,
/* flag to mark if member tx_i_dc and tx_q_dc needs to be updated to RF */
tx_iq_dc_update : 1,
/* flag to mark if member filter_bw_sel needs to be updated to RF */
filter_update : 1,
/* reserved for further use */
rsvd : 4;
} iot_ftm_mp_rf_tx_cal_update_t;
/* MP rf calibration measurement req msg layout -- */
typedef struct _iot_ftm_mp_rf_cal_meas_req {
/* tx calibration update info */
iot_ftm_mp_rf_tx_cal_update_t tx_cal;
/* receiving LO frequency used in measurement, uint is Hz*/
uint32_t lo_freq;
/* index of tone signal in fft result */
uint16_t tone_idx;
/* index of dc signal in fft result */
uint16_t dc_idx;
/* index of img signal in fft result */
uint16_t img_idx;
/* wait meas result timeout, uint is 1ms */
uint16_t timeout;
/* request meas try cnt */
uint8_t try_cnt;
/* average number of measurements */
uint8_t avg_cnt;
/* reserved for further use */
uint8_t rsvd[3];
} iot_ftm_mp_rf_cal_meas_req_t;
/* MP rf calibration measurement response msg layout */
typedef struct _iot_ftm_mp_rf_cal_meas_rsp {
/* error code, see ERR_XX */
uint8_t err_no;
/* tone signal power, no gain compensation */
uint32_t tone_pwr;
/* dc signal power, no gain compensation */
uint32_t dc_pwr;
/* img signal power, no gain compensation */
uint32_t img_pwr;
/* receive gain, uint is 0.01 */
uint16_t gain;
/* reserved for further use */
uint8_t rsvd[4];
} iot_ftm_mp_rf_cal_meas_rsp_t;
typedef struct _iot_ftm_loader_tsfm_cfg{
uint16_t pulse_high_dur;
uint16_t pulse_low_dur;
uint32_t chara_bit_dur;
uint8_t data[2];
}iot_ftm_loader_tsfm_cfg;
/* security data struct */
typedef struct _iot_ftm_security_cfg {
/* security data version */
uint8_t version;
/* security data length */
uint16_t len;
/* security data */
uint8_t data[0];
}iot_ftm_security_cfg_t;
typedef enum _iot_ftm_pt_info_operation_type {
PT_INFO_OPERATION_GET, /* get pt info operation */
PT_INFO_OPERATION_SET, /* set pt info operation */
} iot_ftm_pt_info_operation_type;
/* pt info */
typedef struct _iot_ftm_pt_info_hdr {
uint8_t operation_type;
} iot_ftm_pt_info_hdr_t;
typedef struct _iot_ftm_get_pt_info {
/* indicate the result, 0:pass, 1:fail */
uint8_t ret;
/* the golden mac */
uint8_t golden_mac[IOT_MAC_ADDR_LEN];
/* the bcd format of the time when pt taken */
uint8_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t min;
/* the fw version of golden */
uint32_t golden_fw_ver;
/* the version of pt tool */
uint32_t pt_tool_ver;
/* the fw version of pt board */
uint32_t pt_board_ver;
/* the fw version of dut */
uint32_t dut_fw_ver;
} iot_ftm_get_pt_info_t;
typedef struct _iot_ftm_set_pt_info {
/* the golden mac */
uint8_t golden_mac[IOT_MAC_ADDR_LEN];
/* the bcd format of the time when pt taken */
uint8_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t min;
/* the fw version of golden */
uint32_t golden_fw_ver;
/* the version of pt tool */
uint32_t pt_tool_ver;
/* the fw version of pt board */
uint32_t pt_board_ver;
} iot_ftm_set_pt_info_t;
typedef struct _iot_ftm_dump_to_mem_req {
/* dump which type of data into memory, see IOT_FTM_CMD_DUMP_TYPE_XXX */
uint8_t dump_type;
/* gain, unit is 1 dB */
int8_t gain;
} iot_ftm_dump_to_mem_req_t;
typedef struct _iot_ftm_dump_to_mem_rsp {
/* indicate the result, 0: success, 1: fail */
uint8_t ret;
/* dump which type of data into memory, see IOT_FTM_CMD_DUMP_TYPE_XXX */
uint8_t dump_type;
/* gain, unit is 1 dB */
int8_t gain;
/* dump data memory address */
uint32_t dump_addr;
/* dump data len, unit is 1 byte */
uint32_t dump_len;
} iot_ftm_dump_to_mem_rsp_t;
#if (IOT_MP_SUPPORT == 0)
/* ftm tx type id */
typedef enum _iot_ftm_tx_type_id {
DT_BCN =0,
DT_SOF ,
DT_SACK ,
DT_RTS_CTS ,
DT_SOUND ,
DT_RSOF ,
DT_END ,
} iot_ftm_tx_type_id_t;
/* tx case cfg */
typedef struct _mpdu_send_case_cfg {
uint32_t interval_time; //unit 1'ms
uint32_t packe_num; // total numbers
uint32_t user_updata_time;
} mpdu_send_case_cfg;
/* tx packet cfg */
typedef struct _mpdu_send_pkt_cfg {
uint8_t proto : 4,
/* the high 4bit indicates plc or rf, see FTM_INIT_xx_MODE */
work_mode : 4;
uint8_t qid;
uint8_t bcast;
uint8_t delimiter_type;
uint32_t nid;
uint32_t dtei;
uint32_t stei;
uint8_t tmi;
uint8_t ext_tmi;
uint8_t lid;
uint8_t pb_num;
uint8_t need_ack;
uint8_t need_encry; //encryption
uint8_t need_decrypt; //decrypt
uint32_t avln_idx_in_desc;
uint32_t key_table_idx_in_desc;
uint32_t key_idx_in_desc;
uint8_t hw_retry_cnt;
uint8_t phase;
uint8_t pkt_idx;
} mpdu_send_pkt_cfg;
/* rf tx packet cfg */
typedef struct _mpdu_rf_send_pkt_cfg {
uint8_t proto : 4,
/* the high 4bit indicates plc or rf, see FTM_INIT_xx_MODE */
work_mode : 4;
uint8_t qid;
uint8_t bcast;
uint8_t delimiter_type;
uint32_t nid;
uint32_t dtei;
uint32_t stei;
uint8_t phr_mcs;
uint8_t pld_mcs;
uint8_t pld_idx;
uint8_t pb_num;
uint8_t need_ack;
uint8_t rx_result;
uint8_t snr;
uint8_t load;
uint8_t ext_dli;
uint8_t pkt_idx;
} mpdu_rf_send_pkt_cfg;
typedef struct _pkt_data_cfg {
uint32_t data_len;
uint8_t *data_pkt;
}pkt_data_cfg_t;
typedef struct _cmd_cfg {
uint8_t st_flag;
uint8_t r_flag;
uint8_t r_start_flag;
uint8_t r_end_flag;
uint8_t phase;
uint8_t idle_bit;
uint8_t req_int;
uint8_t rx_rate_mode;
uint8_t narrow_band;
uint32_t enable_bitmap;
uint32_t start_time;
uint32_t end_time;
} cmd_cfg_t;
typedef struct _mpdu_send_pkt_cfg_list {
mpdu_send_pkt_cfg pktcfg;
uint8_t qenable;
} mpdu_send_pkt_cfg_list;
typedef struct _mpdu_rf_send_pkt_cfg_list {
mpdu_rf_send_pkt_cfg pktcfg;
uint8_t qenable;
} mpdu_rf_send_pkt_cfg_list;
typedef struct _pkt_cfg_list {
mpdu_send_pkt_cfg_list sg_spg_gp_pktcfg_list[MAX_FTM_HWQ_NUM];
mpdu_rf_send_pkt_cfg_list rf_pktcfg_list[MAX_FTM_RF_HWQ_NUM];
}pkt_cfg_list;
typedef struct _send_case_ctxt{
pkt_cfg_list pktcfg_list;
mpdu_send_case_cfg casecfg;
uint8_t case_num;
}send_case_ctxt_t;
/* sche test cfg*/
typedef struct _sche_cfg {
uint8_t ping_cmd_num;
uint32_t ping_bcn_period;
uint8_t pong_cmd_num;
uint32_t pong_bcn_period;
cmd_cfg_t cmd_cfg[MAX_FTM_CMD_CNT];
} sche_cfg_t;
/* tx mode cfg */
typedef struct _txq_cfg {
uint8_t hwqid; // dbg mode 0-4, sch mode 0-24
uint8_t qtype; // 0 - tdma; 1 - csma
uint8_t qcap; // 0-4 for connectionless lid
} txq_cfg_t;
typedef struct _mpdu_send_mode_cfg {
/* 0: sch; 1: dbg mode */
uint8_t tx_mode : 4,
/* the high 4bit indicates plc or rf, see FTM_INIT_xx_MODE */
work_mode : 4;
txq_cfg_t qcfg[MAX_FTM_HWQ_NUM]; // dbg cfg struct for hwq
} mpdu_send_mode_cfg;
/* rx result */
typedef struct _rx_report {
uint32_t time_used;
uint32_t rx_mpdus;
uint32_t succ_mpdus;
uint32_t total_bytes;
} rx_report_t;
typedef struct _ring_cfg {
uint8_t cfg_type;
uint8_t cfg_offset;
uint8_t cfg_enable;
} ring_cfg_t;
typedef struct _rx_cfg {
uint8_t ring_id : 4,
/* the high 4bit indicates plc or rf, see FTM_INIT_xx_MODE */
work_mode : 4;
uint8_t ring_sz;
uint32_t buf_sz;
uint8_t bufsz_filter_sel;
uint8_t filter;
ring_cfg_t ringcfg[2]; //desc and pb
uint8_t cert_flag;
} rx_cfg_t;
typedef struct _rx_filter_sel {
uint8_t ring_id;
uint8_t bufsz_filtr_sel;
} filter_sel_t;
typedef struct _rx_filter {
uint8_t ring_id;
uint8_t filter;
} filter_t;
typedef struct _sniffer_cfg {
uint8_t enable;
uint8_t sel; //0: all desc+pb 1: only desc 2: only pb
uint16_t pb_dump_len; //pb
} sniffer_cfg_t;
typedef struct _crc_cfg {
/* generate crc mode */
uint8_t fccs_by_sw;
uint8_t pb_crc_by_sw;
uint8_t bcn_crc_by_sw;
/* check mode */
uint8_t is_verify_fc;
uint8_t is_verify_pb;
uint8_t is_verify_payload;
} crc_cfg_t;
typedef struct _mac_ping_tput {
uint32_t stei;
uint32_t dtei;
uint32_t nid;
uint8_t tmi;
uint8_t ext_tmi;
uint8_t pb_num;
uint32_t cont;
uint8_t ping_or_tput; //0:ping 1:tput
} mac_ping_tput_t;
typedef struct _tei_nid_cfg {
uint32_t stei;
uint32_t nid;
} tei_nid_t;
typedef struct _rx_tput_cfg {
uint8_t tput_enable;
uint8_t tput_time;
} rx_tput_cfg;
/*******************global bariable**********************/
/* mpdu_send_cfg*/
typedef struct _g_ftm_mpdu_send_cfg {
send_case_ctxt_t *g_mpdu_sendcase;
pkt_data_cfg_t pkt_data_cfg[MAX_FTM_HWQ_NUM];
timer_id_t send_pkt;
uint8_t tx_msg_cnt;
} g_ftm_mpdu_send_cfg;
/* sniffer_cfg*/
typedef struct _g_ftm_sniffer_cfg {
sniffer_cfg_t *g_sniffer_cfg;
/* sniffer log seq */
uint32_t sniffer_log_seq : 30,
/* reserved */
rsv : 2;
} g_ftm_sniffer_cfg;
/* ping and tput cfg*/
typedef struct _g_ftm_ping_tput_cfg {
rx_tput_cfg *rec_tput_cfg;
timer_id_t tput_timer_id;
uint32_t start_time_stamp;
uint32_t rx_sof_count;
uint32_t rx_sof_right_count;
uint32_t rx_beacon_count;
uint32_t rx_beacon_right_count;
uint32_t rx_pkt_seqnum;
} g_ftm_ping_tput_cfg;
/* sche test cfg*/
typedef struct _g_ftm_sche_cfg {
uint8_t ping_cmd_num;
uint8_t pong_cmd_num;
uint32_t ping_bcn_period;
uint32_t pong_bcn_period;
hw_sched_cmd_t *ping_cmdlist;
hw_sched_cmd_t *pong_cmdlist;
hw_sched_cmd_t *rf_ping_cmdlist;
hw_sched_cmd_t *rf_pong_cmdlist;
timer_id_t cmdlist_sch;
uint8_t sched_flag;
} g_ftm_sche_cfg;
/* crc_cfg*/
typedef struct _g_ftm_crc_cfg {
iot_pkt_t *ftm_msdu;
crc_cfg_t g_crc_cfg;
} g_ftm_crc_cfg;
/* global variable*/
typedef struct _g_ftm {
g_ftm_mpdu_send_cfg ftm_mpdu_send_cfg;
g_ftm_sniffer_cfg ftm_sniffer_cfg;
g_ftm_ping_tput_cfg ftm_ping_tput_cfg;
uint8_t rx_msg_show;
g_ftm_sche_cfg ftm_sche_cfg;
g_ftm_crc_cfg ftm_crc_cfg;
uint32_t nid_for_sync_ppm;
uint8_t cert_flag;
uint8_t hwq_inited : 1,
rf_hwq_inited : 1,
/*see FTM_INIT_WORK_MODE */
plc_rf_mode : 2,
rev0 : 4;
} g_ftm;
#endif/* IOT_MP_SUPPORT == 0 */
/**
* @brief ftm_send_msg_helper() -ftm send msg
* @param int msgid -msg id
* @param iot_pkt_t *buffer -send buffer
* @param bool_t *need_free -need free or not
* @return void
*/
void ftm_send_msg_helper(int msgid, iot_pkt_t *buffer, bool_t *need_free);
#pragma pack(pop) /* restore the pack status */
#ifdef __cplusplus
}
#endif
#endif /* IOT_FTM_MSG_H */