269 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			269 lines
		
	
	
		
			9.8 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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								****************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef IOT_PLC_HW_TSFM_API_H
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_API_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "os_types_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define max duration time of bit data output, uint is 1us */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_OUTPUT_MAX_TIME   500
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define min duration time of bit data output, uint is 1us */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_OUTPUT_MIN_TIME   100
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define max ahead interval time of sending data relative to
							 | 
						||
| 
								 | 
							
								 * zero-crossing point, uint is 1us
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_MAX_AHEAD_TIME    1000
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define min ahead interval time of sending data relative to
							 | 
						||
| 
								 | 
							
								 * zero-crossing point, uint is 1us
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_MIN_AHEAD_TIME    300
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define send mode, zero-crossing perturbance method. */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_SEND_MODE_ZC                  0
							 | 
						||
| 
								 | 
							
								/* define send mode, pulse current injection method. */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_SEND_MODE_LOAD                1
							 | 
						||
| 
								 | 
							
								/* define send mode, pulse current injection method done by PA */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_SEND_MODE_PA                  2
							 | 
						||
| 
								 | 
							
								/* define send mode maximum */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_SEND_MODE_MAX                 3
							 | 
						||
| 
								 | 
							
								/* define send mode invalid */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_SEND_MODE_INVALID IOT_PLC_HW_TSFM_SEND_MODE_MAX
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define load decode type, not add preamble */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_ENCODE_RAW                 0
							 | 
						||
| 
								 | 
							
								/* define load decode type, normal type, value is 0xAA */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_ENCODE_HAMMING_PREAMBLE_1  1
							 | 
						||
| 
								 | 
							
								/* define load decode type, irregular type,
							 | 
						||
| 
								 | 
							
								 * 1.5bit high, 1.5bit low, 1bit high, 1.5bit low, 1.5bit high.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_ENCODE_HAMMING_PREAMBLE_2  2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* default load parameter. 833HZ(period = 1.2ms), 33%duty, 300ms/bit */
							 | 
						||
| 
								 | 
							
								/* default load mode modulattion signal high during time. unit: 1us */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_SIG_HIGH_DUR_DEF         400
							 | 
						||
| 
								 | 
							
								/* default load mode modulattion signal low during time. unit: 1us */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_SIG_LOW_DUR_DEF          800
							 | 
						||
| 
								 | 
							
								/* default load mode modulation signal period, unit: 1HZ */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_SIG_PERIOD_DEF           \
							 | 
						||
| 
								 | 
							
								    (IOT_PLC_HW_TSFM_LOAD_SIG_HIGH_DUR_DEF +          \
							 | 
						||
| 
								 | 
							
								    IOT_PLC_HW_TSFM_LOAD_SIG_LOW_DUR_DEF)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* default load mode characters bit during time for small current . unit: 1us */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_CHARA_DUR_DEF            (300 * 1000)
							 | 
						||
| 
								 | 
							
								/* default load mode characters bit during time for large current. unit: 1us */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_CHARA_DUR_DEF_SHORT      (150 * 1000)
							 | 
						||
| 
								 | 
							
								/* default load mode characters bit during time for test . unit: 1us */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_CHARA_DUR_TEST           (80 * 1000)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define receive invalid energy */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_REC_INVALID_ENERGY                 0xffff
							 | 
						||
| 
								 | 
							
								/* define receive max energy */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_REC_MAX_ENERGY                     0xfffe
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* define load capacity: */
							 | 
						||
| 
								 | 
							
								/* constant current mode with peak value of 400mA */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_CAP_400MA                0
							 | 
						||
| 
								 | 
							
								/* constant resistance mode with peak value of 2000 mA */
							 | 
						||
| 
								 | 
							
								#define IOT_PLC_HW_TSFM_LOAD_CAP_2000MA               1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _hw_tsfm_send_para_zc {
							 | 
						||
