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