4976 lines
		
	
	
		
			173 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			4976 lines
		
	
	
		
			173 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_SG_CCO_DRV_API_H
 | 
						|
#define IOT_SG_CCO_DRV_API_H
 | 
						|
 | 
						|
/* os shim includes */
 | 
						|
#include "os_types_api.h"
 | 
						|
 | 
						|
/* common includes */
 | 
						|
#include "iot_pkt_api.h"
 | 
						|
#include "iot_uart_api.h"
 | 
						|
#include "iot_sg_drv_api.h"
 | 
						|
#include "iot_plc_msg_api.h"
 | 
						|
#include "iot_sg_cfg.h"
 | 
						|
#include "iot_plc_msg_cco_api.h"
 | 
						|
/* framework protocol header files */
 | 
						|
#include "iot_sg_proto.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* define type of app proto, gw */
 | 
						|
#define IOT_SG_CCO_APP_PROTO_GW                 0
 | 
						|
/* define type of app proto, nw */
 | 
						|
#define IOT_SG_CCO_APP_PROTO_NW                 1
 | 
						|
 | 
						|
/* invalid white list entry index */
 | 
						|
#define IOT_SG_CCO_WL_INVAL_INDEX               0xFFFF
 | 
						|
 | 
						|
/* max support count of meters*/
 | 
						|
#define IOT_SG_MAX_METER_COUNT                  IOT_SG_APP_WL_MAX_NUM
 | 
						|
#define IOT_SG_MAX_STA_COUNT                    PLC_NETWORK_SCALE
 | 
						|
 | 
						|
/* start/end index of white list entry */
 | 
						|
#define IOT_SG_WL_ENTRY_START_INDEX             1
 | 
						|
#define IOT_SG_WL_ENTRY_END_INDEX               (IOT_SG_WL_ENTRY_START_INDEX \
 | 
						|
                                                 + IOT_SG_APP_WL_MAX_NUM - 1)
 | 
						|
 | 
						|
/* defines the sg app supported max number of whitelistii */
 | 
						|
#define IOT_SG_CCO_APP_WLII_MAX_NUM             1015
 | 
						|
 | 
						|
/* start/end index of white list ii entry */
 | 
						|
#define IOT_SG_CCO_WLII_ENTRY_START_INDEX       1
 | 
						|
#define IOT_SG_CCO_WLII_ENTRY_END_INDEX    (IOT_SG_CCO_WLII_ENTRY_START_INDEX \
 | 
						|
                                            + IOT_SG_CCO_APP_WLII_MAX_NUM - 1)
 | 
						|
 | 
						|
/* start index of secondary node */
 | 
						|
#define IOT_SG_METER_START_INDEX                1
 | 
						|
#define IOT_SG_STA_START_INDEX                  1
 | 
						|
#define IOT_SG_METER_END_INDEX                  (IOT_SG_METER_START_INDEX \
 | 
						|
                                                 + IOT_SG_MAX_METER_COUNT - 1)
 | 
						|
#define IOT_SG_STA_END_INDEX                    (IOT_SG_STA_START_INDEX \
 | 
						|
                                                 + IOT_SG_MAX_STA_COUNT - 1)
 | 
						|
 | 
						|
/* define maximum number of drivers in the table */
 | 
						|
#define IOT_SG_CCO_DRV_TABLE_SIZE       4
 | 
						|
 | 
						|
/* driver type */
 | 
						|
#define IOT_SG_CCTT_DRV_ID_SG           0
 | 
						|
#define IOT_SG_CCTT_DRV_ID_SPG          1
 | 
						|
#define IOT_SG_CCTT_DRV_ID_CLI          2
 | 
						|
 | 
						|
/* max 645 packet count in a 3762 packet for sg concurrent meter reading */
 | 
						|
#define IOT_SG_CON_MR_MAX_645_CNT   13
 | 
						|
#define IOT_SG_CON_MR_MAX_69845_LEN 2000
 | 
						|
 | 
						|
/* caller app type, cctt driver */
 | 
						|
#define IOT_SG_CALLER_TYPE_CCTT         (1 << 0)
 | 
						|
/* caller app type, cli driver */
 | 
						|
#define IOT_SG_CALLER_TYPE_CLI          (1 << 1)
 | 
						|
/* caller app type, cctt driver */
 | 
						|
#define IOT_SG_CALLER_TYPE_CLI2         (1 << 2)
 | 
						|
/* caller app type, cctt driver */
 | 
						|
#define IOT_SG_CALLER_TYPE_CTRL         (1 << 3)
 | 
						|
/* caller app type, cctt driver */
 | 
						|
#define IOT_SG_CALLER_TYPE_CUS          (1 << 4)
 | 
						|
#define IOT_SG_CALLER_TYPE_ALL          (IOT_SG_CALLER_TYPE_CLI | \
 | 
						|
                                         IOT_SG_CALLER_TYPE_CLI2 | \
 | 
						|
                                         IOT_SG_CALLER_TYPE_CCTT | \
 | 
						|
                                         IOT_SG_CALLER_TYPE_CTRL | \
 | 
						|
                                         IOT_SG_CALLER_TYPE_CUS)
 | 
						|
 | 
						|
#define IOT_SG_INVALID_CCTT_SN          (0xFFFF)
 | 
						|
 | 
						|
/* read meter type - cctt active read meter */
 | 
						|
#define IOT_SG_RMT_CCTT          0
 | 
						|
/* read meter type - router active read meter */
 | 
						|
#define IOT_SG_RMT_ROUTER        1
 | 
						|
/* read meter type - cctt active concurrently read meter */
 | 
						|
#define IOT_SG_RMT_CCTT_CON      2
 | 
						|
/* read meter type - cctt active concurrently read sta module */
 | 
						|
#define IOT_SG_RMT_CCTT_CON_STA  3
 | 
						|
 | 
						|
/* print at most 80 byte for debug log */
 | 
						|
#define IOT_SG_CCO_LOG_BYTE     80
 | 
						|
 | 
						|
#define IOT_SG_CCO_MSG_SHORT_BUF_SIZE   128
 | 
						|
#define IOT_SG_CCO_MSG_LONG_BUF_SIZE    512
 | 
						|
 | 
						|
#define IOT_SG_CCO_DEV_TYPE_COLLECTOR           (0)
 | 
						|
#define IOT_SG_CCO_DEV_TYPE_METER               (1)
 | 
						|
#define IOT_SG_CCO_DEV_TYPE_STA                 (2)
 | 
						|
 | 
						|
/* router working or stop */
 | 
						|
#define IOT_SG_CCO_ROUTER_WORK_FLAG_STOP        (0)
 | 
						|
#define IOT_SG_CCO_ROUTER_WORK_FLAG_WORKING     (1)
 | 
						|
 | 
						|
/* router work type: meter reading, search meter, upgrade and reserved type */
 | 
						|
#define IOT_SG_CCO_ROUTER_WORK_TYPE_MR          (0)
 | 
						|
#define IOT_SG_CCO_ROUTER_WORK_TYPE_SM          (1)
 | 
						|
#define IOT_SG_CCO_ROUTER_WORK_TYPE_UPGRADE     (2)
 | 
						|
#define IOT_SG_CCO_ROUTER_WORK_TYPE_RESVD       (3)
 | 
						|
 | 
						|
/* transformer detect status */
 | 
						|
#define IOT_SG_CCO_TSFM_DETECT_DONE             (0)
 | 
						|
#define IOT_SG_CCO_TSFM_DETECT_DOING            (1)
 | 
						|
 | 
						|
/* node state change */
 | 
						|
#define IOT_SG_CCO_CHG_STATE_LEAVE              (0)
 | 
						|
#define IOT_SG_CCO_CHG_STATE_JOIN               (1)
 | 
						|
#define IOT_SG_CCO_CHG_STATE_REG                (2)
 | 
						|
#define IOT_SG_CCO_CHG_STATE_OFFLINE            (3)
 | 
						|
#define IOT_SG_CCO_CHG_STATE_EVT_RPT            (4)
 | 
						|
#define IOT_SG_CCO_CHG_STATE_SEARCH_RPT         (5)
 | 
						|
 | 
						|
/* event type */
 | 
						|
#define IOT_SG_CCO_EVENT_NORMAL                 (0)
 | 
						|
#define IOT_SG_CCO_EVENT_POWER_DOWN             (1)
 | 
						|
#define IOT_SG_CCO_EVENT_POWER_UP               (2)
 | 
						|
#define IOT_SG_CCO_EVENT_POWER_DOWN_C           (3)
 | 
						|
#define IOT_SG_CCO_EVENT_POWER_UP_C             (4)
 | 
						|
#define IOT_SG_CCO_EVENT_TSFM                   (5)
 | 
						|
#define IOT_SG_CCO_EVENT_TSFM_CHG               (6)
 | 
						|
#define IOT_SG_CCO_EVENT_SCORE                  (7)
 | 
						|
#define IOT_SG_CCO_EVENT_LP                     (8)
 | 
						|
#define IOT_SG_CCO_EVENT_CTRL                   (9)
 | 
						|
#define IOT_SG_CCO_EVENT_OPPOSITE_PHASE         (10)
 | 
						|
#define IOT_SG_CCO_EVENT_NLI_ABNORMAL           (11)
 | 
						|
 | 
						|
/* station state */
 | 
						|
#define IOT_SG_CCO_STA_STATE_JOIN               (1)
 | 
						|
#define IOT_SG_CCO_STA_STATE_LEAVE              (2)
 | 
						|
#define IOT_SG_CCO_STA_STATE_OFFLINE            (3)
 | 
						|
#define IOT_SG_CCO_STA_STATE_ONLINE             (4)
 | 
						|
 | 
						|
/* reason of station leave network is unknown */
 | 
						|
#define IOT_SG_STA_STATE_CHG_REASON_UNKNOWN     (0)
 | 
						|
/* reason of station leave network is PM off */
 | 
						|
#define IOT_SG_STA_STATE_CHG_REASON_PM_OFF      (1)
 | 
						|
/* reason of station leave network is channel quality change */
 | 
						|
#define IOT_SG_STA_STATE_CHG_REASON_CQC         (2)
 | 
						|
 | 
						|
/* sec node monitor max duration for 13H_F1 unit is 1s */
 | 
						|
#define IOT_SG_CCO_MR_MAX_TIMEOUT_AFN_13        (30)
 | 
						|
/* sec node monitor max duration for 14H_F1, unit is 1s */
 | 
						|
#define IOT_SG_CCO_MR_MAX_TIMEOUT_AFN_14        (30)
 | 
						|
/* sec node monitor max duration for F1H_F1, unit is 1s */
 | 
						|
#define IOT_SG_CCO_MR_MAX_TIMEOUT_AFN_F1        (90)
 | 
						|
#define IOT_SG_CCO_MR_MAX_TIMEOUT_AFN_F1_LESS   (45)
 | 
						|
/* sec node monitor max duration for F1H_F1, unit is 1s */
 | 
						|
#define IOT_SG_CCO_MR_MAX_TIMEOUT_AFN_F1_ZHEJIANG (30)
 | 
						|
/* sec node monitor max duration for F1H_F1, unit is 1s */
 | 
						|
#define IOT_SG_CCO_MR_MAX_TIMEOUT_AFN_F1_FJ_HENAN (60)
 | 
						|
/* sec node monitor max duration for ext task, unit is 1s */
 | 
						|
#define IOT_SG_CCO_MR_MAX_TIMEOUT_EXT_TASK_LESS   (10)
 | 
						|
 | 
						|
/* stop sec node reg reason */
 | 
						|
#define IOT_SG_CCO_STOP_SEC_NODE_REG_CCTT       (1)
 | 
						|
#define IOT_SG_CCO_STOP_SEC_NODE_REG_CLI        (2)
 | 
						|
#define IOT_SG_CCO_STOP_SEC_NODE_REG_TIMEOUT    (3)
 | 
						|
#define IOT_SG_CCO_STOP_SEC_NODE_REG_POWEROFF   (4)
 | 
						|
 | 
						|
/* CCO's state */
 | 
						|
#define IOT_SG_CCO_STATE_IS_NOT_READY           (0)
 | 
						|
#define IOT_SG_CCO_STATE_IS_READY               (1)
 | 
						|
 | 
						|
/* equipment service provider */
 | 
						|
#define IOT_SG_CCO_ESP_AUTO                     (0)
 | 
						|
/* automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_BEIJING                  (1)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_HUNAN                    (2)
 | 
						|
/* automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_SHANXI                   (3)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_NINGXIA                  (4)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_SICHUAN                  (5)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_HUBEI                    (6)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_PW                       (7)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_HENAN                    (8)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_LN                       (9)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_SH                       (10)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_JIBEI                    (11)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_HEBEI                    (12)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_XIAN                     (13)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_HX                       (14)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_XIAN_D                   (15)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_GUANGZHOU                (16)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_GUANGDONG                (17)
 | 
						|
/* automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_BEIJING_WL               (18)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_ZHEJIANG                 (19)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_JIANGSU                  (20)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_YUNNAN                   (21)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_GUIZHOU                  (22)
 | 
						|
/* non automatic recognition for nw shenhuayingyong */
 | 
						|
#define IOT_SG_CCO_ESP_SHYY_SPG                 (23)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_FUJIAN                   (24)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_XINJIANG                 (25)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_HEILONGJIANG             (26)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_ZHHW                     (27)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_SHANDONG                 (28)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_SXHW                     (29)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_MENGXI                   (30)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_GANSU                    (31)
 | 
						|
/* invalid number of equipment service provider */
 | 
						|
#define IOT_SG_CCO_ESP_INVALID                  (IOT_SG_CCO_ESP_GANSU + 1)
 | 
						|
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_MENGDONG_LC              (40)
 | 
						|
/* non automatic recognition */
 | 
						|
#define IOT_SG_CCO_ESP_CHONGQING                (41)
 | 
						|
 | 
						|
/* meter status in router meter reading progress */
 | 
						|
#define IOT_SG_CCO_RT_MR_STATE_UNREAD           (0)
 | 
						|
#define IOT_SG_CCO_RT_MR_STATE_BUSY             (1)
 | 
						|
#define IOT_SG_CCO_RT_MR_STATE_SUCCESS          (2)
 | 
						|
#define IOT_SG_CCO_RT_MR_STATE_FAILED           (3)
 | 
						|
 | 
						|
/* report router status changed event to cctt */
 | 
						|
#define IOT_SG_CCO_RT_CHG_STOP_READ_METER       (1)
 | 
						|
#define IOT_SG_CCO_RT_CHG_STOP_SEARCH_METER     (2)
 | 
						|
#define IOT_SG_CCO_RT_CHG_STOP_TSFM_DETECT      (3)
 | 
						|
#define IOT_SG_CCO_RT_CHG_STOP_BD_DETECT        (245)
 | 
						|
#define IOT_SG_CCO_RT_CHG_STOP_LP_QUERY         (246)
 | 
						|
 | 
						|
/* invalid task id */
 | 
						|
#define IOT_SG_INVALID_TASK_ID                  (0xFFFF)
 | 
						|
 | 
						|
/* read meter result */
 | 
						|
#define IOT_SG_CCO_MR_SUCCESS                   (0)
 | 
						|
#define IOT_SG_CCO_MR_FAIL                      (1)
 | 
						|
 | 
						|
/* extension task result */
 | 
						|
#define IOT_SG_CCO_EXT_TASK_SUCCESS             (0)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_FAIL                (1)
 | 
						|
 | 
						|
/* define the status of predict meter reading */
 | 
						|
#define IOT_SG_CCO_PREDICT_MR_STATE_IDLE        (0)
 | 
						|
#define IOT_SG_CCO_PREDICT_MR_STATE_RUN         (1)
 | 
						|
 | 
						|
/* define the status of routing active meter reading */
 | 
						|
#define IOT_SG_CCO_RT_AMR_STATE_INIT            (0)
 | 
						|
#define IOT_SG_CCO_RT_AMR_STATE_RUN             (1)
 | 
						|
#define IOT_SG_CCO_RT_AMR_STATE_SUSPEND         (2)
 | 
						|
 | 
						|
/* router meter reading message */
 | 
						|
#define IOT_SG_CCO_RT_CTRL_RESTART              (1)
 | 
						|
#define IOT_SG_CCO_RT_CTRL_PAUSE                (2)
 | 
						|
#define IOT_SG_CCO_RT_CTRL_RESUME               (3)
 | 
						|
#define IOT_SG_CCO_RT_CTRL_MR_SUCCESS           (4)
 | 
						|
#define IOT_SG_CCO_RT_CTRL_MR_FAILED            (5)
 | 
						|
#define IOT_SG_CCO_RT_CTRL_MR_STOP              (6)
 | 
						|
#define IOT_SG_CCO_RT_CTRL_START_SPECIAL_ARM    (7)
 | 
						|
 | 
						|
/* task priority, 0 means highest priority, 3 means lowest priority */
 | 
						|
#define IOT_SG_CCO_TASK_PRIO_0                  (0)
 | 
						|
#define IOT_SG_CCO_TASK_PRIO_1                  (1)
 | 
						|
#define IOT_SG_CCO_TASK_PRIO_2                  (2)
 | 
						|
#define IOT_SG_CCO_TASK_PRIO_3                  (3)
 | 
						|
 | 
						|
/* TSFM status of station define */
 | 
						|
/* invalid transformer status */
 | 
						|
#define IOT_SG_CCO_PM_TO_TSFM_INVALID           (0)
 | 
						|
/* same transformer but not in the white list */
 | 
						|
#define IOT_SG_CCO_PM_TO_TSFM_1                 (1)
 | 
						|
/* same transformer and in the white list */
 | 
						|
#define IOT_SG_CCO_PM_TO_TSFM_2                 (2)
 | 
						|
/* different transformer and not in the white list */
 | 
						|
#define IOT_SG_CCO_PM_TO_TSFM_3                 (3)
 | 
						|
/* different transformer but in the white list */
 | 
						|
#define IOT_SG_CCO_PM_TO_TSFM_4                 (4)
 | 
						|
/* transformer status max value */
 | 
						|
#define IOT_SG_CCO_PM_TO_TSFM_MAX               (4)
 | 
						|
 | 
						|
/* define controller sub protocol Q/GDW 1376.2 */
 | 
						|
#define IOT_SG_CCO_CTRL_PROTO_3762              (0)
 | 
						|
 | 
						|
/* define controller sub protocol NW */
 | 
						|
#define IOT_SG_CCO_CTRL_PROTO_NW                (0)
 | 
						|
 | 
						|
/* define controller sub passthrough protocol */
 | 
						|
#define IOT_SG_CCO_CTRL_PROTO_PASSTHROUGH       (0)
 | 
						|
 | 
						|
/* operate flag of the route read meter */
 | 
						|
/* stop read meter */
 | 
						|
#define IOT_SG_RT_MR_STOP                       (0)
 | 
						|
/* request read meter */
 | 
						|
#define IOT_SG_RT_MR_REQUEST                    (1)
 | 
						|
 | 
						|
/* read meter commid id base on 3762 value
 | 
						|
 * these value must be same as defined in 3762 protocol without any modification
 | 
						|
 */
 | 
						|
#define SG_READ_PM_FAILED                       (0)
 | 
						|
#define SG_READ_PM_SUCCEED                      (1)
 | 
						|
#define SG_MAY_READ_PM                          (2)
 | 
						|
 | 
						|
/* phase base on 3762 proto value
 | 
						|
 * these value must be same as defined in 3762 protocol without any modification
 | 
						|
 * default phase of meter
 | 
						|
 */
 | 
						|
#define PROTO_SG_DEFAULT_PHASE                  (0)
 | 
						|
#define PROTO_SG_PHASE_A                        (1)
 | 
						|
#define PROTO_SG_PHASE_B                        (2)
 | 
						|
#define PROTO_SG_PHASE_C                        (3)
 | 
						|
 | 
						|
/* function number base on 3762 proto value
 | 
						|
 * these value must be same as defined in 3762 protocol without any modification
 | 
						|
 * function number of the cctt active read meter
 | 
						|
 */
 | 
						|
#define SG_AFN_RMT_CCTT                         (0x13)
 | 
						|
/* function number of the router active read meter */
 | 
						|
#define SG_AFN_RMT_ROUTER                       (0x14)
 | 
						|
/* function number of the predict read meter */
 | 
						|
#define SG_AFN_PREDICT_MR                       (0x56)
 | 
						|
/* function number of the cctt active concurrently read meter */
 | 
						|
#define SG_AFN_RMT_CCTT_CON                     (0xF1)
 | 
						|
 | 
						|
/* module id information length */
 | 
						|
#define IOT_SG_CCO_MODULE_ID_INFO_LEN           (11)
 | 
						|
 | 
						|
/* type of getting module id */
 | 
						|
#define IOT_SG_CCO_GET_MOD_ID_TYPE_VALID        (0)
 | 
						|
#define IOT_SG_CCO_GET_MOD_ID_TYPE_NOT_SUPPORT  (1)
 | 
						|
#define IOT_SG_CCO_GET_MOD_ID_TYPE_UNKNOWN      (2)
 | 
						|
 | 
						|
/* transformer detect default timeout, unit is 1s */
 | 
						|
#define IOT_SG_CCO_TSFM_DETECT_DEFAULT_TIMEOUT      (5 * 60 * 60)
 | 
						|
/* transformer detect timeout for beijing, unit is 1s */
 | 
						|
#define IOT_SG_CCO_TSFM_DETECT_TIMEOUT_BEIJING      (6 * 60 * 60)
 | 
						|
 | 
						|
/* phase sequence of three phase power meter */
 | 
						|
#define IOT_SG_CCO_PHASE_SEQ_ABC                    (0)
 | 
						|
#define IOT_SG_CCO_PHASE_SEQ_ACB                    (1)
 | 
						|
#define IOT_SG_CCO_PHASE_SEQ_BAC                    (2)
 | 
						|
#define IOT_SG_CCO_PHASE_SEQ_BCA                    (3)
 | 
						|
#define IOT_SG_CCO_PHASE_SEQ_CAB                    (4)
 | 
						|
#define IOT_SG_CCO_PHASE_SEQ_CBA                    (5)
 | 
						|
#define IOT_SG_CCO_PHASE_SEQ_LN_REVERSED            (6)
 | 
						|
#define IOT_SG_CCO_PHASE_SEQ_RSVD                   (7)
 | 
						|
 | 
						|
/* max count power meter for collector connected */
 | 
						|
#define IOT_SG_CCO_COLLECTOR_METER_MAX_CNT          (32)
 | 
						|
 | 
						|
/* max bcast time for tsfm feature */
 | 
						|
#define IOT_SPG_CCO_MAX_BCAST_TIME                  (1440)
 | 
						|
 | 
						|
/* branch detect mode */
 | 
						|
/* only brm device could launch */
 | 
						|
#define IOT_SG_CCO_BD_MOD_BRM_LAUNCH                (0)
 | 
						|
/* only same net device could launch, include pm and brm device */
 | 
						|
#define IOT_SG_CCO_BD_MOD_SAME_NET_DEV_LAUNCH       (1)
 | 
						|
/* all net device could launch, include same net and neighbor net device */
 | 
						|
#define IOT_SG_CCO_BD_MOD_ALL_NET_DEV_LAUNCH        (2)
 | 
						|
 | 
						|
/* branch detect type */
 | 
						|
/* normal type */
 | 
						|
#define IOT_SG_CCO_BD_TYPE_NOR                      (0)
 | 
						|
/* specific for beijing */
 | 
						|
#define IOT_SG_CCO_BD_TYPE_BJ                       (1)
 | 
						|
/* specific for zhejiang */
 | 
						|
#define IOT_SG_CCO_BD_TYPE_ZJ                       (2)
 | 
						|
/* branch detect type max value */
 | 
						|
#define IOT_SG_CCO_BD_TYPE_MAX                      (2)
 | 
						|
 | 
						|
/* branch detect state */
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_READY_CHECK        (0)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_QUERY_NEI_NODE     (1)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_QUERY_NEI_PHASE    (2)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_QUERY_METER        (3)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_SEND_DEC_CHECK     (4)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_CLEAR              (5)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_SEND               (6)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_QUERY_RET          (7)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_TOPO_GEN           (8)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_SET_NODE           (9)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_PRE_DONE           (10)
 | 
						|
#define IOT_SG_CCO_BRANCH_DETECT_DONE               (11)
 | 
						|
 | 
						|
/* pw tsfm state */
 | 
						|
#define IOT_SG_CCO_PW_TSFM_CLEAR                    (0)
 | 
						|
#define IOT_SG_CCO_PW_TSFM_SEND                     (1)
 | 
						|
#define IOT_SG_CCO_PW_TSFM_QUERY_RET                (2)
 | 
						|
#define IOT_SG_CCO_PW_TSFM_WL_GEN                   (3)
 | 
						|
#define IOT_SG_CCO_PW_TSFM_ADDR_CLEAR               (4)
 | 
						|
#define IOT_SG_CCO_PW_TSFM_DONE                     (5)
 | 
						|
 | 
						|
/* STA communication mode */
 | 
						|
#define IOT_SG_CCO_COMM_MOD_UNKNOW                  (0)
 | 
						|
#define IOT_SG_CCO_COMM_MOD_CARRIER                 (1)
 | 
						|
#define IOT_SG_CCO_COMM_MOD_WIRELESS                (2)
 | 
						|
 | 
						|
/* station transformer detect result */
 | 
						|
#define IOT_SG_CCO_STA_TSFM_DETECT_RET_UNKNOWN      (0)
 | 
						|
#define IOT_SG_CCO_STA_TSFM_DETECT_RET_SAME         (1)
 | 
						|
#define IOT_SG_CCO_STA_TSFM_DETECT_RET_DIFFERENT    (2)
 | 
						|
#define IOT_SG_CCO_STA_TSFM_DETECT_RET_INVALID      (3)
 | 
						|
 | 
						|
/* proto type */
 | 
						|
#define IOT_SG_CCO_PROTO_TYPE_UNKNOWN               (0)
 | 
						|
#define IOT_SG_CCO_PROTO_TYPE_645_1997              (1)
 | 
						|
#define IOT_SG_CCO_PROTO_TYPE_645_2007              (2)
 | 
						|
 | 
						|
/* power meter type */
 | 
						|
#define IOT_SG_CCO_PM_TYPE_UNKNOWN                  (0)
 | 
						|
#define IOT_SG_CCO_PM_TYPE_SINGLE                   (1)
 | 
						|
#define IOT_SG_CCO_PM_TYPE_3P                       (2)
 | 
						|
 | 
						|
/* collect task add result */
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_OK                     (0)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_ERR_CRC                (1)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_ERR_PROTO              (2)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_ERR_NOMEM              (3)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_ERR_PM                 (4)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_ERR_SEC_NODE_NO_RSP    (5)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_ERR_OTHER              (6)
 | 
						|
 | 
						|
/* define task data invalid error code */
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_DATA_ERR_NOTASK        (1)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_DATA_ERR_ADDR_INVALID  (2)
 | 
						|
 | 
						|
/* define collect task data flag */
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_DATA_VALID             (0)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_DATA_INVALID           (1)
 | 
						|
 | 
						|