| 
								 | 
							
								    /* ahead interval time of sending data relative to zero-crossing point,
							 | 
						||
| 
								 | 
							
								     * uint is 1us. less than or equal to IOT_PLC_HW_TSFM_MAX_AHEAD_TIME,
							 | 
						||
| 
								 | 
							
								     * greater than or equal to IOT_PLC_HW_TSFM_MIN_AHEAD_TIME.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint32_t ahead;
							 | 
						||
| 
								 | 
							
								    /* duration of bit data output, uint is 1us
							 | 
						||
| 
								 | 
							
								     * less than or equal to IOT_PLC_HW_TSFM_OUTPUT_MAX_TIME,
							 | 
						||
| 
								 | 
							
								     * greater than or equal to IOT_PLC_HW_TSFM_OUTPUT_MIN_TIME.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint32_t dur_output;
							 | 
						||
| 
								 | 
							
								    /* plc rising edge zc send tsfm flag, it's phase negative zc flag. */
							 | 
						||
| 
								 | 
							
								    uint8_t is_rising;
							 | 
						||
| 
								 | 
							
								} hw_tsfm_send_para_zc_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _hw_tsfm_send_para_load {
							 | 
						||
| 
								 | 
							
								    /* modulate pulse signal high duration time, unit: 1us */
							 | 
						||
| 
								 | 
							
								    uint16_t pulse_high_dur;
							 | 
						||
| 
								 | 
							
								    /* modulate pulse signal low duration time, unit: 1us */
							 | 
						||
| 
								 | 
							
								    uint16_t pulse_low_dur;
							 | 
						||
| 
								 | 
							
								    /* characteristics data per bit duration time, unit: 1us */
							 | 
						||
| 
								 | 
							
								    uint32_t chara_bit_dur;
							 | 
						||
| 
								 | 
							
								    /* load encode type, see IOT_PLC_HW_TSFM_LOAD_ENCODE_XXX */
							 | 
						||
| 
								 | 
							
								    uint8_t  encode         :2,
							 | 
						||
| 
								 | 
							
								    /* reserved */
							 | 
						||
| 
								 | 
							
								             resv           :6;
							 | 
						||
| 
								 | 
							
								} hw_tsfm_send_para_load_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef struct _hw_tsfm_send_para_pa {
							 | 
						||
| 
								 | 
							
								    /* delay offset time, uinit: 1ms */
							 | 
						||
| 
								 | 
							
								    uint32_t offset_time;
							 | 
						||
| 
								 | 
							
								    /* encode frequncy tone num. each tone num is 75MHz/(1 << 14) */
							 | 
						||
| 
								 | 
							
								    uint16_t freq_tone_num;
							 | 
						||
| 
								 | 
							
								} hw_tsfm_send_para_pa_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* send configuration structure */
							 | 
						||
| 
								 | 
							
								typedef struct _hw_tsfm_send_cfg {
							 | 
						||
| 
								 | 
							
								    /* specified launch phase, see IOT_PLC_PHASE_XXX */
							 | 
						||
| 
								 | 
							
								    uint8_t  phase          :2,
							 | 
						||
| 
								 | 
							
								    /* send mode, see IOT_PLC_HW_TSFM_SEND_MODE_XXX. */
							 | 
						||
| 
								 | 
							
								             mod_mode       :4,
							 | 
						||
| 
								 | 
							
								    /* no use. */
							 | 
						||
| 
								 | 
							
								             rsvd           :2;
							 | 
						||
| 
								 | 
							
								    /* send cnt */
							 | 
						||
| 
								 | 
							
								    uint8_t  cnt;
							 | 
						||
| 
								 | 
							
								    /* send mode parameters */
							 | 
						||
| 
								 | 
							
								    union {
							 | 
						||
| 
								 | 
							
								        /* parameters of zc mode */
							 | 
						||
| 
								 | 
							
								        hw_tsfm_send_para_zc_t              zc;
							 | 
						||
| 
								 | 
							
								        /* parameters of load with fixed parameter mode */
							 | 
						||
| 
								 | 
							
								        hw_tsfm_send_para_load_t            load;
							 | 
						||
| 
								 | 
							
								        /* parameters of pa mode */
							 | 
						||
| 
								 | 
							
								        hw_tsfm_send_para_pa_t              pa;
							 | 
						||
| 
								 | 
							
								    } para;
							 | 
						||
| 
								 | 
							
								} hw_tsfm_send_cfg_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma pack(push)      /* save the pack status */
							 | 
						||
