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 */
							 | 
						|||
| 
								 | 
							
								
							 |