/* sec node monitor fast duration for ext_task, unit is 1s. dl_buf will be
 | 
						|
 * retry 1 count, related to IOT_SG_RSVE_AGE and IOT_SG_RETRY_RSVD_AGE.
 | 
						|
 */
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TIMEOUT_SLOW            (25)
 | 
						|
 | 
						|
/* extension task type */
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_CLCT_ADD           (1)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_CLCT_DEL           (2)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_CLCT_QRY_ID        (3)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_CLCT_QRY_INFO      (4)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_CLCT_READ_DATA     (5)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_CHANNEL            (6)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_RUNTIME            (7)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_SELFCHECK          (8)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_TSFM_ADDR          (9)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_NW_LOCK            (10)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_CLOCK_MANAGE       (11)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_ACCURATE_CORR      (12)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_NODE_INFO          (13)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_NODE_CALL          (14)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_MIN_CLCT_DATA      (15)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_MIN_CLCT2_CFG      (16)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_MIN_CLCT2_CFG_QR   (17)
 | 
						|
#define IOT_SG_CCO_EXT_TASK_TYPE_MIN_CLCT2_REQ_DATA (18)
 | 
						|
 | 
						|
/* extension task task_id */
 | 
						|
#define IOT_BUF_TASK_ID_MR_MAX          (0xFFFF)
 | 
						|
#define IOT_BUF_TASK_ID_CLCT_ADD        (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_CLCT_ADD)
 | 
						|
#define IOT_BUF_TASK_ID_CLCT_DEL        (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_CLCT_DEL)
 | 
						|
#define IOT_BUF_TASK_ID_CLCT_QRY_ID     (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_CLCT_QRY_ID)
 | 
						|
#define IOT_BUF_TASK_ID_CLCT_QRY_INFO   (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_CLCT_QRY_INFO)
 | 
						|
#define IOT_BUF_TASK_ID_CLCT_READ_DATA  (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_CLCT_READ_DATA)
 | 
						|
#define IOT_BUF_TASK_ID_CHENNEL         (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_CHANNEL)
 | 
						|
#define IOT_BUF_TASK_ID_RUNTIME         (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_RUNTIME)
 | 
						|
#define IOT_BUF_TASK_ID_SELFCHECK       (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_SELFCHECK)
 | 
						|
#define IOT_BUF_TASK_ID_TSFM_ADDR       (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_TSFM_ADDR)
 | 
						|
#define IOT_BUF_TASK_ID_NW_LOCK         (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_NW_LOCK)
 | 
						|
#define IOT_BUF_TASK_ID_CLOCK_MANAGE    (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_CLOCK_MANAGE)
 | 
						|
#define IOT_BUF_TASK_ID_ACCURATE_CORR   (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_ACCURATE_CORR)
 | 
						|
#define IOT_BUF_TASK_ID_NODE_INFO       (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_NODE_INFO)
 | 
						|
#define IOT_BUF_TASK_ID_NODE_CALL       (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_NODE_CALL)
 | 
						|
#define IOT_BUF_TASK_ID_MIN_CLCT_DATA   (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_MIN_CLCT_DATA)
 | 
						|
#define IOT_BUF_TASK_ID_MIN_CLCT2_CFG   (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                        IOT_SG_CCO_EXT_TASK_TYPE_MIN_CLCT2_CFG)
 | 
						|
#define IOT_BUF_TASK_ID_MIN_CLCT2_CFG_QR   (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                     IOT_SG_CCO_EXT_TASK_TYPE_MIN_CLCT2_CFG_QR)
 | 
						|
#define IOT_BUF_TASK_ID_MIN_CLCT2_REQ_DATA (IOT_BUF_TASK_ID_MR_MAX + \
 | 
						|
                                   IOT_SG_CCO_EXT_TASK_TYPE_MIN_CLCT2_REQ_DATA)
 | 
						|
 | 
						|
/* collect task data len */
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_CRC_LEN                (2)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_DI_DATA_LEN_97         (4)
 | 
						|
#define IOT_SG_CCO_CLCT_TASK_DI_DATA_LEN_07         (6)
 | 
						|
 | 
						|
/* low power meter query default max count */
 | 
						|
#define IOT_SG_LP_METER_QUERY_DEFAULT_CNT           (10)
 | 
						|
 | 
						|
/* max sec node count of one frame data */
 | 
						|
#define IOT_SG_CCO_MAX_SEC_NODE_SEND_CNT            (8)
 | 
						|
 | 
						|
/* sec node run state info id */
 | 
						|
#define IOT_SG_CCO_RUN_STATE_ID_RUNTIME             (0)
 | 
						|
#define IOT_SG_CCO_RUN_STATE_ID_ZC                  (1)
 | 
						|
#define IOT_SG_CCO_RUN_STATE_ID_UART                (2)
 | 
						|
#define IOT_SG_CCO_RUN_STATE_ID_LEAVE               (3)
 | 
						|
#define IOT_SG_CCO_RUN_STATE_ID_RESET               (4)
 | 
						|
 | 
						|
/* state grid 3762, version 2013 */
 | 
						|
#define IOT_SG_CCO_CCTT_PROTO_3762_13               (0)
 | 
						|
/* state grid 3762, version 2009 */
 | 
						|
#define IOT_SG_CCO_CCTT_PROTO_3762_09               (1)
 | 
						|
/* south power grid */
 | 
						|
#define IOT_SG_CCO_CCTT_PROTO_SPG                   (2)
 | 
						|
 | 
						|
/* transformer detect address bcast cmd type */
 | 
						|
#define IOT_SG_CCO_BCAST_TSFM_ADDR_CMD_SET          (0)
 | 
						|
#define IOT_SG_CCO_BCAST_TSFM_ADDR_CMD_DEL          (1)
 | 
						|
 | 
						|
/* transformer detect network lock bcast cmd type */
 | 
						|
#define IOT_SG_CCO_BCAST_NW_LOCK_CMD_LOCK           (0)
 | 
						|
#define IOT_SG_CCO_BCAST_NW_LOCK_CMD_UNLOCK         (1)
 | 
						|
 | 
						|
/* whole network set mode */
 | 
						|
#define IOT_SG_CCO_NW_SEND_MODE_SINGLE              (0)
 | 
						|
#define IOT_SG_CCO_NW_SEND_MODE_ALL                 (1)
 | 
						|
 | 
						|
/* cco information report request id */
 | 
						|
#define IOT_SG_CCO_REQ_ID_PHASE_INFO_RPT            (0)
 | 
						|
 | 
						|
/* whitle list auto remove timeout, unit is 1s. */
 | 
						|
#define IOT_SG_CCO_AUTO_RM_WL_TIMEOUT               (30 * 60 * 60)
 | 
						|
 | 
						|
/* uart baud rate type */
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_300                     (0)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_600                     (1)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_1200                    (2)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_2400                    (3)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_4800                    (4)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_7200                    (5)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_9600                    (6)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_19200                   (7)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_38400                   (8)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_57600                   (9)
 | 
						|
#define IOT_SG_CCO_BAUD_IDX_115200                  (10)
 | 
						|
 | 
						|
/* uart baud rate value */
 | 
						|
#define IOT_SG_CCO_UART_BAUD_300                    (300)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_600                    (600)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_1200                   (1200)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_2400                   (2400)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_4800                   (4800)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_7200                   (7200)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_9600                   (9600)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_19200                  (19200)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_38400                  (38400)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_57600                  (57600)
 | 
						|
#define IOT_SG_CCO_UART_BAUD_115200                 (115200)
 | 
						|
 | 
						|
/* uart config default recover time, unit is 1min */
 | 
						|
#define IOT_SG_CCO_BAUD_REC_TIME_DEFULT             (120)
 | 
						|
 | 
						|
/* power down event default valid time, unit is 1s */
 | 
						|
#define IOT_SG_CCO_PD_DEFAULT_VALID_TIME            (5)
 | 
						|
/* power down event max valid time, unit is 1s */
 | 
						|
#define IOT_SG_CCO_PD_MAX_VALID_TIME                (15)
 | 
						|
 | 
						|
/* the option of module reset infomation */
 | 
						|
#define IOT_SG_CCO_RESET_INFO_OP_PD_CNT             (0)
 | 
						|
#define IOT_SG_CCO_RESET_INFO_OP_PD_VALID_TIME      (1)
 | 
						|
 | 
						|
/* predict meter reading concurrent max count */
 | 
						|
#define IOT_SG_CCO_PREDICT_MR_CON_MAX_CNT           (15)
 | 
						|
 | 
						|
/* cco intern type */
 | 
						|
#define IOT_SG_CCO_INTERN_SEND_BRANCH_DETECT        (0)
 | 
						|
#define IOT_SG_CCO_INTERN_SEND_TSFM_DETECT          (1)
 | 
						|
#define IOT_SG_CCO_INTERN_SEND_PREDICT_MR           (2)
 | 
						|
#define IOT_SG_CCO_INTERN_SEND_PW_TSFM              (3)
 | 
						|
 | 
						|
/* bcast type */
 | 
						|
#define IOT_SG_CCO_BCAST_TYPE_DEFAULT               (0)
 | 
						|
#define IOT_SG_CCO_BCAST_TYPE_CLOCK_MANAGE          (1)
 | 
						|
#define IOT_SG_CCO_BCAST_TYPE_ACCURATE              (2)
 | 
						|
 | 
						|
/* clock manager cmd type */
 | 
						|
#define IOT_SG_CCO_CLOCK_MANAGE_SET_AUTO_CORR       (1)
 | 
						|
#define IOT_SG_CCO_CLOCK_MANAGE_SET_THRESHOLD       (2)
 | 
						|
#define IOT_SG_CCO_CLOCK_MANAGE_QR_INFO             (3)
 | 
						|
 | 
						|
/* nw transparent transfer data work code */
 | 
						|
#define IOT_SG_CCO_TRANS_WORK_CODE_DEFAULT          (0x00)
 | 
						|
#define IOT_SG_CCO_TRANS_WORK_CODE_CORR_TIME        (0x01)
 | 
						|
#define IOT_SG_CCO_TRANS_WORK_CODE_COLLECT          (0x02)
 | 
						|
 | 
						|
/* uart data sources */
 | 
						|
#define  IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_CCTT    (0)
 | 
						|
#define  IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_CTRL    (1)
 | 
						|
#define  IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_CLI     (2)
 | 
						|
#define  IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_CUS     (3)
 | 
						|
 | 
						|
/* curve collect parameter type */
 | 
						|
#define  IOT_SG_CCO_CURVE_COLLET_TYPE_DEF           (0)
 | 
						|
#define  IOT_SG_CCO_CURVE_COLLET_TYPE_v28           (1)
 | 
						|
 | 
						|
/* sta collect parameter v2.8 task max task id */
 | 
						|
#define IOT_SG_CCO_CURVE_DATA_MAX_TASK_ID           (7)
 | 
						|
 | 
						|
/* release date length of sw/hw version */
 | 
						|
#define IOT_SG_CCO_VER_DATE_LENGTH                  (3)
 | 
						|
 | 
						|
#pragma pack(push)  /* save the pack status */
 | 
						|
#pragma pack(1)     /* 1 byte align */
 | 
						|
 | 
						|
typedef struct _power_evt_data_field {
 | 
						|
    uint8_t             evt_type;
 | 
						|
    uint8_t             data[0];
 | 
						|
}power_evt_data_field_t;
 | 
						|
 | 
						|
/* node mapping info */
 | 
						|
typedef struct _iot_sg_meter_mapping_info {
 | 
						|
    /* node mac - small endian */
 | 
						|
    uint8_t             node_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* meter address - small endian */
 | 
						|
    uint8_t             meter_addr[IOT_METER_ADDR_LEN];
 | 
						|
} iot_sg_meter_mapping_info_t;
 | 
						|
 | 
						|
/* di and result length */
 | 
						|