| 
								 | 
							
								#pragma pack(1)         /* 1 byte align */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* send configuration structure */
							 | 
						||
| 
								 | 
							
								typedef struct _hw_tsfm_rx_info {
							 | 
						||
| 
								 | 
							
								    /* energy:
							 | 
						||
| 
								 | 
							
								     *  1. for tsfm info, it's ZC average delta, unit: 1us.
							 | 
						||
| 
								 | 
							
								     *  2. for small load branch info, it's the intensity of current change,
							 | 
						||
| 
								 | 
							
								     *     unit is 0.1mA.
							 | 
						||
| 
								 | 
							
								     *  3. for PA branch info, it's the energy that's quantified
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint16_t energy;
							 | 
						||
| 
								 | 
							
								    /* noise:
							 | 
						||
| 
								 | 
							
								     *  1. for tsfm info, it's is invalid
							 | 
						||
| 
								 | 
							
								     *  2. for small load branch info, it's the intensity of current change,
							 | 
						||
| 
								 | 
							
								     *      unit is 0.1mA.
							 | 
						||
| 
								 | 
							
								     *  3. for PA branch info, it's the energy that's quantified
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    uint16_t noise;
							 | 
						||
| 
								 | 
							
								    /* the phase line where the info is received, see IOT_PLC_PHASE_XXX */
							 | 
						||
| 
								 | 
							
								    uint8_t  phase          :2,
							 | 
						||
| 
								 | 
							
								    /* flag to mark if it is reverse zero crossing reception, only for
							 | 
						||
| 
								 | 
							
								     * tsfm info.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								             is_reverse_zc  :1,
							 | 
						||
| 
								 | 
							
								    /* flag to mark if the received tsfm info is valid, only for
							 | 
						||
| 
								 | 
							
								     * tsfm info.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								             is_valid       :1,
							 | 
						||
| 
								 | 
							
								    /* sub signal count
							 | 
						||
| 
								 | 
							
								     * For small load topo signal, it belongs to AM signal.
							 | 
						||
| 
								 | 
							
								     * it has two frequency points, (fc + 50)Hz and (fc- 50)Hz, which are
							 | 
						||
| 
								 | 
							
								     * two sub signals.
							 | 
						||
| 
								 | 
							
								     * for other ways, there is no sub signal
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								             sub_sig_cnt    :2,
							 | 
						||
| 
								 | 
							
								    /* reserved for further use */
							 | 
						||
| 
								 | 
							
								             rsvd           :2;
							 | 
						||
| 
								 | 
							
								    /* sub signal info, only valid for small load branch signal */
							 | 
						||
| 
								 | 
							
								    struct {
							 | 
						||
| 
								 | 
							
								        /* sub signals energy, uint is 0.1mA */
							 | 
						||
| 
								 | 
							
								        uint16_t    energy;
							 | 
						||
| 
								 | 
							
								        /* sub signals noise, uint is 0.1mA */
							 | 
						||
| 
								 | 
							
								        uint16_t    noise;
							 | 
						||
| 
								 | 
							
								    } sub_sig_info[3];
							 | 
						||
| 
								 | 
							
								} hw_tsfm_rx_info_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma pack(pop)   /* restore the pack status */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief the hardware transformer detection listener callback function format
							 | 
						||
| 
								 | 
							
								 * @param data_type:  type of data, see PROTO_HW_TSFM_ID_XXX.
							 | 
						||
