Files
kunlun/app/smart_grid/inc/iot_sg_cfg.h
2024-09-28 14:24:04 +08:00

559 lines
21 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_SG_CFG_H
#define IOT_SG_CFG_H
/* iot includes */
#include "iot_pib_api.h"
#include "iot_utils_api.h"
/* os shim includes */
#include "os_types_api.h"
/* smart grid internal header files */
#include "iot_sg_fr.h"
#ifdef __cplusplus
extern "C" {
#endif
/* pack for the structures in the whole file */
#pragma pack(push) // save the pack status
#pragma pack(1) // 1 byte align
/* WT-SG-11.0.0.0-CCO-xxxxxxxx xxxxxxxx = brief fw feature list*/
#define IOT_SGAPP_FW_VER_STR_LEN (32)
#if RUN_IN_PSRAM
/* defines the sg app supported max number of whitelist */
#define IOT_SG_APP_WL_MAX_NUM (2039)
/* sta collect parameter v2.8 max task id */
#define IOT_SG_STA_CLCT_MAX_TASK_CNT (8)
/* defines the diff data max length in pib */
#define IOT_SG_PIB_DIFF_DATA_MAX_LEN (3255)
#else
#define IOT_SG_APP_WL_MAX_NUM (1)
#define IOT_SG_STA_CLCT_MAX_TASK_CNT (1)
#define IOT_SG_PIB_DIFF_DATA_MAX_LEN (153)
#endif
/* define hardware tsfm detecting mode */
#define IOT_SG_STA_HW_TSFM_MODE_PLC 1 /* info get from PLCLib */
#define IOT_SG_STA_HW_TSFM_MODE_IC 2 /* info get from external IC */
/* sta collect di count */
#define IOT_SG_STA_CLCT_DI_CNT_SINGLE_645 7
#define IOT_SG_STA_CLCT_DI_CNT_THREE_645 17
/* 698 sta collect di count */
#define IOT_SG_STA_CLCT_DI_CNT_SINGLE_698 6
#define IOT_SG_STA_CLCT_DI_CNT_THREE_698 11
/* save bcast collcet max count */
#define IOT_SG_BCAST_CLCT_MAX_CNT (16)
/* save bcast info max length */
#define IOT_SG_CLCT_DATA_MAX_LENGTH (35)
/* define parent address type */
#define IOT_SG_STA_PA_ADDR_TYPE_INVALID 0
#define IOT_SG_STA_PA_ADDR_TYPE_PO 1
#define IOT_SG_STA_PA_ADDR_TYPE_TSFM 2
/* vendor device sn max length */
#define IOT_SG_VENDOR_DEVICE_SN_LEN 64
/* descriptor of white list layout structure in PIB */
typedef struct _iot_sg_wl_pib_entry {
/* mac address of secondary node */
uint8_t mac[IOT_MAC_ADDR_LEN];
/* protocol the node supports */
uint8_t proto_type :4,
/* auto remove white list entry */
auto_rm :1,
/* reserved for further use */
reserved :3;
} iot_sg_wl_pib_entry_t;
/* di and result length */
typedef struct _iot_sg_di_info_pib {
/* di index */
uint8_t di_index;
/* meter reading result length */
uint8_t di_result_len;
} iot_sg_di_info_pib_t;
/* descriptor of 645 protocol sta collect parameter layout structure in PIB */
typedef struct _iot_sg_645_clct_param_pib {
/* 0 - disabled, 1 - enabled */
uint8_t enabled :1,
/* if sta clct param is valid, 0 invalid, 1 valid */
valid :1,
/* three phase meter value */
three_value :1,
rsvd :5;
/* unit is 1min */
uint8_t clct_period;
/* di count of single phase meter */
uint8_t di_cnt_single;
/* di result total length of single phase meter */
uint8_t di_result_len_single;
/* di information of single phase meter */
iot_sg_di_info_pib_t di_single[IOT_SG_STA_CLCT_DI_CNT_SINGLE_645];
/* di count of three phase meter */
uint8_t di_cnt_three;
/* di result total length of three phase meter */
uint8_t di_result_len_three;
/* di information of three phase meter */
iot_sg_di_info_pib_t di_three[IOT_SG_STA_CLCT_DI_CNT_THREE_645];
/* the crc of collect parameter,
* for verifying whether local parameter and cctt's parameter are the same.
*/
uint32_t crc;
} iot_sg_645_clct_param_pib_t;
/* descriptor of 698 protocol sta collect parameter layout structure in PIB */
typedef struct _iot_sg_698_clct_param_pib {
/* 0 - disabled, 1 - enabled */
uint8_t enabled :1,
/* if sta clct param is valid, 0 invalid, 1 valid */
valid :1,
/* three phase meter value */
three_value :1,
rsvd :5;
/* unit is 1min */
uint8_t clct_period;
/* di count of single phase meter */
uint8_t di_cnt_single;
/* di result total length of single phase meter */
uint8_t di_result_len_single;
/* di information of single phase meter */
iot_sg_di_info_pib_t di_single[IOT_SG_STA_CLCT_DI_CNT_SINGLE_698];
/* di count of three phase meter */
uint8_t di_cnt_three;
/* di result total length of three phase meter */
uint8_t di_result_len_three;
/* di information of three phase meter */
iot_sg_di_info_pib_t di_three[IOT_SG_STA_CLCT_DI_CNT_THREE_698];
/* reserved */
uint8_t reserved[50];
/* the crc of collect parameter,
* for verifying whether local parameter and cctt's parameter are the same.
*/
uint32_t crc;
} iot_sg_698_clct_param_pib_t;
/* descriptor of sta collect parameter layout head structure v2.8 in PIB */
typedef struct _iot_sg_clct_param_v28_hdr_pib {
/* 645 protocol sta collect parameter */
iot_sg_645_clct_param_pib_t clct_param_645;
/* 698 protocol sta collect parameter */
iot_sg_698_clct_param_pib_t clct_param_698;
} iot_sg_clct_param_v28_hdr_pib_t;
/* set score parameter */
typedef struct _iot_sg_cco_score_parameter {
/* flag to mark if score report enable */
uint8_t score_enable_flag;
/* score report threshold value */
uint8_t score_threshold;
/* if 0 - every day start, others - every month start. BIN format */
uint8_t day;
/* BIN format */
uint8_t hour;
/* BIN format */
uint8_t minute;
} iot_sg_score_parameter_t;
typedef struct _iot_sg_uart_config_param_pib {
/* uart baud rate type, see IOT_SG_CCO_BAUD_IDX_XXX */
uint8_t baud_rate :4,
rsvd1 :3,
/* if uart baud rate type is vaild */
baud_rate_vaild :1;
/* uart baud rate recover time, unit is 1min */
uint16_t rec_time;
/* hardware reset cnt for error baud rate */
uint8_t reset_cnt;
/* uart max baud rate type, see IOT_SG_CCO_BAUD_XXX */
uint8_t max_baud_rate :4,
rsvd2 :3,
/* if uart max baud rate type is vaild */
max_baud_vaild :1;
uint8_t rsvd3[4];
} iot_sg_uart_config_param_pib_t;
typedef struct _iot_sg_module_reset_info {
/* power down event valid time, unit is 1s, default 5s. */
uint8_t pd_valid_time;
/* module power down count */
uint16_t pd_cnt;
} iot_sg_module_reset_info_t;
typedef struct _iot_sg_vendor_device_sn_info {
/* vendor device sn length */
uint8_t vendor_device_sn_len;
/* vendor device sn info */
uint8_t vendor_device_sn_info[IOT_SG_VENDOR_DEVICE_SN_LEN];
} iot_sg_vendor_device_sn_info_t;
typedef struct _iot_sg_bcast_collect_task_t {
/* save task bitmap */
uint8_t task_bitmap[2];
/* save collect task info */
uint8_t task_info[IOT_SG_BCAST_CLCT_MAX_CNT][IOT_SG_CLCT_DATA_MAX_LENGTH];
} iot_sg_bcast_collect_task_t;
typedef struct _iot_sg_cco_feature {
/* white list state, see IOT_CLI_SG_WL_STATE_XXX */
uint32_t whitelist_state :2,
/* support protocol version id, see IOT_SG_CCO_CCTT_PROTO_XXX */
cctt_proto :3,
/* national standard 14H_F01 enable, 09 standard normally use this */
en_cco_active_read_meter :1,
/* save white list in flash */
en_save_whitelist :1,
/* event report disabled flag: 1 - disabled, 0 - allowed */
evt_rpt_disabled :1,
/* south china certification mode */
en_sp_cert_mode :1,
/* module on line with module addr only, not use meter address */
en_use_module_addr_only :1,
/* secondary node monitor timeout limit in second */
sec_node_monitor_timeout :16,
/* whether enable transformer detect */
tsfm_detect_enable :1,
/* used for esp code */
month_flag :1,
/* see IOT_SG_CCO_ESP_XXX */
esp_code :4;
/* bcast interval table */
uint8_t bcast_interval_table :2,
/* meter reading only, no other works */
mr_only_enable :1,
/* link load level */
link_load_level :2,
/* timer restart network */
timer_restart_nw :1,
/* force cco for single mode type */
force_single_type :1,
/* rsvd */
rsvd :1;
} iot_sg_cco_feature_t;
typedef struct _iot_sg_sta_feature {
/* 13 new standard */
uint32_t en_np_13_3762 :1,
/* 09 old standard */
en_np_09_3762 :1,
/* 2016 south standard */
en_sp_2016 :1,
/* national certification mode */
en_np_cert_mode :1,
/* south china certification mode */
en_sp_cert_mode :1,
/* module on line with module addr only, not use meter address */
en_use_module_addr_only :1,
/* pm driver detect mode select, if set, the pm driver will check whether it
* is a type I collector.
*/
pm_detect_mpde_sel :1,
/* only for type II collector, whether enable meter search for 97 protocols.
* 1-enable.
*/
ct2_sm97_en :1,
/* if set, if detect done multiple times without meter detected, allow use
* module address to join the network first.
*/
allow_use_module_addr :1,
/* reserved for future use */
rsvd0 :4,
/* only for type II collector. if set, if detect done one time without meter
* detected, not allow use virtual meter address to join the network first.
*/
ct2_virtual_disable :1,
/* only for meter. if set, meter extended function enable.
*/
en_ext_func :1,
/* hardware tsfm detecting mode, see IOT_SG_STA_HW_TSFM_MODE_XXX */
hw_tsfm_mode :2,
/* reserved for future use */
rsvd1 :4,
/* only for type II collector. if set, if detect done one time without meter
* detected, allow use collector address to join the network first. Its
* priority is higher than ct2_virtual mode.
*/
ct2_collector_addr_en :1,
/* reserved for future use */
reserve :10;
} iot_sg_sta_feature_t;
/* cco role common configuration definition */
typedef struct _iot_sg_cco_cmn_cfg {
/* enabled features */
iot_sg_cco_feature_t fr;
} iot_sg_cco_cmn_cfg_t;
/* app layer CCO role read-only section layout in PIB */
typedef struct _iot_sg_cco_app_pib_ro {
/* common configuration */
iot_sg_cco_cmn_cfg_t cfg;
} iot_sg_cco_app_pib_ro_t;
/* sta collect parameter data v2.8 in PIB */
typedef struct _iot_sg_clct_param_v28_info {
/* sta collect parameter data v2.8 */
iot_sg_clct_param_v28_hdr_pib_t clct_param_v28[IOT_SG_STA_CLCT_MAX_TASK_CNT];
/* sta collect parameter task id bitmap v2.8, correspond to white list */
uint8_t clct_task_id_bitmap[IOT_SG_APP_WL_MAX_NUM];
} iot_sg_clct_param_v28_info_t;
typedef struct _iot_sg_edge_computing_pib {
/* flag to mark if edge computing set enable */
uint8_t edge_computing_enable : 1,
/* overvoltage monitor switch, 0 - open, others - close */
overvoltage_switch : 1,
/* undervoltage monitor switch, 0 - open, others - close */
undervoltage_switch : 1,
/* clock second pulse monitor switch, 0 - open, others - close */
pulse_switch : 1,
/* power meter health status monitor switch, 0 - open, others - close */
health_status_switch : 1,
/* reserved for future */
rsvd : 3;
/* overvoltage monitor threshold, unit is volt */
uint16_t overvoltage_threshold;
/* overvoltage monitor period, unit is 1min */
uint16_t overvoltage_period;
/* overvoltage collect abnormal report round */
uint8_t overvoltage_rpt_round;
/* undervoltage monitor threshold, unit is volt */
uint16_t undervoltage_threshold;
/* undervoltage monitor period, unit is 1min */
uint16_t undervoltage_period;
/* undervoltage collect abnormal report round */
uint8_t undervoltage_rpt_round;
/* clock second pulse monitor threshold, unit is 1ms */
uint16_t pulse_threshold;
/* power meter used time limit threshold, unit is year */
uint8_t used_limit_threshold;
} iot_sg_edge_computing_pib_t;
/* app layer CCO role writable section layout in PIB */
typedef struct _iot_sg_cco_app_pib_rw {
/* white list info */
iot_sg_wl_pib_entry_t white_list[IOT_SG_APP_WL_MAX_NUM];
/* secondary node monitor timeout limit in second, set by cctt */
uint32_t sec_node_monitor_timeout :16,
/* event report disabled flag: 1 - disabled, 0 - allowed. */
evt_rpt_disabled :1,
/* white list state, see IOT_CLI_SG_WL_STATE_XXX */
whitelist_state :2,
/* equipment service provider, see IOT_SG_CCO_ESP_XXX */
esp_code :6,
/* sec node register active auto */
auto_reg_active :1,
/* zc notify valid flag, 0 - invalid, 1 - valid */
zc_notify_valid :1,
/* zc notify enable: 0 - disabled, 1 - enable */
zc_notify_enable :1,
/* abnormal electric current report enable for neutralwire and livewire */
nli_enable :1,
/* reserved for future use */
reserve :3;
/* major node mac for driver */
uint8_t major_node_mac[IOT_MAC_ADDR_LEN];
/* magic marker */
uint32_t mark_magic;
/* bcast meter reading max concurrent count */
uint8_t max_bcast_con_count;
/* secondary node monitor timeout limit in second, set by cli */
uint16_t sec_node_monitor_timeout_cli;
/* correct time interval, unit is 1ms */
uint32_t correct_sta_time_interval;
/* 645 protocol sta collect parameter */
iot_sg_645_clct_param_pib_t clct_param_645;
/* bcast collect task */
iot_sg_bcast_collect_task_t collect_task;
/* pm score parameter */
iot_sg_score_parameter_t score_param;
/* 698 protocol sta collect parameter */
iot_sg_698_clct_param_pib_t clct_param_698;
/* uart config parameter */
iot_sg_uart_config_param_pib_t uart_param;
/* module reset infomation */
iot_sg_module_reset_info_t reset_info;
/* if the value is valid the repeater in the range are allowed to join
* network.
* if the value is invalid then all repeater are allowed to join network.
*
* 00:00:00:00:00:00 and FF:FF:FF:FF:FF:FF are invalid data.
* big-endian.
*/
uint8_t repeater_addr_start[IOT_MAC_ADDR_LEN];
uint8_t repeater_addr_end[IOT_MAC_ADDR_LEN];
/* vendor device sn infomation */
iot_sg_vendor_device_sn_info_t vendor_device_sn;
/* diff data valid index, 0 is invalid */
uint8_t diff_valid_index;
union {
/* diff data max length */
uint8_t diff_max[IOT_SG_PIB_DIFF_DATA_MAX_LEN];
iot_sg_clct_param_v28_info_t clct_param_info;
} diff;
iot_sg_edge_computing_pib_t edge_set_info;
/* driver specific persistent storage */
uint8_t drv[IOT_PIB_CCO_APP_WRITE_SECTION_SIZE - \
sizeof(iot_sg_wl_pib_entry_t) * IOT_SG_APP_WL_MAX_NUM - \
sizeof(uint32_t) - \
IOT_MAC_ADDR_LEN - \
sizeof(uint32_t) - \
sizeof(uint8_t) - \
sizeof(uint16_t) - \
sizeof(uint32_t) - \
sizeof(iot_sg_645_clct_param_pib_t) - \
sizeof(iot_sg_bcast_collect_task_t) - \
sizeof(iot_sg_score_parameter_t) - \
sizeof(iot_sg_698_clct_param_pib_t) - \
sizeof(iot_sg_uart_config_param_pib_t) - \
sizeof(iot_sg_module_reset_info_t) - \
IOT_MAC_ADDR_LEN - \
IOT_MAC_ADDR_LEN - \
sizeof(iot_sg_vendor_device_sn_info_t) - \
sizeof(uint8_t) - \
IOT_SG_PIB_DIFF_DATA_MAX_LEN -\
sizeof(iot_sg_edge_computing_pib_t)];
} iot_sg_cco_app_pib_rw_t;
/* sta role common configuration definition */
typedef struct _iot_sg_sta_cmn_cfg {
/* enabled features */
iot_sg_sta_feature_t fr;
/* driver id, see IOT_SG_STA_DRV_ID_XXX */
uint8_t drv_id;
} iot_sg_sta_cmn_cfg_t;
/* app layer STA role read-only section layout in PIB */
typedef struct _iot_sg_sta_app_pib_ro {
/* common configuration */
iot_sg_sta_cmn_cfg_t cfg;
} iot_sg_sta_app_pib_ro_t;
/* app layer STA role save info */
typedef struct _iot_sg_sta_app_info {
/* flag of sta power off event */
uint8_t power_off_flag : 1,
/* flag of power off event time valid */
power_off_time_flag : 1,
/* flag of meter phase. 1 mean that meter is three phase meter,
* 0 mean that meter is not three phase meter and when module type is
* power meter flag is available.
*/
is_three_phase : 1,
/* flag of lock time valid */
lock_time_flag : 1,
/* flag to mark if enable join check, 1 - enable, 0 - disable */
join_check : 1,
/* parent address type, see IOT_SG_STA_PA_ADDR_TYPE_XXX */
pa_type : 2,
/* flag of auto correct time */
auto_corr : 1;
/* extend load curve period, uint is 1min */
uint8_t ext_lr_period;
/* delta mode, 0 - default mode, 1 - hlj mode */
uint16_t delta_mode : 1,
/* delta threshold, uint is 1 min */
delta_threshold : 10,
/* extend neutral wire and live wire abnormal detect,
* 0 - disable, 1 - enable.
*/
ext_nli_en : 1,
/* flag ext_nli_en valid */
ext_nli_valid : 1,
/* reserve for future */
reserve : 3;
/* tsfm address, little-endian */
uint8_t tsfm_addr[IOT_MAC_ADDR_LEN];
/* physical phase */
uint8_t phase;
/* parent address, little-endian */
uint8_t parent_addr[IOT_MAC_ADDR_LEN];
/* power off event time */
uint16_t power_off_year;
uint8_t power_off_mon;
uint8_t power_off_day;
uint8_t power_off_hour;
uint8_t power_off_min;
uint8_t power_off_sec;
/* the delta time between correct time and RTC, uint is 1s */
int64_t tm_sta_delta;
/* last delta time pm address, big-endian */
uint8_t pm_addr[IOT_MAC_ADDR_LEN];
/* net lock time, uint is 1min.
* 0 means no lock.
*/
uint16_t net_lock_time;
/* the lock time of abnormal leave net, uint is 1min.
* 0 means no lock.
*/
uint16_t abn_lock_time;
} iot_sg_sta_app_info_t;
/* app layer STA role writable section layout in PIB */
typedef struct _iot_sg_sta_app_pib_rw {
iot_sg_sta_app_info_t sta;
/* driver specific persistent storage */
uint8_t drv[IOT_PIB_STA_APP_WRITE_SECTION_SIZE - \
sizeof(iot_sg_sta_app_info_t)];
} iot_sg_sta_app_pib_rw_t;
/* app layer read-only section layout in PIB */
typedef struct _iot_sg_app_pib_ro {
/* cco configuration */
iot_sg_cco_app_pib_ro_t cco_pib;
/* power meter configuration */
iot_sg_sta_app_pib_ro_t pm_pib;
/* type ii collector configuration */
iot_sg_sta_app_pib_ro_t ct2_pib;
/* sta test configuration */
iot_sg_sta_app_pib_ro_t sta_test_pib;
} iot_sg_app_pib_ro_t;
#pragma pack(pop)
/* CCO access handle descriptor */
typedef struct _iot_sg_cco_app_pib {
/* pointer to read-only section of CCO in PIB */
iot_sg_cco_app_pib_ro_t *ro;
/* pointer to writable section of CCO in PIB */
iot_sg_cco_app_pib_rw_t *rw;
} iot_sg_cco_app_pib_t;
/* STA access handle descriptor */
typedef struct _iot_sg_sta_app_pib {
/* pointer to read-only section of STA in PIB */
iot_sg_sta_app_pib_ro_t *ro;
/* pointer to writable section of STA in PIB */
iot_sg_sta_app_pib_rw_t *rw;
} iot_sg_sta_app_pib_t;
#ifdef __cplusplus
}
#endif
#endif /* IOT_SG_CFG_H */