291 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			291 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /****************************************************************************
 | ||
| 
 | ||
| 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.
 | ||
| 
 | ||
| ****************************************************************************/
 | ||
| #include "plc_protocol.h"
 | ||
| #include "iot_pkt_api.h"
 | ||
| 
 | ||
| #ifndef CLI_RF_IC_TOOL_H
 | ||
| #define CLI_RF_IC_TOOL_H
 | ||
| 
 | ||
| #ifdef __cplusplus
 | ||
| extern "C" {
 | ||
| #endif
 | ||
| 
 | ||
| /* sending rf tones through hardware */
 | ||
| #define CLI_RF_TX_TONE_MODE_HW    1
 | ||
| /* sending rf tones through software */
 | ||
| #define CLI_RF_TX_TONE_MODE_SW    0
 | ||
| 
 | ||
| /* pack for the structures in the whole file */
 | ||
| #pragma pack(push)  // save the pack status
 | ||
| #pragma pack(1)     // 1 byte align
 | ||
| 
 | ||
| typedef struct _cli_kl_cmd_ack {
 | ||
|     /** result code */
 | ||
|     uint16_t    result;
 | ||
|     /** reserved data */
 | ||
|     uint8_t     reserved[8];
 | ||
| } cli_kl_cmd_ack;
 | ||
| 
 | ||
| /* set rf option */
 | ||
| typedef struct _cli_rf_option_chn {
 | ||
|     uint32_t option;
 | ||
|     uint32_t chn;
 | ||
| } cli_rf_option_chn;
 | ||
| 
 | ||
| /* rf tx tone command message layout */
 | ||
| typedef struct _cli_rf_tx_tone {
 | ||
|     /* tx tone control:1 - on, 0 - stop */
 | ||
|     uint8_t     on_off;
 | ||
|     /* tone0 number */
 | ||
|     int8_t      tone0_num;
 | ||
|     /* option */
 | ||
|     uint8_t     option;
 | ||
|     /* rf center frequency, unit Hz */
 | ||
|     uint32_t    fchz;
 | ||
|     /* tx tone mode, see CLI_RF_TX_TONE_MODE_XXX. */
 | ||
|     uint8_t     mode;
 | ||
|     /* tone1 number */
 | ||
|     int8_t      tone1_num;
 | ||
|     /* attenuation code */
 | ||
|     uint8_t     att0;
 | ||
|     /* attenuation code */
 | ||
|     uint8_t     att1;
 | ||
| } cli_rf_tx_tone_t;
 | ||
| 
 | ||
| /* rf spi read */
 | ||
| typedef struct _cli_rf_spi_read {
 | ||
|     uint8_t addr;
 | ||
| } cli_rf_spi_read;
 | ||
| 
 | ||
| /* rf spi write */
 | ||
| typedef struct _cli_rf_spi_write {
 | ||
|     uint8_t addr;
 | ||
|     uint16_t value;
 | ||
| } cli_rf_spi_write;
 | ||
| 
 | ||
| /* rf calibration measurement req msg layout */
 | ||
| typedef struct _cli_rf_tx_cal_update {
 | ||
|     /* 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,
 | ||
|     /* reserved for further use */
 | ||
|                 rsvd               : 5;
 | ||
|     /* 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;
 | ||
|     /* reserved for further use */
 | ||
|     int8_t      rsvd_bytes[8];
 | ||
| } cli_rf_tx_cal_update_t;
 | ||
| 
 | ||
| /* rf rx iqm calibration request */
 | ||
| typedef struct _cli_rf_cal_rxiqm_req_t {
 | ||
|     /* tone frequency offset relative to center frequency, unit is 1Hz */
 | ||
|     int32_t     tone_freq;
 | ||
| } cli_rf_rxiqm_cal_req_t;
 | ||
| 
 | ||
| /* rf rx iqm calibration response */
 | ||
| typedef struct _cli_rf_cal_rxiqm_rsp_t {
 | ||
|     /* result code */
 | ||
|     uint8_t     result;
 | ||
|     /* rx I mag calibration value, range: 0~15 */
 | ||
|     uint8_t     i_mag : 4,
 | ||
|     /* rx Q mag calibration value, range: 0~15 */
 | ||
|                 q_mag : 4;
 | ||
|     /* rx I phase calibration value, range: 0~31 */
 | ||
|     uint8_t     i_phase;
 | ||
|     /* rx Q phase calibration value, range: 0~31 */
 | ||
|     uint8_t     q_phase;
 | ||
| } cli_rf_rxiqm_cal_rsp_t;
 | ||
| 
 | ||
| /* rf state */
 | ||
| typedef struct _cli_rf_state_cfg_t {
 | ||
|     /* whitch state see CLI_RF_POWER_XXX */
 | ||
|     uint8_t     type;
 | ||
|     /* option */
 | ||
|     uint8_t    option;
 | ||
|     /* channel id */
 | ||
|     uint8_t    ch_id;
 | ||
| } cli_rf_state_cfg_t;
 | ||
| 
 | ||
| /* RF ada dump */
 | ||
| typedef struct _cli_rf_ada_dump {
 | ||
|     uint32_t dump_addr;
 | ||
|     uint32_t dump_len;
 | ||
| } cli_rf_ada_dump;
 | ||
| 
 | ||
| /* RF rx tone power query */
 | ||
| typedef struct _cli_rf_rx_tone_power_query {
 | ||
|     uint16_t tone_idx;
 | ||
|     uint16_t dc_idx;
 | ||
|     uint16_t img_idx;
 | ||
| } cli_rf_rx_tone_power_query_t;
 | ||
| 
 | ||
| /* RF rx tone power info */
 | ||
| typedef struct _cli_rf_rx_tone_power_info {
 | ||
|     uint32_t tone_pwr;
 | ||
|     uint32_t dc_pwr;
 | ||
|     uint32_t img_pwr;
 | ||
|     uint32_t gain;
 | ||
| } cli_rf_rx_tone_power_info_t;
 | ||
| 
 | ||
| /* rf version and phy tx calibration info */
 | ||
| typedef struct _cli_rf_cal_txiqm {
 | ||
|     /* 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;
 | ||
| } cli_rf_cal_txiqm_t;
 | ||
| 
 | ||
| /* rf phy rx calibration info */
 | ||
| typedef struct _cli_rf_cal_rxiqm {
 | ||
|     /* rx I MAG balance calibration value, range range: 0~15 */
 | ||
|     uint8_t     rx_i_mag : 4,
 | ||
|     /* rx Q MAG balance calibration value, range range: 0~15 */
 | ||
|                 rx_q_mag : 4;
 | ||
|     /* rx I phase calibration value, range range: 0~31 */
 | ||
|     uint8_t     rx_i_phase;
 | ||
|     /* rx Q phase calibration value, range range: 0~31 */
 | ||
|     uint8_t     rx_q_phase;
 | ||
| } cli_rf_cal_rxiqm_t;
 | ||
| 
 | ||
| /* rf phy tx fiter calibration info */
 | ||
| typedef struct _cli_rf_cal_txf {
 | ||
|     /* 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];
 | ||
| } cli_rf_cal_txf_t;
 | ||
| 
 | ||
| typedef struct _cli_plc_fft_dump_req {
 | ||
|     /* average number */
 | ||
|     uint8_t     avg_num;
 | ||
|     /* tone index*/
 | ||
|     uint16_t    tone_idx;
 | ||
| } cli_plc_fft_dump_req_t;
 | ||
| 
 | ||
| typedef struct _cli_plc_fft_dump_rsp {
 | ||
|     /* error number */
 | ||
|     uint16_t    err_no;
 | ||
|     /* fft energy of query tone idx */
 | ||
|     uint32_t    energy;
 | ||
|     /* memory address of fft data */
 | ||
|     uint32_t    address;
 | ||
|      /* fft data length */
 | ||
|     uint16_t    len;
 | ||
| } cli_plc_fft_dump_rsp_t;
 | ||
| 
 | ||
| typedef struct _cli_gpio_set {
 | ||
|     /* gpio number */
 | ||
|     uint32_t    gpio;
 | ||
|     /* function */
 | ||
|     uint32_t    func;
 | ||
|     /* value, 0 or 1 */
 | ||
|     uint32_t    val;
 | ||
| } cli_gpio_set_t;
 | ||
| 
 | ||
| typedef struct _cli_gpio_set_rsp {
 | ||
|     /* result */
 | ||
|     uint16_t    result;
 | ||
|     /* gpio value */
 | ||
|     uint8_t    gpio_value;
 | ||
| } cli_gpio_set_rsp_t;
 | ||
| 
 | ||
| /* rf rx cmd layout */
 | ||
| typedef struct _cli_rf_rx_cmd {
 | ||
|     /* frequency of spectrum shifting, unit:Hz. */
 | ||
|     uint32_t    f0;
 | ||
|     /* rf gain, if it is a negative number, it indicates automatic adjustment of
 | ||
|      * gain.
 | ||
|      */
 | ||
|     int8_t      gain;
 | ||
|     /* Indicates how many frequency points can be obtained at most. */
 | ||
|     uint8_t     num;
 | ||
|     /* frequency list, used to obtain information of interested frequency points.
 | ||
|      * unit:Hz.
 | ||
|      */
 | ||
|     uint32_t    freq[0];
 | ||
| } cli_rf_rx_cmd_t;
 | ||
| 
 | ||
| /* rf rx gain cal_data info */
 | ||
| typedef struct _cli_rf_rx_gain_cali_info_t {
 | ||
|     /* rx gain, range: 13~74  */
 | ||
|     uint8_t gain;
 | ||
|     /* calibration value, range: -128~127, unit: 0.1db */
 | ||
|     int8_t  cal_data;
 | ||
| } cli_rf_rx_gain_cali_info_t;
 | ||
| 
 | ||
| /* rf rx gain cal_data read */
 | ||
| typedef struct _cli_rf_rx_gain_cali_read_t {
 | ||
|     /* rx gain, range range: 13~74  */
 | ||
|     uint8_t gain;
 | ||
| } cli_rf_rx_gain_cali_read_t;
 | ||
| 
 | ||
| /* rf tx power info */
 | ||
| typedef struct _cli_rf_tx_power_info_t {
 | ||
|     /* which position to save power info */
 | ||
|     uint8_t idx;
 | ||
|     /* power, unit: dbm */
 | ||
|     int8_t   power;
 | ||
|     /* tx rf_att, range: [0x7e, 0x7d, 0x7b, 0x77, 0x6f, 0x5f, 0x3f] */
 | ||
|     uint8_t  rf_att;
 | ||
|     /* if gain, range: 0~31 */
 | ||
|     uint16_t if_gain : 5,
 | ||
|     /* ldovs, range: 0~511 */
 | ||
|              ldovs   : 9,
 | ||
|     /* rservd */
 | ||
|              rsvd    : 2;
 | ||
| } cli_rf_tx_power_info;
 | ||
| 
 | ||
| /* rf tx power info read */
 | ||
| typedef struct _cli_rf_tx_power_read_t {
 | ||
|     /* which record to read */
 | ||
|     uint8_t idx;
 | ||
| } cli_rf_tx_power_read_t;
 | ||
| 
 | ||
| void iot_ic_rf_tool_op(int msgid, iot_pkt_t* buffer, uint32_t len);
 | ||
| 
 | ||
| #pragma pack(pop)   // restore the pack status
 | ||
| 
 | ||
| #ifdef __cplusplus
 | ||
| }
 | ||
| #endif
 | ||
| 
 | ||
| #endif /* CLI_RF_IC_TOOL_H */
 | ||
| 
 |