| 
								 | 
							
								 * @param data:  hardware receive data.
							 | 
						||
| 
								 | 
							
								 * @param len:  length of data.
							 | 
						||
| 
								 | 
							
								 * @param phase: physical phase, see IOT_PLC_PHASE_XXX.
							 | 
						||
| 
								 | 
							
								 * @param energy: energy, evergy of receive data.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef void (*iot_plc_hw_tsfm_listener_func_t)(uint8_t data_type,
							 | 
						||
| 
								 | 
							
								    uint8_t *data, uint8_t len, hw_tsfm_rx_info_t *rx_info);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_plc_hw_tsfm_register_listener() - register hardware transformer
							 | 
						||
| 
								 | 
							
								 *      detection listener callback function
							 | 
						||
| 
								 | 
							
								 * @param exe_func:   the callback function for hardware transformer detection
							 | 
						||
| 
								 | 
							
								 *      message listening
							 | 
						||
| 
								 | 
							
								 * @return  ERR_FAIL  - operation failed.
							 | 
						||
| 
								 | 
							
								 *          ERR_INVAL - operation invalid.
							 | 
						||
| 
								 | 
							
								 *          ERR_OK    - operation successful.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_plc_hw_tsfm_register_listener(
							 | 
						||
| 
								 | 
							
								    iot_plc_hw_tsfm_listener_func_t exe_func);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_plc_hw_tsfm_send() - hardware transformer send data
							 | 
						||
| 
								 | 
							
								 * @param data: pointer to hardware transformer send data.
							 | 
						||
| 
								 | 
							
								 * @param len: length of data.
							 | 
						||
| 
								 | 
							
								 * @param cfg: send configuration.
							 | 
						||
| 
								 | 
							
								 *      see IOT_PLC_HW_TSFM_SEND_MOD_XXX
							 | 
						||
| 
								 | 
							
								 * @return ERR_OK    - operation successful.
							 | 
						||
| 
								 | 
							
								 * @return otherwise - operation failed, see ERR_XXX.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_plc_hw_tsfm_send(uint8_t *data, uint8_t len,
							 | 
						||
| 
								 | 
							
								    hw_tsfm_send_cfg_t *cfg);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_plc_hw_tsfm_get_transmitter_state() - get hardware transformer
							 | 
						||
| 
								 | 
							
								 *            transmitter state
							 | 
						||
| 
								 | 
							
								 * @return ERR_OK    - transformer is idle.
							 | 
						||
| 
								 | 
							
								 * @return ERR_NOSUPP - transformer no support send.
							 | 
						||
| 
								 | 
							
								 * @return ERR_BUSY - transformer is busy.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint32_t iot_plc_hw_tsfm_get_transmitter_state(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_plc_hw_tsfm_is_3p() - check whether 3-phase tsfm signal
							 | 
						||
| 
								 | 
							
								 *        transmission is supported
							 | 
						||
| 
								 | 
							
								 * @return 1 - supported, 0 - not.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_plc_hw_tsfm_is_3p();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_plc_hw_tsfm_rising_is_enable() - plc rising edge zc send tsfm is
							 | 
						||
| 
								 | 
							
								 *        supported
							 | 
						||
| 
								 | 
							
								 * @return 1 - supported, 0 - not.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_plc_hw_tsfm_rising_is_enable();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief iot_plc_hw_tsfm_get_supp_mode() - get support send mode
							 | 
						||
| 
								 | 
							
								 * @return support send mode
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_plc_hw_tsfm_get_supp_mode(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief   iot_plc_hw_tsfm_get_load_capacity() - get support load capacity
							 | 
						||
| 
								 | 
							
								 * @return  load capacity, see IOT_PLC_HW_TSFM_LOAD_CAP_XXX
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								uint8_t iot_plc_hw_tsfm_get_load_capacity(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* IOT_PLC_HW_TSFM_API_H */
							 |