typedef struct _iot_sg_cco_di_info {
 | 
						|
    /* di */
 | 
						|
    uint32_t            di;
 | 
						|
    /* meter reading result length */
 | 
						|
    uint8_t             di_result_len;
 | 
						|
} iot_sg_cco_di_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_meter_clct_param {
 | 
						|
    /* 0 - single phase meter, 1 - three phase meter */
 | 
						|
    uint8_t             pm_type;
 | 
						|
    /* di count of single phase meter */
 | 
						|
    uint8_t             di_cnt;
 | 
						|
    /* di result total length of single phase meter */
 | 
						|
    uint8_t             di_result_len;
 | 
						|
    /* di information of single phase meter */
 | 
						|
    iot_sg_cco_di_info_t    di_info[0];
 | 
						|
} iot_sg_cco_meter_clct_param_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_meter_clct_param_v28 {
 | 
						|
    /* 0 - single phase meter, 1 - three phase meter */
 | 
						|
    uint8_t             pm_type;
 | 
						|
    /* di count of single phase meter */
 | 
						|
    uint8_t             di_cnt;
 | 
						|
    /* di result total length of single phase meter */
 | 
						|
    uint16_t            di_result_len;
 | 
						|
    /* di information */
 | 
						|
    iot_sg_cco_di_info_t    di_info[0];
 | 
						|
} iot_sg_cco_meter_clct_param_v28_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_meter_clct_rpt_param_v28 {
 | 
						|
    /* 0 - single phase meter, 1 - three phase meter */
 | 
						|
    uint8_t             pm_type;
 | 
						|
    /* di count of single phase meter */
 | 
						|
    uint8_t             di_cnt;
 | 
						|
    /* di information */
 | 
						|
    uint8_t             di_data[0];
 | 
						|
} iot_sg_cco_meter_clct_rpt_param_v28_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_module_clct_param_v28 {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* 0 - disabled, 1 - enabled */
 | 
						|
    uint8_t     enabled;
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t     proto_type;
 | 
						|
    /* unit is 1min */
 | 
						|
    uint8_t     clct_period;
 | 
						|
    /* collect parameter */
 | 
						|
    //iot_sg_cco_meter_clct_param_v28_t clct_param[0];
 | 
						|
} iot_sg_cco_module_clct_param_v28_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_curve_node_conf {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* node addr count */
 | 
						|
    uint16_t    cnt;
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t     node_addr[0][IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_cco_curve_node_conf_t;
 | 
						|
 | 
						|
/* descriptor of sta collect parameter layout structure in PIB */
 | 
						|
typedef struct _iot_sg_cco_module_clct_param {
 | 
						|
    /* 0 - disabled, 1 - enabled */
 | 
						|
    uint8_t             enabled;
 | 
						|
    /* unit is 1min */
 | 
						|
    uint8_t             clct_period;
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t             proto_type;
 | 
						|
    /* collect parameter */
 | 
						|
    //iot_sg_cco_meter_clct_param_t clct_param[0];
 | 
						|
} iot_sg_cco_module_clct_param_t;
 | 
						|
 | 
						|
/* collection fn structure in collection task */
 | 
						|
typedef struct _iot_sg_cco_clct_task_fn {
 | 
						|
    /* type of pm protocol, see IOT_SG_CCO_PROTO_TYPE_XXX */
 | 
						|
    uint16_t    proto_type : 3,
 | 
						|
    /* type of pm, see IOT_SG_CCO_PM_TYPE_XXX */
 | 
						|
                meter_type : 2,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd : 11;
 | 
						|
} iot_sg_cco_clct_task_fn_t;
 | 
						|
 | 
						|
/* collection data time structure */
 | 
						|
typedef struct _iot_sg_cco_clct_task_data_time {
 | 
						|
    /* data time, BIN type */
 | 
						|
    uint16_t    base_min : 6,  /* D0 - D5 */
 | 
						|
                base_hour : 5, /* D6 - D10 */
 | 
						|
                base_day : 5;  /* D11 - D15 */
 | 
						|
} iot_sg_cco_clct_task_data_time_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_collect_task {
 | 
						|
    /* task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* task control code */
 | 
						|
    iot_sg_cco_clct_task_fn_t fn;
 | 
						|
    /* task timout time, uint is 1s */
 | 
						|
    uint16_t    timeout;
 | 
						|
    /* collection base time */
 | 
						|
    iot_sg_cco_clct_task_data_time_t base_time;
 | 
						|
    /* collection period */
 | 
						|
    uint8_t     period;
 | 
						|
    /* cnt of di */
 | 
						|
    uint8_t     di_cnt;
 | 
						|
    /* collect data info and crc */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_collect_task_t;
 | 
						|
 | 
						|
/* add collection data read task */
 | 
						|
typedef struct _iot_sg_cco_add_clct_data_read_dl {
 | 
						|
    /* task priority, 0 - hight priority, 3 - low priority */
 | 
						|
    uint8_t     task_pri    :4,
 | 
						|
    /* reserved */
 | 
						|
                reserved    :4;
 | 
						|
    /* timeout */
 | 
						|
    uint16_t    timeout;
 | 
						|
    /* collection task id */
 | 
						|
    uint8_t     clct_task_id;
 | 
						|
    /* collection task sn */
 | 
						|
    uint8_t     clct_task_sn;
 | 
						|
    /* start time */
 | 
						|
    iot_sg_cco_clct_task_data_time_t start_time;
 | 
						|
    /* time count */
 | 
						|
    uint8_t     time_cnt;
 | 
						|
} iot_sg_cco_add_clct_data_read_t;
 | 
						|
 | 
						|
/* collection read task data */
 | 
						|
typedef struct _iot_sg_cco_clct_read_data {
 | 
						|
    /* clct task id */
 | 
						|
    uint8_t     clct_task_id;
 | 
						|
    /* collection task sn */
 | 
						|
    uint8_t     clct_task_sn;
 | 
						|
    /* crc code */
 | 
						|
    uint16_t    crc_code;
 | 
						|
    /* collection data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_cco_clct_read_data_t;
 | 
						|
 | 
						|
/* collection read task data report */
 | 
						|
typedef struct _iot_sg_cco_clct_read_data_rpt {
 | 
						|
    /* sec node mac addr, little endian */
 | 
						|
    uint8_t     mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* collection read task data */
 | 
						|
    iot_sg_cco_clct_read_data_t read_data;
 | 
						|
} iot_sg_cco_clct_read_data_rpt_t;
 | 
						|
 | 
						|
/* collection read task status report */
 | 
						|
typedef struct _iot_sg_cco_clct_read_status_rpt {
 | 
						|
    /* clct task id */
 | 
						|
    uint8_t     clct_task_id;
 | 
						|
    /* collection task sn */
 | 
						|
    uint8_t     clct_task_sn;
 | 
						|
    /* sec node mac addr, little endian */
 | 
						|
    uint8_t     mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* collection task status, IOT_SG_CCO_CLCT_TASK_XXX */
 | 
						|
    uint8_t     clct_task_status;
 | 
						|
} iot_sg_cco_clct_read_status_rpt_t;
 | 
						|
 | 
						|
/* time struct */
 | 
						|
typedef struct _iot_sg_cco_time {
 | 
						|
    /* time stamp, BCD code to represent */
 | 
						|
    uint8_t     sec;
 | 
						|
    uint8_t     min;
 | 
						|
    uint8_t     hour;
 | 
						|
    uint8_t     day;
 | 
						|
    uint8_t     month;
 | 
						|
    uint8_t     year;
 | 
						|
} iot_sg_cco_time_t;
 | 
						|
 | 
						|
/* location information */
 | 
						|
typedef struct _iot_sg_cco_node_location_unit {
 | 
						|
    /* location unit seconds: BCD code */
 | 
						|
    uint16_t        sec_0 : 4,
 | 
						|
                    sec_1 : 4,
 | 
						|
                    sec_2 : 4,
 | 
						|
                    sec_3 : 4;
 | 
						|
    /* location unit min: BCD code */
 | 
						|
    uint8_t         min_0 : 4,
 | 
						|
                    min_1 : 4;
 | 
						|
    /* location unit degree: BCD code */
 | 
						|
    uint16_t        degree_0 : 4,
 | 
						|
                    degree_1 : 4,
 | 
						|
                    degree_2 : 4,
 | 
						|
    /* 0:north latitude or east longitude,1:south latitude or west longitude */
 | 
						|
                    symbol_3 : 1,
 | 
						|
                    rsvd : 3;
 | 
						|
} iot_sg_cco_node_location_unit_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_sec_node_score_info {
 | 
						|
    /* assessment score */
 | 
						|
    uint8_t     score;
 | 
						|
    /* trouble data item, 4 byte to 32 bit.
 | 
						|
     * each bit corresponding to trouble data item.
 | 
						|
     * example: D0 is trouble, set bit0 is 1.
 | 
						|
     */
 | 
						|
    uint32_t    err_bm;
 | 
						|
    /* power meter mac address, little endian */
 | 
						|
    uint8_t     pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_cco_sec_node_score_info_t;
 | 
						|
 | 
						|
/* low power meter report 188 proto data */
 | 
						|
typedef struct _iot_sg_cco_lp_meter_mr_data {
 | 
						|
    /* low power meter mac addr, little endian */
 | 
						|
    uint8_t     mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* CJ-T_188-2004 proto data length */
 | 
						|
    uint16_t    data_len;
 | 
						|
    /* CJ-T_188-2004 proto data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_cco_lp_meter_mr_data_t;
 | 
						|
 | 
						|
/* report low power meter info from sta to cco */
 | 
						|
typedef struct _iot_sg_cco_rpt_lp_meter_data {
 | 
						|
    /* report low power meter count */
 | 
						|
    uint8_t     rpt_cnt;
 | 
						|
    /* 188 protocol low power meter data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_cco_rpt_lp_meter_data_t;
 | 
						|
 | 
						|
/* collect task status report */
 | 
						|
typedef struct _iot_sg_cco_clct_task_add_rpt {
 | 
						|
    /* clct task id */
 | 
						|
    uint8_t     clct_task_id;
 | 
						|
    /* sec node mac addr, little endian */
 | 
						|
    uint8_t     mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* collection task status, IOT_SG_CCO_CLCT_TASK_XXX */
 | 
						|
    uint8_t     clct_task_status;
 | 
						|
} iot_sg_cco_clct_task_add_rpt_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_node_base_info_dl {
 | 
						|
    /* meter addr, little endian */
 | 
						|
    uint8_t     meter_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* element count */
 | 
						|
    uint8_t     element_cnt;
 | 
						|
    /* element info */
 | 
						|
    uint8_t     element[0];
 | 
						|
} iot_sg_cco_node_base_info_dl_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_node_base_info_ul {
 | 
						|
    /* meter addr, little endian */
 | 
						|
    uint8_t     meter_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* element info */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_cco_node_base_info_ul_t;
 | 
						|
 | 
						|
/* collection task id query report */
 | 
						|
typedef struct _iot_sg_cco_clct_task_id_query_rpt {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* max cnt of support task */
 | 
						|
    uint8_t     max_cnt;
 | 
						|
    /* task cnt */
 | 
						|
    uint8_t     task_cnt;
 | 
						|
    /* collect task id data */
 | 
						|
    uint8_t     clct_task_id[0];
 | 
						|
} iot_sg_cco_clct_task_id_query_rpt_t;
 | 
						|
 | 
						|
/* collection task info query report */
 | 
						|
typedef struct _iot_sg_cco_clct_task_info_query_rpt {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* task info flag, see NW_APP_CLCT_TASK_DATA_VALID */
 | 
						|
    uint8_t     info_valid_flag;
 | 
						|
    /* collection task info */
 | 
						|
    iot_sg_collect_task_t  task_info;
 | 
						|
} iot_sg_cco_clct_task_info_query_rpt_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_pm_info {
 | 
						|
    /* device mac address, if the device type is collector,
 | 
						|
     * the mac is the collector mac address, little-endian.
 | 
						|
     */
 | 
						|
    uint8_t               dev_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* mac address of the pm, little-endian */
 | 
						|
    uint8_t               pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* power meter proto type, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t               proto_type;
 | 
						|
} iot_sg_cco_pm_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_query_channel_info {
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t               node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* neighbor node start index */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* neighbor node count */
 | 
						|
    uint8_t               node_cnt;
 | 
						|
} iot_sg_cco_query_channel_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_node_channel_info {
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t               node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* tei */
 | 
						|
    uint16_t              tei;
 | 
						|
    /* proxy tei */
 | 
						|
    uint16_t              proxy_tei;
 | 
						|
    /* level */
 | 
						|
    uint8_t               level;
 | 
						|
    /* uplink traffic success ratio */
 | 
						|
    uint8_t               ul_tf_sr;
 | 
						|
    /* downlink traffic success ratio */
 | 
						|
    uint8_t               dl_tf_sr;
 | 
						|
    /* traffic success ratio */
 | 
						|
    uint8_t               tf_sr;
 | 
						|
    /* snr between neighbor node and local node */
 | 
						|
    int8_t                snr;
 | 
						|
    /* signal attenuation between neighbor node and local node */
 | 
						|
    uint8_t               signal_attenuation;
 | 
						|
} iot_sg_cco_node_channel_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_channel_info {
 | 
						|
    /* neighbor node total count */
 | 
						|
    uint16_t              total_cnt;
 | 
						|
    /* report count */
 | 
						|
    uint8_t               rpt_cnt;
 | 
						|
    /* node channel info */
 | 
						|
    iot_sg_cco_node_channel_info_t node_channel[0];
 | 
						|
} iot_sg_cco_channel_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_query_node_run_state {
 | 
						|
    /* run info list count */
 | 
						|
    uint8_t               cnt;
 | 
						|
    /* sec node run info list */
 | 
						|
    uint8_t               id[0];
 | 
						|
} iot_sg_cco_query_node_run_state_t;
 | 
						|
 | 
						|
/* node run state id info header */
 | 
						|
typedef struct _iot_sg_cco_run_state_element {
 | 
						|
    /* info id */
 | 
						|
    uint8_t    id;
 | 
						|
    /* info data lenght */
 | 
						|
    uint8_t    len;
 | 
						|
    /* info data */
 | 
						|
    uint8_t    data[0];
 | 
						|
} iot_sg_cco_run_state_element_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_rpt_node_run_state {
 | 
						|
    /* run info list count */
 | 
						|
    uint8_t               cnt;
 | 
						|
    /* sec node run info list */
 | 
						|
    uint8_t               data[0];
 | 
						|
} iot_sg_cco_rpt_node_run_state_t;
 | 
						|
 | 
						|
/* runtime info structure, id is IOT_SG_CCO_RUN_STATE_ID_RUNTIME */
 | 
						|
typedef struct _iot_sg_cco_node_run_time {
 | 
						|
    /* runtime, uint is 1s */
 | 
						|
    uint32_t    runtime;
 | 
						|
} iot_sg_cco_node_run_time_t;
 | 
						|
 | 
						|
/* run other info structure,
 | 
						|
 * id is IOT_SG_CCO_RUN_STATE_ID_ZC.
 | 
						|
 * id is IOT_SG_CCO_RUN_STATE_ID_UART.
 | 
						|
 * id is IOT_SG_CCO_RUN_STATE_ID_LEAVE.
 | 
						|
 * id is IOT_SG_CCO_RUN_STATE_ID_RESET.
 | 
						|
 */
 | 
						|
typedef struct _iot_sg_cco_node_run_other_info {
 | 
						|
    uint8_t     result;
 | 
						|
} iot_sg_cco_node_run_other_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_set_sec_node_tsfm_addr {
 | 
						|
    /* tsfm_address, little endian */
 | 
						|
    uint8_t     tsfm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* whole network set mode, see IOT_SG_CCO_NW_SEND_MODE_XXX */
 | 
						|
    uint8_t     set_mode;
 | 
						|
    /* reserved */
 | 
						|
    uint8_t     rsvd[3];
 | 
						|
    /* secondary node address, only valid in single set, little endian */
 | 
						|
    uint8_t     sec_node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_cco_set_sec_node_tsfm_addr_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_set_tsfm_addr {
 | 
						|
    /* set tsfm addr commad type, see IOT_SG_CCO_BCAST_TSFM_ADDR_CMD_SET_XXX */
 | 
						|
    uint8_t     cmd_type;
 | 
						|
    /* data length */
 | 
						|
    uint8_t     data_len;
 | 
						|
    /* reserved */
 | 
						|
    uint16_t    rsvd;
 | 
						|
    /* cmd data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_cco_set_tsfm_addr_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_nw_lock_set_data {
 | 
						|
    /* whole network set mode, see IOT_SG_CCO_NW_SEND_MODE_XXX */
 | 
						|
    uint8_t     set_mode;
 | 
						|
    /* reserved */
 | 
						|
    uint8_t     rsvd;
 | 
						|
    /* secondary node addres, only valid in single set, little endian */
 | 
						|
    uint8_t     sec_node_mac[IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_cco_nw_lock_set_data_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_nw_lock_cmd {
 | 
						|
    /* command type, see IOT_SG_CCO_BCAST_NW_LOCK_CMD_XXX */
 | 
						|
    uint8_t     cmd_type;
 | 
						|
    /* data length */
 | 
						|
    uint8_t     data_len;
 | 
						|
    /* reserved */
 | 
						|
    uint16_t    rsvd;
 | 
						|
    /* command data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_cco_nw_lock_cmd_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_qry_node_base_info {
 | 
						|
    /* node mac addr, little endian */
 | 
						|
    uint8_t     mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* base info element count */
 | 
						|
    uint8_t     element_cnt;
 | 
						|
    /* info element */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_cco_qry_node_base_info_t;
 | 
						|
 | 
						|
/* power meter info for power event report */
 | 
						|
typedef struct _iot_sg_power_evt_pm_info {
 | 
						|
    /* power meter mac address */
 | 
						|
    uint8_t             mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* 0 - power off, 1- power on */
 | 
						|
    uint8_t             power_state;
 | 
						|
} iot_sg_power_evt_pm_info_t;
 | 
						|
 | 
						|
/* addr type for event data field */
 | 
						|
typedef struct _iot_sg_evt_data_addr {
 | 
						|
    /* power meter count */
 | 
						|
    uint16_t            pm_count;
 | 
						|
    /* power meter info */
 | 
						|
    iot_sg_power_evt_pm_info_t pm_info[0];
 | 
						|
} iot_sg_evt_data_addr_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_rpt_node_clock_info {
 | 
						|
    /* meter addr, little endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* switch of auto correct time from sta */
 | 
						|
    uint8_t     auto_corr_switch;
 | 
						|
    /* correct time threshold from sta */
 | 
						|
    uint8_t     corr_threshold;
 | 
						|
} iot_sg_cco_rpt_node_clock_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_nli_abnormal_evt_rpt {
 | 
						|
    /* report total count */
 | 
						|
    uint16_t    total_cnt;
 | 
						|
    /* start index */
 | 
						|
    uint16_t    start_index;
 | 
						|
    /* current report count */
 | 
						|
    uint8_t     rpt_cnt;
 | 
						|
    /* abnormal evt data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} iot_sg_cco_nli_abnormal_evt_rpt_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_accurate_correct_time {
 | 
						|
    /* ntb for recv correct time message */
 | 
						|
    uint32_t                    ntb;
 | 
						|
    /* data length */
 | 
						|
    uint16_t                    len;
 | 
						|
    /* accurate correct time data */
 | 
						|
    uint8_t                     data[0];
 | 
						|
} iot_sg_cco_accurate_correct_time_t;
 | 
						|
 | 
						|
typedef struct _sec_node_info_query {
 | 
						|
    uint8_t     mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint16_t    node_index;
 | 
						|
    uint8_t     proto_type;
 | 
						|
} sec_node_info_query_t;
 | 
						|
 | 
						|
/* data type for IOT_SG_CCO_SEC_NODE_INFO */
 | 
						|
typedef struct _sec_node_query {
 | 
						|
    /* sta mac addr, big endian */
 | 
						|
    uint8_t                  sta_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* dev mac addr, little endian */
 | 
						|
    uint8_t                  dev_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* sec node dev type, see IOT_PLC_DEV_TYPE_XXX */
 | 
						|
    uint8_t                  dev_type;
 | 
						|
    /* dev proto type, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t                  proto_type;
 | 
						|
    /* total sec node count of this node */
 | 
						|
    uint8_t                  total_sec_node_count;
 | 
						|
    /* sec node count of this struct contain */
 | 
						|
    uint8_t                  contain_sec_node_count;
 | 
						|
    /* see IOT_SG_CCO_CHG_STATE_XXX */
 | 
						|
    uint8_t                  chg_state;
 | 
						|
    /* see IOT_SG_STA_STATE_CHG_REASON_XXX */
 | 
						|
    uint8_t                  leave_reason;
 | 
						|
    /* start index of first sec node in total sec nodes. */
 | 
						|
    uint16_t                 start_idx;
 | 
						|
    /* duration of station leaving network, unit is 1s */
 | 
						|
    uint32_t                 leave_dur;
 | 
						|
    sec_node_info_query_t    node_info[0];
 | 
						|
} sec_node_query_t;
 | 
						|
 | 
						|
/* struct contain info of a secondary node for state change */
 | 
						|
typedef struct _sec_node_state_chg_info {
 | 
						|
    /* node mac addr, little endian */
 | 
						|
    uint8_t                  node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* see IOT_SG_CCO_CHG_STATE_XXX */
 | 
						|
    uint8_t                  chg_state;
 | 
						|
    /* see IOT_SG_STA_STATE_CHG_REASON_XXX */
 | 
						|
    uint8_t                  leave_reason;
 | 
						|
    /* duration of station leaving network, unit is 1s */
 | 
						|
    uint32_t                 leave_dur;
 | 
						|
} sec_node_state_chg_info_t;
 | 
						|
 | 
						|
/* struct contain info of report secondary node state change */
 | 
						|
typedef struct _sec_node_state_chg {
 | 
						|
    /* total sec node state change count */
 | 
						|
    uint8_t                  total_cnt;
 | 
						|
    /* start index of first sec node in total sec nodes. */
 | 
						|
    uint16_t                 start_idx;
 | 
						|
    /* sec node state change info */
 | 
						|
    sec_node_state_chg_info_t    node_info[0];
 | 
						|
} sec_node_state_chg_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_wl_op_entry {
 | 
						|
    /* mac address of secondary node */
 | 
						|
    uint8_t             mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint16_t            node_index;
 | 
						|
    /* protocol the node supports */
 | 
						|
    uint8_t             proto_type;
 | 
						|
    /* communication object type, see PROTO_3762_FJ_OBJ_XXX */
 | 
						|
    uint8_t             obj_type;
 | 
						|
} iot_sg_wl_op_entry_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_wl_op_info {
 | 
						|
    /* count of meter mac */
 | 
						|
    uint8_t count;
 | 
						|
    /* time stamp to remove the entry from white list, unit is 1s */
 | 
						|
    uint32_t rm_ts;
 | 
						|
    /* info of node for wl operation */
 | 
						|
    iot_sg_wl_op_entry_t  node_info[0];
 | 
						|
} iot_sg_wl_op_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_bl_op_info {
 | 
						|
    /* count of meter mac */
 | 
						|
    uint8_t  count;
 | 
						|
    /* info of node for bl operation */
 | 
						|
    uint8_t  node_addr[0][IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_bl_op_info_t;
 | 
						|
 | 
						|
/* struct contain info of a secondary node for communication */
 | 
						|
typedef struct _iot_sg_sta_meter_info {
 | 
						|
    /* meter address */
 | 
						|
    uint8_t         meter_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* sta address */
 | 
						|
    uint8_t         sta_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* secondary node index */
 | 
						|
    uint16_t        node_index;
 | 
						|
    /* protocol the node supports */
 | 
						|
    uint8_t         proto_type;
 | 
						|
    /* device type, see IOT_PLC_DEV_TYPE_XXX */
 | 
						|
    uint8_t         dev_type;
 | 
						|
    /* 0:meter read unfinished, 1:meter read finished */
 | 
						|
    uint8_t         meter_read_done : 1;
 | 
						|
} iot_sg_sta_meter_info_t;
 | 
						|
 | 
						|
/* struct contain info of a white list entry*/
 | 
						|
typedef struct _iot_sg_wl_entry_info {
 | 
						|
    /* meter address */
 | 
						|
    uint8_t         mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* secondary node index */
 | 
						|
    uint16_t        node_index;
 | 
						|
    /* protocol the node supports */
 | 
						|
    uint8_t         proto_type;
 | 
						|
    /* meter status, see IOT_SG_CCO_RT_MR_STATE_XXX */
 | 
						|
    uint8_t         route_mr_state      :2,
 | 
						|
    /* sta module configuration state, 0 fail, 1 success */
 | 
						|
                    sta_mod_cfg_state   :1,
 | 
						|
    /* communication object type, see PROTO_3762_FJ_OBJ_XXX */
 | 
						|
                    obj_type            :4,
 | 
						|
    /* reserved for future */
 | 
						|
                    rsvd                :1;
 | 
						|
} iot_sg_wl_entry_info_t;
 | 
						|
 | 
						|
/* struct containing white list entry information */
 | 
						|
typedef struct _iot_sg_wl_entry_info_transfer {
 | 
						|
    uint16_t        total_count;
 | 
						|
    uint16_t        count;
 | 
						|
    iot_sg_wl_entry_info_t info[0];
 | 
						|
} iot_sg_wl_entry_info_transfer_t;
 | 
						|
 | 
						|
/* struct containing secondary node information for communication */
 | 
						|
typedef struct _iot_sg_node_info_transfer {
 | 
						|
    uint16_t                total_count;
 | 
						|
    uint16_t                count;
 | 
						|
    iot_sg_sta_meter_info_t info[0];
 | 
						|
} iot_sg_node_info_transfer_t;
 | 
						|
 | 
						|
/* neighbor network information */
 | 
						|
typedef struct _iot_sg_nb_nw_info {
 | 
						|
    /* nid of the neighbor network */
 | 
						|
    uint32_t    nid;
 | 
						|
} iot_sg_nb_nw_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_nb_nw_rpt {
 | 
						|
    /* total number of neighbor network */
 | 
						|
    uint16_t                count;
 | 
						|
    /* neighbor network info entries */
 | 
						|
    iot_sg_nb_nw_info_t     nb_info[0];
 | 
						|
} iot_sg_nb_nw_rpt_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_task_info {
 | 
						|
    /* pending task id */
 | 
						|
    uint16_t    task_id;
 | 
						|
    /* priority level, 0 - hight priority, 3 - low priority */
 | 
						|
    uint8_t     prio;
 | 
						|
    /* 0 - need ack, 1 - needless ack */
 | 
						|
    uint8_t     ackflag;
 | 
						|
    /* count of the task address */
 | 
						|
    uint16_t    addr_cnt;
 | 
						|
    /* length of the task data */
 | 
						|
    uint8_t     data_len;
 | 
						|
    /* address field and data field */
 | 
						|
    uint8_t     info[0];
 | 
						|
} iot_sg_task_info_t;
 | 
						|
 | 
						|
/* struct containing upgrade fail entry list information */
 | 
						|
typedef struct _iot_sg_upgrade_fail_entry_info {
 | 
						|
    uint16_t        total_count;
 | 
						|
    uint16_t        count;
 | 
						|
    uint8_t         addr[0][IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_upgrade_fail_entry_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_bd_dev_node_info{
 | 
						|
    /* node mac addr, little endian */
 | 
						|
    uint8_t         mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* device type, see IOT_PLC_DEV_TYPE_XXX */
 | 
						|
    uint8_t         dev_type;
 | 
						|
    /* father node mac addr, little endian */
 | 
						|
    uint8_t         father_node[IOT_MAC_ADDR_LEN];
 | 
						|
    /* phase info */
 | 
						|
    uint8_t         phase               : 3,
 | 
						|
    /* reserved */
 | 
						|
                    reserved1           : 1,
 | 
						|
    /* if phase info is valid */
 | 
						|
                    opposite_phase      : 1,
 | 
						|
    /* phase sequence type */
 | 
						|
                    phase_type          : 3;
 | 
						|
    /* longitude */
 | 
						|
    iot_sg_cco_node_location_unit_t longitude;
 | 
						|
    /* latitude */
 | 
						|
    iot_sg_cco_node_location_unit_t latitude;
 | 
						|
    /* CT ratio, uint is x1 */
 | 
						|
    uint16_t        i_ratio;
 | 
						|
    /* PT ratio, uint is x1 */
 | 
						|
    uint8_t         v_ratio;
 | 
						|
    /* physical phase */
 | 
						|
    uint8_t         phy_phase1 : 2,
 | 
						|
                    phy_phase2 : 2,
 | 
						|
                    phy_phase3 : 2,
 | 
						|
    /* reserved2 */
 | 
						|
                    reserved2  : 2;
 | 
						|
}iot_sg_cco_bd_dev_node_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_bd_dev_info_transfer{
 | 
						|
    /* total node count  */
 | 
						|
    uint16_t                            total_cnt;
 | 
						|
    /* start query index */
 | 
						|
    uint16_t                            start_index;
 | 
						|
    /* report node count */
 | 
						|
    uint8_t                             rpt_cnt;
 | 
						|
    /* physical topo node info */
 | 
						|
    iot_sg_cco_bd_dev_node_info_t       node_info[0];
 | 
						|
} iot_sg_cco_bd_dev_info_transfer_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_ctrl_connect_evt_rpt {
 | 
						|
    /* connect state, 0 - disconnect, 1 - connect */
 | 
						|
    uint8_t                   state;
 | 
						|
    /* ctrl mac address, little endian */
 | 
						|
    uint8_t                   ctrl_mac[IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_ctrl_connect_evt_rpt_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_node_evt_ctrl_info {
 | 
						|
    /* sta mac, big endian */
 | 
						|
    uint8_t             mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* event report state, 0 - disable, 1 - enable */
 | 
						|
    uint8_t             enable;
 | 
						|
} iot_sg_cco_node_evt_ctrl_info;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_node_evt_rpt_ctrl {
 | 
						|
    /* node event report control info */
 | 
						|
    iot_sg_cco_node_evt_ctrl_info   node_evt_ctrl[0];
 | 
						|
} iot_sg_cco_node_evt_rpt_ctrl_t;
 | 
						|
 | 
						|
/* nw forward module read meter data info */
 | 
						|
typedef struct _iot_sg_cco_nw_forward_module_info {
 | 
						|
    /* work code, see IOT_SG_CCO_TRANS_WORK_CODE_XXX */
 | 
						|
    uint8_t         work_code;
 | 
						|
    /* work info */
 | 
						|
    uint8_t         data[0];
 | 
						|
} iot_sg_cco_nw_forward_module_info_t;
 | 
						|
 | 
						|
/* base element */
 | 
						|
typedef struct _iot_sg_cco_base_sec_node_info {
 | 
						|
    /* element id */
 | 
						|
    uint8_t         id;
 | 
						|
    /* element data length */
 | 
						|
    uint8_t         data_len;
 | 
						|
    /* element data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} iot_sg_cco_base_sec_node_info_t;
 | 
						|
 | 
						|
/* cco build version info */
 | 
						|
typedef struct _iot_sg_cco_build_ver_info {
 | 
						|
    /* Build type: Release/Debug-(0/1) */
 | 
						|
    uint8_t type_ver;
 | 
						|
    /* numerically encoded version, like 0x01020304 */
 | 
						|
    uint32_t firmware_version;
 | 
						|
    /* external software version. BCD format. range from 0 - 9999 */
 | 
						|
    uint16_t sw_ver;
 | 
						|
    /* app software version. bin format. range from 0 - 1023 */
 | 
						|
    uint16_t app_ver;
 | 
						|
    /* build year */
 | 
						|
    uint8_t year;
 | 
						|
    /* build month */
 | 
						|
    uint8_t month;
 | 
						|
    /* build day */
 | 
						|
    uint8_t day;
 | 
						|
    /* build hour */
 | 
						|
    uint8_t hour;
 | 
						|
    /* build min */
 | 
						|
    uint8_t min;
 | 
						|
    /* build sec */
 | 
						|
    uint8_t sec;
 | 
						|
    /* vendor id */
 | 
						|
    uint16_t vendor_id;
 | 
						|
    /* device id */
 | 
						|
    uint8_t dev_id[IOT_SG_CCO_MODULE_ID_INFO_LEN];
 | 
						|
    /* chip management id */
 | 
						|
    iot_plc_chip_id_t chip_mmid;
 | 
						|
    /* image crc check result, 0 mean succeed, 1 mean fail */
 | 
						|
    uint8_t img_check_result : 1,
 | 
						|
    /* flag mark to if the device has branch signal receiving capability */
 | 
						|
            br_ident         : 1,
 | 
						|
    /* flag mark to if enable rf */
 | 
						|
            rf               : 1,
 | 
						|
    /* non 0 means broadcast packet sent in 3phase simultaneously, 0 means
 | 
						|
     * broadcast packet sent in 3phase in turn.
 | 
						|
     */
 | 
						|
            tx_3phase_flag   : 1,
 | 
						|
    /* reserve for future */
 | 
						|
            reserve          : 4;
 | 
						|
    /* hardware version */
 | 
						|
    uint32_t hw_ver;
 | 
						|
    /* module mac address */
 | 
						|
    uint8_t mod_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* user type, see USER_TYPE_XXX */
 | 
						|
    uint8_t user_type;
 | 
						|
    /* simple pair passcode value. Only same passcode CCO and STA can be
 | 
						|
     * associated, little endian.
 | 
						|
     */
 | 
						|
    uint16_t passcode;
 | 
						|
    /* equipment service provider, see IOT_SG_CCO_ESP_XXX */
 | 
						|
    uint8_t esp;
 | 
						|
} iot_sg_cco_build_ver_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_clct_task_addr {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t               task_id;
 | 
						|
    /* task configuration address total address count */
 | 
						|
    uint16_t              total_cnt;
 | 
						|
    /* report address count */
 | 
						|
    uint8_t               cnt;
 | 
						|
    /* power meter address, little endian */
 | 
						|
    uint8_t               pm_mac[0][IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_cco_clct_task_addr_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_clct_data_rpt {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t               task_id;
 | 
						|
    /* power meter address, little endian */
 | 
						|
    uint8_t               pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* proto type, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t               proto_type;
 | 
						|
    /* time stamp, BCD code to represent */
 | 
						|
    uint8_t               year;
 | 
						|
    uint8_t               month;
 | 
						|
    uint8_t               day;
 | 
						|
    uint8_t               hour;
 | 
						|
    uint8_t               min;
 | 
						|
    uint8_t               sec;
 | 
						|
    /* sta collect data length */
 | 
						|
    uint16_t              data_len;
 | 
						|
    /* sta collect data */
 | 
						|
    uint8_t               data[0];
 | 
						|
} iot_sg_cco_clct_data_rpt_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_edge_computing_set {
 | 
						|
    /* overvoltage monitor switch, 0 - open, others - close */
 | 
						|
    uint8_t      overvoltage_switch;
 | 
						|
    /* 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 switch, 0 - open, others - close */
 | 
						|
    uint8_t      undervoltage_switch;
 | 
						|
    /* 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 switch, 0 - open, others - close */
 | 
						|
    uint8_t      pulse_switch;
 | 
						|
    /* clock second pulse monitor threshold, unit is 1ms */
 | 
						|
    uint16_t     pulse_threshold;
 | 
						|
    /* power meter health status monitor switch, 0 - open, others - close */
 | 
						|
    uint8_t      health_status_switch;
 | 
						|
    /* power meter used time limit threshold, unit is year */
 | 
						|
    uint8_t      used_limit_threshold;
 | 
						|
} iot_sg_cco_edge_computing_set_t;
 | 
						|
 | 
						|
#pragma pack(pop)   /* restore the pack status */
 | 
						|
 | 
						|
/* struct contain info of a secondary node */
 | 
						|
typedef struct _iot_sg_pm_node_info {
 | 
						|
    /* meter address */
 | 
						|
    uint8_t         meter_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* sta address */
 | 
						|
    uint8_t         sta_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* protocol the node supports */
 | 
						|
    uint8_t         proto_type;
 | 
						|
    /* 0: the node don't active register, 1: the node active register*/
 | 
						|
    uint8_t         active_reg_flag : 1,
 | 
						|
    /* transformer status, see IOT_SG_CCO_PM_TO_TSFM_XXX */
 | 
						|
                    tsfm_status     : 4,
 | 
						|
    /* phase that device is connected to.
 | 
						|
     *  bit0 set to 1 means device is connected to phase A.
 | 
						|
     *  bit1 set to 1 means device is connected to phase B.
 | 
						|
     *  bit2 set to 1 means device is connected to phase C.
 | 
						|
     */
 | 
						|
                    phase           : 3;
 | 
						|
    /* phase type of three phase meter, see IOT_SG_CCO_PHASE_SEQ_XXX */
 | 
						|
    uint8_t         phase_type      : 3,
 | 
						|
    /* flag to mark if L/N reversed in Single-phase power meter or phase
 | 
						|
     * sequence reversed in Three-phase power meter.
 | 
						|
     */
 | 
						|
                    opposite_phase  : 1,
 | 
						|
    /* reserved */
 | 
						|
                    reserved        : 4;
 | 
						|
    /* device type, see IOT_PLC_DEV_TYPE_XXX */
 | 
						|
    uint8_t         dev_type;
 | 
						|
} iot_sg_pm_node_info_t;
 | 
						|
 | 
						|
/* struct containing white list entry count information */
 | 
						|
typedef struct _iot_sg_wl_cnt_info {
 | 
						|
    uint16_t        max_node_count; /* max node count */
 | 
						|
    uint16_t        node_count;     /* current node count*/
 | 
						|
}iot_sg_wl_cnt_info_t;
 | 
						|
 | 
						|
/* struct containing white list ii entry count information */
 | 
						|
typedef struct _iot_sg_wlii_cnt_info {
 | 
						|
    uint16_t        max_node_count; /* max node count */
 | 
						|
    uint16_t        node_count;     /* current node count*/
 | 
						|
}iot_sg_wlii_cnt_info_t;
 | 
						|
 | 
						|
/* struct containing secondary node index information */
 | 
						|
typedef struct _iot_sg_node_index_info {
 | 
						|
    uint16_t        min_index;  /* max node count */
 | 
						|
    uint16_t        max_index;  /* current node count*/
 | 
						|
}iot_sg_node_index_info_t;
 | 
						|
 | 
						|
/* struct containing secondary node information */
 | 
						|
typedef struct _iot_sg_node_info {
 | 
						|
    uint16_t        total_count;
 | 
						|
    uint16_t        count;
 | 
						|
    iot_sg_pm_node_info_t info[0];
 | 
						|
}iot_sg_node_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_phase_info {
 | 
						|
    /* For physical phase, if a field is nonzero,
 | 
						|
     * STA is connected with that phase.
 | 
						|
     */
 | 
						|
    uint8_t     phy_phase1     : 2,
 | 
						|
                phy_phase2     : 2,
 | 
						|
                phy_phase3     : 2,
 | 
						|
    /* flag to mark if L/N reversed in Single-phase power meter or phase
 | 
						|
     * sequence reversed in Three-phase power meter.
 | 
						|
     */
 | 
						|
                opposite_phase : 1,
 | 
						|
    /* flag to mark if L/N reversed in Three-phase power meter */
 | 
						|
                opposite_3p    : 1;
 | 
						|
    /* connection position of N-wire if L/N of three-phase meter is reversed.
 | 
						|
     * see IOT_PLC_PHASE_XXX.
 | 
						|
     * Note: the position refers to the physical phase terminal.
 | 
						|
     */
 | 
						|
    uint8_t     opposite_3p_pos : 2,
 | 
						|
    /* phase that device is connected to.
 | 
						|
     *  bit0 set to 1 means device is connected to phase A.
 | 
						|
     *  bit1 set to 1 means device is connected to phase B.
 | 
						|
     *  bit2 set to 1 means device is connected to phase C.
 | 
						|
     */
 | 
						|
                phase           : 3,
 | 
						|
    /* phase type of three phase meter, see IOT_SG_CCO_PHASE_SEQ_XXX */
 | 
						|
                phase_type      : 3;
 | 
						|
    /* For logical phase, phase1 is the most possible phase.
 | 
						|
     * phase3 is the least possible phase.
 | 
						|
     */
 | 
						|
    uint8_t     logical_phase1 : 2,
 | 
						|
                logical_phase2 : 2,
 | 
						|
                logical_phase3 : 2,
 | 
						|
    /* flag to mark if app phase info valid */
 | 
						|
                phase_info_valid : 1,
 | 
						|
    /* power meter type, 0: single phase, 1: three phase */
 | 
						|
                pm_type          : 1;
 | 
						|
}iot_sg_phase_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_upgrade_info {
 | 
						|
    /* cco upgrade status see - IOT_SG_CCO_UPGRADE_ST_XXX */
 | 
						|
    uint32_t    state;
 | 
						|
    /* file type - see IOT_FILE_TYPE_XXX */
 | 
						|
    uint32_t    file_type;
 | 
						|
    /* file identity */
 | 
						|
    uint8_t     id;
 | 
						|
    /* mac address of the STA being upgraded - (little endian) */
 | 
						|
    uint8_t     sta_mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* total block count of the upgrading file */
 | 
						|
    uint16_t    block_cnt;
 | 
						|
    /* file size */
 | 
						|
    uint32_t    size;
 | 
						|
    /* crc16 from cctt when receiving data from cctt. */
 | 
						|
    uint16_t    crc;
 | 
						|
    /* received block count */
 | 
						|
    uint16_t    recv_cnt;
 | 
						|
} iot_sg_upgrade_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_upgrade_statistics {
 | 
						|
    /* total count of sta will being upgrading */
 | 
						|
    uint16_t    total_cnt;
 | 
						|
    /* count of sta that is started */
 | 
						|
    uint16_t    start_cnt;
 | 
						|
    /* count of sta is skiped , not upgrade */
 | 
						|
    uint16_t    skip_cnt;
 | 
						|
    /* count of sta finished upgrade  */
 | 
						|
    uint16_t    finish_cnt;
 | 
						|
    /* count of sta upgrading */
 | 
						|
    uint16_t    upgrading_cnt;
 | 
						|
    /* count of sta renew sw version done */
 | 
						|
    uint16_t    renew_sw_cnt;
 | 
						|
} iot_sg_upgrade_statistics_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_net_info {
 | 
						|
    /* communication mode, see IOT_SG_CCO_COMM_MOD_XXX */
 | 
						|
    uint8_t     comm_mode;
 | 
						|
    /* time of joined network */
 | 
						|
    uint8_t     join_sec;
 | 
						|
    uint8_t     join_min;
 | 
						|
    uint8_t     join_hour;
 | 
						|
    uint8_t     join_day;
 | 
						|
    uint8_t     join_mon;
 | 
						|
    uint8_t     join_year;
 | 
						|
    /* flag to mark if the sec node in the network */
 | 
						|
    uint8_t     in_net;
 | 
						|
    /* cost time from power on to join network, unit is 1s */
 | 
						|
    uint32_t    cost_time;
 | 
						|
} iot_sg_cco_net_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_net_node_info {
 | 
						|
    /* node addr, little-endian. */
 | 
						|
    uint8_t             addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* phase that device is connected to.
 | 
						|
     *  bit0 set to 1 means device is connected to phase A.
 | 
						|
     *  bit1 set to 1 means device is connected to phase B.
 | 
						|
     *  bit2 set to 1 means device is connected to phase C.
 | 
						|
     */
 | 
						|
    uint8_t             phase               : 3,
 | 
						|
    /* phase type of three phase meter, see IOT_SG_CCO_PHASE_SEQ_XXX */
 | 
						|
                        phase_type          : 3,
 | 
						|
    /* power meter type, 0: single phase, 1: three phase */
 | 
						|
                        pm_type             : 1,
 | 
						|
    /* flag to mark if node support minute collection */
 | 
						|
                        minute_clct         : 1;
 | 
						|
    /* physical phase of the station */
 | 
						|
    uint8_t             phy_phase1          : 2,
 | 
						|
                        phy_phase2          : 2,
 | 
						|
                        phy_phase3          : 2,
 | 
						|
    /* flag to mark if L/N reversed in Single-phase power meter or phase
 | 
						|
     * sequence reversed in Three-phase power meter.
 | 
						|
     */
 | 
						|
                        opposite_phase      : 1,
 | 
						|
    /* flag to mark if L/N reversed in Three-phase power meter */
 | 
						|
                        opposite_3p         : 1;
 | 
						|
    /* flag to mark if have super capacitance */
 | 
						|
    uint8_t             super_cap           : 1,
 | 
						|
    /* flag to mark if could fix position */
 | 
						|
                        fix_position        : 1,
 | 
						|
    /* station detect status, see IOT_SG_CCO_PM_TO_TSFM_XXX */
 | 
						|
                        tsfm_status         : 4,
 | 
						|
    /* mac address type, see IOT_PLC_MAC_ADDR_TYPE_XXX */
 | 
						|
                        addr_type           : 2;
 | 
						|
    /* type of dev the STA module attached, see IOT_PLC_DEV_TYPE_XXX */
 | 
						|
    uint8_t             dev_type;
 | 
						|
    /* uplink signal quality, valid for sec node */
 | 
						|
    uint8_t             ul_quality          : 4,
 | 
						|
    /* downlink signal quality, valid for sec node */
 | 
						|
                        dl_quality          : 4;
 | 
						|
    /* external, software version */
 | 
						|
    uint16_t            sw_version;
 | 
						|
    /* internal software version */
 | 
						|
    uint32_t            build_sw_ver;
 | 
						|
    /* boot version */
 | 
						|
    uint8_t             boot_ver;
 | 
						|
    /* 2 bytes for vendor id */
 | 
						|
    uint16_t            vendor_id;
 | 
						|
    /* chip id */
 | 
						|
    iot_plc_chip_id_t   chip_id;
 | 
						|
    /* network info of the node */
 | 
						|
    iot_sg_cco_net_info_t net_info;
 | 
						|
    /* software build time */
 | 
						|
    uint16_t           build_time_y         : 7,
 | 
						|
                       build_time_m         : 4,
 | 
						|
                       build_time_d         : 5;
 | 
						|
    /* chip code */
 | 
						|
    uint16_t           chip_code;
 | 
						|
    /* type of getting module id, see IOT_SG_CCO_GET_MOD_ID_TYPE_XXX */
 | 
						|
    uint8_t            recv_result_type     : 2,
 | 
						|
    /* reserved for future */
 | 
						|
                       rsvd                 : 6;
 | 
						|
    /* module id information for gw,
 | 
						|
     * module mac addr, big-endian, for nw.
 | 
						|
     */
 | 
						|
    uint8_t            module_id_info[IOT_SG_CCO_MODULE_ID_INFO_LEN];
 | 
						|
    /* node tei value */
 | 
						|
    uint16_t           tei;
 | 
						|
    /* software module version */
 | 
						|
    uint16_t           sw_mod_version;
 | 
						|
    /* release date of sw module version */
 | 
						|
    uint8_t            sw_mod_date[IOT_SG_CCO_VER_DATE_LENGTH];
 | 
						|
    /* software chip version */
 | 
						|
    uint16_t           sw_chip_version;
 | 
						|
    /* release date of sw chip version */
 | 
						|
    uint8_t            sw_chip_date[IOT_SG_CCO_VER_DATE_LENGTH];
 | 
						|
    /* hardware module version */
 | 
						|
    uint16_t           hw_mod_version;
 | 
						|
    /* release date of hw module version */
 | 
						|
    uint8_t            hw_mod_date[IOT_SG_CCO_VER_DATE_LENGTH];
 | 
						|
    /* hardware chip version */
 | 
						|
    uint16_t           hw_chip_version;
 | 
						|
    /* release date of hw chip version */
 | 
						|
    uint8_t            hw_chip_date[IOT_SG_CCO_VER_DATE_LENGTH];
 | 
						|
    /* app version */
 | 
						|
    uint16_t           app_version;
 | 
						|
} iot_sg_cco_net_node_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_reject_bl_node_info {
 | 
						|
    /* node mac addr, big endian */
 | 
						|
    uint8_t            node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
} iot_sg_cco_reject_bl_node_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_lp_meter_info {
 | 
						|
    /* node addr, little-endian. */
 | 
						|
    uint8_t             addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* tei of the station */
 | 
						|
    uint16_t            sta_tei;
 | 
						|
    /* tei of the proxy */
 | 
						|
    uint16_t            proxy_tei;
 | 
						|
    /* level of the station */
 | 
						|
    uint8_t             level;
 | 
						|
    /* role of the station */
 | 
						|
    uint8_t             role;
 | 
						|
} iot_sg_cco_lp_meter_info_t;
 | 
						|
 | 
						|
/* branch identification control parameter structure */
 | 
						|
typedef struct _iot_sg_cco_bd_ctrl {
 | 
						|
    /* branch detect type, see IOT_SG_CCO_BD_TYPE_XXX */
 | 
						|
    uint8_t         bd_type;
 | 
						|
    /* branch detect mod, see IOT_SG_CCO_BD_MOD_XXX */
 | 
						|
    uint8_t         bd_mod;
 | 
						|
} iot_sg_cco_bd_ctrl_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_info_rpt {
 | 
						|
    /* flag to mark if sequence reversed. */
 | 
						|
    uint8_t             opposite_phase      :1,
 | 
						|
    /* physical phase of the station, see PROTO_SG_PHASE_XXX */
 | 
						|
                        phy_phase1          :2,
 | 
						|
    /* reserved */
 | 
						|
                        reserved            :5;
 | 
						|
} iot_sg_cco_info_rpt_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_uart_conf {
 | 
						|
    /* uart baud rate type, see IOT_SG_CCO_BAUD_IDX_XXX */
 | 
						|
    uint8_t             baud_rate           :7,
 | 
						|
    /* flag to mark if set uart baud rate type */
 | 
						|
                        baud_rate_flag      :1;
 | 
						|
    /* uart baud max rate type */
 | 
						|
    uint8_t             max_baud_rate       :7,
 | 
						|
    /* flag to mark if set uart max baud rate type */
 | 
						|
                        max_baud_rate_flag  :1;
 | 
						|
    /* uart baud rate recover time, unit is 1min */
 | 
						|
    uint16_t            rec_time            :15,
 | 
						|
    /* flag to mark if set recover time */
 | 
						|
                        rec_time_flag       :1;
 | 
						|
    /* hardware reset cnt for error baud rate */
 | 
						|
    uint8_t             reset_cnt           :7,
 | 
						|
    /* flag to mark if set reset cnt */
 | 
						|
                        reset_cnt_flag      :1;
 | 
						|
} iot_sg_cco_uart_conf_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_node_base_info {
 | 
						|
    /* node mac addr, little endian */
 | 
						|
    uint8_t                     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* base info */
 | 
						|
    uint8_t                     data[0];
 | 
						|
} iot_sg_cco_node_base_info_t;
 | 
						|
 | 
						|
typedef struct _iot_sg_cco_base_sec_node_info_ul {
 | 
						|
    /* current ack count of the secondary node */
 | 
						|
    uint8_t                     ack_node_count;
 | 
						|
    /* element info */
 | 
						|
    uint8_t                     element;
 | 
						|
    /* node base info */
 | 
						|
    //iot_sg_cco_node_base_info_t       base_info[0];
 | 
						|
} iot_sg_cco_base_sec_node_info_ul_t;
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    function callback to init driver.
 | 
						|
 * @return:  0           - success.
 | 
						|
 * @return:  otherwise   - error code.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_init_func_t)();
 | 
						|
 | 
						|
/* function callback to deinit driver */
 | 
						|
typedef void(*iot_sg_cco_drv_deinit_func_t)();
 | 
						|
 | 
						|
typedef void(*iot_sg_cco_drv_timer_func_t)();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send report meter data to driver/CLI.
 | 
						|
 * @param data:             report meter data.
 | 
						|
 * @param len:              length of the data.
 | 
						|
 * @param cmd_info:         information of the meter reading command.
 | 
						|
 *                          for gw, it's afn. for nw, it's task id.
 | 
						|
 * @param sn:               concentrator cmd sn.
 | 
						|
 * @param proto_type:       proto type of data.
 | 
						|
 * @param mac_field:        address field of meter.
 | 
						|
 * @param mr_result:        read meter result, see IOT_SG_CCO_MR_xxx.
 | 
						|
 * @param plc_cost:         time cost in PLC line for read meter. unit is 1ms.
 | 
						|
 * @param mr_type:          meter read type, see IOT_SG_RMT_XXX
 | 
						|
 * @param intf_type:        interface of calling this API.
 | 
						|
 *                          see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_report_meter_data_func_t)(uint8_t *data,
 | 
						|
    uint16_t len, uint32_t cmd_info, uint16_t sn, uint32_t proto_type,
 | 
						|
    uint8_t *mac_field, uint8_t mr_result, uint32_t plc_cost, uint8_t mr_type,
 | 
						|
    uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send event report data from power.
 | 
						|
 * @param sn:            sequence number for a packet.
 | 
						|
 * @param pm_addr:       meter addr of event reporting
 | 
						|
 * @param dev_type:      device type, see IOT_SG_CCO_DEV_TYPE_XXX.
 | 
						|
 * @param proto_type:    proto type of data.
 | 
						|
 * @param evt_type:      event type, see IOT_SG_CCO_EVENT_XXX.
 | 
						|
 * @param data:          event report data.
 | 
						|
 * @param len:           length of the data.
 | 
						|
 * @param retval:        ERR_OK - support event type, others - no support event
 | 
						|
 *                       type, delete entry from the ul buf.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_event_report_data_func_t)(uint8_t sn,
 | 
						|
    uint8_t *pm_addr, uint8_t dev_type, uint32_t proto_type,
 | 
						|
    uint8_t evt_type, uint8_t *data, uint16_t len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send report secondary nodes info to
 | 
						|
 *                    driver.
 | 
						|
 * @param sn:         sequence number for a 3762 packet.
 | 
						|
 * @param index:      index of meter in table.
 | 
						|
 * @param data:       report secondary nodes info data.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_report_sec_node_data_func_t)(uint8_t sn,
 | 
						|
    uint16_t index, sec_node_query_t *data);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send topo info to driver.
 | 
						|
 * @param req_id:     request id of data to report.
 | 
						|
 * @param data:       topo info data.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_topo_data_func_t)(uint8_t req_id,
 | 
						|
    iot_plc_nw_topo_rpt_t *data);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send neighbour network info to driver.
 | 
						|
 * @param req_id:     request id of data to report.
 | 
						|
 * @param data:       neighbour network info data.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_neighbour_net_data_func_t)(uint8_t req_id,
 | 
						|
    iot_sg_nb_nw_rpt_t *data);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send frequency band info to driver.
 | 
						|
 * @param req_id:    request id of data to report.
 | 
						|
 * @param req:       the pointer of data to report.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_freq_band_data_func_t)(uint8_t req_id,
 | 
						|
    iot_plc_freq_band_info_query_rpt_t* req);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send frequency band info to driver.
 | 
						|
 * @param req_id:       request id of data to report.
 | 
						|
 * @param result:       the result of frequency band be set.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_freq_band_set_result_func_t)(uint8_t req_id,
 | 
						|
    uint8_t result);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send rf channel info to driver.
 | 
						|
 * @param req_id:       request id of data to report.
 | 
						|
 * @param result:       the result of rf channel be set.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_rf_channel_set_ret_func_t)(uint8_t req_id,
 | 
						|
    uint8_t result);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo set hplc/rf power info to driver.
 | 
						|
 * @param req_id:       request id of data to report.
 | 
						|
 * @param result:       the result of rf channel be set.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_tx_power_set_ret_func_t)(uint8_t req_id,
 | 
						|
    uint8_t result);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function to handle data from UART/Concentrator.
 | 
						|
 * @param channel: data sources, see IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_XXX.
 | 
						|
 * @param pkt:  iot_pkt containing data to be process.
 | 
						|
 * @param ntb:  ntb for recv the message.
 | 
						|
 */
 | 
						|
typedef uint32_t(*iot_sg_cco_drv_cctt_data_func_t)(uint8_t channel,
 | 
						|
    iot_pkt_t *pkt, uint32_t ntb);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send frequency band info to driver.
 | 
						|
 * @param sn:           sequence number for a 3762 packet.
 | 
						|
 * @param result:       the result of router status change.
 | 
						|
 * @param intf_type:    interface of calling this API.
 | 
						|
 *                      see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 */
 | 
						|
typedef void(*iot_sg_cco_drv_report_router_status_change)(uint8_t sn,
 | 
						|
    uint8_t result, uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to check if report the sta state change.
 | 
						|
 * @param state:     sta state, see IOT_SG_CCO_STA_STATE_XXX.
 | 
						|
 * @param sta_mac:   station mac address, big-endian.
 | 
						|
 * @return: 1       - need to report.
 | 
						|
 * @return: 0       - don't need to report.
 | 
						|
 */
 | 
						|
typedef uint8_t (*iot_sg_cco_drv_report_sta_state_chg)(uint8_t state,
 | 
						|
    uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to network info to driver.
 | 
						|
 * @param req_id:     request id of data to report.
 | 
						|
 * @param rpt:           basic network info report.
 | 
						|
 */
 | 
						|
typedef void(*iot_sg_cco_drv_report_nw_info_func_t)(
 | 
						|
    uint8_t req_id, iot_plc_nw_info_query_rpt_t *rpt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for reporting transformer detect result
 | 
						|
 * @param pm_mac:     power meter mac address, little-endian.
 | 
						|
 * @param tsfm_addr:  station real transformer mac address, big-endian.
 | 
						|
 * @param tsfm_status: transformer detect result,
 | 
						|
 *                             see IOT_SG_CCO_PM_TO_TSFM_XXX.
 | 
						|
 * @param dev_type:   device type, see IOT_PLC_DEV_TYPE_XXX.
 | 
						|
 */
 | 
						|
typedef void(*iot_sg_cco_drv_rpt_tsfm_detect_ret)(uint8_t *pm_mac,
 | 
						|
    uint8_t *tsfm_addr, uint8_t tsfm_status, uint8_t dev_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for notification status change.
 | 
						|
 * @param curr_state:     cco's current state, see IOT_SG_CCO_STATE_XXX.
 | 
						|
 * @param next_state:     cco's next state, see IOT_SG_CCO_STATE_XXX.
 | 
						|
 * @param cert_flag_chg:  pointer to cert flag if the cert flag is changed.
 | 
						|
 */
 | 
						|
typedef void(*iot_sg_cco_status_chg_func_t)(uint8_t curr_state,
 | 
						|
    uint8_t next_state, uint8_t *cert_flag_chg);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for check the meter read availability
 | 
						|
 * @param   mr_type: type of the read data.
 | 
						|
 * @return: 0 - the data is invalid, otherwise - the data is valid.
 | 
						|
 */
 | 
						|
typedef uint8_t(*iot_sg_cco_mr_data_valid_func_t)(uint8_t mr_type,
 | 
						|
    uint8_t *pm_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCO to send muti-nodes' info to driver.
 | 
						|
 * @param req_id:    request id of data to report.
 | 
						|
 * @param rpt:       nodes' info data.
 | 
						|
 */
 | 
						|
typedef void(*iot_sg_cco_drv_rpt_node_info_func_t)(uint8_t req_id,
 | 
						|
    iot_plc_node_info_rpt_t *rpt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for router request meter reading.
 | 
						|
 * @param phase:     power meter phase
 | 
						|
 * @param mac:       power meter mac address, little-endian
 | 
						|
 * @param index:     power meter index
 | 
						|
 * @param obj_type:  communication object type, see PROTO_3762_FJ_OBJ_XXX
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 */
 | 
						|
typedef void(*iot_sg_cco_drv_rt_request_mr_func_t)(uint8_t phase, uint8_t *mac,
 | 
						|
    uint16_t index, uint8_t obj_type, uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for reporting transformer detect is finished.
 | 
						|
 * @param tsfm_is_timeout: flag to mark if tsfm done by timeout.
 | 
						|
 */
 | 
						|
typedef void(*iot_sg_cco_drv_tsfm_detect_done_func_t)(uint8_t tsfm_is_timeout);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for reporting the node that be rejected join network
 | 
						|
 * @param node: the node information.
 | 
						|
 */
 | 
						|
typedef void(*iot_sg_cco_drv_reject_join_node_func_t)(
 | 
						|
    iot_plc_sta_join_rejected_t *node);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for passthrough data to cctt
 | 
						|
 * @param data: data from app, the data will be free in function.
 | 
						|
 * @return:  0           - success.
 | 
						|
 * @return:  otherwise   - error code.
 | 
						|
 */
 | 
						|
typedef uint32_t (*iot_sg_cco_drv_passthrough_to_cctt_func_t)(iot_pkt_t *data);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback to notify driver that timer fired.
 | 
						|
 */
 | 
						|
typedef void (*iot_sg_cco_drv_timer_func_t)();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for network formation is done.
 | 
						|
 */
 | 
						|
typedef void (*iot_sg_cco_drv_nw_fmt_done_t)();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for sec node state change report.
 | 
						|
 * @param sn: sequence number for a data packet.
 | 
						|
 * @param node_chg: the pointer of node state change data to report.
 | 
						|
 */
 | 
						|
typedef void (*iot_sg_cco_drv_node_state_chg_rpt_t)(uint8_t sn,
 | 
						|
    sec_node_state_chg_t *node_chg);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send neighbor dev info to driver.
 | 
						|
 * @param req_id:    request id of data to report.
 | 
						|
 * @param rpt: neighbor dev info.
 | 
						|
 */
 | 
						|
typedef void (*iot_sg_cco_drv_neighbor_dev_report_t)(uint8_t req_id,
 | 
						|
    iot_plc_neighbor_dev_rpt_t *rpt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback for CCo to send phase info to driver.
 | 
						|
 * @param req_id:    request id of data to report.
 | 
						|
 * @param rpt: cco phase info.
 | 
						|
 */
 | 
						|
typedef void (*iot_sg_cco_drv_info_report_t)(uint8_t req_id,
 | 
						|
    iot_sg_cco_info_rpt_t *rpt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief function callback to bcast task report.
 | 
						|
 * @param done:    flag to mark if bcast task is done, 0 - bcast task is doing,
 | 
						|
 *                 should to send bcast in current, 1 - bcast task is done,
 | 
						|
 *                 should to stop bcast task.
 | 
						|
 */
 | 
						|
typedef void (*iot_sg_cco_drv_bcast_task_rpt_t)(uint8_t done);
 | 
						|
 | 
						|
/* smart grid cco role driver descriptor */
 | 
						|
typedef struct _iot_sg_cco_drv {
 | 
						|
    /* id of the driver. see IOT_SG_cco_DRV_ID_INVALID */
 | 
						|
    uint16_t                                   drv_id;
 | 
						|
    /* supported data type mask. see GW_APP_DATA_TYPE_MASK_XXX */
 | 
						|
    uint16_t                                   data_type_mask;
 | 
						|
    /* driver required headroom for each request packet */
 | 
						|
    uint8_t                                    headroom;
 | 
						|
    /* driver operation function callbacks */
 | 
						|
    iot_sg_cco_drv_init_func_t                 init;
 | 
						|
    iot_sg_cco_drv_deinit_func_t               deinit;
 | 
						|
    iot_sg_cco_drv_report_meter_data_func_t    meter_data_report_cb;
 | 
						|
    iot_sg_cco_drv_event_report_data_func_t    event_data_report_cb;
 | 
						|
    iot_sg_cco_drv_report_sec_node_data_func_t sec_node_report_cb;
 | 
						|
    iot_sg_cco_drv_topo_data_func_t            topo_report_cb;
 | 
						|
    iot_sg_cco_drv_neighbour_net_data_func_t   neighbour_net_report_cb;
 | 
						|
    iot_sg_cco_drv_freq_band_data_func_t       freq_band_report_cb;
 | 
						|
    iot_sg_cco_drv_report_nw_info_func_t       nw_info_rpt_cb;
 | 
						|
    iot_sg_cco_drv_freq_band_set_result_func_t freq_band_set_result_report_cb;
 | 
						|
    iot_sg_cco_drv_rf_channel_set_ret_func_t   rf_channel_set_result_report_cb;
 | 
						|
    iot_sg_cco_drv_tx_power_set_ret_func_t     tx_power_set_result_report_cb;
 | 
						|
    iot_sg_cco_drv_report_router_status_change report_router_status_change;
 | 
						|
    iot_sg_cco_drv_cctt_data_func_t            cctt_data_handler;
 | 
						|
    iot_sg_cco_drv_timer_func_t                timer1_func;
 | 
						|
    iot_sg_cco_drv_timer_func_t                timer2_func;
 | 
						|
    iot_sg_cco_drv_timer_func_t                timer3_func;
 | 
						|
    iot_sg_cco_drv_timer_func_t                timer4_func;
 | 
						|
    iot_sg_cco_drv_timer_func_t                timer5_func;
 | 
						|
    iot_sg_cco_drv_timer_func_t                timer6_func;
 | 
						|
    iot_sg_cco_drv_timer_func_t                log_to_flash_timer_func;
 | 
						|
    iot_sg_cco_drv_report_sta_state_chg        sta_state_chg_cb;
 | 
						|
    iot_sg_cco_drv_rpt_tsfm_detect_ret         rpt_tsfm_detect_ret_cb;
 | 
						|
    iot_sg_cco_status_chg_func_t               cco_status_chg_cb;
 | 
						|
    iot_sg_cco_mr_data_valid_func_t            mr_data_valid_cb;
 | 
						|
    iot_sg_cco_drv_rpt_node_info_func_t        node_info_rpt_cb;
 | 
						|
    iot_sg_cco_drv_rt_request_mr_func_t        rt_request_mr_cb;
 | 
						|
    iot_sg_cco_drv_tsfm_detect_done_func_t     tsfm_detect_done_cb;
 | 
						|
    iot_sg_cco_drv_reject_join_node_func_t     reject_join_cb;
 | 
						|
    iot_sg_cco_drv_passthrough_to_cctt_func_t  passthrough_to_cctt_cb;
 | 
						|
    iot_sg_cco_drv_nw_fmt_done_t               nw_fmt_done_cb;
 | 
						|
    iot_sg_cco_drv_node_state_chg_rpt_t        node_state_chg_cb;
 | 
						|
    iot_sg_cco_drv_neighbor_dev_report_t       neighbor_dev_report_cb;
 | 
						|
    iot_sg_cco_drv_info_report_t               cco_info_report_cb;
 | 
						|
    iot_sg_cco_drv_bcast_task_rpt_t            cco_rpt_bcast_result_cb;
 | 
						|
} iot_sg_cco_drv_t;
 | 
						|
 | 
						|
#if (PLC_SUPPORT_CCO_ROLE && IOT_SMART_GRID_ENABLE)
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_send_uart() - send iot_pkt_t data to uart.
 | 
						|
 * @param   pkt:        the iot_pkt_t data to be sent to uart.
 | 
						|
 * @param   channel: data sources, see IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_XXX
 | 
						|
 * @return: ERR_OK for success case.
 | 
						|
 * @return: other value for failed case. See ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_send_uart(iot_pkt_t *pkt, uint8_t channel);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_start_driver_timer1() - function callback to allow
 | 
						|
 *          device driver to request smart grid app to start the driver timer.
 | 
						|
 *          once timer fired, smart grid app will
 | 
						|
 *          call iot_sg_cco_drv_timer_func_t to notify driver.
 | 
						|
 * @param   dur:    duration of the timer. the unit is 1 ms.
 | 
						|
 * @return: ERR_OK      -   for timer started successfully case.
 | 
						|
 * @return: otherwise   -   error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_start_driver_timer1(uint32_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_stop_driver_timer1() - function callback to allow device
 | 
						|
 *        driver to request smart grid app to stop the driver timer.
 | 
						|
 */
 | 
						|
void iot_sg_cco_stop_driver_timer1();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_start_driver_timer2() - function callback to allow
 | 
						|
 *          device driver to request smart grid app to start the driver timer.
 | 
						|
 *          once timer fired, smart grid app will
 | 
						|
 *          call iot_sg_cco_drv_timer_func_t to notify driver.
 | 
						|
 * @param   dur:    duration of the timer. the unit is 1 ms.
 | 
						|
 * @return: ERR_OK      -   for timer started successfully case.
 | 
						|
 * @return: otherwise   -   error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_start_driver_timer2(uint32_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_stop_driver_timer2() - function callback to allow device
 | 
						|
 *        driver to request smart grid app to stop the driver timer.
 | 
						|
 */
 | 
						|
void iot_sg_cco_stop_driver_timer2();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_stop_driver_timer3() - function callback to allow device
 | 
						|
 *        driver to request CCO framework to stop the driver timer 3.
 | 
						|
 */
 | 
						|
void iot_sg_cco_stop_driver_timer3(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_restart_driver_timer3() - function callback to allow
 | 
						|
 *          device driver to request CCO framework
 | 
						|
 *          to restart the driver timer3. once timer fired, CCO framework
 | 
						|
 *          will call timer3_func to notify driver.
 | 
						|
 * @param   dur:     duration, unit is 1ms.
 | 
						|
 */
 | 
						|
void iot_sg_cco_restart_driver_timer3(uint32_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_start_driver_timer4() - function callback to allow
 | 
						|
 *          device driver to request smart grid app to start the driver timer.
 | 
						|
 *          once timer fired, smart grid app will
 | 
						|
 *          call iot_sg_cco_drv_timer_func_t to notify driver.
 | 
						|
 * @param   dur:    duration of the timer. the unit is 1 ms.
 | 
						|
 * @return: ERR_OK      -   for timer started successfully case.
 | 
						|
 * @return: otherwise   -   error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_start_driver_timer4(uint32_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_stop_driver_timer4() - function callback to allow device
 | 
						|
 *        driver to request smart grid app to stop the driver timer.
 | 
						|
 */
 | 
						|
void iot_sg_cco_stop_driver_timer4();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_start_driver_timer5() - function callback to allow
 | 
						|
 *          device driver to request smart grid app to start the driver timer.
 | 
						|
 *          once timer fired, smart grid app will
 | 
						|
 *          call iot_sg_cco_drv_timer_func_t to notify driver.
 | 
						|
 * @param   dur:    duration of the timer. the unit is 1 ms.
 | 
						|
 * @return: ERR_OK      -   for timer started successfully case.
 | 
						|
 * @return: otherwise   -   error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_start_driver_timer5(uint32_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_stop_driver_timer5() - function callback to allow device
 | 
						|
 *        driver to request smart grid app to stop the driver timer.
 | 
						|
 */
 | 
						|
void iot_sg_cco_stop_driver_timer5();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_restart_driver_timer5() - function callback to allow
 | 
						|
 *          device driver to request CCO framework
 | 
						|
 *          to restart the driver timer5. once timer fired, CCO framework
 | 
						|
 *          will call timer5_func to notify driver.
 | 
						|
 * @param   dur:     duration, unit is 1ms.
 | 
						|
 */
 | 
						|
void iot_sg_cco_restart_driver_timer5(uint32_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_start_driver_timer6() - function callback to allow
 | 
						|
 *          device driver to request smart grid app to start the driver timer.
 | 
						|
 *          once timer fired, smart grid app will
 | 
						|
 *          call iot_sg_cco_drv_timer_func_t to notify driver.
 | 
						|
 * @param   dur:    duration of the timer. the unit is 1 ms.
 | 
						|
 * @return: ERR_OK      -   for timer started successfully case.
 | 
						|
 * @return: otherwise   -   error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_start_driver_timer6(uint32_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_stop_driver_timer6() - function callback to allow device
 | 
						|
 *        driver to request smart grid app to stop the driver timer.
 | 
						|
 */
 | 
						|
void iot_sg_cco_stop_driver_timer6();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_get_meter_info_by_mac() - get meter info by mac address.
 | 
						|
 * @param   pm_mac: mac address of power meter.
 | 
						|
 * @param   info:   node info argument to store meter info.
 | 
						|
 * @return: 0           - success.
 | 
						|
 * @return: otherwise   - error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_get_meter_info_by_mac(uint8_t *pm_mac,
 | 
						|
    iot_sg_pm_node_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief - get destination power meter mac address from meter reading package
 | 
						|
 * @param pm_mac:       buffer to receive power meter address
 | 
						|
 * @param data:         meter reading package
 | 
						|
 * @param len:          length of data
 | 
						|
 * @param proto_type:   protocol type of the datagram
 | 
						|
 * @return: ERR_OK - successful case.
 | 
						|
 *          ERR_XXX for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_mr_pkt_mac(uint8_t *pm_mac, uint8_t *data, uint16_t len,
 | 
						|
    uint8_t proto_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_set_pm_active_reg_flag_by_mac() - set the flag of power meter
 | 
						|
 *        active register by mac address.
 | 
						|
 * @param pm_mac:     mac address of power meter.
 | 
						|
 * @param value:      flag argument to store meter info.
 | 
						|
 */
 | 
						|
void iot_sg_set_pm_active_reg_flag_by_mac(uint8_t *pm_mac, uint8_t value);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_set_pm_active_reg_flag_by_index() - set the flag of power
 | 
						|
 *          meter active register by meter index.
 | 
						|
 * @param   node_index:      the index of sec node.
 | 
						|
 * @param   value:           flag argument to store meter info.
 | 
						|
 * @return: ERR_OK           - success.
 | 
						|
 * @return: ERR_INVAL        - error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_set_pm_active_reg_flag_by_index(uint16_t node_index,
 | 
						|
    uint8_t value);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief     iot_sg_get_sta_index_by_mac() - get the index of station by mac.
 | 
						|
 * @param     pm_mac:   mac address of power meter.
 | 
						|
 * @return:   the index of station in map.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_get_sta_index_by_mac(uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_set_rt_mr_result() - set the route meter read result by
 | 
						|
 *          meter index.
 | 
						|
 * @param   node_index:  meter read index.
 | 
						|
 * @param   result:      meter read result.
 | 
						|
 * @return: ERR_OK     -  for success case.
 | 
						|
 * @return: ERR_INVAL  -  for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_rt_mr_result(uint16_t node_index, uint8_t result);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_start_sec_node_reg() - start secondary node registration.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param duration:   secondary node registration duration, uint is 1s.
 | 
						|
 * @param count:      max sec node count of one frame data for report to cctt.
 | 
						|
 * @param auto_stop:  secondary node registration auto stop flag,
 | 
						|
 *                    0 - not need auto stop, 1 - need auto stop.
 | 
						|
 * @return: ERR_OK for successful case, ERR_XXX for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_start_sec_node_reg(uint8_t intf_type, uint32_t duration,
 | 
						|
    uint8_t count, uint8_t auto_stop);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_stop_sec_node_reg() - stop secondary node registration.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param reason: the reason of the stop cmd.
 | 
						|
 * @return: ERR_OK for successful case, ERR_XXX for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_stop_sec_node_reg(uint8_t intf_type, uint8_t reason);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_recv_ack_to_report() - handle ack from cctt for event
 | 
						|
 *        report & sec node register report.
 | 
						|
 *        it trigger CCo to report next data/sec node immediately.
 | 
						|
 * @param really_ack: receive ack? 1 - yes, 0 - no.
 | 
						|
 * @param sn: sequence number of 3762 package.
 | 
						|
 */
 | 
						|
void iot_sg_cco_recv_ack_to_report(uint8_t really_ack, uint8_t sn);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_comm_test() - communication test.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param meter_mac:  mac address of the power meter.
 | 
						|
 * @param data_type:  protocol type of the meter for communication test.
 | 
						|
 * @param data:       data for communication test.
 | 
						|
 * @param len:        length of the data.
 | 
						|
 * @param sn:         sequence of the communication test command from
 | 
						|
 *                    concentrator.
 | 
						|
 */
 | 
						|
void iot_sg_comm_test(uint8_t intf_type, uint8_t *meter_mac,
 | 
						|
    uint8_t data_type, uint8_t *data, uint16_t len, uint16_t sn);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_evt_rpt_ctrl() - control event report.
 | 
						|
 * @param intf_type:    interface of calling this API. see
 | 
						|
 *                      IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param enable_flag:  to enable or disable event report function.
 | 
						|
 */
 | 
						|
void iot_sg_evt_rpt_ctrl(uint8_t intf_type, uint8_t enable_flag);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    if allow to report event.
 | 
						|
 * @return:  0 - not allow, 1  - allow.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_evt_rpt_state();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_broadcast_data() - broadcast data to all power meters.
 | 
						|
 * @param intf_type:  interface of this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param data_type:  protocol type of the meter reading data.
 | 
						|
 * @param data:       data to broadcast.
 | 
						|
 * @param len:        length of the data.
 | 
						|
 * @param sta_mac:    sta mac address, big endian.
 | 
						|
 */
 | 
						|
void iot_sg_broadcast_data(uint8_t intf_type, uint8_t data_type,
 | 
						|
    uint8_t *data, uint16_t len, uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_correct_sta_time() - broadcast correct sta time data to all
 | 
						|
 *                                        sta modules.
 | 
						|
 * @param intf_type:  interface of this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param data_type:  protocol type of the broadcast data.
 | 
						|
 * @param data:       data to broadcast.
 | 
						|
 * @param len:        length of the data.
 | 
						|
 * @param bcast_type: bcast type, see IOT_SG_CCO_BCAST_TYPE_XXX.
 | 
						|
 * @param ntb:        ntb for recv correct time message.
 | 
						|
 */
 | 
						|
void iot_sg_cco_correct_sta_time(uint8_t intf_type, uint8_t data_type,
 | 
						|
    uint8_t *data, uint16_t len, uint8_t bcast_type, uint32_t ntb);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: remove all white list ii entry.
 | 
						|
 */
 | 
						|
void iot_sg_cco_clear_all_wlii_addr();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_clear_all_wl_addr() - remove all address from white list.
 | 
						|
 */
 | 
						|
void iot_sg_cco_clear_all_wl_addr();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_add_wl_addr() - add address into whitelist.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param iot_pkt:    the iot_pkt_t data to add whilte list.
 | 
						|
 */
 | 
						|
void iot_sg_cco_add_wl_addr(uint8_t intf_type, iot_pkt_t *iot_pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_add_bl_addr() - add address into blacklist.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param iot_pkt:    the iot_pkt_t data to add black list.
 | 
						|
 */
 | 
						|
void iot_sg_cco_add_bl_addr(uint8_t intf_type, iot_pkt_t *iot_pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_add_wlii_addr() - add address into whitelist ii.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param iot_pkt:    the iot_pkt_t data to add whilte list ii.
 | 
						|
 */
 | 
						|
void iot_sg_cco_add_wlii_addr(uint8_t intf_type, iot_pkt_t *iot_pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_remove_wl_addr() - remove address from whitelist.
 | 
						|
 * @param intf_type:          interface of calling this API.
 | 
						|
 *                            see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param entry_count:        entry count.
 | 
						|
 * @param mac_addr_array:     mac address array to be removed from whitelist.
 | 
						|
 */
 | 
						|
void iot_sg_cco_remove_wl_addr(uint8_t intf_type, uint8_t entry_count,
 | 
						|
                            uint8_t * mac_addr_array);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_remove_bl_addr() - remove address into blacklist.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param iot_pkt:    the iot_pkt_t data to add black list.
 | 
						|
 */
 | 
						|
void iot_sg_cco_remove_bl_addr(uint8_t intf_type, iot_pkt_t *iot_pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_clean_bl_addr() - remove address into blacklist.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 */
 | 
						|
void iot_sg_cco_clean_bl_addr(uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_remove_wlii_addr() - remove address from whitelist ii.
 | 
						|
 * @param intf_type:          interface of calling this API.
 | 
						|
 *                            see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param entry_count:        entry count.
 | 
						|
 * @param mac_addr_array:     mac address array to be removed from whitelist.
 | 
						|
 */
 | 
						|
void iot_sg_cco_remove_wlii_addr(uint8_t intf_type, uint8_t entry_count,
 | 
						|
    uint8_t * mac_addr_array);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_route_control() - route control / set route state.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param op:         operation on router - pause / resume / restart.
 | 
						|
 */
 | 
						|
void iot_sg_route_control(uint8_t intf_type, uint8_t op);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_cctt_proto() - get cctt proto proto.
 | 
						|
 *          see IOT_SG_CCO_CCTT_PROTO_XXX.
 | 
						|
 * @return: proto id.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_cctt_proto();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   iot_sg_cco_get_rt_read_meter_flag() - get router read meter flag.
 | 
						|
 * @return:  0 - disable route read meter.
 | 
						|
 * @return:  1 - enable route read meter.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_rt_read_meter_flag();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get whitelist enabled status
 | 
						|
 * @return:  0 - whitelist is disabled
 | 
						|
 * @return:  otherwise - whitelist is enabled
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_wl_is_enabled();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: get white list entry count.
 | 
						|
 * @return: number of white list entry count.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_wl_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: get white list ii entry count.
 | 
						|
 * @return: number of white list ii entry count.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_wlii_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: get white list information.
 | 
						|
 * @param info: node count info argument to store count info.
 | 
						|
 * @return: ERR_OK - for successfully case.
 | 
						|
 * @return: other value for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_wl_cnt_info(iot_sg_wl_cnt_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: get white list ii information.
 | 
						|
 * @param info: node count info argument to store count info.
 | 
						|
 * @return: ERR_OK - for successfully case.
 | 
						|
 * @return: other value for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_wlii_cnt_info(iot_sg_wlii_cnt_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_meter_index_info() - get meter index info.
 | 
						|
 * @param   info:       node index info argument to store count info.
 | 
						|
 * @return: ERR_OK - for successfully case.
 | 
						|
 * @return: other value for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_meter_index_info(iot_sg_node_index_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_reset_parameter_info() - clear parameter info include
 | 
						|
 *        sec_node_info, sec_node_relay_info ...
 | 
						|
 */
 | 
						|
void iot_sg_cco_reset_parameter_info();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_reset_communication_info() - clear communication info,
 | 
						|
 *        include sec_node_info, phase, relay_level, signal_quality ...
 | 
						|
 */
 | 
						|
void iot_sg_cco_reset_communication_info();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_reset_wlii() - clear white list ii.
 | 
						|
 */
 | 
						|
void iot_sg_cco_reset_wlii();
 | 
						|
/**
 | 
						|
 * @brief   get white list entry information
 | 
						|
 * @param   start_index:    get wl entry info start from this index.
 | 
						|
 * @param   count:          max count of white list entry to be returned.
 | 
						|
 * @return: NULL        -   for failed case.
 | 
						|
 * @return: otherwise   -   an IOT_PKT_T with an array of type
 | 
						|
 *                          iot_sg_wl_entry_info_t.
 | 
						|
 */
 | 
						|
iot_pkt_t* iot_sg_cco_get_wl_entry_info(uint32_t start_index, uint32_t count);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get white list entry ii information
 | 
						|
 * @param   start_index:    get wl ii entry info start from this index.
 | 
						|
 * @param   count:          max count of white list ii entry to be returned.
 | 
						|
 * @return: NULL        -   for failed case.
 | 
						|
 * @return: otherwise   -   an IOT_PKT_T with an array of type
 | 
						|
 *                          iot_sg_wlii_entry_info_t.
 | 
						|
 */
 | 
						|
iot_pkt_t* iot_sg_cco_get_wlii_entry_info(uint32_t start_index,
 | 
						|
    uint32_t count);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get branch detect device entry information
 | 
						|
 * @param   start_index:    get branch detect entry info start from this index.
 | 
						|
 * @param   count:          max count of branch detect entry to be returned.
 | 
						|
 * @return: NULL        -   for failed case.
 | 
						|
 * @return: otherwise   -   an IOT_PKT_T with an array of type
 | 
						|
 *                          iot_sg_cco_bd_dev_info_transfer_t.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_get_bd_dev_entry_info(uint16_t start_index,
 | 
						|
    uint16_t count);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_wl_info_by_index() - get node info.
 | 
						|
 * @param   node_index:  get meter info start from this index.
 | 
						|
 * @param   node_info:   information of the white list entry
 | 
						|
 * @return: ERR_OK      -   success.
 | 
						|
 * @return: ERR_INVAL   -   failed.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_wl_info_by_index(uint16_t node_index,
 | 
						|
    iot_sg_wl_entry_info_t* node_info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_meter_by_mac() - get node info.
 | 
						|
 * @param   pm_mac:      get meter info of pm mac.
 | 
						|
 * @param   node_info:   meter info of type iot_sg_pm_node_info_t.
 | 
						|
 * @return: ERR_OK      -   success.
 | 
						|
 * @return: ERR_INVAL   -   failed.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_pm_info_by_mac(uint8_t *pm_mac,
 | 
						|
    iot_sg_pm_node_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_meter_by_index() - get node info.
 | 
						|
 * @param   node_index:  get meter info start from this index.
 | 
						|
 * @param   node_info:   meter info of type iot_sg_pm_node_info_t.
 | 
						|
 * @return: ERR_OK      -   success.
 | 
						|
 * @return: ERR_INVAL   -   failed.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_pm_info_by_index(uint16_t node_index,
 | 
						|
    iot_sg_pm_node_info_t* node_info);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   get cco uart bps
 | 
						|
 * @return: cco uart bps.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_cco_uart_bps();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_config_uart() - config uart in CCo role.
 | 
						|
 * @param   baud:       baud rate.
 | 
						|
 * @param   parity:     parity bit.
 | 
						|
 * @param   data:       data width in bits.
 | 
						|
 * @param   stop:       stop bit.
 | 
						|
 * @param   fmt:        data frame settings.
 | 
						|
 * @return: ERR_OK      for success case.
 | 
						|
 * @return: ERR_FAIL    for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_config_uart(uint32_t baud, uint8_t parity,
 | 
						|
                                uint8_t data, uint8_t stop, iot_frame_fmt *fmt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_get_cco_mac() - get mac address of CCo.
 | 
						|
 * @param mac_addr:       memory to store the CCo address in big endian.
 | 
						|
 */
 | 
						|
void iot_sg_get_cco_mac(uint8_t *mac_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief check if meter reading is in progress.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_is_reading_pm();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_reset_pm_state() - reset power meter property.
 | 
						|
 */
 | 
						|
void iot_sg_cco_reset_pm_state();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_topo_msg() - query node info from mac layer.
 | 
						|
 * @param req_id:          request id.
 | 
						|
 * @param req_data_ver:    request data ver, see IOT_SG_CCO_REQ_DATA_VER_XXX
 | 
						|
 * @param start_index:     start index,
 | 
						|
 *                         0 - invalid, 1 - major node, 2... - sec node
 | 
						|
 * @param count:           query_node count
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_topo_msg(uint8_t req_id, uint8_t req_data_ver,
 | 
						|
    uint16_t start_index, uint8_t count);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_nw_msg() - query basic nw info from mac layer.
 | 
						|
 * @param req_id:          request id.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_nw_msg(uint8_t req_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_node_info_msg() - query nodes' info from mac layer.
 | 
						|
 * @param req_id:   request id.
 | 
						|
 * @param ver:      request data ver, see IOT_PLC_CCO_TOPO_REQ_DATA_VER_XXX.
 | 
						|
 * @param sta_mac:  pointer to nodes' mac.
 | 
						|
 * @param sta_cnt:  sta count.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_node_info_msg(uint8_t req_id, uint8_t ver,
 | 
						|
    uint8_t *sta_mac, uint8_t sta_cnt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_bl_node_info_msg() - query blacklist nodes' info from
 | 
						|
 *        mac layer.
 | 
						|
 * @param req_id:       request id.
 | 
						|
 * @param start_index:  start node.
 | 
						|
 * @param count:        node count.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_bl_node_info_msg(uint8_t req_id, uint16_t start_index,
 | 
						|
    uint16_t count);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    iot_sg_set_cco_mac_addr() - set mac address of CCo. Mac layer will
 | 
						|
 *           be reset if addr is different with CCo's original address.
 | 
						|
 * @param    addr:   the new address of CCo.
 | 
						|
 * @param    reset:  if reset lower layer to apply the mac addr.
 | 
						|
 * @return:  ERR_OK - for successful case. mac layer will be reset .
 | 
						|
 * @return:  otherwise - cco already has the same mac addr. mac layer will
 | 
						|
 *           NOT be reset.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_set_cco_mac_addr(uint8_t *addr, uint8_t reset);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    iot_sg_get_cco_mac_addr() - get mac address of CCo.
 | 
						|
 * @param    addr: return the MAC address of CCO, little endian.
 | 
						|
 */
 | 
						|
void iot_sg_get_cco_mac_addr(uint8_t *addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    get the free white list entry count.
 | 
						|
 * @return:  the free entry count.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_free_wl_entry_count();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    get the free white list ii entry count.
 | 
						|
 * @return:  the free entry count.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_free_wlii_entry_count();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    iot_sg_cco_get_nid() - get nid.
 | 
						|
 * @return:  nid value.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_nid();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  iot_sg_cco_get_nb_nw_info_msg() - query neighbor network info.
 | 
						|
 * @param req_id:   request id.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_nb_nw_info_msg(uint8_t req_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_start_nw_fmt() - start network formation.
 | 
						|
 */
 | 
						|
void iot_sg_cco_start_nw_fmt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief notify framework that the 1st cmd from cctt was received.
 | 
						|
 */
 | 
						|
void iot_sg_cco_recv_cctt_cmd();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_set_cli_upgrade_enable - set cli upgrade
 | 
						|
 * @param   enable:       1 - take cli upgrade, 0 don't take it;
 | 
						|
 * @return: ERR_OK        -  for success case.
 | 
						|
 * @return: ERR_INVAL     -  for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_cli_upgrade_enable(uint8_t enable);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_start_recv_upgrade() - start upgrade device.
 | 
						|
 * @param   file_type:       see IOT_SG_FILE_TYPE_XXX.
 | 
						|
 * @param   file_id:         file identity.
 | 
						|
 * @param   mac:             mac address of the upgrade device.
 | 
						|
 * @param   block_size:      size of every block data.
 | 
						|
 * @param   total_block_cnt: total block count of firmware.
 | 
						|
 * @param   file_size:        size of the fw data buffer.
 | 
						|
 * @param   crc16:           16 bits crc value of the fw data.
 | 
						|
 *                           0 - no check , other - crc check.
 | 
						|
 * @param   window_time:     time window of the upgrade.
 | 
						|
 *                           0 - use system default value.
 | 
						|
 *                           unit: millisecond.
 | 
						|
 * @return: ERR_OK        -  for success case.
 | 
						|
 * @return: ERR_INVAL     -  for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_start_recv_upgrade(uint8_t file_type, uint8_t file_id,
 | 
						|
    uint8_t *mac, uint32_t block_size, uint16_t total_block_cnt,
 | 
						|
    uint32_t file_size, uint16_t crc16, uint32_t window_time);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_handle_file_segment() - save firmware segment data.
 | 
						|
 * @param   data:            buffer containing fw data.
 | 
						|
 * @param   len:             length of the fw data buffer.
 | 
						|
 * @param   index:           index of the fw data segment.
 | 
						|
 * @return: ERR_OK      -    for success case.
 | 
						|
 * @return: ERR_INVAL   -    for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_handle_file_segment(uint8_t *data, uint32_t len,
 | 
						|
    uint32_t index);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: restart upgrading timer to check file recv timeout.
 | 
						|
 */
 | 
						|
void iot_sg_cco_upgrade_restart_recv_timer();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief - handle IOT_SG_MSG_ID_UPGRADE_STOP message.
 | 
						|
 *          send stop upgrading message to a STA or switch to other state.
 | 
						|
 * @param   clr_file_flag:  1 - clear upgrade file information, 0 don't clear
 | 
						|
 */
 | 
						|
void iot_sg_cco_handle_stop_upgrade(uint8_t clr_file_flag);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   is upgrading in progress.
 | 
						|
 * @retval: 1 - upgrading is in progress.
 | 
						|
 *          0 - no upgrading in progress.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_is_upgrading();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  iot_sg_cco_get_freq_band_msg() - query carrier comm param.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_freq_band_msg(uint8_t req_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  iot_sg_cco_set_freq_band_msg() - set carrier comm param.
 | 
						|
 * @param req_id:     request id of data to report.
 | 
						|
 * @param  freq_band: see PLC_LIB_FREQ_BAND_xxx.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_freq_band_msg(uint8_t req_id, uint8_t freq_band);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_vendor_device_sn() - get vendor device sn.
 | 
						|
 * @param   vendor_device_sn:  vendor device sn info.
 | 
						|
 * @param   read_len:          need read sn length.
 | 
						|
 * @return: valid read length.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_vendor_device_sn(uint8_t *vendor_device_sn,
 | 
						|
    uint8_t read_len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_set_vendor_device_sn_to_pib() - set vendor device sn.
 | 
						|
 * @param   vendor_device_sn: vendor device sn info.
 | 
						|
 * @param   sn_len:           vendor device sn length.
 | 
						|
 * @return: ERR_OK - success, otherwise - failure.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_vendor_device_sn_to_pib(uint8_t *vendor_device_sn,
 | 
						|
    uint8_t sn_len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  iot_sg_cco_set_freq_band_msg() - set carrier comm param.
 | 
						|
 * @param  start:     query node start index, start from 0.
 | 
						|
 * @param  cnt:       query node count.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_neighbor_dev_msg(uint8_t req_id, uint16_t start,
 | 
						|
    uint8_t cnt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_cache_router_state_chg_cmd() - cache a router status
 | 
						|
 *          change command entry to buffer.
 | 
						|
 * @param   status:    router status, see IOT_SG_CCO_RT_CHG_STOP_XXX.
 | 
						|
 * @param   intf_type:  interface of calling this API.
 | 
						|
 *          see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @return: ERR_OK for success case. Other value for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_cache_router_state_chg_cmd(uint32_t status,
 | 
						|
    uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_cache_sg_mr_cmd() - cache a sg meter reading command
 | 
						|
            entry to buffer.
 | 
						|
 * @param   mr_type:      meter reading type, see IOT_SG_RMT_XXX.
 | 
						|
 * @param   sn:           sequence number of the 3762 packet.
 | 
						|
 *                        set to IOT_SG_INVALID_CCTT_SN if sn is unknown for
 | 
						|
 *                        the command.
 | 
						|
 * @param   afn:          fn codes in 3762 packet.
 | 
						|
 * @param   proto_type:   proto type of meter reading data.
 | 
						|
 * @param   src_addr:     src mac address of the command.
 | 
						|
 * @param   dest_addr:    dest mac address of the command.
 | 
						|
 * @param   pkt:          iot_pkt_t containing the 3762 pkt.
 | 
						|
 * @param   intf_type:    cctt type or cli type
 | 
						|
 * @param   prio:         priority of the task.
 | 
						|
 * @param   timeout:      timeout value of this task. cctt shall delete the task
 | 
						|
 * @param   need_reply:   flag to mark if need reply the task command.
 | 
						|
 * @param   task_id:      task id.
 | 
						|
 * @param   sn_inc_flag:  if increase sn when retry the meter reading pkt,
 | 
						|
 *                        0 - sn don't inc, 1 - sn inc.
 | 
						|
 * @param   emergency:    emergency flag.
 | 
						|
 * @return: ERR_OK for success case. Other value for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_cache_sg_mr_cmd(uint8_t mr_type, uint16_t sn, uint8_t afn,
 | 
						|
    uint8_t proto_type, uint8_t *src_addr, uint8_t *dest_addr, iot_pkt_t *pkt,
 | 
						|
    uint8_t intf_type, uint8_t prio, uint16_t timeout, uint8_t need_reply,
 | 
						|
    uint16_t task_id, uint8_t sn_inc_flag, uint8_t emergency);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    iot_sg_cco_cache_has_sg_mr_cmd() - if read meter cmd with
 | 
						|
 *           specified mac address exist in the cache.
 | 
						|
 * @param    dest_addr: the dest mac address to check for data.
 | 
						|
 * @return:  1 - if the data with the mac exists.
 | 
						|
 * @return:  0 - if the data with the mac does not exist.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_cache_has_sg_mr_cmd(uint8_t *dest_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    iot_sg_cco_cache_has_sg_mr_cmd_ex() - if read meter cmd with
 | 
						|
 *           specified mac address and sn exist in the cache.
 | 
						|
 * @param    dest_addr: the mac address to check for data entry.
 | 
						|
 * @param    sn: the sn to be check for data entry.
 | 
						|
 * @return:  1 - if the target entry exists.
 | 
						|
 * @return:  0 - if the target entry does not exist.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_cache_has_sg_mr_cmd_ex(uint8_t *mac_addr, uint16_t sn);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    iot_sg_cco_cache_has_sg_cmd_exist() - if the cmd with
 | 
						|
 *           specified mac address and sn exist in the cache.
 | 
						|
 * @param    dest_addr: the mac address to check for data entry.
 | 
						|
 * @param    sn: the sn to be check for data entry.
 | 
						|
 * @param    data_type: the cmd data type.
 | 
						|
 * @return:  1 - if the target entry exists.
 | 
						|
 * @return:  0 - if the target entry does not exist.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_cache_has_sg_cmd_exist(uint8_t *mac_addr, uint16_t sn,
 | 
						|
    uint8_t data_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief    iot_sg_cco_cache_has_sg_ext_mr_cmd() - if the cmd with
 | 
						|
 *           specified mac address and ext data type exist in the cache.
 | 
						|
 * @param    dest_addr: the mac address to check for data entry.
 | 
						|
 * @param    ext_data_type: the ext cmd data type, IOT_SG_CCO_EXT_TASK_TYPE_XXX.
 | 
						|
 * @return:  1 - if the target entry exists.
 | 
						|
 * @return:  0 - if the target entry does not exist.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_cache_has_sg_ext_mr_cmd(uint8_t *mac_addr,
 | 
						|
    uint8_t ext_data_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_645_pkt_cnt() - get count of 645 packet in a buffer.
 | 
						|
 * @param   data:   pointer to the buffer.
 | 
						|
 * @param   len:    length of the buffer.
 | 
						|
 * @return: count of 645 packet in the buffer.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_645_pkt_cnt(uint8_t *data, uint32_t len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get a flag indicate if router learning is done
 | 
						|
 * @retval: 1 if router learning is done, 0 if not done.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_is_route_learn_done();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   check if power meter with specific mac address is online
 | 
						|
 * @param mac_addr: the power meter mac address to check.
 | 
						|
 * @retval: 1 if the power meter is online, 0 if offline.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_is_pm_online(uint8_t *mac_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: get phase info of the STA/IIC on which the pm was attached
 | 
						|
 * @param pm_addr:      address of the power meter
 | 
						|
 * @param phase_info:   phase info
 | 
						|
 * @retval: ERR_OK for successful case.
 | 
						|
 *          see ERR_XXX for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_pm_phase(uint8_t *pm_addr,
 | 
						|
    iot_sg_phase_info_t *phase_info);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief:  get white list entry info by mac address
 | 
						|
 * @param mac_addr: mac address to search for white list entry in little-endian
 | 
						|
 * @param info: buffer to receive information
 | 
						|
 * @retval: ERR_OK for successful case. ERR_FAIL for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_get_wl_entry_info_by_mac(uint8_t *mac_addr,
 | 
						|
    iot_sg_wl_entry_info_t *info);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief:  get white list ii entry info by mac address
 | 
						|
 * @param mac_addr: mac address to search for white list entry ii in
 | 
						|
 *                  little-endian
 | 
						|
 * @param info: buffer to receive information
 | 
						|
 * @retval: ERR_OK for successful case. ERR_FAIL for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_get_wlii_entry_info_by_mac(uint8_t *mac_addr,
 | 
						|
    iot_sg_wl_entry_info_t *info);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief:  get meter mac addr info by index
 | 
						|
 * @param sta_index: index of mac map
 | 
						|
 * @param sta_mac: sta mac address, big-endian
 | 
						|
 * @retval: ERR_OK for successful case. ERR_FAIL for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_sta_mac_by_index(uint16_t sta_index,
 | 
						|
    uint8_t* sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  check if the mac addr exist in white list.
 | 
						|
 * @param mac addr: the mac address to check in little-endian.
 | 
						|
 * @return: 0 - not exist.
 | 
						|
 * @return: otherwise - exist.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_wl_entry_exist(uint8_t *mac_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  check if the mac addr exist in white list ii.
 | 
						|
 * @param mac addr: the mac address to check in little-endian.
 | 
						|
 * @return: 0 - not exist.
 | 
						|
 * @return: otherwise - exist.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_wlii_entry_exist(uint8_t *mac_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get router meter read timeout
 | 
						|
 * @return: duration, unit is 1s.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_router_mr_timeout();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get sec node monitor max duration.
 | 
						|
 * @return: duration, unit is 1s.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_node_monitor_max_dur();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_set_node_monitor_max_dur() - set sec node monitor max
 | 
						|
 *          duration.
 | 
						|
 * @param   dur: the duration, unit is 1s.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_node_monitor_max_dur(uint16_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_major_node_mac() - get major node mac address.
 | 
						|
 * @param   major_node_mac: the pointer of parameter that copy major node mac
 | 
						|
 *          address, Little-Endian.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_major_node_mac(uint8_t *major_node_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_set_major_node_mac() - set major node mac address.
 | 
						|
 * @param   major_node_mac: the mac address that set to major mac address,
 | 
						|
 *          Little-Endian.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_major_node_mac(uint8_t *major_node_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   set repeater addr range
 | 
						|
 *          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.
 | 
						|
 * @param   start_addr: start address, big-endian.
 | 
						|
 * @param   end_addr: end address, big-endian.
 | 
						|
 * @return: see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_repeater_addr_range(uint8_t *start_addr,
 | 
						|
    uint8_t *end_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get repeater addr range
 | 
						|
 * @param   start_addr: start address, big-endian.
 | 
						|
 * @param   end_addr: end address, big-endian.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_repeater_addr_range(uint8_t *start_addr, uint8_t *end_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_check_exceed_con_cnt() - check if concurrent meter reading
 | 
						|
 *        count exceed max coucurrent count.
 | 
						|
 * @param dest_addr: meter mac address.
 | 
						|
 * @return: ERR_OK - success, otherwise - failure.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_check_exceed_con_cnt(uint8_t *dest_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_sn_for_cctt() - get a sn for report data to cctt.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_sn_for_cctt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: check if CCo is running in cert mode.
 | 
						|
 * @return: 1 if in test mode. 0 if not.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_is_in_cert_mode();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_router_work_flag() - get router work flag.
 | 
						|
 * @return: see IOT_SG_CCO_ROUTER_WORK_FLAG_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_router_work_flag();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_router_work_mode() - get router work mode.
 | 
						|
 * @return: 1 - learning, 0 - meter reading.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_router_work_mode();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_set_router_work_mode() - set router work mode.
 | 
						|
 * @param work_mode:  1 - learning, 0 - meter reading.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_router_work_mode(uint8_t work_mode);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_router_sec_node_reg_allowed() - get sec node register
 | 
						|
 *          allowed status.
 | 
						|
 * @return: 1 - allow, 0 - forbid.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_router_sec_node_reg_allowed();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_set_router_sec_node_reg_allowed() - set sec node register
 | 
						|
 *          allowed status.
 | 
						|
 * @param reg_allowed:  1 - allow, 0 - forbid.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_router_sec_node_reg_allowed(uint8_t reg_allowed);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_router_work_type() - get router work type.
 | 
						|
 * @return: see IOT_SG_CCO_ROUTER_WORK_TYPE_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_router_work_type();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_set_router_work_type() - set router work type.
 | 
						|
 * @param work_type: see IOT_SG_CCO_ROUTER_WORK_TYPE_XXX.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_router_work_type(uint8_t work_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_router_evt_flag() - get router event flag.
 | 
						|
 * @return: 0 - nothing event need be reported.
 | 
						|
 * @return: otherwise - some event need be reported.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_router_evt_flag();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_tsfm_detect_status() - get transformer detect flag.
 | 
						|
 * @return: see IOT_SG_CCO_TSFM_DETECT_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_tsfm_detect_status();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_tsfm_detect_enabled() - get transformer detect enabled.
 | 
						|
 * @return: 0 - disable, 1- enable;
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_tsfm_detect_enabled();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_force_stop_tsfm_detect() - force stop tsfm detection.
 | 
						|
 */
 | 
						|
void iot_sg_cco_force_stop_tsfm_detect();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_set_tsfm_detect_enabled() - set transformer detect enabled.
 | 
						|
 * @param sta_lock:     whether lock the station. 0 - unlock, 1 - lock.
 | 
						|
 * @param value:        0 - disable, 1- enable;
 | 
						|
 * @param qr_sta_tsfm_detect_ret: whether query the station transformer detect
 | 
						|
 *                      result, 0 - don't query, 1 - query
 | 
						|
 * @param tsfm_detect_dur: duration of transformer detect, unit is 1s.
 | 
						|
 * @param bcast_feature:   if need to report cco's tsfm feature to sta.
 | 
						|
 * @param is_keep_bcast:   if need to keep bcast until end.
 | 
						|
 * @return: ERR_OK - success, otherwise - failure.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_tsfm_detect_enabled(uint8_t sta_lock, uint8_t value,
 | 
						|
    uint8_t qr_sta_tsfm_detect_ret, uint32_t *tsfm_detect_dur,
 | 
						|
    uint8_t bcast_feature, uint8_t is_kepp_bcast);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_pm_proto_type() - get meter protocol type by meter mac
 | 
						|
 *          address, default is PROTO_TYPE_RAW_DATA.
 | 
						|
 * @param   pm_mac:   meter mac address.
 | 
						|
 * @param   pm_proto: meter proto space address.
 | 
						|
 * @return: ERR_OK - success, otherwise - failure.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_pm_proto_type(uint8_t *pm_mac, uint8_t *pm_proto);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_add_null_mr_data() - add an empty meter data entry
 | 
						|
 *          to ul buffer.
 | 
						|
 * @param   intf_type:    cctt type or cli type, see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param   sn:           sequence number of the 3762 packet.
 | 
						|
 * @param   afn:          fn codes in 3762 packet.
 | 
						|
 * @param   src_mac:      src mac address of the command.
 | 
						|
 * @param   dest_mac:     dest mac address of the command.
 | 
						|
 * @param   mr_type:      meter reading type, see IOT_SG_RMT_XXX.
 | 
						|
 * @param   proto_type:   proto type of meter reading data.
 | 
						|
 * @return: ERR_OK - success, otherwise - failure.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_add_null_mr_data(uint8_t intf_type, uint8_t sn, uint8_t afn,
 | 
						|
    uint8_t *src_mac, uint8_t *dest_mac, uint8_t mr_type, uint8_t proto_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_power_status() - get the cco power status.
 | 
						|
 * @return: 0 - the cco is power off, otherwise - the cco is power on
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_power_status();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   check if CCo to send data.
 | 
						|
 * @return: 1 - CCo is ready to send data. 0 - CCo is not ready yet.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_is_ready();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_sec_node_rpt() - cache sec node info for report
 | 
						|
 *          to cctt.
 | 
						|
 * @param   sta_mac:      station mac address.
 | 
						|
 * @param   chg_state:    change state, see IOT_SG_CCO_CHG_STATE_XXX.
 | 
						|
 * @param   dev_mac:      device mac address, if the device type is collector,
 | 
						|
 *          the mac is the collector mac address.
 | 
						|
 * @param   intf_type:   interface of calling this API.
 | 
						|
 *                       see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @return: ERR_OK - success, otherwise - failure.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_sec_node_rpt(uint8_t *sta_mac,
 | 
						|
    uint8_t chg_state, uint8_t *dev_mac, uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_handle_evt_rpt() - report event info for report to cctt
 | 
						|
 * @param sta_addr:   addr of station, Big-Endian
 | 
						|
 * @param pm_addr:    addr of power meter, Little-Endian
 | 
						|
 * @param pkt:        pointer to iot_pkt structure, this iot_pkt is loaded with
 | 
						|
 *                    raw data of event information
 | 
						|
 * @param seq:        seq pointer
 | 
						|
 * @param evt_type:   event type, see IOT_SG_CCO_EVENT_XXX.
 | 
						|
 * @param dev_type:   device type, see IOT_PLC_DEV_TYPE_XXX.
 | 
						|
 * @param not_check_wl: if check wl exist, 1 - don't check, 0 - check.
 | 
						|
 * @retval:   0         - for success case
 | 
						|
 * @retval:   otherwise - error code
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_handle_evt_rpt(uint8_t *sta_addr, uint8_t *pm_addr,
 | 
						|
    iot_pkt_t *pkt, uint16_t *seq, uint8_t evt_type, uint8_t dev_type,
 | 
						|
    uint8_t not_check_wl);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_sec_node_cnt() - get the secondarty node's
 | 
						|
 *          info under the sta
 | 
						|
 * @param   sta_mac:       station mac address: big endian.
 | 
						|
 * @param   node_cnt:      secondarty node's counter
 | 
						|
 * @return: pkt pointer, the pkt's detail infor refer to sec_node_info_query_t.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_get_sec_node_info(uint8_t *sta_mac, uint8_t *node_cnt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_online_sta_count() - get count that sta online
 | 
						|
 * @retval:           sta count
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_online_sta_count();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_set_nw_size() - set network size
 | 
						|
 * @param nw_size:   value of the network size
 | 
						|
 * @retval:          network size
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_set_nw_size(uint16_t nw_size);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_nw_size() - get network size
 | 
						|
 * @retval:           network size
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_nw_size();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_get_esp() - get equipment service provider
 | 
						|
 * @retval: see IOT_SG_CCO_ESP_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_esp();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: iot_sg_cco_set_esp() - set equipment service provider
 | 
						|
 * @param           esp: see IOT_SG_CCO_ESP_XXX.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_esp(uint8_t esp);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_router_mr_find_node_entry() - get a meter for router meter
 | 
						|
 *                                                 reading.
 | 
						|
 * @param  read_pm_index:   index of the meter that need to find.
 | 
						|
 * @param  info:            output - the meter info that need to read.
 | 
						|
 * @return 0 - no pm to be read.
 | 
						|
 * @return otherwise - the pm index to be read.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_router_mr_find_node_entry(uint16_t read_pm_index,
 | 
						|
    iot_sg_wl_entry_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_sys_reset_wait_time() - system reset wait time
 | 
						|
 * @return the time, unit is 1ms.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_sys_reset_wait_time();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:            clean up both down link, and up link buffer pool
 | 
						|
 */
 | 
						|
void iot_sg_cco_clean_buf_pool();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: iot_sg_cco_init_clct_task() - init collection task
 | 
						|
 */
 | 
						|
void iot_sg_cco_init_clct_task();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:            push task to dl buf
 | 
						|
 * @param proto_type: proto type of meter reading data.
 | 
						|
 * @param task_id:    task id to be added
 | 
						|
 * @param prio:       priority of the task
 | 
						|
 * @param sn:         sequence number of the spg packet.
 | 
						|
 * @param timeout:    execution time of the task
 | 
						|
 * @param need_reply: 1 - this packet needs to be responsed
 | 
						|
 *                    0 - this packet no needs to be responsed
 | 
						|
 * @param src_mac:    src mac address of the command.
 | 
						|
 * @param dst_mac:    dest mac address of the command.
 | 
						|
 * @param pkt:        iot_pkt_t containing the spg pkt.
 | 
						|
 * @param sn_inc_flag:if increase sn when retry the meter reading pkt,
 | 
						|
 *                    0 - sn don't inc, 1 - sn inc.
 | 
						|
 * @param task_id_filter: 0 - allow task id repetition,
 | 
						|
 *                        otherwise - don't allow task id repetition.
 | 
						|
 * @param emergency:  emergency flag
 | 
						|
 * @param forward:    if need to forward data, 0 - don't need, 1 - need.
 | 
						|
 * @param intf_type:  caller, see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @return:           ERR_OK is successful.
 | 
						|
 * @return:           otherwise failure.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_add_task_cmd(uint8_t proto_type, uint16_t task_id,
 | 
						|
    uint8_t prio, uint16_t sn, uint16_t timeout, uint8_t need_reply,
 | 
						|
    uint8_t *src_mac, uint8_t *dst_mac, iot_pkt_t *pkt, uint8_t sn_inc_flag,
 | 
						|
    uint8_t task_id_filter, uint8_t emergency, uint8_t forward,
 | 
						|
    uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:            remove dedicated task
 | 
						|
 * @param task_id:    task id to be removed
 | 
						|
 * @return:           ERR_OK is successful.
 | 
						|
 * @return:           otherwise failure.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_rm_task_cmd(uint16_t task_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:            enable read meter.
 | 
						|
 * @param intf_type:  cctt type or cli type see - IOT_SG_CALLER_TYPE_XXX
 | 
						|
 */
 | 
						|
void iot_sg_cco_enable_mr(uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:            disable read meter.
 | 
						|
 * @param intf_type:  cctt type or cli type see - IOT_SG_CALLER_TYPE_XXX
 | 
						|
 */
 | 
						|
void iot_sg_cco_disable_mr(uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get unfinished task count.
 | 
						|
 * @retval:               unfinished task count.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_unfinished_task_cnt();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: get task information by task id. Caller shall free the returned
 | 
						|
 *         iot_pkt if necessary.
 | 
						|
 * @param task_id: id of task whose info to be retrieved.
 | 
						|
 * @return: a iot_pkt with data of type iot_sg_task_info_t.
 | 
						|
 *          or NULL if failed.
 | 
						|
 */
 | 
						|
iot_pkt_t* iot_sg_cco_get_task_info_by_id(uint16_t task_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get count of free task entry.
 | 
						|
 * @retval: count of free task entry.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_free_task_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get task id start from specific offset.
 | 
						|
 * @param   start_index: start index of task buffer
 | 
						|
 * @param   cnt: count of get task id
 | 
						|
 * @param   taskid: buffer to store task id
 | 
						|
 * @retval: count of retrieved taskid
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_task_listid(uint16_t start_index, uint16_t cnt,
 | 
						|
    uint16_t *taskid);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  convert evaluate value to real phase.
 | 
						|
 * @param   dev_type: device type, see IOT_PLC_DEV_TYPE_XXX.
 | 
						|
 * @param   phase1: first possible phase. the highest possibility.
 | 
						|
 * @param   phase2: second possible phase.
 | 
						|
 * @param   phase3: third possible phase. the lowest possibility.
 | 
						|
 * @retval: real phase. bit0 = 1 measn phase a, bit1 = 1 means phase b,
 | 
						|
 * @retval: bit2 = 1 means phase c
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_convert_phase(uint8_t dev_type, uint8_t phase1,
 | 
						|
    uint8_t phase2, uint8_t phase3);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:      get router meter reading state.
 | 
						|
 * @retval:     see IOT_SG_CCO_RT_AMR_STATE_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_rt_mr_get_state();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:      if the cco report meter reading result to cctt then
 | 
						|
 *              the cctt should response a ack to cco.
 | 
						|
 * @param       sn: the sn of the cctt ack pkt
 | 
						|
 */
 | 
						|
void iot_sg_cco_rt_mr_result_ack(uint8_t sn);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:      set a backup sn for router meter reading ack
 | 
						|
 *              as iot_sg_cco_rt_mr_result_ack() supplement.
 | 
						|
 * @param sn:   backup sn
 | 
						|
 */
 | 
						|
void iot_sg_cco_rt_mr_set_backup_ack_sn(uint8_t sn);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get cco connectionless status.
 | 
						|
 * @retval:               0 - cco is not in connectionless mode.
 | 
						|
 * @retval:               1 - cco is in connectionless mode.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_conn_less_status();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   is power up again.
 | 
						|
 * @return: true means as power up again
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_is_power_up_again();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get secondary node monitor max duration by meter reading type.
 | 
						|
 * @param   intf_type:   interface of calling this API.
 | 
						|
 *                       see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @param   mr_type:     meter reading type, see IOT_SG_RMT_XXX.
 | 
						|
 * @return: max monitor duration, unit is 1s.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_mr_timeout(uint8_t intf_type, uint8_t mr_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get transfomer status by mac.
 | 
						|
 * @param pm_addr:        power meter mac addr, little endian.
 | 
						|
 * @retval:               transfomer status, see IOT_SG_CCO_PM_TO_TSFM_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_tsfm_status_by_mac(uint8_t *pm_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get transfomer result by mac.
 | 
						|
 * @param pm_addr:        power meter mac addr, little endian.
 | 
						|
 * @retval:               transfomer result,
 | 
						|
 *                        see IOT_SG_CCO_STA_TSFM_DETECT_RET_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_tsfm_result_by_mac(uint8_t *pm_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get station mac address by power meter mac address
 | 
						|
 * @param meter_mac:      power meter mac addr, little endian.
 | 
						|
 * @param sta_mac:        station mac addr, big endian.
 | 
						|
 * @retval:               see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_meter_mac_to_sta_mac(uint8_t *meter_mac, uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get cco ctrl proto status.
 | 
						|
 * @retval:               0 - controller is not connected to cco.
 | 
						|
 * @retval:               1 - controller is connected to cco.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_ctrl_proto_status();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                send control protocol data.
 | 
						|
 * @param pkt:            iot_pkt_t containing the data that send to controller,
 | 
						|
 *                        the ownership of the pkt will be transferred.
 | 
						|
 */
 | 
						|
void iot_sg_cco_send_ctrl_proto(iot_pkt_t *pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                send local protocol data.
 | 
						|
 * @param channel:        send channel.
 | 
						|
 * @param pkt:            iot_pkt_t containing the data that send to controller,
 | 
						|
 *                        the ownership of the pkt will be transferred.
 | 
						|
 */
 | 
						|
void iot_sg_cco_local_proto_data_send(uint8_t channel, iot_pkt_t *pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get upgrade information from cctt down link.
 | 
						|
 * @param query_info:     upgrade info. please see its definition.
 | 
						|
 * @return:               ERR_OK is successful.
 | 
						|
 * @return:               otherwise failure.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_query_upgrade_info(iot_sg_upgrade_info_t
 | 
						|
    *query_info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get the upgrade file segment bitmap info,
 | 
						|
 *                        invalid bitmap data set 0.
 | 
						|
 * @param bitmap:         dec bitmap address.
 | 
						|
 * @param start_index:    file segment bitmap offset address, start offset is 0.
 | 
						|
 * @param size:           size of the dec bitmap.
 | 
						|
 * @return:               valid dec bitmap size.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_query_upgrade_bitmap_info(uint8_t *bitmap,
 | 
						|
    uint16_t start_index, uint16_t size);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get cco upgrade statistics information.
 | 
						|
 * @param statistics:     buf to store upgrade statistics information.
 | 
						|
 *                        please see its definition.
 | 
						|
 *                        NULL if caller don't want to store the information.
 | 
						|
 * @param print_flag:     flag indicates if statistisc information shall
 | 
						|
 *                        be printed to uart.
 | 
						|
 *                        1 - print log. 0 - don't print log.
 | 
						|
 */
 | 
						|
void iot_sg_cco_upgrade_statistics(iot_sg_upgrade_statistics_t *statistics,
 | 
						|
    uint8_t print_flag);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:                get sta list that upgrade failed.
 | 
						|
 * @param start_index:    start index that upgrade fail sta list. start from 0.
 | 
						|
 * @param cnt:            size of fail sta addr list.
 | 
						|
 * @return:               pkt address that sta addr list , NULL is fail.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_upgrade_get_fail_sta_list(uint16_t start_index,
 | 
						|
    uint16_t cnt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get device type of the node by mac addr.
 | 
						|
 * @param    sta_mac:  station mac address, big-endian.
 | 
						|
 * @retval:  device type of the node, see IOT_PLC_DEV_TYPE_xxx.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_dev_type_by_mac(uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get power meter type.
 | 
						|
 * @param    sta_mac:  station mac address, big-endian.
 | 
						|
 * @return:  0 - single phase meter.
 | 
						|
 * @return:  otherwise - three phase meter.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_meter_type(uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get device power status.
 | 
						|
 * @param    sta_mac:  station mac address, big-endian.
 | 
						|
 * @return:  0 - power down.
 | 
						|
 * @return:  otherwise - power on.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_dev_power_state(uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   judge the power meter type.
 | 
						|
 * @param    dev_type:  device type, see IOT_PLC_DEV_TYPE_XXX.
 | 
						|
 * @return:  1 - power meter, include single phase meter and three phase meter.
 | 
						|
 * @return:  otherwise - other device type.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_is_pm(uint8_t dev_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   judge the collector or power meter type.
 | 
						|
 * @param    dev_type:  device type, see IOT_PLC_DEV_TYPE_XXX.
 | 
						|
 * @return:  1 - power meter or collector.
 | 
						|
 * @return:  otherwise - other device type.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_is_collector_or_pm(uint8_t dev_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   judge the collector type.
 | 
						|
 * @param    dev_type:  device type, see IOT_PLC_DEV_TYPE_XXX.
 | 
						|
 * @return:  1 - collector.
 | 
						|
 * @return:  otherwise - other device type.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_is_collector(uint8_t dev_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get device chip id by mac addr.
 | 
						|
 * @param    sta_addr:  station mac address, big-endian.
 | 
						|
 * @param:   chip_id:   device chip id.
 | 
						|
 * @retval:  ERR_OK      -   success.
 | 
						|
 * @retval:  ERR_INVAL   -   failed.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_dev_chip_id_by_mac(uint8_t *sta_addr,
 | 
						|
    uint8_t *chip_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get device module id by mac addr.
 | 
						|
 * @param    sta_addr:  station mac address, big-endian.
 | 
						|
 * @param:   mod_id:    device module id.
 | 
						|
 * @retval:  ERR_OK      -   success.
 | 
						|
 * @retval:  ERR_INVAL   -   failed.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_dev_module_id_by_mac(uint8_t *sta_addr,
 | 
						|
    uint8_t *mod_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   check if the mac address in the reject blacklist.
 | 
						|
 * @param    mac_addr:  mac address, big-endian.
 | 
						|
 * @retval:  0           -   not in the reject blacklist.
 | 
						|
 * @retval:  otherwise   -   in the reject blacklist
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_reject_bl_exist(uint8_t *mac_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   add the mac address into reject blacklist.
 | 
						|
 * @param    mac_addr:  mac address, big-endian.
 | 
						|
 */
 | 
						|
void iot_sg_cco_add_reject_bl(uint8_t *mac_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   clear reject blacklist.
 | 
						|
 */
 | 
						|
void iot_sg_cco_clear_reject_bl();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   check if it's the first time STA join the network.
 | 
						|
 * @param    sta_addr:  station mac address, big-endian.
 | 
						|
 * @retval:  0           -   first time join network.
 | 
						|
 * @retval:  1           -   not first time join network.
 | 
						|
 * @retval:  2           -   unknown due to not in white list.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_check_is_first_join(uint8_t *sta_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get network node count, include major node.
 | 
						|
 * @retval:  node count.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_net_node_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get network pm count.
 | 
						|
 * @retval:  pm count.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_pm_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get network node information by index.
 | 
						|
 * @param    start_type: 0 - query by tei, 1 - query by index.
 | 
						|
 * @param    value: query value, 1 for major node, 2 ~ end for sec node
 | 
						|
 * @param    info: output - the node information.
 | 
						|
 * @retval:  ERR_OK - the info is valid. otherwise - the info is invalid.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_net_node_info_by_index(uint8_t start_type,
 | 
						|
    uint16_t value, iot_sg_cco_net_node_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get network node information by mac addr.
 | 
						|
 * @param    pm_mac: meter mac address.
 | 
						|
 * @param    info: output - the node information.
 | 
						|
 * @retval:  ERR_OK - the info is valid. otherwise - the info is invalid.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_net_node_info_by_mac(uint8_t *pm_mac,
 | 
						|
    iot_sg_cco_net_node_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get network node information by power meter index.
 | 
						|
 * @param    value: query value, 1 for major node, 2 ~ end for sec node
 | 
						|
 * @param    info: output - the node information.
 | 
						|
 * @retval:  ERR_OK - the info is valid. otherwise - the info is invalid.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_net_node_info_by_pm_index(uint16_t value,
 | 
						|
    iot_sg_cco_net_node_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get sec node score information by index.
 | 
						|
 * @param index:  the specified pm index, start from 1.
 | 
						|
 * @param info:   output - the sec node score information.
 | 
						|
 * @retval:       ERR_OK - the info is valid. otherwise - the info is invalid.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_pm_score_info_by_index(uint16_t index,
 | 
						|
    iot_sg_cco_sec_node_score_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get pm information by real index.
 | 
						|
 * @param index:  the specified pm index, start from 1.
 | 
						|
 * @param info:   output - the pm information.
 | 
						|
 * @retval:       ERR_OK - the info is valid. otherwise - the info is invalid.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_pm_info_by_real_index(uint16_t index,
 | 
						|
    iot_sg_cco_pm_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get power meter addr that collector connected by index.
 | 
						|
 * @param    sta_addr:  station mac address, big-endian.
 | 
						|
 * @param    pm_mac  :  returns power meter addr, if found by index.
 | 
						|
 * @param    index   :  index for current meter, it started from 1 to max count.
 | 
						|
 * @retval:  0           -   find the power meter.
 | 
						|
 * @retval:  otherwise   -   not find the power meter.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_collector_meter_addr_by_index(uint8_t *sta_mac,
 | 
						|
    uint8_t *pm_mac, uint8_t index);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   iot_sg_cco_get_sec_node_reg_cnt() - get the sec node registered count.
 | 
						|
 * @return: count of registered secondary nodes
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_sec_node_reg_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get power meter count, attached to sta.
 | 
						|
 * @param    sta_mac:  station mac address, big-endian.
 | 
						|
 * @retval:  power meter count.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_sec_node_cnt(uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   set branch detect enabled
 | 
						|
 * @param    value:  0 - disabled, otherwise - enabled.
 | 
						|
 * @param    ctrl: pointer to iot_sg_cco_bd_crtl_t structure, used to specify
 | 
						|
 *                 branch identification parameters, valid only when enabled.
 | 
						|
 * @retval:  ERR_OK: branch detect enable success, others fail.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_branch_detect_enabled(uint8_t value,
 | 
						|
    iot_sg_cco_bd_ctrl_t *ctrl);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   add meter mapping information.
 | 
						|
 * @param    meter_addr: meter address.
 | 
						|
 * @param    node_addr: node mac address.
 | 
						|
 * @retval:  successful : ERR_OK, others: fail.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_add_meter_mapping_info(uint8_t *meter_addr,
 | 
						|
    uint8_t *node_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get meter mapping count.
 | 
						|
 * @retval:  meter mapping count.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_meter_mapping_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:    set module collect parameter
 | 
						|
 * @param proto_type:  collect proto type, see PROTO_TYPE_XXX
 | 
						|
 * @param data_len:    collect parameter data length
 | 
						|
 * @param clct_param:  collect parameter data pointer
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_module_clct_param(uint8_t proto_type, uint16_t data_len,
 | 
						|
    iot_sg_cco_module_clct_param_t *clct_param);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get module collect parameter
 | 
						|
 * @param proto_type: collect proto type, see PROTO_TYPE_XXX
 | 
						|
 * @param type: curve collect parameter type,
 | 
						|
 *              see IOT_SG_CCO_CURVE_COLLET_TYPE_XXX
 | 
						|
 * @param task_id: task id
 | 
						|
 * @return: pkt pointer, the pkt's detail infor refer to
 | 
						|
 *           iot_sg_cco_module_clct_param_t.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_get_module_clct_param(uint8_t proto_type,
 | 
						|
    uint8_t type, uint8_t task_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get meter mapping information from index.
 | 
						|
 * @param    index: meter mapping index, min index is 1.
 | 
						|
 * @param    map_info:  meter mapping ptr.
 | 
						|
 * @retval:  ERR_OK - get meter mapping success from index,
 | 
						|
 *           ERR_FAIL -.get meter mapping fail from index.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_meter_mapping_info_from_index(
 | 
						|
    uint16_t index, iot_sg_meter_mapping_info_t *map_info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get app proto.
 | 
						|
 * @return: app proto id, see IOT_SG_CCO_APP_PROTO_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_app_proto(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  send cctt rsp passthrouth data to ckq.
 | 
						|
 * @param   pkt: cctt rsp passthrouth data ptr.
 | 
						|
 *               the pkt will be free in function.
 | 
						|
 */
 | 
						|
void iot_sg_cco_send_cctt_rsp_passthrouth_data(iot_pkt_t *pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get branch detect state.
 | 
						|
 * @return:  branch detect state, see IOT_SG_CCO_BRANCH_DETECT_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_branch_detect_state(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief - update correct time interval to PIB
 | 
						|
 * @param time: correct time interval
 | 
						|
 */
 | 
						|
void iot_sg_cco_update_correct_sta_time_interval_to_pib(uint32_t time);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief - get correct time interval from PIB.
 | 
						|
 * @return: correct time interval.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_correct_sta_time_interval_from_pib(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  save bcast collect task.
 | 
						|
 * @param   hdr:    collect task data info pointer.
 | 
						|
 * @param   len:    collect task data info length.
 | 
						|
 * @return: ERR_OK - no problem with the length,
 | 
						|
 *          ERR_FAIL - length oversize.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_add_collect_task(iot_sg_collect_task_t *hdr,
 | 
						|
    uint16_t len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  delete bcast collect task by task id.
 | 
						|
 * @param   clct_task_id:    collect task id.
 | 
						|
 */
 | 
						|
void iot_sg_cco_delete_clct_task(uint8_t clct_task_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get collect task info from dl buf or pib by task id.
 | 
						|
 * @param   clct_task_id: collect task id.
 | 
						|
 * @return: NULL - not find pkt, others - clct task pkt.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_get_clct_task_info(uint8_t clct_task_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   cache a sg extension task command entry to buffer.
 | 
						|
 * @param   task_type:    extension task type,
 | 
						|
 *                        see IOT_SG_CCO_EXT_TASK_TYPE_XXX.
 | 
						|
 * @param   dest_addr:    dest mac address of the command, little endian.
 | 
						|
 * @param   sn:           sequence number of the 3762 packet.
 | 
						|
 *                        set to IOT_SG_INVALID_CCTT_SN if sn is unknown for
 | 
						|
 *                        the command.
 | 
						|
 * @param   pkt:          iot_pkt_t containing the 3762 pkt.
 | 
						|
 * @param   timeout:      timeout value of this task. cctt shall delete the task
 | 
						|
 * @param   prio:         priority of the task, NULL - default priority.
 | 
						|
 * @param intf_type:  interface of calling this API. see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @return: ERR_OK for success case. Other value for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_cache_ext_task(uint8_t task_type, uint8_t *dest_mac,
 | 
						|
    uint8_t sn, iot_pkt_t *pkt, uint16_t timeout, uint8_t *prio,
 | 
						|
    uint8_t intf_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  start low power meter info read.
 | 
						|
 * @retval:  successful : ERR_OK, others: fail.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_start_lp_meter_read();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  stop low power meter info read.
 | 
						|
 * @retval:  successful : ERR_OK, others: fail.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_stop_lp_meter_read();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get low power meter enable.
 | 
						|
 * @return: low power meter enable.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_lp_meter_enable();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  suspend low power meter search
 | 
						|
 */
 | 
						|
void iot_sg_cco_lp_meter_suspend_search();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get the count of double low power meter in the net.
 | 
						|
 * @return: count of double low power meter in the net.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_double_lp_meter_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  low power meter whether can be meter reading
 | 
						|
 * @param   lp_meter: low power meter mac address.
 | 
						|
 * @return: 0 - can't be meter reading, otherwise - can be meter reading
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_lp_meter_can_mr(uint8_t *lp_meter);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get the double low power meter information
 | 
						|
 * @param   index: start from 1
 | 
						|
 * @param   lp_meter: low power meter information
 | 
						|
 * @return: see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_double_lp_meter_info(uint16_t index,
 | 
						|
    iot_sg_cco_lp_meter_info_t *lp_meter);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief preprocess read lp meter data.
 | 
						|
 * @param pkt: read lp meter pkt, will be consumed.
 | 
						|
 * @param lp_meter_mac: mac address of low power meter, little-endian.
 | 
						|
 * @param sta_mac: mac address of station, big-endian.
 | 
						|
 * @retval: processed read lp meter pkt.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_pre_proess_read_lp_meter(iot_pkt_t *pkt,
 | 
						|
    uint8_t *lp_meter_mac, uint8_t *sta_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  iot_sg_cco_get_score_param() - get score param.
 | 
						|
 * @param   flag_enable: pointer, score enable flag.
 | 
						|
 * @param   threshold:   pointer, score threshold.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_score_param(uint8_t *enable_flag, uint8_t *threshold);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  iot_sg_cco_get_score_start_time() - get score start time.
 | 
						|
 * @param   day:    pointer, BIN format.
 | 
						|
 * @param   hour:   pointer, BIN format.
 | 
						|
 * @param   minute: pointer, BIN format.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_score_start_time(uint8_t *day, uint8_t *hour,
 | 
						|
    uint8_t *minute);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_set_score_param() - set score parameter.
 | 
						|
 * @param flag:      score report enable. 0 - disable, 1 - enable. default  1.
 | 
						|
 * @param threshold: score report threshold value. Total of 100,   default 60.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_score_param(uint8_t flag, uint8_t threshold);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_sg_cco_set_score_start_time() - set score start time.
 | 
						|
 * @param day:    0 - start every day. others - every month. BIN type.
 | 
						|
 * @param hour:   BIN type.
 | 
						|
 * @param minute: BIN type.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_score_start_time(uint8_t day, uint8_t hour, uint8_t minute);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: reset pm score state.
 | 
						|
 */
 | 
						|
void iot_sg_cco_pm_score_state_reset();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:    get node join time stamp.
 | 
						|
 * @node_mac: node mac address - little endian.
 | 
						|
 * @retval:   station joined time, is based on the time of CCO power-on,
 | 
						|
 *            uint is 1s.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_node_join_ts(uint8_t *node_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get reject black list count.
 | 
						|
 * @retval:  reject black list count.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_reject_bl_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get reject black list information by index.
 | 
						|
 * @index:   index:   index of reject black list, index start with 1.
 | 
						|
 * @param    info:    output - the node information.
 | 
						|
 * @retval:  ERR_OK - the info is valid. otherwise - the info is invalid.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_reject_bl_info(uint16_t index,
 | 
						|
    iot_sg_cco_reject_bl_node_info_t *info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   set equipment service provider.
 | 
						|
 * @param    esp: see IOT_SG_CCO_ESP_XXX.
 | 
						|
 */
 | 
						|
void iot_sg_cco_update_rw_esp(uint8_t esp);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   set transformer detect lock time.
 | 
						|
 * @param    net_lock_time: net lock time, uint is 1min.
 | 
						|
 * @param    abn_lock_time: the lock time of abnormal leave net, uint is 1min.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_tsfm_detect_lock_time(uint16_t net_lock_time,
 | 
						|
    uint16_t abn_lock_time);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get transformer detect lock time.
 | 
						|
 * @param    net_lock_time: pointer, get net_lock_time from cco.
 | 
						|
 * @param    abn_lock_time: pointer, get abn_lock_time from cco.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_tsfm_detect_lock_time(uint16_t *net_lock_time,
 | 
						|
    uint16_t *abn_lock_time);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get cco leave net reason.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_leave_net_reason();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get cco phase repeat flag.
 | 
						|
 * @retval:  0 - no repetition, 1 - repetition phase.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_phase_repeat_flag();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief preprocess bcast collect task data.
 | 
						|
 * @retval: processed bcast collect task pkt.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_query_bcast_clct_task_id();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: delect task by collect task id.
 | 
						|
 * @param task_id: collect task id.
 | 
						|
 * @retval: ERR_OK - delect success. otherwise - delect fail.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_del_clct_read_task(uint8_t task_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief rtc timer synchronization by bcast.
 | 
						|
 * @param rtc_time: rtc time, bcd format.
 | 
						|
 */
 | 
						|
void iot_sg_cco_rtc_timer_sync_bcast(iot_sg_cco_time_t *rtc_time);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: query collect task read info by collect task id.
 | 
						|
 * @param task_id: collect task id.
 | 
						|
 * @param cmd_addr: return collect task read commad dest address.
 | 
						|
 * @return: collect task read date pkt.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_query_clct_task_read_info(uint8_t task_id,
 | 
						|
    uint8_t *cmd_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief set or delete transformer detect address by bcast.
 | 
						|
 * @param cmd_type: comand type, see IOT_SG_CCO_BCAST_TSFM_ADDR_CMD_XXX.
 | 
						|
 * @param tsfm_addr: transformer detect address, little endian.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_bcast_tsfm_addr_param(uint8_t cmd_type,
 | 
						|
    uint8_t *tsfm_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief lock or unlock secondary node by bcast.
 | 
						|
 * @param cmd_type: comand type, see IOT_SG_CCO_BCAST_NW_LOCK_CMD_XXX.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_bcast_lock_cmd(uint8_t cmd_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  set trans mode
 | 
						|
 * @param   trans_mode: 0 - check 645/698 pkg for mr dest mac,
 | 
						|
 *                      others - doesn't check
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_trans_mode(uint8_t trans_mode);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief - get read meter trans mode.
 | 
						|
 * @param   proto_type: proto type, see PROTO_TYPE_XXX.
 | 
						|
 * @return  0 - isn't trans mode, other - is trans mode.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_trans_mode(uint8_t proto_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: set whitelist state.
 | 
						|
 * @param  wl_state: whilte status, 0 - disable, 1- enable.
 | 
						|
 * @retval: set state, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_wl_state(uint8_t wl_state);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief get whitelist state
 | 
						|
 * @return whitelist state, 0 - disable, 1 - enable, 2 - delay enable.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_wl_state();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: clear reject node in the pool.
 | 
						|
 */
 | 
						|
void iot_sg_cco_clear_reject_node();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get dev addr by pm addr
 | 
						|
 * @param   dev_addr: output, little - endian
 | 
						|
 * @param   pm_addr : input, little - endian
 | 
						|
 * @retval: see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_dev_addr(uint8_t *dev_addr, uint8_t *pm_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  get tsfm addr by pm addr
 | 
						|
 * @param   tsfm_addr: output, big - endian
 | 
						|
 * @param   pm_addr : input, little - endian
 | 
						|
 * @retval: see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_tsfm_addr(uint8_t *tsfm_addr, uint8_t *pm_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  handle sta join certification enable
 | 
						|
 * @param  check_enable: sta join certification flag, 0 - disable, 1 - enable
 | 
						|
 * @retval: see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_enable_sta_join_check(uint8_t check_enable);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: set passcode.
 | 
						|
 * @param passcode: simple pair passcode value. Only same passcode CCO and STA
 | 
						|
 * can beassociated, little endian.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_passcode(uint16_t passcode);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: get passcodeb.
 | 
						|
 * @retval: passcode.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_passcode();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: get sta join check enable state.
 | 
						|
 * @retval: enable state.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_sta_join_check_enable();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: set white list auto delete function.
 | 
						|
 * @param auto_del_wl_flag: 1 - enable, 0 - disable.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_wl_auto_del(uint8_t auto_del_wl_flag);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: set white list entry remove time stamp.
 | 
						|
 * @param mac_addr: mac address to search for white list entry in little-endian
 | 
						|
 * @param rm_ts: time stamp to remove the entry from white list, unit is 1s
 | 
						|
 * @retval: ERR_OK for successful case. ERR_FAIL for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_wl_entry_rm_ts(uint8_t *mac_addr, uint32_t rm_ts);
 | 
						|
 | 
						|
 | 
						|
/* @brief: whether allow control route meter reading status.
 | 
						|
 * @retval: ERR_OK for successful case. ERR_FAIL for failed case.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_allow_ctrl_rt_mr();
 | 
						|
 | 
						|
/* @brief: update uart config parameter.
 | 
						|
 * @param uart_conf:        uart config parameter;
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_uart_config(iot_sg_cco_uart_conf_t *uart_conf);
 | 
						|
 | 
						|
/* @brief: get uart config parameter.
 | 
						|
 * @param uart_conf:        uart config parameter.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_uart_config(iot_sg_cco_uart_conf_t *uart_conf);
 | 
						|
 | 
						|
/* @brief: get tsfm detect time left.
 | 
						|
 * @retval: time left, unit is 1s.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_tsfm_detect_time_left();
 | 
						|
 | 
						|
/* @brief: get tsfm detect used time.
 | 
						|
 * @retval: used time, unit is 1s.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_tsfm_detect_used_time();
 | 
						|
 | 
						|
/* @brief: get sec node register time left.
 | 
						|
 * @retval: time left, unit is 1s.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_sec_node_reg_timeout_left();
 | 
						|
 | 
						|
/* @brief: start bcast task.
 | 
						|
 * @param bcast_time:   bcast time, unit is 1min.
 | 
						|
 * @param interval:     bcast interval time, unit is 1s
 | 
						|
 */
 | 
						|
void iot_sg_cco_bcast_task_start(uint8_t bcast_time, uint8_t interval);
 | 
						|
 | 
						|
/* @brief: get bcast task state.
 | 
						|
 * @retval: bcast task state.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_bcast_task_state();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: reset bcast task parameter.
 | 
						|
 */
 | 
						|
void iot_sg_cco_bcast_task_param_reset();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: get predict meter reading state.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_predict_mr_get_state();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: get predict meter reading concurrent count..
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_predict_mr_get_con_cnt();
 | 
						|
 | 
						|
/* @brief: handle predict meter reading ack.
 | 
						|
 * @param flw_flag: follow data of flag, 0 - no data, 1 - follow-up data.
 | 
						|
 * @param sn: sequence number of the 3762 packet.
 | 
						|
 */
 | 
						|
void iot_sg_cco_handle_predict_mr_ack(uint8_t flw_flag, uint8_t sn);
 | 
						|
 | 
						|
/* @brief: start predict reading meter. */
 | 
						|
void iot_sg_cco_start_predict_mr();
 | 
						|
 | 
						|
/* @brief: stop predict reading meter. */
 | 
						|
void iot_sg_cco_stop_predict_mr();
 | 
						|
 | 
						|
/* @brief: unicast send node event report control.
 | 
						|
 * @param pkt:          event report control data.
 | 
						|
 * @param total_cnt:    total node count.
 | 
						|
 */
 | 
						|
void iot_sg_cco_start_node_evt_rpt_ctrl(iot_pkt_t *pkt, uint8_t total_cnt);
 | 
						|
 | 
						|
 | 
						|
/* @brief: get node event report control execute state.
 | 
						|
 * @retval: execute state, 0 - done, 1 - doing.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_node_evt_ctrl_state();
 | 
						|
 | 
						|
/* @brief: update reset infomation to pib.
 | 
						|
 * @param op: module reset infomation option, see IOT_SG_CCO_RESET_INFO_OP_XXX.
 | 
						|
 * @param param: update reset infomation to this pointer.
 | 
						|
 */
 | 
						|
void iot_sg_cco_update_reset_info_to_pib(uint8_t op, uint8_t *param);
 | 
						|
 | 
						|
/* @brief: get reset infomation from pib.
 | 
						|
 * @param op: module reset infomation option, see IOT_SG_CCO_RESET_INFO_OP_XXX.
 | 
						|
 * @param param: get reset infomation to this pointer.
 | 
						|
 */
 | 
						|
void iot_sg_cco_get_reset_info_from_pib(uint8_t op, uint8_t *param);
 | 
						|
 | 
						|
/* @brief: set auto sec node active register.
 | 
						|
 * @param auto_reg_active: 0 - disable, others - enable.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_auto_reg_active(uint8_t auto_reg_active);
 | 
						|
 | 
						|
/* @brief: get auto sec node active register.
 | 
						|
 * @retval: 0 - disable, others - enable.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_auto_reg_active();
 | 
						|
 | 
						|
/* @brief: judge the node phase is lack of phase.
 | 
						|
 * @param phase: phase that device is connected to.
 | 
						|
 * @param pm_type: power meter type, 0 is single phase, 1 is three phase.
 | 
						|
 * @retval:  0 - the node isn't lack of phase. 1 - the node is lack of phase.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_is_lack_phase(uint8_t phase, uint8_t pm_type);
 | 
						|
 | 
						|
/* @brief: get current ntb.
 | 
						|
 * @retval: ntb.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_ntb();
 | 
						|
 | 
						|
/* @brief: save pm address that isn't in white list.
 | 
						|
 * @param addr: address, little - endian.
 | 
						|
 */
 | 
						|
void iot_sg_cco_save_pm_to_mac_list(uint8_t *addr);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief:add internal command to downlink buffer
 | 
						|
 * @param intern_type: internal command type, see IOT_SG_CCO_INTERN_SEND_XXX.
 | 
						|
 * @param pkt:data pointer, the ownership of the pkt will be transferred.
 | 
						|
 * @param pm_mac: meter mac address, little -endian.
 | 
						|
 * @retval: result, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_intern_dl_send(uint8_t intern_type, iot_pkt_t *pkt,
 | 
						|
    uint8_t *pm_mac);
 | 
						|
 | 
						|
/* @brief: get power meter address from mac list.
 | 
						|
 * @param index: index of mac list addr.
 | 
						|
 * @param addr: return address, little - endian.
 | 
						|
 * @retval:   ERR_OK  - for success case
 | 
						|
 * @retval:   others  - error code
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_mac_list_pm_addr(uint16_t index, uint8_t *addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief get total node count from list.
 | 
						|
 * @retval:   total node count.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_mac_list_cnt();
 | 
						|
 | 
						|
/* @brief: get clock manage parameter.
 | 
						|
 * @param mac: node address, little endian.
 | 
						|
 * @param auto_corr: node auto correct flag.
 | 
						|
 * @param threshold: node clock manager threshold.
 | 
						|
 * @retval: ERR_OK - for success case, others - error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_clock_manage_param(uint8_t *mac, uint8_t *auto_corr,
 | 
						|
    uint8_t *threshold);
 | 
						|
 | 
						|
/* @brief: set clock manage parameter.
 | 
						|
 * @param mac: node address, little endian. the mac is bcast when all mac
 | 
						|
 * cell is 0x99 or 0xFF.
 | 
						|
 * @param data: clock manager data.
 | 
						|
 * @param cmd_type: clock manager cmd, see IOT_SG_CCO_CLOCK_MANAGE_XXX.
 | 
						|
 * @retval: ERR_OK - for success case, others - error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_clock_manage_param(uint8_t *mac, uint8_t data,
 | 
						|
    uint8_t cmd_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief get tsfm state from mac list.
 | 
						|
 * @param index:        index of mac list addr.
 | 
						|
 * @param addr:         return node mac address, little endian.
 | 
						|
 * @param tsfm_addr:    return tsfm dectect major node address, big endian.
 | 
						|
 * @param result:       return tsfm dectect result, 0 - different transformer,
 | 
						|
 *                      1 - same transformer.
 | 
						|
 * @retval:   ERR_OK  - for success case
 | 
						|
 * @retval:   others  - error code
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_mac_list_tsfm_state(uint16_t index, uint8_t *addr,
 | 
						|
    uint8_t *tsfm_addr, uint8_t *result);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief get tsfm max cnt from mac list.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_mac_list_max_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief whether pm exists in the MAC address list
 | 
						|
 * @retval:   ERR_OK  - exist
 | 
						|
 * @retval:   ERR_XXX - not exist
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_mac_list_is_exist(uint8_t *pm_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: set zc notify enable.
 | 
						|
 * @param zc_notify:    zc notify enable, 0 - disabled, 1 - enable
 | 
						|
 * @retval: ERR_OK - for success case, others - error code.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_zc_notify_enable(uint8_t zc_notify);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: get zc notify enable.
 | 
						|
 * @retval: zc_notify:  zc notify enable, 0 - disabled, 1 - enable
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_zc_notify_enable();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: enable rtc tx.
 | 
						|
 * @param enable: rtc send enable, 0 - disabled, 1 - enable
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_enable_rtc_tx(uint8_t enable);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   di convert to index of table
 | 
						|
 * @param   di: di data.
 | 
						|
 * @param   proto_type: proto type, see PROTO_TYPE_XXX.
 | 
						|
 * @return: 0xFF is invalid, otherwise is valid
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_di_convert_to_index(uint32_t di, uint8_t proto_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   set  abnormal report enable for neutralwire and livewire.
 | 
						|
 * @param   enable: configuration enable flag , 0 - disabled, 1 - enable.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_nli_enable(uint8_t enable);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get abnormal electric current event report enable.
 | 
						|
 * @return: abnormal event report enable.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_nli_enable();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  get cco base info.
 | 
						|
 * @param  info_id:     info id for base info.
 | 
						|
 * @param  info_cnt:    info cnt for base info.
 | 
						|
 * @return: pkt pointer, cco base info data.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_get_base_info(uint8_t *info_id, uint8_t info_cnt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  get local node base info.
 | 
						|
 * @param  pm_mac:      meter mac address, little endian.
 | 
						|
 * @param  element_id:  need get element id
 | 
						|
 * @return: 1 - element is set, 0 - element is not set.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_element_bm_is_set(uint8_t *pm_mac,
 | 
						|
    uint8_t element_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  get local node base info.
 | 
						|
 * @param  pm_mac:      meter mac address, little endian.
 | 
						|
 * @param  info_id:     info id for base info.
 | 
						|
 * @param  info_cnt:    info cnt for base info.
 | 
						|
 * @return: pkt pointer, node local base info data.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_get_node_local_base_info(uint8_t *pm_mac, uint8_t *info_id,
 | 
						|
   uint8_t info_cnt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief  get route read fail count.
 | 
						|
 * @return: fail count.
 | 
						|
 */
 | 
						|
uint16_t iot_sg_cco_get_route_read_fail_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get route read fail node info for index.
 | 
						|
 * @param   node_index:  get route read fail info start from this index.
 | 
						|
 * @param   node_info:   information of the white list entry
 | 
						|
 * @return: ERR_OK      -   success.
 | 
						|
 * @return: ERR_INVAL   -   failed.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_route_read_fail_by_index(uint16_t node_index,
 | 
						|
    iot_sg_wl_entry_info_t* node_info);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:   get physic link type.
 | 
						|
 * @return:  1 - HPLC & RF dual mode.
 | 
						|
 * @return:  0 - HPLC single mode.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_phy_type();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   cco set rf channel.
 | 
						|
 * @param   req_id:        request id of data to report.
 | 
						|
 * @param   option:        rf option.
 | 
						|
 * @param   channel:       rf channel.
 | 
						|
 * @param   rf_cod_enable: 0 - disable, 1 - enable.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_rf_channel(uint8_t req_id, uint8_t option, uint8_t channel,
 | 
						|
    uint8_t rf_cod_enable);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   get uart default baud rate;
 | 
						|
 * @return  default baud rate
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_get_uart_defaut_bps();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   baud rate convert to index
 | 
						|
 * @param   bps:baud rate, see IOT_SG_CCO_UART_BAUD_XXX.
 | 
						|
 * @return  index, see IOT_SG_CCO_BAUD_IDX_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_uart_bps_to_idx(uint32_t bps);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   index convert to baud rate
 | 
						|
 * @param   type:baud rate, see IOT_SG_CCO_BAUD_IDX_XXX.
 | 
						|
 * @return  baud rate, see IOT_SG_CCO_UART_BAUD_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_uart_idx_to_bps(uint8_t type);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   get user type
 | 
						|
 * @return  user type, see USER_TYPE_XX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_user_type();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief   get cli device type
 | 
						|
 * @param   src_type:    plc device type, see IOT_PLC_DEV_TYPE_xxx.
 | 
						|
 * @return: cli device type, see IOT_CLI_SG_DEVICE_TYPE_xxx.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_node_cli_dev_type(uint8_t src_type);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   convert interface calling by channel
 | 
						|
 * @param   channel: data sources, see IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_XXX.
 | 
						|
 * @return  interface calling, see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_intf_type_by_channel(uint8_t  channel);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   convert channel by interface calling
 | 
						|
 * @param   interface calling, see IOT_SG_CALLER_TYPE_XXX.
 | 
						|
 * @return  channel: data sources, see IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_XXX.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_channel_by_intf_type(uint8_t  intf_type);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   send response data to cli.
 | 
						|
 * @param   pkt: iot_pkt_t response proto that send to cli,
 | 
						|
 *               the ownership of the pkt will be transferred.
 | 
						|
 */
 | 
						|
void iot_sg_cco_send_local_proto_to_cli(iot_pkt_t *pkt);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   set tx power to cvg.
 | 
						|
 * @param   hplc_power: hplc tx power, unit is 1 dbuv.
 | 
						|
 * @param   rf_power:   rf tx power, unit is 1 dbm.
 | 
						|
 * @return  0 - power value valid, other - power value invalid.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_set_tx_power(uint8_t req_id, uint8_t hplc_power,
 | 
						|
    int8_t rf_power);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   get cco version build info pkt
 | 
						|
 * @return  cco version build info pkt pointer.
 | 
						|
 */
 | 
						|
iot_pkt_t *iot_sg_cco_get_ver_build_info_pkt();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   check set band parameter valid
 | 
						|
 * @param   band : freq band
 | 
						|
 * @return: ERR_OK      -   valid.
 | 
						|
 * @return: ERR_INVAL   -   invalid.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_cco_check_set_band_valid(uint8_t band);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   get cco force single type flag.
 | 
						|
 * @return: 0 - non force, others - force single type.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_force_single_type_flag();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   if support sta collect parameter v2.8-2.
 | 
						|
 * @return  0 - don't support, 1 - support.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_clct_min_is_v28_v2();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   set force link type
 | 
						|
 * @param   link : force link type, 0 - defaule, 1 - force hplc, 2 - force rf.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_force_link_type(uint8_t link);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   get force link type
 | 
						|
 * @return: force link, 0 - defaule, 1 - force hplc, 2 - force rf.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_cco_get_force_link_type();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief - update edge computing info.
 | 
						|
 * @edge_set: edge computing info.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_edge_computing(iot_sg_cco_edge_computing_set_t *edge_set);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief - set connless link type.
 | 
						|
 * @link_type:  connless link type, see IOT_PLC_FORCE_LINK_XXX.
 | 
						|
 */
 | 
						|
void iot_sg_cco_set_connless_link_type(uint8_t link_type);
 | 
						|
 | 
						|
#else /* PLC_SUPPORT_CCO_ROLE && IOT_SMART_GRID_ENABLE */
 | 
						|
 | 
						|
uint32_t iot_sg_cco_get_clock_manage_param(uint8_t *mac, uint8_t *auto_corr,
 | 
						|
    uint8_t *threshold);
 | 
						|
 | 
						|
uint32_t iot_sg_cco_set_clock_manage_param(uint8_t *mac, uint8_t data,
 | 
						|
    uint8_t cmd_type);
 | 
						|
 | 
						|
uint32_t iot_sg_cco_get_pm_score_info_by_index(uint16_t index,
 | 
						|
    iot_sg_cco_sec_node_score_info_t *info);
 | 
						|
 | 
						|
void iot_sg_cco_set_score_param(uint8_t flag, uint8_t threshold);
 | 
						|
 | 
						|
void iot_sg_cco_get_score_param(uint8_t *enable_flag, uint8_t *threshold);
 | 
						|
 | 
						|
void iot_sg_cco_get_score_start_time(uint8_t *day, uint8_t *hour,
 | 
						|
    uint8_t *minute);
 | 
						|
 | 
						|
void iot_sg_cco_set_score_start_time(uint8_t day, uint8_t hour, uint8_t minute);
 | 
						|
 | 
						|
void iot_sg_cco_pm_score_state_reset();
 | 
						|
 | 
						|
uint32_t iot_sg_cco_set_branch_detect_enabled(uint8_t value,
 | 
						|
    iot_sg_cco_bd_ctrl_t *ctrl);
 | 
						|
 | 
						|
uint8_t iot_sg_cco_get_branch_detect_state(void);
 | 
						|
 | 
						|
iot_pkt_t *iot_sg_cco_get_bd_dev_entry_info(uint16_t start_index,
 | 
						|
    uint16_t count);
 | 
						|
 | 
						|
uint32_t iot_sg_cco_start_lp_meter_read();
 | 
						|
 | 
						|
uint32_t iot_sg_cco_stop_lp_meter_read();
 | 
						|
 | 
						|
void iot_sg_cco_lp_meter_suspend_search();
 | 
						|
 | 
						|
uint8_t iot_sg_cco_get_lp_meter_enable();
 | 
						|
 | 
						|
uint32_t iot_sg_cco_lp_meter_can_mr(uint8_t *lp_meter);
 | 
						|
 | 
						|
uint16_t iot_sg_cco_get_double_lp_meter_cnt();
 | 
						|
 | 
						|
uint32_t iot_sg_cco_get_double_lp_meter_info(uint16_t index,
 | 
						|
    iot_sg_cco_lp_meter_info_t *lp_meter);
 | 
						|
 | 
						|
iot_pkt_t *iot_sg_cco_pre_proess_read_lp_meter(iot_pkt_t *pkt,
 | 
						|
    uint8_t *lp_meter_mac, uint8_t *sta_mac);
 | 
						|
 | 
						|
void iot_sg_cco_set_edge_computing(iot_sg_cco_edge_computing_set_t *edge_set);
 | 
						|
 | 
						|
void iot_sg_cco_init_clct_task();
 | 
						|
 | 
						|
uint32_t iot_sg_cco_add_collect_task(iot_sg_collect_task_t *hdr, uint16_t len);
 | 
						|
 | 
						|
void iot_sg_cco_delete_clct_task(uint8_t clct_task_id);
 | 
						|
 | 
						|
iot_pkt_t *iot_sg_cco_get_clct_task_info(uint8_t clct_task_id);
 | 
						|
 | 
						|
iot_pkt_t *iot_sg_cco_query_bcast_clct_task_id();
 | 
						|
 | 
						|
uint32_t iot_sg_cco_del_clct_read_task(uint8_t task_id);
 | 
						|
 | 
						|
iot_pkt_t *iot_sg_cco_query_clct_task_read_info(uint8_t task_id,
 | 
						|
    uint8_t *cmd_addr);
 | 
						|
 | 
						|
uint8_t iot_sg_cco_predict_mr_get_state();
 | 
						|
 | 
						|
uint8_t iot_sg_cco_predict_mr_get_con_cnt();
 | 
						|
 | 
						|
void iot_sg_cco_handle_predict_mr_ack(uint8_t flw_flag, uint8_t sn);
 | 
						|
 | 
						|
void iot_sg_cco_start_predict_mr();
 | 
						|
 | 
						|
void iot_sg_cco_stop_predict_mr();
 | 
						|
 | 
						|
uint8_t iot_sg_cco_get_wlii_cnt_info(iot_sg_wlii_cnt_info_t *info);
 | 
						|
 | 
						|
iot_pkt_t* iot_sg_cco_get_wlii_entry_info(uint32_t start_index, uint32_t count);
 | 
						|
 | 
						|
void iot_sg_cco_add_wlii_addr(uint8_t intf_type, iot_pkt_t *iot_pkt);
 | 
						|
 | 
						|
void iot_sg_cco_remove_wlii_addr(uint8_t intf_type, uint8_t entry_count,
 | 
						|
    uint8_t* mac_addr_array);
 | 
						|
 | 
						|
#define iot_sg_cco_reset_parameter_info()
 | 
						|
 | 
						|
#define iot_sg_cco_start_driver_timer1(dur) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_stop_driver_timer1()
 | 
						|
 | 
						|
#define iot_sg_cco_start_driver_timer2(dur) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_stop_driver_timer2()
 | 
						|
 | 
						|
#define iot_sg_cco_restart_driver_timer3(dur)
 | 
						|
 | 
						|
#define iot_sg_cco_start_driver_timer4(dur) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_stop_driver_timer4()
 | 
						|
 | 
						|
#define iot_sg_cco_start_driver_timer5(dur) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_stop_driver_timer5()
 | 
						|
 | 
						|
#define iot_sg_cco_restart_driver_timer5(dur)
 | 
						|
 | 
						|
#define iot_sg_cco_start_driver_timer6(dur) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_stop_driver_timer6()
 | 
						|
 | 
						|
#define iot_sg_cco_get_mr_pkt_mac(pm_mac, data, len, proto_type) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_set_rt_mr_result(node_index, result) (0)
 | 
						|
 | 
						|
#define iot_sg_start_sec_node_reg(intf_type, duration, count, auto_stop)
 | 
						|
 | 
						|
#define iot_sg_stop_sec_node_reg(intf_type, reason)
 | 
						|
 | 
						|
#define iot_sg_cco_get_evt_rpt_state() (1)
 | 
						|
 | 
						|
#define iot_sg_broadcast_data(intf_type, data_type, data, len, sta_mac)
 | 
						|
 | 
						|
#define iot_sg_cco_correct_sta_time(intf_type, data_type, data, len, \
 | 
						|
    bcast_type, ntb)
 | 
						|
 | 
						|
#define iot_sg_cco_clear_all_wlii_addr()
 | 
						|
 | 
						|
#define iot_sg_cco_clear_all_wl_addr()
 | 
						|
 | 
						|
#define iot_sg_cco_add_wl_addr(intf_type, entry_count)
 | 
						|
 | 
						|
#define iot_sg_cco_add_bl_addr(intf_type, iot_pkt)
 | 
						|
 | 
						|
#define iot_sg_cco_remove_wl_addr(intf_type, entry_count, mac_addr_array)
 | 
						|
 | 
						|
#define iot_sg_cco_remove_bl_addr(intf_type, iot_pkt)
 | 
						|
 | 
						|
#define iot_sg_cco_clean_bl_addr(intf_type)
 | 
						|
 | 
						|
#define iot_sg_route_control(intf_type, op)
 | 
						|
 | 
						|
#define iot_sg_cco_get_meter_count()
 | 
						|
 | 
						|
#define iot_sg_cco_is_route_learn_done() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_wl_is_enabled() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_wl_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_wlii_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_reset_wlii()
 | 
						|
 | 
						|
#define iot_sg_cco_get_wl_info_by_index(node_index, node_info) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_pm_info_by_mac(pm_mac, node_info) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_pm_info_by_index(node_index, node_info) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_meter_by_index(node_index, node_info) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_reset_pm_state()
 | 
						|
 | 
						|
#define iot_sg_cco_get_topo_msg(req_id, req_data_ver, start_index, count)
 | 
						|
 | 
						|
#define iot_sg_cco_get_nw_msg(req_id)
 | 
						|
 | 
						|
#define iot_sg_coo_get_free_meter_entry_count() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_nb_nw_info_msg(req_id)
 | 
						|
 | 
						|
#define iot_sg_cco_get_free_wl_entry_count() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_free_wlii_entry_count() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_node_info_msg(req_id, ver, sta_mac, sta_cnt)
 | 
						|
 | 
						|
#define iot_sg_cco_get_bl_node_info_msg(req_id, start_index, count)
 | 
						|
 | 
						|
#define iot_sg_set_cco_mac_addr(x1, x2)
 | 
						|
 | 
						|
#define iot_sg_cco_start_nw_fmt()
 | 
						|
 | 
						|
#define iot_sg_cco_set_cli_upgrade_enable(enable)
 | 
						|
 | 
						|
#define iot_sg_cco_start_recv_upgrade(file_type, file_id, mac, block_size, \
 | 
						|
    total_block_cnt, file_size, crc16, window_time);
 | 
						|
 | 
						|
#define iot_sg_cco_handle_file_segment(data, len, index)
 | 
						|
 | 
						|
#define iot_sg_cco_get_freq_band_msg()
 | 
						|
 | 
						|
#define iot_sg_cco_set_freq_band_msg(req_id, freq_band)
 | 
						|
 | 
						|
#define iot_sg_cco_get_vendor_device_sn(vendor_device_sn, sn_len) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_vendor_device_sn_to_pib(vendor_device_sn, sn_len) \
 | 
						|
    (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_neighbor_dev_msg(req_id, start, cnt)
 | 
						|
 | 
						|
#define iot_sg_cco_cache_sg_mr_cmd(mr_type, sn, afn, proto_type, src_addr, \
 | 
						|
    dst_addr, pkt, intf_type, prio, timeout, need_reply, task_id, \
 | 
						|
    sn_inc_flag, emergency) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_cache_has_sg_mr_cmd(dest_addr)
 | 
						|
 | 
						|
#define iot_sg_cco_cache_has_sg_ext_mr_cmd(mac_addr, ext_data_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_recv_ack_to_report(really_ack, sn)
 | 
						|
 | 
						|
#define iot_sg_cco_wl_entry_exist(meter_mac) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_wlii_entry_exist(meter_mac) (0)
 | 
						|
 | 
						|
#define iot_sg_get_wl_entry_info_by_mac(mac_addr, info) (0)
 | 
						|
 | 
						|
#define iot_sg_get_wlii_entry_info_by_mac(mac_addr, info) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_sta_mac_by_index(sta_index, sta_mac) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_router_mr_timeout() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_node_monitor_max_dur() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_node_monitor_max_dur(dur)
 | 
						|
 | 
						|
#define iot_sg_cco_get_major_node_mac(major_node_mac)
 | 
						|
 | 
						|
#define iot_sg_cco_set_major_node_mac(major_node_mac)
 | 
						|
 | 
						|
#define iot_sg_cco_set_repeater_addr_range(start_addr, end_addr) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_repeater_addr_range(start_addr, end_addr)
 | 
						|
 | 
						|
#define iot_sg_cco_check_exceed_con_cnt(dest_addr) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_sn_for_cctt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_router_work_flag() (IOT_SG_CCO_ROUTER_WORK_FLAG_STOP)
 | 
						|
 | 
						|
#define iot_sg_cco_get_router_work_mode() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_router_work_mode(work_mode)
 | 
						|
 | 
						|
#define iot_sg_cco_get_router_sec_node_reg_allowed() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_router_sec_node_reg_allowed(reg_allowed)
 | 
						|
 | 
						|
#define iot_sg_cco_get_router_work_type() \
 | 
						|
                                    (IOT_SG_CCO_ROUTER_WORK_TYPE_RESVD)
 | 
						|
 | 
						|
#define iot_sg_cco_set_router_work_type(work_type)
 | 
						|
 | 
						|
#define iot_sg_cco_get_router_evt_flag() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_tsfm_detect_status() (IOT_SG_CCO_TSFM_DETECT_DONE)
 | 
						|
 | 
						|
#define iot_sg_cco_set_tsfm_detect_status(value)
 | 
						|
 | 
						|
#define iot_sg_cco_get_tsfm_detect_enabled() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_tsfm_detect_enabled(sta_lock, value, \
 | 
						|
    qr_sta_tsfm_detect_ret, tsfm_detect_dur, bcast_feature, \
 | 
						|
    is_keep_bcast) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_pm_proto_type(pm_mac, pm_proto) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_add_null_mr_data(intf_type, sn, afn, src_mac, dest_mac, \
 | 
						|
    mr_type, proto_type);
 | 
						|
 | 
						|
#define iot_sg_cco_get_power_status() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_sec_node_rpt(sta_mac, chg_state, dev_mac) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_handle_evt_rpt(sta_addr, pm_addr, pkt, seq, evt_type, \
 | 
						|
    dev_type, not_check_wl) (ERR_NOSUPP)
 | 
						|
 | 
						|
#define iot_sg_cco_get_sec_node_info(sta_mac, node_cnt) (NULL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_esp() (IOT_SG_CCO_ESP_AUTO)
 | 
						|
 | 
						|
#define iot_sg_cco_set_esp(esp)
 | 
						|
 | 
						|
#define iot_sg_cco_router_mr_find_node_entry(read_pm_index, info) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_sys_reset_wait_time (0)
 | 
						|
 | 
						|
#define iot_sg_cco_clean_buf_pool()
 | 
						|
 | 
						|
#define iot_sg_cco_add_task_cmd(proto_type, task_id, prio, sn, timeout, \
 | 
						|
    need_reply, src_mac, dst_mac, pkt, sn_inc_flag, task_id_filter, \
 | 
						|
    emergency, forward, intf_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_rm_task_cmd(task_id) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_enable_mr(intf_type)
 | 
						|
 | 
						|
#define iot_sg_cco_disable_mr(intf_type)
 | 
						|
 | 
						|
#define iot_sg_cco_get_free_task_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_task_info_by_id(task_id) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_task_listid(start_index, cnt, taskid) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_convert_phase(dev_type, phase1, phase2, phase3) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_rt_mr_get_state() (IOT_SG_CCO_RT_AMR_STATE_INIT)
 | 
						|
 | 
						|
#define iot_sg_cco_rt_mr_set_backup_ack_sn(sn)
 | 
						|
 | 
						|
#define iot_sg_cco_rt_mr_result_ack(sn)
 | 
						|
 | 
						|
#define iot_sg_cco_get_conn_less_status() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_is_power_up_again() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_mr_timeout(intf_type, mr_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_tsfm_status_by_mac(pm_addr) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_tsfm_result_by_mac(pm_addr) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_meter_mac_to_sta_mac(meter_mac, sta_mac) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_ctrl_proto_status() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_send_ctrl_proto(pkt)
 | 
						|
 | 
						|
#define iot_sg_cco_local_proto_data_send(channel, pkt)
 | 
						|
 | 
						|
#define iot_sg_cco_query_upgrade_info(query_info) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_upgrade_get_fail_sta_list(start_index, cnt) (NULL)
 | 
						|
 | 
						|
#define iot_sg_cco_upgrade_statistics(statistics, print_flag)
 | 
						|
 | 
						|
#define iot_sg_cco_get_meter_type(sta_mac) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_dev_power_state(sta_mac) (1)
 | 
						|
 | 
						|
#define iot_sg_cco_is_pm(dev_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_is_collector_or_pm(dev_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_is_collector(dev_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_dev_chip_id_by_mac(sta_addr, chip_id) (ERR_INVAL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_dev_module_id_by_mac(sta_addr, mod_id) (ERR_INVAL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_dev_type_by_mac(sta_mac) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_reject_bl_exist(mac_addr) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_add_reject_bl(mac_addr)
 | 
						|
 | 
						|
#define iot_sg_cco_clear_reject_bl()
 | 
						|
 | 
						|
#define iot_sg_cco_check_is_first_join(sta_addr) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_net_node_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_pm_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_net_node_info_by_index(start_type, value, \
 | 
						|
    info) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_net_node_info_by_mac(pm_mac, info) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_net_node_info_by_pm_index(value, info) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_pm_info_by_real_index(index, info) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_collector_meter_addr_by_index(sta_mac, pm_mac, index) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_sec_node_reg_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_sec_node_cnt(sta_mac) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_add_meter_mapping_info(meter_addr, node_addr) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_meter_mapping_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_module_clct_param(proto_type, data_len, clct_param)
 | 
						|
 | 
						|
#define iot_sg_cco_get_module_clct_param(proto_type, type, task_id) (NULL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_meter_mapping_info_from_index(index, map_info) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_app_proto(void) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_send_cctt_rsp_passthrouth_data(pkt)
 | 
						|
 | 
						|
#define iot_sg_cco_update_correct_sta_time_interval_to_pib(time) (NULL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_correct_sta_time_interval_from_pib(void) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_cache_ext_task(task_type, dest_mac, sn, pkt, \
 | 
						|
    timeout, prio, intf_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_node_join_ts(node_mac) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_reject_bl_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_reject_bl_info(index, info) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_update_rw_esp(esp)
 | 
						|
 | 
						|
#define iot_sg_cco_set_tsfm_detect_lock_time(net_lock_time, abn_lock_time)
 | 
						|
 | 
						|
#define iot_sg_cco_get_tsfm_detect_lock_time(net_lock_time, abn_lock_time)
 | 
						|
 | 
						|
#define iot_sg_cco_get_leave_net_reason() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_phase_repeat_flag() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_rtc_timer_sync_bcast(rtc_time)
 | 
						|
 | 
						|
#define iot_sg_cco_set_bcast_tsfm_addr_param(cmd_type, tsfm_addr)
 | 
						|
 | 
						|
#define iot_sg_cco_set_bcast_lock_cmd(cmd_type)
 | 
						|
 | 
						|
#define iot_sg_cco_set_trans_mode(trans_mode)
 | 
						|
 | 
						|
#define iot_sg_cco_get_trans_mode(proto_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_wl_state(wl_state) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_wl_state() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_clear_reject_node()
 | 
						|
 | 
						|
#define iot_sg_cco_get_dev_addr(dev_addr, pm_addr) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_tsfm_addr(tsfm_addr, pm_addr) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_enable_sta_join_check(check_enable) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_set_passcode(passcode)
 | 
						|
 | 
						|
#define iot_sg_cco_get_passcode() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_sta_join_check_enable() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_wl_auto_del(del_flag)
 | 
						|
 | 
						|
#define iot_sg_cco_set_wl_entry_rm_ts(mac_addr, rm_ts) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_allow_ctrl_rt_mr() (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_set_uart_config(uart_conf)
 | 
						|
 | 
						|
#define iot_sg_cco_get_uart_config(uart_conf)
 | 
						|
 | 
						|
#define iot_sg_cco_get_tsfm_detect_time_left() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_tsfm_detect_used_time() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_sec_node_reg_timeout_left() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_bcast_task_start(bcast_time, interval)
 | 
						|
 | 
						|
#define iot_sg_cco_get_bcast_task_state() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_bcast_task_param_reset()
 | 
						|
 | 
						|
#define iot_sg_cco_start_node_evt_rpt_ctrl(pkt, total_cnt)
 | 
						|
 | 
						|
#define iot_sg_cco_get_node_evt_ctrl_state() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_update_reset_info_to_pib(op, param)
 | 
						|
 | 
						|
#define iot_sg_cco_get_reset_info_from_pib(op, param)
 | 
						|
 | 
						|
#define iot_sg_cco_set_auto_reg_active(auto_reg_active)
 | 
						|
 | 
						|
#define iot_sg_cco_get_auto_reg_active() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_is_lack_phase(phase, pm_type) (0)
 | 
						|
 | 
						|
#define  iot_sg_cco_get_ntb() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_save_pm_to_mac_list(addr)
 | 
						|
 | 
						|
#define iot_sg_cco_intern_dl_send(intern_type, pkt, pm_mac) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_mac_list_pm_addr(index, addr) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_mac_list_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_mac_list_tsfm_state(index, addr, tsfm_addr, \
 | 
						|
    result) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_mac_list_max_cnt() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_zc_notify_enable(zc_notify) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_zc_notify_enable() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_enable_rtc_tx(enable)
 | 
						|
 | 
						|
#define iot_sg_cco_di_convert_to_index(di, proto_type) (0xFF)
 | 
						|
 | 
						|
#define iot_sg_cco_set_nli_enable(enable)
 | 
						|
 | 
						|
#define iot_sg_cco_get_nli_enable() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_base_info(info_id, info_cnt) (NULL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_node_local_base_info(pm_mac, info_id, info_cnt) (NULL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_element_bm_is_set(pm_mac, element_id) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_route_read_fail_cnt()
 | 
						|
 | 
						|
#define iot_sg_cco_get_route_read_fail_by_index(node_index, node_info) \
 | 
						|
    (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_phy_type() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_rf_channel(req_id, option, channel, rf_cod_enable)
 | 
						|
 | 
						|
#define iot_sg_cco_get_uart_defaut_bps() IOT_SG_CCO_BAUD_9600
 | 
						|
 | 
						|
#define iot_sg_cco_uart_bps_to_idx(bps) IOT_SG_CCO_BAUD_IDX_9600
 | 
						|
 | 
						|
#define iot_sg_cco_uart_idx_to_bps(type) IOT_SG_CCO_UART_BAUD_9600
 | 
						|
 | 
						|
#define iot_sg_cco_get_user_type() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_node_cli_dev_type(src_type) (0)
 | 
						|
 | 
						|
#define iot_sg_cco_send_local_proto_to_cli(pkt)
 | 
						|
 | 
						|
#define iot_sg_cco_set_tx_power(req_id, hplc_power, rf_power) 0
 | 
						|
 | 
						|
#define  iot_sg_cco_get_intf_type_by_channel(channel) IOT_SG_CALLER_TYPE_CCTT
 | 
						|
 | 
						|
#define iot_sg_cco_get_cco_uart_bps() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_get_channel_by_intf_type(intf_type) \
 | 
						|
                                        IOT_SG_CCO_LOCAL_PROTO_DATA_SOURCE_CCTT
 | 
						|
 | 
						|
#define iot_sg_cco_get_ver_build_info_pkt() (NULL)
 | 
						|
 | 
						|
#define iot_sg_cco_check_set_band_valid(band) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_cco_get_force_single_type_flag() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_clct_min_is_v28_v2() (0)
 | 
						|
 | 
						|
#define iot_sg_cco_set_force_link_type(link)
 | 
						|
 | 
						|
#define iot_sg_cco_get_force_link_type() 0
 | 
						|
 | 
						|
#define iot_sg_cco_set_connless_link_type(link_type)
 | 
						|
 | 
						|
#endif /* PLC_SUPPORT_CCO_ROLE && IOT_SMART_GRID_ENABLE */
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif  /* IOT_SG_CCO_DRV_H */
 |