559 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			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 */
							 | 
						||
| 
								 | 
							
								
							 |