269 lines
9.8 KiB
C
Executable File
269 lines
9.8 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_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 */
|