2556 lines
102 KiB
C
Executable File
2556 lines
102 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_H
|
|
#define IOT_SG_CCO_H
|
|
|
|
/* os shim includes */
|
|
#include "os_types_api.h"
|
|
#include "os_timer_api.h"
|
|
|
|
/* api includes */
|
|
#include "iot_cli_sg_api.h"
|
|
|
|
/* utils includes */
|
|
#include "iot_meter_addr_hash_table_api.h"
|
|
|
|
/* sg app includes */
|
|
#include "iot_sg_cco_buf.h"
|
|
#include "iot_sg_cco_cmd.h"
|
|
#include "iot_sg_cfg.h"
|
|
|
|
/* sg app driver api includes */
|
|
#include "iot_sg_cco_drv_api.h"
|
|
#include "iot_sg_upgrade.h"
|
|
|
|
/* iot common header files */
|
|
#include "iot_config_api.h"
|
|
#include "iot_rtc_api.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* concentrator type definition */
|
|
#define SG_CONCENTRATOR_3762_2009 1 /* 376.2 2009 version */
|
|
#define SG_CONCENTRATOR_3762_2013 2 /* 1376.2 2013 version */
|
|
#define SG_CONCENTRATOR_NW_2016 3 /* Nan Wang 2016 version */
|
|
|
|
/* the station state used for sec node active register */
|
|
#define SEC_NODE_REG_STATE_INIT 0
|
|
#define SEC_NODE_REG_STATE_IN_QR 1
|
|
#define SEC_NODE_REG_STATE_LOCKING 2
|
|
#define SEC_NODE_REG_STATE_QR_NODE_PARAM 3
|
|
#define SEC_NODE_REG_STATE_QR_METER_PARAM 4 /* for xi'an protocol */
|
|
#define SEC_NODE_REG_STATE_DONE 5
|
|
|
|
/* max number of meter reading packet on power line */
|
|
#define IOT_SG_CONCURRENT_MR_LIMIT 10
|
|
|
|
/* invalid sn */
|
|
#define IOT_SG_INVALID_SN (0xFFFFFFFF)
|
|
|
|
/* internal message id */
|
|
#define IOT_SG_MSG_ID_READ_POWER_METER 3
|
|
#define IOT_SG_MSG_ID_ROUTER_CONTROL 4
|
|
#define IOT_SG_MSG_ID_ADD_WL_ENTRY 5
|
|
#define IOT_SG_MSG_ID_REMOVE_WL_ENTRY 6
|
|
#define IOT_SG_MSG_ID_BROADCAST_DATA 7
|
|
#define IOT_SG_MSG_ID_SET_EVT_RPT_FLAG 8
|
|
#define IOT_SG_MSG_ID_COMM_TEST 9
|
|
#define IOT_SG_MSG_ID_ADD_WLII_ENTRY 50
|
|
#define IOT_SG_MSG_ID_REMOVE_WLII_ENTRY 51
|
|
#define IOT_SG_MSG_ID_CORRECT_STA_TIME 52
|
|
#define IOT_SG_MSG_ID_EXT_TASK 53
|
|
#define IOT_SG_MSG_ID_CLEAR_ALL_WL_ENTRY 54
|
|
#define IOT_SG_MSG_ID_CLEAR_ALL_WLII_ENTRY 55
|
|
#define IOT_SG_MSG_ID_ADD_BL_ENTRY 56
|
|
#define IOT_SG_MSG_ID_REMOVE_BL_ENTRY 57
|
|
#define IOT_SG_MSG_ID_REMOVE_ALL_BL_ENTRY 58
|
|
#define IOT_SG_MSG_ID_MR_CMD_TX_DONE 59 /* mr cmd send done */
|
|
|
|
/* sg upgrade related message */
|
|
#define IOT_SG_MSG_ID_UPGRADE_START 11
|
|
#define IOT_SG_MSG_ID_UPGRADE_STOP 12
|
|
#define IOT_SG_MSG_ID_UPGRADE_SEND_BLOCK1 13
|
|
#define IOT_SG_MSG_ID_UPGRADE_BCAST_ALL 14
|
|
#define IOT_SG_MSG_ID_UPGRADE_RESEND 15
|
|
#define IOT_SG_MSG_ID_UPGRADE_LATE_STA 16
|
|
#define IOT_SG_MSG_ID_UPGRADE_QUERY_STA_1 17
|
|
#define IOT_SG_MSG_ID_UPGRADE_EXECUTE 18
|
|
#define IOT_SG_MSG_ID_UPGRADE_WIN_TIMEOUT 19 /* upgrade window timeout */
|
|
#define IOT_SG_MSG_ID_UPGRADE_SEND_STOP_CMD 20 /* send stop commands */
|
|
#define IOT_SG_MSG_ID_UPGRADE_QUERY_STA_2 21 /* query 2 state timeout */
|
|
#define IOT_SG_MSG_ID_UPGRADE_CLI_MSG 22 /* cli command */
|
|
#define IOT_SG_MSG_ID_UPGRADE_TX_DONE 23 /* upgrade bcast cmd send done*/
|
|
|
|
/* buf related message */
|
|
#define IOT_SG_MSG_ID_SEND_DL_BUF_DATA 30 /* send data in dl buffer */
|
|
#define IOT_SG_MSG_ID_SEND_UL_BUF_DATA 31 /* send data in ul buffer */
|
|
#define IOT_SG_MSG_ID_REFRESH_BUF_ENTRY 32 /* refresh buffer entry */
|
|
#define IOT_SG_MSG_ID_TSFM_DETECT_DONE 33 /* transformer detect done */
|
|
#define IOT_SG_MSG_ID_LOG_TO_FLASH 34 /* print log to flash */
|
|
|
|
/* max power meter count in a 3762 pkt */
|
|
#define IOT_SG_CCO_MAX_RPT_PM_CNT_BITMAP (35)
|
|
|
|
#define IOT_SG_CCO_MAX_RPT_PM_CNT_ADDR \
|
|
((0xFF - 1) / sizeof(gw_app_power_evt_pm_info_t))
|
|
|
|
/* task status */
|
|
#define IOT_SG_TASK_STATUS_PENDING 0
|
|
#define IOT_SG_TASK_STATUS_STARTING 1
|
|
|
|
/* if mr data back time is so late then improve the mr data priority,
|
|
* unit is 1s.
|
|
*/
|
|
#define IOT_SG_CCO_MR_DATA_RESERVE_TIME 5
|
|
|
|
/* if clct data back time is so late then improve the clct data priority,
|
|
* unit is 1s.
|
|
*/
|
|
#define IOT_SG_CCO_CLCT_DATA_RESERVE_TIME 5
|
|
|
|
/* transformer detect state */
|
|
#define IOT_SG_CCO_TSFM_DETECT_S_CCO_CHECK (0)
|
|
#define IOT_SG_CCO_TSFM_DETECT_S_STA_CHECK (1)
|
|
#define IOT_SG_CCO_TSFM_DETECT_S_PW_CHECK (2)
|
|
|
|
/* module id length, same as GW_APP_MODULE_ID_INFO_LEN */
|
|
#define IOT_SG_CCO_MOD_ID_LEN (11)
|
|
|
|
/* transform detect mode */
|
|
#define IOT_SG_CCO_TSFM_DETECT_MODE_CENTRALIZE (1 << 0)
|
|
#define IOT_SG_CCO_TSFM_DETECT_MODE_DISTRIBUTE (1 << 1)
|
|
#define IOT_SG_CCO_TSFM_DETECT_MODE_ALL \
|
|
(IOT_SG_CCO_TSFM_DETECT_MODE_CENTRALIZE | \
|
|
IOT_SG_CCO_TSFM_DETECT_MODE_DISTRIBUTE)
|
|
|
|
/* unsame vendor max count */
|
|
#define IOT_SG_CCO_UNSAME_VENDOR_MAX_COUNT (20)
|
|
|
|
/* power event pm bitmap size */
|
|
#define IOT_SG_CCO_POWER_EVENT_BM_SIZE (256)
|
|
|
|
/* bitmap size for receiving branch detect signal */
|
|
#define IOT_SG_CCO_BD_BM_SIZE (256)
|
|
|
|
#define IOT_SG_CCO_BD_RECV_UNSUPP (0)
|
|
#define IOT_SG_CCO_BD_RECV_SUPP (1)
|
|
#define IOT_SG_CCO_BD_RECV_UNKNOWN (2)
|
|
|
|
/* branch detect node special father index */
|
|
#define IOT_SG_CCO_BD_FATHER_CCO (0)
|
|
|
|
/* branch detect device state for bcsd or smt */
|
|
/* branch detect device defaule state */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_INIT (0)
|
|
/* smt report neighbor node info */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_NEI_NODE_RPT (1)
|
|
/* smt report neighbor node phase info */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_NEI_PHASE_RPT (2)
|
|
/* smt report meter info */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_METER_RPT (3)
|
|
/* smt clean history data complete */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_CLEAR (4)
|
|
/* smt or bcsd branch detect send start */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_SEND_START (5)
|
|
/* smt or bcsd query branch detect send complete */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_SEND_COMPLETE (6)
|
|
/* smt report branch detect info complete */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_RESULT (7)
|
|
/* smt set node info complete */
|
|
#define IOT_SG_CCO_BD_DEV_STATE_SET_DONE (8)
|
|
|
|
/* max retry count of cco send command to node when branch detect */
|
|
#define IOT_SG_CCO_BD_CMD_SEND_MAX (11)
|
|
|
|
/* reserved ul buf cnt for sec node query */
|
|
#define IOT_SG_CCO_RSVD_UL_BUF_CNT (10)
|
|
|
|
/* five seconds loop timeout, unit is 1s */
|
|
#define IOT_SG_CCO_LOOP1_TIMEOUT (5)
|
|
/* half hour loop timeout, unit is 1s */
|
|
#define IOT_SG_CCO_LOOP2_TIMEOUT (30 * 60)
|
|
|
|
/* power meter action definition */
|
|
#define IOT_SG_CCO_PM_ACTION_ADD (0)
|
|
#define IOT_SG_CCO_PM_ACTION_DEL (1)
|
|
|
|
/* send bcast interval that query sec node reg result pkt */
|
|
#define IOT_SG_CCO_SEND_BCAST_INTERVAL (6)
|
|
|
|
/* max number of branch detect packet sent to power line */
|
|
#define IOT_SG_CCO_INTERN_MAX_CON_CNT (5)
|
|
|
|
/* define max buffer size to return the meter info list */
|
|
#define SG_CCO_MAX_METER_INFO_SIZE (512)
|
|
|
|
#define IOT_SG_CCO_TEI_TO_STA_IDX(tei) ((uint16_t)((tei) - 1))
|
|
#define IOT_SG_CCO_STA_IDX_TO_TEI(idx) (idx + 1)
|
|
|
|
/* give smallest number, which is -128 */
|
|
#define IOT_SG_CCO_INVALID_SNR (-128)
|
|
|
|
/* function bitmap length */
|
|
#define IOT_SG_CCO_FLASH_BM_LEN (1)
|
|
|
|
/* repeat meter read times */
|
|
#define IOT_SG_CCO_RT_MR_RETRY_COUNT (3)
|
|
|
|
#define IOT_SG_CCO_GET_CNT_MODULE_ID (1)
|
|
#define IOT_SG_CCO_GET_CNT_CLCT_DATA_PARAM (2)
|
|
#define IOT_SG_CCO_GET_CNT_CHIP_ID (3)
|
|
#define IOT_SG_CCO_GET_CNT_LOCK_TIME (4)
|
|
#define IOT_SG_CCO_GET_CNT_MIN_CLCT (5)
|
|
#define IOT_SG_CCO_GET_CNT_SET_EVT_STATE (6)
|
|
#define IOT_SG_CCO_GET_CNT_CLCT_TSFM_FEATURE (7)
|
|
#define IOT_SG_CCO_GET_CNT_NODE_LIST (8)
|
|
#define IOT_SG_CCO_GET_CNT_LP_INFO (9)
|
|
#define IOT_SG_CCO_GET_CNT_LP_DEVICE (10)
|
|
#define IOT_SG_CCO_GET_CNT_LP_RSSI (11)
|
|
#define IOT_SG_CCO_GET_CNT_NODE_NET_INFO (12)
|
|
#define IOT_SG_CCO_GET_CNT_QR_SCORE_INFO (13)
|
|
#define IOT_SG_CCO_GET_CNT_X4 (14)
|
|
#define IOT_SG_CCO_GET_CNT_CLOCK_MANAGE (15)
|
|
#define IOT_SG_CCO_GET_CNT_NLI_CFG (16)
|
|
#define IOT_SG_CCO_GET_CNT_EDGE_SET (17)
|
|
|
|
/* jolt node bitmap count */
|
|
#define IOT_SG_CCO_JOLT_BITMAP_CNT (IOT_SG_MAX_METER_COUNT / \
|
|
8 + 1)
|
|
|
|
/* defines the diff data max length in white list */
|
|
#define IOT_SG_CCO_WL_DIFF_DATA_MAX_LEN (4)
|
|
|
|
/* update the white list to PIB intervals, uint is 1ms */
|
|
#define IOT_SG_CCO_WL_UPDATE_INTERVAL 3000
|
|
#define IOT_SG_CCO_WL_UPDATE_INTERVAL_LONG (32 * 1000)
|
|
|
|
/* set sta collect parameter packet bcast interval */
|
|
#define IOT_SG_CCO_SET_STA_CLCT_PARAM_BCAST_INTERVAL (7)
|
|
|
|
/* set sta collect parameter max count */
|
|
#define IOT_SG_CCO_STA_CLCT_PARAM_MAX_CNT (63)
|
|
|
|
/* release date len of sw/hw version */
|
|
#define IOT_SG_CCO_VERSION_DATE_LEN (3)
|
|
|
|
typedef void *iot_sg_cco_mac_map_h;
|
|
|
|
/* pack for the structures in the whole file */
|
|
#pragma pack(push) /* save the pack status */
|
|
#pragma pack(1) /* 1 byte align */
|
|
|
|
/* low power meter rssi data */
|
|
typedef struct _iot_sg_cco_lp_meter_rssi_info {
|
|
/* low power meter mac address, little-endian */
|
|
uint8_t pm_addr[IOT_MAC_ADDR_LEN];
|
|
/* low power meter mac address high byte */
|
|
uint8_t high_addr;
|
|
/* rssi data */
|
|
uint8_t rssi;
|
|
} iot_sg_cco_lp_meter_rssi_info_t;
|
|
|
|
/* meter info for search result data */
|
|
typedef struct _iot_sg_cco_search_pm_info {
|
|
/* meter mac address, little-endian */
|
|
uint8_t mac[IOT_MAC_ADDR_LEN];
|
|
/* pm protocol type */
|
|
uint8_t proto_type;
|
|
} iot_sg_cco_search_pm_info_t;
|
|
|
|
/* event report filter for shanxi */
|
|
typedef struct _iot_sg_cco_filter_evt_rpt {
|
|
/* event report data crc */
|
|
uint16_t crc;
|
|
/* last same event report time, unit is 1s */
|
|
uint32_t rpt_time;
|
|
} iot_sg_cco_filter_evt_rpt;
|
|
|
|
typedef struct _iot_sg_broadcast_data {
|
|
/* protocol type of broadcast data */
|
|
uint8_t data_type;
|
|
/* bcast type, see IOT_SG_CCO_BCAST_TYPE_XXX */
|
|
uint8_t bcast_type;
|
|
/* length type of broadcast data */
|
|
uint16_t data_len;
|
|
/* ntb for recv correct time message */
|
|
uint32_t ntb;
|
|
/* sta mac address */
|
|
uint8_t sta_mac[IOT_MAC_ADDR_LEN];
|
|
/* broadcast data */
|
|
uint8_t data[0];
|
|
} iot_sg_broadcast_data_t;
|
|
|
|
typedef struct _iot_sg_send_data_to_meter {
|
|
/* station address */
|
|
uint8_t sta_mac[IOT_MAC_ADDR_LEN];
|
|
/* mac address of power meter */
|
|
uint8_t meter_mac[IOT_MAC_ADDR_LEN];
|
|
/* 1 - meter reading timeout need to double, 0 - not */
|
|
uint8_t timeout_double:6,
|
|
/* if need reply */
|
|
need_reply :1,
|
|
/* forward data flag, 0 - don't need, 1 - need.*/
|
|
forward :1;
|
|
/* protocol type of meter */
|
|
uint8_t data_type;
|
|
/* length of meter data */
|
|
uint16_t data_len;
|
|
/* ntb when receive this command */
|
|
uint32_t rev_ntb;
|
|
/* the data that transmit to meter */
|
|
uint8_t data[0];
|
|
} iot_sg_send_data_to_meter_t;
|
|
|
|
typedef struct _iot_sg_send_data_to_meter_wrapper {
|
|
/* GW use 2 byte for SN. Value larger than 0xFFFF is invalid. */
|
|
uint32_t sn;
|
|
/* retry count */
|
|
uint32_t retry_cnt;
|
|
/* meter reading data */
|
|
iot_sg_send_data_to_meter_t data_to_meter;
|
|
}iot_sg_send_data_to_meter_wrapper_t;
|
|
|
|
typedef struct _iot_sg_wl_mac_addr_op_info {
|
|
/* count of meter mac */
|
|
uint8_t count;
|
|
/* mac addr list of node for wl operation */
|
|
uint8_t mac_addr[0][IOT_MAC_ADDR_LEN];
|
|
} iot_sg_wl_mac_addr_op_info_t;
|
|
|
|
/* private protocol node info data */
|
|
typedef struct _iot_sg_cco_tsfm_node_info_pw {
|
|
/* node address, little-endian */
|
|
uint8_t addr[IOT_MAC_ADDR_LEN];
|
|
/* reserve for future */
|
|
uint8_t reserve1;
|
|
/* node protocol type, see PROTO_TYPE_XXX */
|
|
uint8_t proto_type : 4,
|
|
/* node device type */
|
|
dev_type : 4;
|
|
/* reserve for future */
|
|
uint8_t reserve2;
|
|
} iot_sg_cco_tsfm_node_info_pw_t;
|
|
|
|
typedef struct _iot_sg_cco_clct_data_read {
|
|
/* 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;
|
|
/* 0 - single phase meter, 1 - three phase meter */
|
|
uint8_t pm_type;
|
|
/* collect read time */
|
|
iot_sg_cco_time_t tm;
|
|
} iot_sg_cco_clct_data_read_t;
|
|
|
|
#pragma pack(pop) /* restore the pack status */
|
|
|
|
/* smart grid cco role persistent storage structure */
|
|
typedef struct _iot_sg_cco_ps {
|
|
/* concentrator type connected to local device */
|
|
uint8_t cctt_version;
|
|
/* concentrator manufacture code connected to local device*/
|
|
uint8_t cctt_mft_code;
|
|
/* route meter */
|
|
uint8_t rt_mr_enabled;
|
|
} iot_sg_cco_ps_t;
|
|
|
|
typedef struct _iot_sg_cco_upgrade_file {
|
|
/* file identity */
|
|
uint8_t id;
|
|
/* file size */
|
|
uint32_t size;
|
|
/* file version */
|
|
uint32_t version;
|
|
/* crc16 from cctt, 0: invalid , others valid */
|
|
uint16_t crc16;
|
|
uint16_t crc16_x25;
|
|
uint16_t crc16_ccitt;
|
|
uint16_t crc16_false;
|
|
uint16_t crc16_xmodem;
|
|
/* crc32 calculated from received data when sending data to STA,
|
|
* if the cco upgrade it used to calculate the crc value of the file.
|
|
*/
|
|
uint32_t crc32;
|
|
/* file crc */
|
|
uint32_t file_crc;
|
|
/* file type - see IOT_FILE_TYPE_XXX */
|
|
uint32_t file_type;
|
|
/* bytes length of the cco received upgrade data that from cctt */
|
|
uint32_t recv_byte_idx;
|
|
/* bytes written to flash */
|
|
uint32_t write_byte_idx;
|
|
/* block count of writing flash */
|
|
uint32_t block_index;
|
|
/* cache the whole package file for CCo/STA upgrading */
|
|
uint8_t *file_data;
|
|
/* cache CCo upgrade file */
|
|
uint8_t *cache_data;
|
|
/* index bitmap for CCO receive block from cctt. */
|
|
uint8_t block_bitmap[IOT_SG_UPGRADE_BM_SIZE];
|
|
}iot_sg_cco_upgrade_file_t;
|
|
|
|
typedef struct _iot_sg_upgrade {
|
|
/* count of STA need to be started for upgrading. */
|
|
uint32_t sta2start_cnt;
|
|
/* local upgrading block size */
|
|
uint32_t block_size;
|
|
/* block size of PLC upgrading packet*/
|
|
uint16_t plc_block_size;
|
|
/* total block count to send on plc */
|
|
uint16_t plc_block_cnt;
|
|
/* file offset used when receive firmware data from cctt */
|
|
uint32_t file_data_offset;
|
|
/* upgrade id */
|
|
uint32_t upgrade_id;
|
|
/* upgrade state */
|
|
uint32_t state;
|
|
/* count of STA that received upgrade file */
|
|
uint32_t recv_file_sta_cnt;
|
|
|
|
/* query retry cnt */
|
|
uint32_t query_retry_cnt;
|
|
/* total cnt of start times in this upgrading round. */
|
|
uint32_t start_cnt;
|
|
/* count of loop that no STA got start in a starting loop. */
|
|
uint32_t start_fail_cnt;
|
|
/* start step. Start each sta one by one rapidly, then make sure each sta
|
|
* was started to receive upgrading file.
|
|
*/
|
|
uint8_t start_step;
|
|
/* query step. Query each sta one by one rapidly, then make sure each sta
|
|
* reply its info by query ack.
|
|
*/
|
|
uint8_t query_step;
|
|
/* send step. Send each data block one by one rapidly,
|
|
* then retry missed data block.
|
|
*/
|
|
uint8_t send_step;
|
|
/* execute step. Send execute command by unicast to all STA rapidly,
|
|
* then retry missed STA.
|
|
*/
|
|
uint8_t exe_step;
|
|
/* send retry count */
|
|
uint8_t send_retry_cnt;
|
|
/* max retry count of the whole upgrading process. */
|
|
uint8_t total_retry_cnt;
|
|
/* bitmap for STA receive state within a window */
|
|
uint8_t bitmap[IOT_SG_CCO_UPGRADE_BM_SIZE];
|
|
/* full bitmap for STA receive state. */
|
|
uint8_t full_bitmap[IOT_SG_CCO_UPGRADE_BM_SIZE_MAX];
|
|
/* total block count of the upgrading file */
|
|
uint16_t block_cnt;
|
|
/* index of data block to send to STA */
|
|
uint16_t send_index;
|
|
/* index of the STA being upgrading */
|
|
uint16_t sta_index;
|
|
/* mac address of the STA being upgrading */
|
|
uint8_t sta_mac_addr[IOT_MAC_ADDR_LEN];
|
|
/* mac address of the upgrade destination devices */
|
|
uint8_t dest_mac_addr[IOT_MAC_ADDR_LEN];
|
|
/* upgrade file info */
|
|
iot_sg_cco_upgrade_file_t file_info;
|
|
/* count of STAs joined the network */
|
|
uint16_t sta_cnt;
|
|
/* count of STAS upgrade failed */
|
|
uint16_t sta_fail_cnt;
|
|
/* stop upgrading cmd send count */
|
|
uint16_t stop_send_cnt;
|
|
/* count of round to send execute command */
|
|
uint16_t exe_round;
|
|
/* count for execute command to send */
|
|
uint16_t exe_bcast_cnt;
|
|
/* if it's known upgrading file. */
|
|
uint8_t is_known_file;
|
|
/* cli upgrading available */
|
|
uint8_t cli_upgrade_available;
|
|
/* vendor id from upgrade file hdr */
|
|
uint16_t vendor_id;
|
|
/* window time of upgrade - unit: ms */
|
|
uint32_t window_tm;
|
|
/* upgrade type */
|
|
uint8_t upgrade_type;
|
|
/* CCo shall query STA's version info. */
|
|
uint8_t shall_qr_version;
|
|
/* index of STA entry to query vendor info. */
|
|
uint16_t qr_index;
|
|
/* upgrade exe wait count */
|
|
uint8_t exe_wait_cnt;
|
|
/* bcast wait flag */
|
|
uint8_t bcast_wait;
|
|
/* cco/sta support max upgrade file size */
|
|
uint32_t upgrade_file_limit;
|
|
} iot_sg_cco_upgrade_t;
|
|
|
|
/* router meter reading controller */
|
|
typedef struct _iot_sg_cco_rt_mr_ctrl {
|
|
/* the sn of cco report meter reading result */
|
|
uint8_t rpt_sn;
|
|
/* see IOT_SG_CALLER_TYPE_XXX. */
|
|
uint8_t mr_caller;
|
|
/* the count of cctt or cli no response, when cco request meter reading */
|
|
uint8_t no_rsp_cnt;
|
|
/* the current status of route active meter reading
|
|
* see IOT_SG_CCO_RT_AMR_STATE_XXX.
|
|
*/
|
|
uint8_t rt_amr_status;
|
|
/* flag to mark if fujian protocol advance meter reading */
|
|
uint8_t is_special_amr :1,
|
|
/* reserved */
|
|
rsvd :7;
|
|
/* the index of current meter reading power meter */
|
|
uint16_t read_pm_index;
|
|
/* repeat request meter counter */
|
|
uint16_t meter_read_retry_count;
|
|
/* meter reading end index, IOT_SG_WL_ENTRY_END_INDEX or
|
|
* IOT_SG_CCO_WLII_ENTRY_START_INDEX
|
|
*/
|
|
uint16_t end_idx;
|
|
/* backup sn for router meter reading ack */
|
|
uint16_t backup_ack_sn;
|
|
/* timer used by driver request */
|
|
timer_id_t mr_timer;
|
|
} iot_sg_cco_rt_mr_ctrl_t;
|
|
|
|
/* predict meter reading controller */
|
|
typedef struct _iot_sg_cco_predict_mr_ctrl {
|
|
/* the current status of predict meter reading
|
|
* see IOT_SG_CCO_PREDICT_MR_STATE_XXX.
|
|
*/
|
|
uint8_t pre_mr_status;
|
|
/* predict meter reading concurrence request count */
|
|
uint8_t con_req_cnt;
|
|
/* predict meter reading not response time, unit 1s. */
|
|
uint8_t no_rsp_time;
|
|
/* the index of current meter reading power meter */
|
|
uint16_t read_pm_index;
|
|
} iot_sg_cco_predict_mr_ctrl_t;
|
|
|
|
/* transformer detect data */
|
|
typedef struct _iot_sg_cco_tsfm_feature {
|
|
/* broadcast transformer feature count, unit is 1s */
|
|
uint8_t bcast_tsfm_feature_cnt;
|
|
/* broadcast transformer feature state */
|
|
uint8_t bcast_tsfm_feature_state;
|
|
/* collect count for sta transformer feature */
|
|
uint8_t collect_cnt;
|
|
/* collect sequence for sta transformer feature */
|
|
uint8_t collect_seq;
|
|
/* start collect ntb for sta transformer feature */
|
|
uint32_t collect_start_ntb;
|
|
/* node index of collecting transformer feature */
|
|
uint16_t collect_tsfm_feature_node_idx;
|
|
/* transform detect mode, see IOT_SG_CCO_TSFM_DETECT_MODE_xxx */
|
|
uint8_t tsfm_detect_mode :2,
|
|
/* reserved */
|
|
rsvd :6;
|
|
/* broadcast transformer feature round */
|
|
uint8_t bcast_tsfm_feature_round;
|
|
} iot_sg_cco_tsfm_feature_t;
|
|
|
|
/* for branch detect */
|
|
typedef struct _iot_sg_cco_branch_detect {
|
|
/* branch detect enabled */
|
|
uint8_t enabled;
|
|
/* branch detect state, see IOT_SG_CCO_BRANCH_DETECT_XXX */
|
|
uint8_t state;
|
|
/* timeout timer count */
|
|
uint32_t timeout_n;
|
|
/* father node bitmap for branch detect */
|
|
uint8_t father_bm[2][IOT_SG_CCO_BD_BM_SIZE];
|
|
/* branch detect send interval time, unit is 1s */
|
|
uint8_t send_interval;
|
|
/* divide all node into several groups according to the node serial number.
|
|
* The number of each group of node does not exceed the number of available
|
|
* codes. This variable marks the currently recognized group.
|
|
*/
|
|
uint16_t group_number : 15,
|
|
/* flag to mark whether a node in the current group has launched */
|
|
group_launched : 1;
|
|
/* branch detect send index */
|
|
uint16_t send_index;
|
|
/* send phase */
|
|
uint8_t send_phase;
|
|
/* branch detect execute round */
|
|
uint8_t execute_round;
|
|
/* branch detect launch sequence number */
|
|
uint8_t br_launch_sn;
|
|
/* branch detect mod, see IOT_SG_CCO_BD_MOD_XXX */
|
|
uint8_t bd_mod : 4,
|
|
/* branch detect type, see IOT_SG_CCO_BD_TYPE_XXX */
|
|
bd_type : 4;
|
|
/* branch identification disturbance control pulse ahead, unit is 1us */
|
|
uint16_t ahead;
|
|
/* branch identification disturbance control pulse duration, unit is 1us */
|
|
uint16_t dur;
|
|
/* branch detect start time stamp of each round, unit is 1s */
|
|
uint32_t round_start_ts;
|
|
} iot_sg_cco_branch_detect_t;
|
|
|
|
typedef struct _iot_sg_cco_pw_tsfm {
|
|
/* pw tsfm enabled */
|
|
uint8_t enabled;
|
|
/* branch detect state, see IOT_SG_CCO_PW_TSFM_XXX */
|
|
uint8_t state;
|
|
/* timeout timer count */
|
|
uint8_t timeout_n;
|
|
/* pw tsfm query interval time, unit is 1s */
|
|
uint8_t query_interval;
|
|
/* father node bitmap for pw tsfm */
|
|
uint8_t father_bm[2][IOT_SG_CCO_BD_BM_SIZE];
|
|
/* pw tsfm send index */
|
|
uint16_t send_index;
|
|
/* divide all node into several groups according to the node serial number.
|
|
* The number of each group of node does not exceed the number of available
|
|
* codes. This variable marks the currently recognized group.
|
|
*/
|
|
uint16_t group_number : 15,
|
|
/* flag to mark whether a node in the current group has launched */
|
|
group_launched : 1;
|
|
/* pw tsfm execute round */
|
|
uint8_t execute_round;
|
|
/* flag to mark if there are any node that do not know the device type */
|
|
uint8_t unknown_bd_recv_exist;
|
|
/* pw tsfm disturbance control pulse ahead, unit is 1us */
|
|
uint16_t ahead;
|
|
/* pw tsfm disturbance control pulse duration, unit is 1us */
|
|
uint16_t dur;
|
|
} iot_sg_cco_pw_tsfm_t;
|
|
|
|
/* set score parameter */
|
|
typedef struct _iot_sg_cco_set_score_parameter {
|
|
/* pm score state */
|
|
uint8_t pm_score_state;
|
|
/* pm score info query index */
|
|
uint16_t pm_score_query_idx;
|
|
/* power meter score timeout interval, unit is 1s */
|
|
uint16_t pm_score_timeout_interval;
|
|
} iot_sg_cco_set_score_parameter_t;
|
|
|
|
typedef struct _iot_sg_cco_clct_task_parm {
|
|
/* flag to mark if received all sta init collection task */
|
|
uint8_t all_sta_init_clct_task :1,
|
|
/* flag to mark if start collect task bcast */
|
|
bcast_enable :1,
|
|
/* reserved */
|
|
reserved :6;
|
|
/* collect task bcast send index */
|
|
uint16_t bcast_idx;
|
|
/* collect task bcast sn */
|
|
uint16_t bcast_sn;
|
|
/* station init collection task index */
|
|
uint16_t sta_init_clct_task_idx;
|
|
} iot_sg_cco_clct_task_param_t;
|
|
|
|
typedef struct _iot_sg_cco_lock_time_param {
|
|
/* flag to mark if received all sta set lock time done */
|
|
uint8_t all_sta_set_done :1,
|
|
/* enable set lock time when receive cctt command */
|
|
enable_flag :1,
|
|
/* reserved */
|
|
reserved :6;
|
|
/* station lock time info query index */
|
|
uint16_t sta_lock_time_query_idx;
|
|
/* net lock time, uint is 1min. 0 means no lock. */
|
|
uint16_t net_lock_time;
|
|
/* the lock time of abnormal leave net, uint is 1min. 0 means no lock. */
|
|
uint16_t abn_lock_time;
|
|
} iot_sg_cco_lock_time_param_t;
|
|
|
|
typedef struct _iot_sg_cco_lp_meter_param {
|
|
/* for beijing low power meter */
|
|
uint8_t nw_fmt_done :1,
|
|
/* low power meter count changed */
|
|
cnt_chg :1,
|
|
/* flag to mark if new collector ii join */
|
|
new_clct_ii :1,
|
|
/* flag to mark if low power meter read enable */
|
|
read_enable :1,
|
|
/* reserved */
|
|
rsvd :4;
|
|
/* low power meter state */
|
|
uint8_t state :6,
|
|
/* low power meter search */
|
|
search :1,
|
|
/* some node parameter config failure */
|
|
cfg_fail_flag :1;
|
|
/* low power meter config failure count continuously */
|
|
uint8_t cfg_fail_cnt;
|
|
/* low power meter count */
|
|
uint16_t cnt;
|
|
/* low power meter config index */
|
|
uint16_t cfg_idx;
|
|
/* low power meter info query index */
|
|
uint16_t query_idx;
|
|
/* low power meter rssi info query index */
|
|
uint16_t rssi_query_idx;
|
|
/* low power dev type info query index */
|
|
uint16_t dev_type_query_idx;
|
|
/* low power meter timeout interval, unit is 1s */
|
|
uint32_t timeout_interval;
|
|
/* low power meter bcast query interval, unit is 1s */
|
|
uint16_t bcast_qr_interval;
|
|
/* single low power meter timeout interval, unit is 1s */
|
|
uint32_t single_lp_meter_timeout_interval;
|
|
/* low power meter search timer */
|
|
timer_id_t search_timer;
|
|
} iot_sg_cco_lp_meter_param_t;
|
|
|
|
typedef struct _iot_sg_cco_active_qr_pm {
|
|
/* enable query pm after sta join */
|
|
uint8_t enable_qr_pm :1,
|
|
/* 0 - concentrate report, 1 - sporadic report */
|
|
rpt_mode :1,
|
|
/* 22 clock active report state, see IOT_SG_CCO_ACTIVE_RPT_STATE_XXX */
|
|
active_rpt_state :2,
|
|
/* reserved */
|
|
reserved :4;
|
|
/* the index of query */
|
|
uint16_t qr_idx;
|
|
/* the count of nodes that need to be report */
|
|
uint16_t rpt_cnt;
|
|
/* report timeout, unit is 1s */
|
|
uint16_t rpt_timeout;
|
|
} iot_sg_cco_active_qr_pm_t;
|
|
|
|
typedef struct _iot_sg_cco_nw_lock_param_t {
|
|
/* bcast network lock enable */
|
|
uint8_t bcast_enable :1,
|
|
/* bcast network lock count */
|
|
bcast_cnt :4,
|
|
/* reserved */
|
|
rsvd :3;
|
|
/* network lock bcast cmd type, see IOT_SG_CCO_BCAST_NW_LOCK_CMD_XXX */
|
|
uint8_t cmd_type;
|
|
/* network lock bcast time, unit is 1s */
|
|
uint8_t bcast_time;
|
|
/* bcast task sn */
|
|
uint16_t bcast_sn;
|
|
} iot_sg_cco_nw_lock_param_t;
|
|
|
|
typedef struct _iot_sg_cco_set_tsfm_addr_param {
|
|
/* bcast tsfm addr enable */
|
|
uint8_t bcast_enable :1,
|
|
/* bcast tsfm addr count */
|
|
bcast_cnt :4,
|
|
/* reserved */
|
|
rsvd :3;
|
|
/* tsfm addr bcast cmd type, see IOT_SG_CCO_BCAST_TSFM_ADDR_CMD_XXX */
|
|
uint8_t cmd_type;
|
|
/* tsfm addr bcast time, unit is 1s */
|
|
uint8_t bcast_time;
|
|
/* bcast task sn */
|
|
uint16_t bcast_sn;
|
|
/* tsfm addr, big endian */
|
|
uint8_t tsfm_addr[IOT_MAC_ADDR_LEN];
|
|
} iot_sg_cco_set_tsfm_addr_param_t;
|
|
|
|
/* define hw tsfm send control structure */
|
|
typedef struct _iot_sg_cco_hw_tsfm_ctrl {
|
|
/* hw start transformer detect send commad mode, see
|
|
* IOT_SG_CCO_HW_TSFM_START_MODE_XXX.
|
|
*/
|
|
uint16_t mode : 2,
|
|
/* send state IOT_SG_CCO_HW_TSFM_SEND_S_XXX */
|
|
state : 2,
|
|
/* retry cnt for each round send */
|
|
retry_cnt : 3,
|
|
/* flag to mark if a new round of HW tsfm signal needs to be sent */
|
|
send_req : 1,
|
|
/* reason for send done, see IOT_SG_CCO_HW_TSFM_SEND_DONE_XXX */
|
|
send_done_reason : 2,
|
|
/* flag to mark if a new round of HW tsfm signal allow send */
|
|
send_en : 1,
|
|
/* plc rising edge zc send tsfm flag, it's phase negative zc flag. */
|
|
rising_send : 1,
|
|
/* reserved for further use */
|
|
rsvd : 4;
|
|
/* send rounds counter */
|
|
uint8_t round_cnt;
|
|
/* hard ware tsfm seq */
|
|
uint8_t hw_tsfm_seq;
|
|
/* broadcast transformer feature count, unit is 1s */
|
|
uint8_t hw_tsfm_cnt;
|
|
/* broadcast transformer feature round */
|
|
uint8_t hw_tsfm_round;
|
|
} iot_sg_cco_hw_tsfm_ctrl_t;
|
|
|
|
/* define unicast send event report control structure */
|
|
typedef struct _iot_sg_cco_node_evt_rpt_ctrl_param {
|
|
/* unicast send event report control state, 0 - disable, 1 - enable */
|
|
uint8_t enable :1,
|
|
/* retry cnt */
|
|
retry_cnt :3,
|
|
rsvd :4;
|
|
/* total node count */
|
|
uint8_t total_cnt;
|
|
/* current node count */
|
|
uint16_t cur_cnt;
|
|
/* event report control data */
|
|
iot_pkt_t *pkt;
|
|
} iot_sg_cco_node_evt_rpt_ctrl_param_t;
|
|
|
|
/* define cco acm structure */
|
|
typedef struct _iot_sg_cco_acm {
|
|
/* acm command uart handle */
|
|
iot_uart_h acm_cmd_uart_h;
|
|
/* cctt downlink sn */
|
|
uint8_t acm_cmd_sn;
|
|
/* used for report data to cctt */
|
|
uint8_t acm_cmd_local_sn;
|
|
} iot_sg_cco_acm_t;
|
|
|
|
typedef struct _iot_sg_cco_bcast_param {
|
|
/* flag to mark if bcast task enable */
|
|
uint8_t enable :1,
|
|
/* bcast interval time, unit is 1s */
|
|
bcast_interval :7;
|
|
/* bcast time, unit is 1s */
|
|
uint16_t time;
|
|
/* consume time from start bcast, unit is 1s */
|
|
uint16_t consume_time;
|
|
} iot_sg_cco_bcast_param_t;
|
|
|
|
typedef struct _iot_sg_cco_average_read_time_param {
|
|
/* read meter count in 10 min */
|
|
uint16_t read_cnt;
|
|
/* read meter count in 10 min, include timeout */
|
|
uint16_t read_timeout_cnt;
|
|
/* total read time in 10 min, unit is 1ms */
|
|
uint64_t total_read;
|
|
/* total read time in 10 min, include timeout, unit is 1ms */
|
|
uint64_t total_read_timeout;
|
|
} iot_sg_cco_average_read_time_param_t;
|
|
|
|
typedef struct _iot_sg_cco_clock_manager_param {
|
|
/* flag to mark if clock manager enable */
|
|
uint8_t enable :1,
|
|
/* clock manager state, IOT_SG_CCO_CLOCK_MANAGER_STATE_XXX */
|
|
state :3,
|
|
/* reserved */
|
|
reserved :4;
|
|
/* station chip id info query index */
|
|
uint16_t manage_idx;
|
|
} iot_sg_cco_clock_manager_param_t;
|
|
|
|
typedef struct _iot_sg_cco_nli_abnormal_cfg {
|
|
/* configure state, see IOT_SG_CCO_NLI_CFG_STATE_XXX */
|
|
uint8_t status :6,
|
|
/* flag to mark if enable abnormal report for neutralwire and livewire */
|
|
enable :1,
|
|
/* state change flag */
|
|
change_flag :1;
|
|
/* bcast configuretion cnt */
|
|
uint8_t bcast_cnt;
|
|
/* bcast interval time */
|
|
uint8_t bcast_interval;
|
|
/* configuretion index */
|
|
uint16_t cfg_index;
|
|
} iot_sg_cco_nli_abnormal_cfg_t;
|
|
|
|
typedef struct _iot_sg_cco_flash_g {
|
|
/* flash data */
|
|
uint8_t *flash_data;
|
|
/* flash mode */
|
|
uint8_t flash_mode;
|
|
/* function bitmap */
|
|
uint8_t bitmap[IOT_SG_CCO_FLASH_BM_LEN];
|
|
/* delay commit count */
|
|
uint8_t commit_count;
|
|
} iot_sg_cco_flash_g_t;
|
|
|
|
typedef struct _iot_sg_cco_min_clct_task_param {
|
|
/* sta collect parameter configurate task priority v2.8 */
|
|
uint8_t conf_prio[IOT_SG_STA_CLCT_MAX_TASK_CNT];
|
|
/* collect configurate task node complete index */
|
|
uint8_t node_conf_complete_index;
|
|
/* sta collect parameter task priority v2.8 */
|
|
uint8_t task_prio[IOT_SG_STA_CLCT_MAX_TASK_CNT];
|
|
/* collect data task index */
|
|
uint16_t task_index[IOT_SG_STA_CLCT_MAX_TASK_CNT];
|
|
/* min clct task dl buf count */
|
|
uint8_t dl_buf_cnt;
|
|
/* current period task complete bitmap */
|
|
uint8_t cur_per_task_bm[IOT_SG_STA_CLCT_MAX_TASK_CNT];
|
|
/* flag to mark if handle current minutes */
|
|
uint8_t min_handle;
|
|
/* current task id time */
|
|
iot_time_tm_t cur_task_tm;
|
|
} iot_sg_cco_min_clct_task_param_t;
|
|
|
|
/* smart grid cco role global descriptor */
|
|
typedef struct _iot_sg_cco_global {
|
|
/* cco pib _handle */
|
|
iot_sg_cco_app_pib_t pib;
|
|
/* common long buffer, used to cache some process data, it
|
|
* size see IOT_SG_CCO_MSG_LONG_BUF_SIZE.
|
|
*/
|
|
uint8_t *long_buff;
|
|
/* event report filter, its size see
|
|
* IOT_SG_MAX_STA_COUNT * sizeof(iot_sg_cco_filter_evt_rpt).
|
|
*/
|
|
iot_sg_cco_filter_evt_rpt *evt_filter_buff;
|
|
/* buffer refreshing timer */
|
|
timer_id_t buf_refresh_timer;
|
|
/* down link buffer data sending timer */
|
|
timer_id_t dl_send_timer;
|
|
/* up link buffer data sending timer */
|
|
timer_id_t ul_send_timer;
|
|
/* number of concurrent meter reading command on power line */
|
|
uint8_t mr_pkt_on_line;
|
|
/* number of concurrent meter reading command on power line for bcast */
|
|
uint8_t con_mr_pkt_on_line_for_bcast;
|
|
/* when dl buf_pool is full, this flag is set.
|
|
* dl f1h01 is regarded as an ack of ul f1h01.
|
|
* when dl buf_pool is empty and didn't receive any f1H01 from cctt within
|
|
* certain duration, this flag is cleared.
|
|
*/
|
|
uint8_t f1h01_as_rsp_flag;
|
|
/* flag indicate if network formation is done */
|
|
uint8_t nw_fmt_done : 1,
|
|
/* flag to mark if enable whist list in tsfm */
|
|
enable_wl_in_tsfm : 1,
|
|
/* wait for rtc synchronization after sta join */
|
|
rtc_sync_is_wait : 1,
|
|
/* enable query dev whether support minute collection */
|
|
enable_minute_clct : 1,
|
|
/* flag to mark if white list nodes joined completed */
|
|
wl_join_done : 1,
|
|
/* flag to mark if power event force report */
|
|
power_evt_force : 1,
|
|
/* flag to mark if all sta opposite phase event report done */
|
|
opposite_rpt_done : 1,
|
|
/* flag to mark if enable query node tsfm feature */
|
|
query_tsfm_feature : 1;
|
|
/* node joined count in whitelist */
|
|
uint16_t wl_join_cnt;
|
|
/* hw tsfm send control structure */
|
|
iot_sg_cco_hw_tsfm_ctrl_t hw_tsfm_ctrl;
|
|
|
|
/* timer for clearing f1h01_as_rsp_flag if dl buf_pool is empty
|
|
* and didn't receive any f1h01 from cctt. */
|
|
timer_id_t clear_flag_timer;
|
|
/* common timer for cco
|
|
* - to query secondary node info
|
|
* - to check event report ack state
|
|
* - to check start sec node reg ack state
|
|
*/
|
|
timer_id_t cco_timer;
|
|
/* timer to check if network formation is done */
|
|
timer_id_t nw_fmt_timer;
|
|
/* timer to check node join after network formation is done */
|
|
timer_id_t node_join_timer;
|
|
/* timer to update data to pib */
|
|
timer_id_t update_pib_timer;
|
|
/* timer used by cco for upgrading window */
|
|
timer_id_t upgrade_win_timer;
|
|
/* timer used by cco for upgrading */
|
|
timer_id_t upgrade_timer;
|
|
/* timer used by cco for canceling upgrading */
|
|
timer_id_t cancel_timer;
|
|
/* timer for update whitelist to PIB */
|
|
timer_id_t wl_timer;
|
|
/* timer for remove delay delete whitelist */
|
|
timer_id_t rm_delay_del_wl_timer;
|
|
/* timer used by driver request */
|
|
timer_id_t driver_timer1;
|
|
/* timer used by driver request */
|
|
timer_id_t driver_timer2;
|
|
/* timer used by driver request */
|
|
timer_id_t driver_timer3;
|
|
/* timer used by driver request */
|
|
timer_id_t driver_timer4;
|
|
/* timer used by driver request */
|
|
timer_id_t driver_timer5;
|
|
/* timer used by driver request */
|
|
timer_id_t driver_timer6;
|
|
/* sec node register result count in the ul buffer */
|
|
uint16_t sec_node_reg_ul_cnt;
|
|
/* used for cutting short sec node register */
|
|
uint16_t sec_node_reg_timeout_cnt;
|
|
/* left time for secondary node registration, uint is 1s */
|
|
uint32_t sec_node_reg_time_left;
|
|
/* total time for secondary node registration, uint is 1s */
|
|
uint32_t sec_node_reg_time;
|
|
/* flag to mark if L/N reversed in Single-phase power meter or phase
|
|
* sequence reversed in Three-phase power meter.
|
|
*/
|
|
uint8_t opposite_phase : 1,
|
|
/* physical phase of the device, bit0-2 means phaseA/B/C, set "1" to
|
|
* indicate which phase the device belongs to.
|
|
*/
|
|
phy_phase : 3,
|
|
/* phase type of three phase meter, see IOT_SG_CCO_PHASE_SEQ_XXX */
|
|
phase_type : 3,
|
|
/* flag to mark if the 3phase device have the zc repeat phase */
|
|
zc_repeat_3p : 1;
|
|
/* start command of secondary node registration retry enabled */
|
|
uint8_t sec_node_reg_s_retry_en :1,
|
|
/* retry for event reporting control command is onging */
|
|
evt_rpt_ctrl_retry_on :2,
|
|
/* whether ul buf busy, 0 - not busy, 1 - busy */
|
|
ul_buf_send_busy :1,
|
|
/* transformer node report in process.
|
|
* 0 - not start reporting, 1 - node report in progress.
|
|
*/
|
|
tsfm_node_rpt_in_progress :1,
|
|
/* flag to mark if don't deal with cctt data
|
|
* 0 - deal with cctt data, 1 - don't deal with cctt data.
|
|
*/
|
|
cctt_data_disable :1,
|
|
/* flag to mark if tsfm done by timeout */
|
|
tsfm_detect_done_by_timeout :1,
|
|
/* flag to mark if received all sta module id info for gw,
|
|
* flag to mark if received all sta property info for nw.
|
|
*/
|
|
all_sta_mod_id_recved :1;
|
|
/* start command of secondary node registration retry interval counter */
|
|
uint8_t sec_node_reg_s_retry_tcnt;
|
|
/* start command of secondary node registration retry counter */
|
|
uint8_t sec_node_reg_s_retry_n;
|
|
/* last query sec node register index */
|
|
uint32_t last_qr_sec_node_reg_index;
|
|
/* round of query sec node register */
|
|
uint32_t qr_sec_node_reg_round;
|
|
/* event reporting control command retry interval counter */
|
|
uint8_t evt_rpt_ctrl_retry_tcnt;
|
|
/* event reporting control command retry counter */
|
|
uint8_t evt_rpt_ctrl_retry_n;
|
|
/* 1 - cmd from cctt was received. 0 - no cctt cmd received yet. */
|
|
uint8_t cctt_cmd_recved;
|
|
/* force restart tick count. Force CCo to restart network
|
|
* if this value reach certain value.
|
|
*/
|
|
uint8_t force_restart_tick_cnt;
|
|
/* mapping from metro mac to sta mac, with pointer array */
|
|
iot_sg_cco_mac_map_h mac_mapping;
|
|
/* secondary node registration state.
|
|
* non-zero means sec node reg started. */
|
|
uint8_t sec_node_reg_state;
|
|
/* router state: paused / resumed */
|
|
uint8_t rt_state;
|
|
/* flag indicate if white list is enabled on mac layer */
|
|
uint8_t whitelist_enabled;
|
|
/* local nid */
|
|
uint32_t nid;
|
|
/* sg upgrade info */
|
|
iot_sg_cco_upgrade_t upgrade_info;
|
|
/* down link buffer */
|
|
iot_buf_pool_t dl_buf;
|
|
/* down link buffer */
|
|
iot_buf_pool_t ul_buf;
|
|
/* concurrent count - reading pkt on power line */
|
|
uint8_t con_count;
|
|
/* meter reading command age limit for 13H_F1 */
|
|
uint16_t mr_max_age_for_afn13;
|
|
/* meter reading command age limit for 14H_F1 */
|
|
uint16_t mr_max_age_for_afn14;
|
|
/* meter reading command age limit for F1H_F1 */
|
|
uint16_t mr_max_age_for_afnf1;
|
|
/* meter reading command age limit for F1H_F1 for cli */
|
|
uint16_t mr_max_age_for_afnf1_cli;
|
|
/* concentrator meter reading command retry cnt */
|
|
uint16_t mr_retry_cnt_cctt;
|
|
/* max concurrency count for con meter reading */
|
|
uint16_t con_cnt_limit;
|
|
/* max concurrency count for con meter reading for cli */
|
|
uint16_t con_cnt_limit_cli;
|
|
/* router meter reading command retry cnt */
|
|
uint16_t mr_retry_cnt_router;
|
|
/* concurrently meter reading command retry cnt */
|
|
uint16_t mr_retry_cnt_con;
|
|
/* cli interface for smart grid */
|
|
iot_cli_sg_interface_t cli_sg_interface;
|
|
/* collector count in this network */
|
|
uint16_t collector_cnt;
|
|
/* used for report data to cctt */
|
|
uint8_t local_sn;
|
|
/* 1 - router learn finish, 0 - unfinished */
|
|
uint8_t router_learn_flag :1,
|
|
/* 1 - learning, 0 - meter reading */
|
|
work_mode :1,
|
|
/* 1 - reg allowed, 0 - not allowed */
|
|
sec_node_reg_allowed :1,
|
|
/* 1 - transformer detect doing, 0 - transformer detect done */
|
|
tsfm_detect_flag :1,
|
|
/* transformer detect switch: 0 - disable, 1 - enable */
|
|
tsfm_detect_enabled :1,
|
|
/* whether lock the station. 0 - unlock, 1 - lock */
|
|
tsfm_detect_lock_sta :1,
|
|
/* if parameter area was reset.
|
|
* it's set to 1 when reset parameter happened.
|
|
* it's cleared when white list added and updated to flash.
|
|
*/
|
|
param_reset_flag :1,
|
|
/* flag to mark if enable auto delete white list */
|
|
auto_del_wl_flag :1;
|
|
/* flag indicate if CCo shall restart network. */
|
|
uint8_t force_restart_nw :1,
|
|
/* flag to mark if cco is in connectionless mode */
|
|
conn_less :1,
|
|
/* flag to mark if plc manager is online */
|
|
plc_mgr_online :1,
|
|
/* flag to mark if controller is connected to cco */
|
|
ctrl_proto_connected :1,
|
|
/* whether query the station side transformer detect result,
|
|
* 0 - don't query, 1 - query
|
|
*/
|
|
tsfm_detect_qr_sta :1,
|
|
/* transformer detect state, see IOT_SG_CCO_TSFM_DETECT_STATE_XXX */
|
|
tsfm_detect_state :3;
|
|
/* controller transformation sequence number */
|
|
uint8_t ctrl_proto_sn;
|
|
/* 0 - meter reading, 1- search meter, 2 - upgrade, 3 - reserved */
|
|
uint8_t work_type;
|
|
/* pending event count */
|
|
uint8_t router_evt_count;
|
|
/* counter used for transformer detect */
|
|
uint16_t tsfm_detect_count;
|
|
/* total node count of the topo */
|
|
uint16_t topo_count;
|
|
/* reject node old index in reject blacklist */
|
|
uint16_t reject_node_old_idx;
|
|
/* max sec node count of one frame data for report to cctt */
|
|
uint8_t max_sec_count;
|
|
/* 0 - the cco is power off, 1 - the cco is power on */
|
|
uint8_t power_on;
|
|
/* timestamps of starting formating - unit 1s */
|
|
uint32_t fmt_start_ts;
|
|
/* timestamps of ending formating - unit 1s */
|
|
uint32_t fmt_done_ts;
|
|
/* network size */
|
|
uint16_t nw_size;
|
|
/* station transformer detect result query index */
|
|
uint16_t sta_tsfm_detect_ret_query_idx;
|
|
/* station side transformer detect timeout, unit is 1s */
|
|
uint32_t sta_tsfm_detect_timeout;
|
|
/* station module id info query index for gw,
|
|
* station property info query index for nw.
|
|
*/
|
|
uint16_t sta_mod_id_query_idx;
|
|
/* station chip id info query index */
|
|
uint16_t sta_chip_id_info_query_idx;
|
|
/* station network info query index */
|
|
uint16_t sta_net_info_query_idx;
|
|
/* meter reading timeout count */
|
|
uint32_t mr_timeout_cnt;
|
|
/* driver for current device */
|
|
iot_sg_cco_drv_t *dev_drv;
|
|
/* driver for cli */
|
|
iot_sg_cco_drv_t *cli_drv;
|
|
/* event receive count */
|
|
uint32_t evt_rcv_cnt;
|
|
/* event report count */
|
|
uint32_t evt_rpt_cnt;
|
|
/* event report success count */
|
|
uint32_t evt_rpt_sus_cnt;
|
|
/* sec node query cnt */
|
|
uint32_t sec_node_query_cnt;
|
|
/* sec node report count */
|
|
uint32_t sec_node_rpt_cnt;
|
|
/* sec node report success count */
|
|
uint32_t sec_node_rpt_sus_cnt;
|
|
/* node index in reporting progress */
|
|
uint16_t tsfm_node_rpt_index;
|
|
/* if the pib's esp is IOT_SG_CCO_ESP_AUTO
|
|
* then this esp is driver detecting value,
|
|
* see IOT_SG_CCO_ESP_XXX
|
|
*/
|
|
uint8_t real_esp;
|
|
/* task status, see IOT_SG_TASK_STATUS_XXX */
|
|
uint8_t task_status;
|
|
/* task enable type see - IOT_SG_CALLER_TYPE_XXX */
|
|
uint8_t task_enable_type;
|
|
/* refresh black list count */
|
|
uint8_t refresh_bl_cnt;
|
|
/* see IOT_SYS_RST_REASON_XXX */
|
|
uint8_t boot_reason;
|
|
/* router meter reading controller */
|
|
iot_sg_cco_rt_mr_ctrl_t rt_mr_ctrl;
|
|
/* predict meter reading controller */
|
|
iot_sg_cco_predict_mr_ctrl_t pre_mr_ctrl;
|
|
/* transformer feature data */
|
|
iot_sg_cco_tsfm_feature_t tsfm_feature;
|
|
/* transformer detect duration, unit is 1s */
|
|
uint32_t tsfm_detect_timeout;
|
|
/* transformer detect bcast time, uint is 1s*/
|
|
uint32_t tsfm_bcast_time;
|
|
/* transformer detect used time counter, unit is 1s */
|
|
uint32_t tsfm_detect_used_time;
|
|
/* cache unsame vendor id */
|
|
uint32_t sta_vendor[IOT_SG_CCO_UNSAME_VENDOR_MAX_COUNT];
|
|
/* socket to communicate with cctt. */
|
|
int32_t socket_h;
|
|
/* flag to mark if joined sta vendor id the same,
|
|
* 1 - is the same, 0 - otherwise
|
|
*/
|
|
uint8_t vendor_id_same;
|
|
/* delay delete whitelist count */
|
|
uint16_t delay_del_wl_cnt;
|
|
/* branch detect */
|
|
iot_sg_cco_branch_detect_t branch_detect;
|
|
/* pw tsfm */
|
|
iot_sg_cco_pw_tsfm_t pw_tsfm;
|
|
/* number of intern sender command on power line */
|
|
uint8_t intern_pkt_on_line;
|
|
/* power down report flag, 1 - need to report power down event */
|
|
uint8_t power_down_rpt_flag :1,
|
|
/* power up report flag, 1 - need to report power up event */
|
|
power_up_rpt_flag :1,
|
|
/* flag to mark if enabled sta collect parameter config */
|
|
sta_clct_param_cfg_enabled:1,
|
|
/* flag to mark if received all sta chip id info */
|
|
all_sta_chip_id_info_recved:1,
|
|
/* flag to mark if received all sta network info */
|
|
all_sta_net_info_recved :1,
|
|
/* flag to mark if need to report join info to cctt */
|
|
sta_join_rpt_flag :1,
|
|
/* 0 - check 645/698 pkg for mr dest mac, others - doesn't check */
|
|
trans_mode :1,
|
|
/* recorded power down infomation flag, 1 - need record */
|
|
pd_info_record_flag :1;
|
|
/* loop timeout interval, unit is 1s. */
|
|
uint16_t loop2_timeout;
|
|
/* loop timeout interval, unit is 1s. */
|
|
uint8_t loop1_timeout;
|
|
/* sta join check count, unit is 30min */
|
|
uint8_t join_check_time_cnt :6,
|
|
/* sta join check enable valid for hunan */
|
|
join_check_valid :1,
|
|
/* sta join check enable for hunan */
|
|
sta_join_enable :1;
|
|
/* sta join check send count in half an hour */
|
|
uint8_t sta_join_send_cnt :4,
|
|
/* power down event valid time, unit is 1s */
|
|
pd_valid_time :4;
|
|
/* power down node collect time */
|
|
uint8_t power_down_clct_cnt;
|
|
/* power up node collect time */
|
|
uint8_t power_up_clct_cnt;
|
|
/* power down node bitmap */
|
|
uint8_t power_down_bm[IOT_SG_CCO_POWER_EVENT_BM_SIZE];
|
|
/* power up node bitmap */
|
|
uint8_t power_up_bm[IOT_SG_CCO_POWER_EVENT_BM_SIZE];
|
|
/* network route period, unit is 1s */
|
|
uint16_t rt_period;
|
|
/* send search list time count */
|
|
uint8_t send_search_list_timeout;
|
|
/* query transformer detect result interval, unit is 1s */
|
|
uint8_t qr_tsfm_detect_ret_interval;
|
|
/* white list index for searching list */
|
|
uint16_t wl_idx_for_search_list;
|
|
/* collector mac address login count */
|
|
uint16_t clct_mac_login_cnt;
|
|
/* sta collect parameter config index */
|
|
uint16_t sta_clct_param_cfg_idx;
|
|
/* the index of query dev whether support minute collection */
|
|
uint16_t minute_clct_qr_idx;
|
|
/* send search meter max count */
|
|
uint16_t send_search_max_cnt;
|
|
/* emergency task count */
|
|
uint16_t emergency_task_cnt;
|
|
/* sta opposite phase event report index */
|
|
uint16_t opposite_rpt_idx;
|
|
/* simple pair passcode value. Only same passcode CCO and STA can be
|
|
* associated, little endian.
|
|
*/
|
|
uint16_t passcode;
|
|
/* flag to mark if enable bcast correct time before networking done */
|
|
uint16_t corr_time_enable :1,
|
|
/* bcast correct time interval, unit is 1s */
|
|
corr_time_interval :9,
|
|
/* cctt node call count */
|
|
node_call_cnt :2,
|
|
/* flag of sec node regist need auto stop, 1 - need, 0 - not need */
|
|
sec_node_reg_need_auto_stop:1,
|
|
/* meter reading only, no other works */
|
|
mr_only :1,
|
|
/* force link type */
|
|
force_link :2;
|
|
/* round of join network time */
|
|
uint8_t join_round;
|
|
/* hplc link load, value: 0 - 100 */
|
|
uint8_t link_load;
|
|
/* network jolt interval count */
|
|
uint16_t net_jolt_cnt :5,
|
|
/* network jolt join node report count */
|
|
net_jolt_rpt_cnt :10,
|
|
/* network jolt valid */
|
|
net_jolt_valid :1;
|
|
/* network jolt calm round */
|
|
uint8_t net_jolt_calm_round;
|
|
/* link load limit */
|
|
uint8_t link_load_limit;
|
|
/* edge computing set index */
|
|
uint16_t edge_computing_set_index :11,
|
|
/* all sta edge computing set complete */
|
|
all_sta_edge_complete :1,
|
|
/* connless link type, see IOT_PLC_TX_LINK_TYPE_XXX */
|
|
connless_link_type :2,
|
|
/* reserved for future */
|
|
rsvd :2;
|
|
/* edge computing task id */
|
|
uint8_t edge_computing_task;
|
|
/* power down event report count */
|
|
uint32_t power_down_evt_cnt;
|
|
/* power up event report count */
|
|
uint32_t power_up_evt_cnt;
|
|
/* last bcast timestamp for all nodes, uint is 1ms */
|
|
uint32_t last_bcast_ts_all;
|
|
/* uart bps */
|
|
uint32_t uart_bps;
|
|
/* low power meter parameter */
|
|
iot_sg_cco_lp_meter_param_t lp_meter;
|
|
/* score parameter */
|
|
iot_sg_cco_set_score_parameter_t score_param;
|
|
/* collect task parameter */
|
|
iot_sg_cco_clct_task_param_t clct_task;
|
|
/* lock time parameter */
|
|
iot_sg_cco_lock_time_param_t lock_time;
|
|
/* active query pm parameter */
|
|
iot_sg_cco_active_qr_pm_t active_qr_pm;
|
|
/* bcast network lock command */
|
|
iot_sg_cco_nw_lock_param_t nw_lock;
|
|
/* bcast tsfm addr parameter */
|
|
iot_sg_cco_set_tsfm_addr_param_t set_tsfm_addr;
|
|
/* bcast task parmeter */
|
|
iot_sg_cco_bcast_param_t bcast_param;
|
|
/* unicast node event report info */
|
|
iot_sg_cco_node_evt_rpt_ctrl_param_t node_evt_ctrl;
|
|
/* average cost time parmeter */
|
|
iot_sg_cco_average_read_time_param_t aver_time;
|
|
/* clock manager parmeter */
|
|
iot_sg_cco_clock_manager_param_t clock_manager;
|
|
/* abnormal electric current configuration */
|
|
iot_sg_cco_nli_abnormal_cfg_t nli_cfg;
|
|
/* new cco */
|
|
#if IOT_SMART_GRID_CCO_ACM_ENABLE
|
|
iot_sg_cco_acm_t cco_acm;
|
|
#endif
|
|
/* flash parameter */
|
|
iot_sg_cco_flash_g_t flash;
|
|
/* jolt node bitmap */
|
|
uint8_t jolt_bitmap[IOT_SG_CCO_JOLT_BITMAP_CNT];
|
|
/* sta collect parameter task */
|
|
iot_sg_cco_min_clct_task_param_t clct_task_param;
|
|
} iot_sg_cco_global_t;
|
|
|
|
/* list entry within STA entry containing meter index*/
|
|
typedef struct _iot_sg_meter_idx_t {
|
|
iot_list_head_t link;
|
|
uint16_t meter_index; /* index of the meter */
|
|
}iot_sg_meter_idx_t;
|
|
|
|
typedef struct _iot_ihash_entry {
|
|
iot_addr_hash_entry_t mac_entry;
|
|
uint16_t index;
|
|
}iot_ihash_entry_t;
|
|
|
|
typedef struct _iot_ihash_meter_entry {
|
|
iot_meter_addr_hash_entry_t meter_entry;
|
|
uint16_t index;
|
|
} iot_ihash_meter_entry_t;
|
|
|
|
typedef struct _iot_sg_cco_lp_meter_sta_param {
|
|
/* flag to mark if low power dev type is available */
|
|
uint8_t dev_type_valid :1,
|
|
/* query lp dev type count */
|
|
dev_type_qr_cnt :7;
|
|
/* flag to mark if low power meter rssi info is available */
|
|
uint8_t rssi_valid :1,
|
|
/* query low power meter rssi info count */
|
|
rssi_qr_cnt :6,
|
|
/* 0 - without low power meter, 1- with low power meter */
|
|
with_lp_meter :1;
|
|
/* flag to mark if low power meter info is available */
|
|
uint8_t info_valid :1,
|
|
/* query low power meter same info count */
|
|
qr_same_cnt :7;
|
|
/* the seq number of the send query low power meter command */
|
|
uint8_t qr_sn;
|
|
/* query low power meter info start sequence */
|
|
uint8_t start_seq;
|
|
/* query low power meter rssi info start sequence */
|
|
uint16_t rssi_start_seq;
|
|
} iot_sg_cco_lp_meter_sta_param_t;
|
|
|
|
typedef struct _iot_sg_cco_tsfm_sta_param_pw {
|
|
/* transformer detect packet query sn, see IOT_SG_CCO_TSFM_PKT_QR_SN_XXX */
|
|
uint8_t tsfm_pkt_qr_sn :5,
|
|
/* reserved */
|
|
reserved :3;
|
|
} iot_sg_cco_tsfm_sta_param_pw_t;
|
|
|
|
typedef struct _iot_sg_sta_info_entry {
|
|
/* hash table entry with meter mac address as key */
|
|
iot_ihash_entry_t entry;
|
|
/* a list with all meter attached to the sta */
|
|
iot_list_head_t meter_list;
|
|
/* the seq number of the last send query sec node registration command */
|
|
uint32_t sec_node_qr_sn;
|
|
/* query sec node registration interval counter */
|
|
uint32_t sec_node_qr_timeout_n : 16,
|
|
/* query sec node registration counter */
|
|
sec_node_qr_count : 8,
|
|
/* query count for this STA. 0 means don't query the STA. */
|
|
ver_qr_cnt : 8;
|
|
/* the current state of sec node reg, see SEC_NODE_REG_STATE_XXXX */
|
|
uint8_t sec_node_reg_state;
|
|
/* type of dev the STA module attached, see IOT_PLC_DEV_TYPE_XXX */
|
|
uint8_t dev_type;
|
|
/* max concurrent meter reading count */
|
|
uint8_t send_count;
|
|
/* physical phase of the station */
|
|
uint8_t phy_phase1 : 2,
|
|
phy_phase2 : 2,
|
|
phy_phase3 : 2,
|
|
/* flag to mark if L/N reversed in Three-phase power meter */
|
|
opposite_3p : 1,
|
|
/* the node base info query is complete flag */
|
|
base_info_complete_flag :1;
|
|
/* flag to mark if app phase info valid */
|
|
uint8_t phase_info_valid : 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.
|
|
*/
|
|
opposite_3p_pos : 2,
|
|
/* flag to mark if have super capacitance */
|
|
super_cap : 1,
|
|
/* flag to mark if could fix position */
|
|
fix_position : 1,
|
|
/* flag to mark if node need to report join info to cctt */
|
|
join_rpt_flag : 1,
|
|
/* flag to mark if pm score info is available */
|
|
pm_score_valid : 1,
|
|
/* 1 - in offline state */
|
|
is_offline_state: 1;
|
|
/* logical phase of the station */
|
|
uint8_t logical_phase1 : 2,
|
|
logical_phase2 : 2,
|
|
logical_phase3 : 2,
|
|
/* 0 - power off, 1 - power on.
|
|
* Accuracy is not high, so not recommended for use.
|
|
*/
|
|
power_on : 1,
|
|
/* 1 if STA's version was updated, 0 if not. */
|
|
ver_updated : 1;
|
|
/* CRC of STA's firmware */
|
|
uint32_t sta_crc;
|
|
/* 2 bytes for vendor id */
|
|
uint16_t vendor_id;
|
|
/* send search meter command count */
|
|
uint16_t send_search_cnt :13,
|
|
/* mac address type. see IOT_PLC_MAC_ADDR_TYPE_XXX */
|
|
addr_type :2,
|
|
/* STA upgrade bitmap need reverse flag */
|
|
reverse :1;
|
|
/* percentage of the upgrade progress */
|
|
uint8_t percent_upgrade;
|
|
/* if upgrading start ack received from this STA. */
|
|
uint8_t upgrade_started :1,
|
|
/* if CCo received its query status rsp. */
|
|
query_rsp_recved :1,
|
|
/* if STA received the 1st data block. */
|
|
header_recved :1,
|
|
/* if STA received all data block */
|
|
recv_done :1,
|
|
/* if STA received execute command */
|
|
exe_recved :1,
|
|
/* STA join the network when upgrading is half done. */
|
|
late :1,
|
|
/* shall this STA be skip for upgrading */
|
|
skip :1,
|
|
/* STA renew sw version when upgrading is done. */
|
|
renew_sw :1;
|
|
/* last boot up reason of this STA */
|
|
uint8_t boot_reason;
|
|
/* vendor id query count */
|
|
uint8_t vendor_id_qr_cnt;
|
|
/* station detect result, see IOT_SG_CCO_STA_TSFM_DETECT_RET_XXX */
|
|
uint16_t sta_tsfm_detect_ret :4,
|
|
/* station transformer detect status, 0 - doing, 1 - done */
|
|
sta_tsfm_detect_done :1,
|
|
/* query module id count */
|
|
mod_id_qr_cnt :6,
|
|
/* reserved */
|
|
rsvd1 :5;
|
|
/* flag to mark if sta chip id info is available */
|
|
uint8_t chip_id_info_valid :1,
|
|
/* query chip id info count */
|
|
chip_id_qr_cnt :7;
|
|
/* uplink signal quality */
|
|
uint8_t ul_quality :4,
|
|
/* downlink signal quality */
|
|
dl_quality :4;
|
|
/* pw transformer detect sta parameter */
|
|
iot_sg_cco_tsfm_sta_param_pw_t tsfm_param_pw;
|
|
#if IOT_SMART_GRID_LP_METER_ENABLE
|
|
/* low power meter parameter */
|
|
iot_sg_cco_lp_meter_sta_param_t lp_meter;
|
|
#endif
|
|
/* chip id information of the node */
|
|
iot_plc_chip_id_t chip_id;
|
|
#if IOT_SMART_GRID_NET_INFO_ENABLE
|
|
/* flag to mark if sta network info is available */
|
|
uint8_t net_info_valid :1,
|
|
/* query network info count */
|
|
net_qr_cnt :7;
|
|
/* network info of the node */
|
|
iot_sg_cco_net_info_t net_info;
|
|
#endif
|
|
/* module id information, little - endian, for gw,
|
|
* module mac addr, big-endian, for nw.
|
|
*/
|
|
uint8_t module_id[IOT_SG_CCO_MOD_ID_LEN];
|
|
/* flag to mark if delete module collect task is available */
|
|
uint8_t init_clct_task_valid :1,
|
|
/* count of delete module to init collection task */
|
|
init_clct_task_cnt :7;
|
|
/* flag to mark if sta lock time info is available */
|
|
uint8_t lock_time_info_valid :1,
|
|
/* query lock time info count */
|
|
lock_time_qr_cnt :7;
|
|
/* flag to mark if minute collection is available */
|
|
uint8_t minute_clct_valid :1,
|
|
/* query minute collection info count */
|
|
minute_clct_qr_cnt :7;
|
|
#if IOT_SMART_GRID_ACTIVE_QR_ENABLE
|
|
/* active query power meter state, see IOT_SG_CCO_QR_PM_STATE_XXX */
|
|
uint8_t active_qr_state :2,
|
|
/* active query pm function query count */
|
|
active_qr_cnt :6;
|
|
#endif
|
|
#if IOT_SMART_GRID_CLCOCK_MANAGE_ENABLE
|
|
/* cctt set sta auto correction time flag */
|
|
uint8_t auto_corr_switch :1,
|
|
/* when the cctt cmd is received, mark this value as valid */
|
|
auto_corr_valid :1,
|
|
/* sta auto correct time set done */
|
|
auto_corr_done :1,
|
|
/* auto correct time set count */
|
|
auto_corr_set_cnt :4,
|
|
/* sta report auto correction time flag */
|
|
auto_corr_switch_rpt :1;
|
|
/* when the cctt cmd is received, mark this value as valid */
|
|
uint8_t threshold_valid :1,
|
|
/* sta clock manage threshold time set done */
|
|
threshold_done :1,
|
|
/* clock manage threshold set count */
|
|
threshold_set_cnt :4,
|
|
/* flag to mark if sta clock manage done */
|
|
clock_manage_done :1,
|
|
/* flag to mark if query sta clock manage infomation done */
|
|
clock_info_qr_done :1;
|
|
/* query clock manage infomation count */
|
|
uint8_t clock_info_qr_cnt :4,
|
|
/* reserved */
|
|
rsvd2 :4;
|
|
/* cctt set clock manager threshold, unit is 1min */
|
|
uint8_t corr_threshold;
|
|
/* sta report clock manager threshold, unit is 1min */
|
|
uint8_t corr_threshold_rpt;
|
|
#endif
|
|
#if IOT_SMART_GRID_NLI_CFG_ENABLE
|
|
/* unicast configure cnt */
|
|
uint8_t nli_cfg_cnt :4,
|
|
/* configure state, see IOT_SG_CCO_NLI_CFG_STA_XXX */
|
|
nli_cfg_state :4;
|
|
#endif
|
|
/* external software version */
|
|
uint16_t sw_version;
|
|
/* internal software version */
|
|
uint32_t build_sw_ver;
|
|
/* boot version */
|
|
uint8_t boot_ver;
|
|
/* level, warning the value may be old, is unfaithful */
|
|
uint8_t level :4,
|
|
/* flag to mark if dev support minute collection */
|
|
minute_clct :1,
|
|
/* the type of power meter under the station,
|
|
* 0 is single phase meter, 1 is three phase meter
|
|
*/
|
|
pm_type :1,
|
|
/* flag to mark if sta report opposite phase event */
|
|
opposite_evt_rpt :1,
|
|
/* flag to mark if query sta edge info */
|
|
query_edge :1;
|
|
/* software build time */
|
|
uint16_t build_time_y :7,
|
|
build_time_m :4,
|
|
build_time_d :5;
|
|
/* chip code */
|
|
uint16_t chip_code;
|
|
#if IOT_SMART_GRID_BASE_INFO_ENBALE
|
|
/* software module version */
|
|
uint16_t sw_mod_version;
|
|
/* release date of sw module version */
|
|
uint8_t sw_mod_date[IOT_SG_CCO_VERSION_DATE_LEN];
|
|
/* software chip version */
|
|
uint16_t sw_chip_version;
|
|
/* release date of sw chip version */
|
|
uint8_t sw_chip_date[IOT_SG_CCO_VERSION_DATE_LEN];
|
|
/* hardware module version */
|
|
uint16_t hw_mod_version;
|
|
/* release date of hw module version */
|
|
uint8_t hw_mod_date[IOT_SG_CCO_VERSION_DATE_LEN];
|
|
/* hardware chip version */
|
|
uint16_t hw_chip_version;
|
|
/* release date of hw chip version */
|
|
uint8_t hw_chip_date[IOT_SG_CCO_VERSION_DATE_LEN];
|
|
/* app version */
|
|
uint16_t app_version;
|
|
#endif
|
|
#if IOT_SMART_GRID_EDGE_COMPUTING_ENABLE
|
|
/* edge computing set count */
|
|
uint8_t edge_computing_set_cnt :7,
|
|
/* edge computing set complete flag */
|
|
edge_computing_set_complete :1;
|
|
#endif
|
|
/* device mac address from zhejiang search pm result event, little-endian.
|
|
* if the device type is collector, the mac is the collector mac address.
|
|
*/
|
|
uint8_t dev_addr[IOT_MAC_ADDR_LEN];
|
|
/* bitmap for base info case */
|
|
uint32_t base_info_bm;
|
|
} iot_sg_sta_entry_t;
|
|
|
|
typedef struct _iot_sg_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;
|
|
} iot_sg_score_info_t;
|
|
|
|
typedef struct _iot_sg_cco_lp_meter_pm_param {
|
|
/* flag to mark if config low power meter is available */
|
|
uint8_t cfg_valid :1,
|
|
/* config low power meter count */
|
|
cfg_cnt :7;
|
|
/* low power meter rssi */
|
|
uint8_t rssi;
|
|
/* low power meter mac address high byte */
|
|
uint8_t high_addr;
|
|
} iot_sg_cco_lp_meter_pm_param_t;
|
|
|
|
typedef struct _iot_sg_meter_info_entry {
|
|
/* hash table entry with meter mac address as key */
|
|
iot_ihash_entry_t entry;
|
|
/* proto type the meter supported */
|
|
uint8_t proto_type;
|
|
/* 0: the node don't active register, 1: the node active register */
|
|
uint8_t active_reg_flag :1,
|
|
/* 0: the last event report sn is invalid,
|
|
* 1: the last event report sn is valid.
|
|
*/
|
|
last_evt_rpt_sn_valid :1,
|
|
/* 0 - power off, 1 - power on */
|
|
power_on :1,
|
|
/* flag to mark if score info is available */
|
|
score_info_valid :1,
|
|
/* flag to mark if node is active query pm */
|
|
active_qr_flag :1,
|
|
/* flag to mark if search result event was reported */
|
|
search_rpt_flag :1,
|
|
/* flag to mark if connectionless node report tsfm detect resutl */
|
|
conn_tsfm_ret_rpt :1,
|
|
/* 1 - module meter, 0 - collector meter */
|
|
module_meter :1;
|
|
/* last event report sn */
|
|
uint16_t last_event_rpt_sn;
|
|
#if IOT_SMART_GRID_LP_METER_ENABLE
|
|
/* low power meter parameter */
|
|
iot_sg_cco_lp_meter_pm_param_t lp_meter;
|
|
#endif
|
|
#if IOT_SMART_GRID_PM_CORE_ENABLE
|
|
/* pm score information */
|
|
iot_sg_score_info_t score_info;
|
|
#endif
|
|
/* pointer to the corresponding STA info */
|
|
iot_sg_sta_entry_t* sta_info;
|
|
/* 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,
|
|
/* reserved */
|
|
rsvd1 :5;
|
|
/* device type, see IOT_PLC_DEV_TYPE_XXX */
|
|
uint8_t dev_type;
|
|
/* transformer status, see IOT_SG_CCO_PM_TO_TSFM_XXX */
|
|
uint8_t tsfm_status :4,
|
|
/* phase type of three phase meter, see IOT_SG_CCO_PHASE_SEQ_XXX */
|
|
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;
|
|
/* tsfm address info, big endian */
|
|
uint8_t tsfm_addr[IOT_MAC_ADDR_LEN];
|
|
} iot_sg_pm_entry_t;
|
|
|
|
typedef struct _iot_sg_meter_mapping_entry {
|
|
/* hash table entry with meter address as key */
|
|
iot_ihash_meter_entry_t entry;
|
|
/* node mac address : small endian */
|
|
uint8_t mac[IOT_MAC_ADDR_LEN];
|
|
} iot_sg_meter_mapping_entry_t;
|
|
|
|
typedef struct _iot_sg_clct_task_x4_info {
|
|
/* flag to mark if the node complete collect task bcast divide */
|
|
uint8_t clct_task_bcast_ack :1,
|
|
/* bcast collect task send count */
|
|
clct_task_send_cnt :7;
|
|
/* collect task sn */
|
|
uint16_t app_sn;
|
|
} iot_sg_clct_task_x4_info_t;
|
|
|
|
typedef struct _iot_sg_clct_task_v28_info {
|
|
/* sta collect parameter task id send bitmap */
|
|
uint8_t clct_task_send_bm;
|
|
/* sta collect parameter task send common count */
|
|
uint8_t clct_task_send_cnt;
|
|
/* flag to mark if the node recv collect data in the period */
|
|
uint8_t clct_data_recv : 1,
|
|
/* sta collect data query count */
|
|
data_qry_cnt : 3,
|
|
/* flag to mark if task is configurated */
|
|
task_buf_flag : 1,
|
|
/* reserved for future */
|
|
rsvd : 3;
|
|
} iot_sg_clct_task_v28_info_t;
|
|
|
|
typedef struct _iot_sg_wl_entry {
|
|
/* hash table entry with meter mac address as key */
|
|
iot_ihash_entry_t entry;
|
|
/* proto type the meter supported */
|
|
uint8_t proto_type;
|
|
/* meter status, see IOT_SG_CCO_RT_MR_STATE_XXX */
|
|
uint8_t route_mr_state :2,
|
|
/* delay delete */
|
|
delay_del :1,
|
|
/* sta module configuration state, 0 fail, 1 success */
|
|
sta_mod_cfg_state :1,
|
|
/* 1 - in sta collect parameter config progress, 0 - not */
|
|
sta_mod_cfg_flag :1,
|
|
/* sta last leave reason depending on leave awareness and power up report,
|
|
* 0 - power off, 1- channel quality change.
|
|
*/
|
|
sta_leave_reason :1,
|
|
/* reserved for future */
|
|
rsvd :2;
|
|
/* sta collect parameter task id v2.8 */
|
|
uint8_t clct_task_id;
|
|
union {
|
|
uint8_t diff_max[IOT_SG_CCO_WL_DIFF_DATA_MAX_LEN];
|
|
iot_sg_clct_task_x4_info_t clct_task_x4;
|
|
iot_sg_clct_task_v28_info_t task_v28;
|
|
} diff;
|
|
/* time stamp of station joined, uint is 1s */
|
|
uint32_t join_ts;
|
|
/* time stamp of station left, uint is 1s */
|
|
uint32_t leave_ts;
|
|
/* time stamp to remove the entry from black list, unit is 1s */
|
|
uint32_t rm_ts;
|
|
/* last bcast time, uint is 1ms */
|
|
uint32_t last_bcast_ts;
|
|
} iot_sg_wl_entry_t;
|
|
|
|
typedef struct _iot_sg_wlii_entry {
|
|
/* hash table entry with meter mac address as key */
|
|
iot_ihash_entry_t entry;
|
|
/* proto type the meter supported, see PROTO_TYPE_XXX */
|
|
uint8_t proto_type;
|
|
/* meter status, see IOT_SG_CCO_RT_MR_STATE_XXX */
|
|
uint8_t route_mr_state :2,
|
|
/* communication object type, see PROTO_3762_FJ_OBJ_XXX */
|
|
obj_type :4,
|
|
/* repeat request meter counter */
|
|
rt_retry_count :2;
|
|
} iot_sg_wlii_entry_t;
|
|
|
|
typedef struct _iot_sg_bl_entry {
|
|
/* hash table entry with meter mac address as key */
|
|
iot_ihash_entry_t entry;
|
|
/* time stamp1 to remove the entry from black list, unit is 1s */
|
|
uint32_t rm_ts1;
|
|
/* time stamp2 to remove the entry from black list, unit is 1s */
|
|
uint32_t rm_ts2;
|
|
} iot_sg_bl_entry_t;
|
|
|
|
/* receive branch information descriptor */
|
|
typedef struct _iot_sg_cco_bd_recv_desc {
|
|
/* energy */
|
|
uint16_t energy;
|
|
} iot_sg_cco_bd_recv_desc_t;
|
|
|
|
/* branch detect device entry */
|
|
typedef struct _iot_sg_bd_dev_entry {
|
|
/* hash table entry with meter mac address as key */
|
|
iot_ihash_entry_t entry;
|
|
/* rx snr of this node */
|
|
int8_t snr;
|
|
/* device type, see IOT_PLC_DEV_TYPE_XXX */
|
|
uint8_t dev_type;
|
|
/* branch device state, see IOT_SG_CCO_BD_DEV_STATE_XXX */
|
|
uint8_t dev_state :4,
|
|
/* if exists pm under the branch detect device */
|
|
exists_pm :1,
|
|
/* if node is connectionless link */
|
|
is_conn_less :1,
|
|
/* flag to mark if node allow to send branch recognition message */
|
|
allow_send :1,
|
|
/* follow data of flag, 0 - no data, 1 - follow-up data. */
|
|
flw_flag :1;
|
|
/* node first physical phase line, only valid in connectionless */
|
|
uint8_t phase_1 :2,
|
|
/* node second physical phase line, only valid in connectionless */
|
|
phase_2 :2,
|
|
/* node third physical phase line, only valid in connectionless */
|
|
phase_3 :2,
|
|
/* branch detect single receive capacity, see IOT_SG_CCO_BD_RECV_XXX */
|
|
br_ident :2;
|
|
/* same transformer flag */
|
|
uint8_t same_tsfm :1,
|
|
/* retry count of cco send command to node */
|
|
send_cnt :7;
|
|
/* support load capacity, see IOT_PLC_HW_TSFM_LOAD_CAP_XXX */
|
|
uint8_t load_capacity :2,
|
|
/* reserved for future */
|
|
rsvd :6;
|
|
/* the count of characteristic information received */
|
|
uint16_t received_cnt :13,
|
|
/* launch mode acquired in send stage see IOT_PLC_HW_TSFM_SEND_MODE_XXX */
|
|
launch_mode :3;
|
|
/* list of receiving branch signal */
|
|
iot_sg_cco_bd_recv_desc_t *recv_list;
|
|
/* father node index, special index see IOT_SG_CCO_BD_FATHER_XXX */
|
|
uint32_t father_index :12,
|
|
/* forward node index, only valid in connectionless,
|
|
* special index see IOT_SG_CCO_BD_FATHER_XXX.
|
|
*/
|
|
fwd_node_index :12,
|
|
/* PT ratio, uint is x1 */
|
|
v_ratio :8;
|
|
/* 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;
|
|
/* branch detect device query sequence */
|
|
uint16_t query_seq;
|
|
/* timestamp of first launch command send, unit is 1s */
|
|
uint32_t start_time_ts;
|
|
/* timestamp of launch response, unit is 1s */
|
|
uint32_t rsp_time_ts;
|
|
} iot_sg_bd_dev_entry_t;
|
|
|
|
/* descriptor of sta collect parameter layout structure */
|
|
typedef struct _iot_sg_cco_clct_meter_param_v28 {
|
|
/* sta collect parameter v2.8 task id */
|
|
uint8_t task_id;
|
|
/* 0 - disabled, 1 - enabled */
|
|
uint8_t enabled : 1,
|
|
/* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
|
|
proto_type : 3,
|
|
/* 0 - single phase meter, 1 - three phase meter */
|
|
pm_type : 2,
|
|
/* reserved */
|
|
rsvd : 2;
|
|
/* unit is 1min */
|
|
uint8_t clct_period;
|
|
/* di count of single phase meter */
|
|
uint8_t di_cnt;
|
|
/* di information of single phase meter */
|
|
iot_sg_cco_di_info_t di_info[0];
|
|
} iot_sg_cco_clct_meter_param_v28_t;
|
|
|
|
#if (PLC_SUPPORT_CCO_ROLE && IOT_SMART_GRID_ENABLE)
|
|
|
|
/**
|
|
* @brief iot_sg_cco_init() - init smart grid cco role device specific
|
|
* operation.
|
|
* @return: 0 - for success case
|
|
* @return: otherwise - error number
|
|
*/
|
|
uint32_t iot_sg_cco_init();
|
|
|
|
/**
|
|
* @brief iot_sg_cco_deinit() - deinit smart grid cco role device specific
|
|
* operation.
|
|
*/
|
|
void iot_sg_cco_deinit();
|
|
|
|
void iot_sg_cco_init_sta_entry(iot_sg_sta_entry_t *sta_entry, uint8_t dev_type);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_meter_mac_to_sta_mac() - get corresponding STA mac from
|
|
* meter mac.
|
|
* @param meter_mac: mac address of a meter
|
|
* @param sta_mac: mac address of the sta which connect to the meter.
|
|
* it's set to bcast address if cco doesn't know which
|
|
* sta the meter connect to.
|
|
* @return: 0 - found the sta mac for the meter
|
|
* @return: otherwise - for failure case
|
|
*/
|
|
uint32_t iot_sg_cco_meter_mac_to_sta_mac(uint8_t *meter_mac,
|
|
uint8_t *sta_mac);
|
|
|
|
/**
|
|
* @brief: update the sta and meter mapping relationship.
|
|
* if pm_mac or sta_mac is invalid, mapping won't be updated.
|
|
* @param mac_table: the mapping.
|
|
* @param pm_mac: the meter mac.
|
|
* @param sta_mac: the station mac.
|
|
* @param pm_proto_type: the meter protocol.
|
|
* @retval: ERR_OK - for success case.
|
|
* @retval: ERR_XXX - error code.
|
|
*/
|
|
uint32_t iot_sg_cco_update_mac_mapping(iot_sg_cco_mac_map_h mac_table,
|
|
uint8_t *pm_mac, uint8_t *sta_mac, uint8_t pm_proto_type);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_get_dev_drv_headroom() - get device driver package head
|
|
* reserved length.
|
|
* @return: package head reserved length.
|
|
*/
|
|
uint8_t iot_sg_cco_get_headroom_req();
|
|
|
|
/**
|
|
* @brief iot_sg_cco_handle_sec_node_rpt() - handled secondary node registration
|
|
* report message from station.
|
|
* @param seq: message sequence number.
|
|
* @param reg_param: register parameter, see GW_APP_REG_PARAM_XXX.
|
|
* @param dev_mac: device mac address.
|
|
* @param sta_mac: station mac address.
|
|
* @param pkt: pointer to iot_pkt structure, the data payload layout of the
|
|
* iot_pkt, see the sec_node_query_t structure.
|
|
* @param done: if is 1, means that the corresponding station secondary node
|
|
* registration is done.
|
|
* @param clct_min: if support minutes collect.
|
|
* @retval: 0 - for success case
|
|
* @retval: otherwise - error code
|
|
*/
|
|
uint32_t iot_sg_cco_handle_sec_node_rpt(uint32_t seq, uint8_t reg_param,
|
|
uint8_t *dev_mac, uint8_t *sta_mac, iot_pkt_t *pkt, uint32_t done,
|
|
uint8_t clct_min);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_event_type_power_down() - using bm rpt power down evt
|
|
* @param pm_addr: addr of power meter, Little-Endian.
|
|
* @param bm_size: bitmap length.
|
|
* @param tei: the tei of the start bit in the bitmap.
|
|
* @param bm: tei bitmap.
|
|
* @param seq: message sequence number.
|
|
*/
|
|
uint32_t iot_sg_cco_event_type_power_down(uint8_t *pm_addr, uint16_t bm_size,
|
|
uint16_t tei, uint8_t *bm, uint16_t seq);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_event_type_power_up() - report device power up event
|
|
* @param sta_addr: addr of station, Big-Endian.
|
|
* @param pm_addr: addr of power meter, Little-Endian.
|
|
* @param seq: message sequence number.
|
|
* @retval: ERR_OK - for success case
|
|
* @retval: ERR_XXX - error code
|
|
*/
|
|
uint32_t iot_sg_cco_event_type_power_up(uint8_t *sta_addr, uint8_t *pm_addr,
|
|
uint16_t seq);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_power_down_evt_rpt_addr() - using addr rpt power down evt
|
|
* @param pm_addr: addr of power meter, Little-Endian.
|
|
* @param pm_data: power down meter information.
|
|
* @param data_len: power down meter data length.
|
|
*/
|
|
uint32_t iot_sg_cco_evt_type_power_down_addr(uint8_t *pm_addr,
|
|
iot_sg_evt_data_addr_t *pm_data, uint16_t data_len, uint16_t seq);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_evt_type_power_up_addr() - using addr rpt power down evt
|
|
* @param sta_addr: addr of station, Big-Endian.
|
|
* @param pm_addr: addr of power meter, Little-Endian.
|
|
* @param pm_data: power up meter information.
|
|
* @param data_len: power up meter data length.
|
|
* @param trigger_dev: event trigger device type, see IOT_SG_CCO_DEV_TYPE_XXX.
|
|
* @param seq: message sequence number.
|
|
* @retval: ERR_OK - for success case
|
|
* @retval: ERR_XXX - error code
|
|
*/
|
|
uint32_t iot_sg_cco_evt_type_power_up_addr(uint8_t *sta_addr, uint8_t *pm_addr,
|
|
iot_sg_evt_data_addr_t *pm_data, uint16_t data_len, uint8_t trigger_dev,
|
|
uint16_t seq);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_event_type_phase_sequnence() - rpt phase sequnence evt
|
|
* @param sta_addr: addr of station, Big-Endian.
|
|
* @param pm_addr: addr of three power meter, Little-Endian.
|
|
* @param phase_seq_status: phase sequence status,
|
|
* see GW_APP_PHASE_SEQUENCE_STAUS_XXX .
|
|
* @param seq: message sequence number.
|
|
* @retval: ERR_OK - for success case
|
|
* @retval: ERR_XXX - error code
|
|
*/
|
|
uint32_t iot_sg_cco_event_type_phase_sequnence(uint8_t *sta_addr,
|
|
uint8_t *pm_addr, uint8_t phase_seq_status, uint16_t seq);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_event_type_search_result() - rpt search result evt
|
|
* @param sta_mac: addr of station, Big-Endian.
|
|
* @param dev_mac: collector or pm moudle mac, little-endian.
|
|
* @param pm_count: power meter count, no more than 32.
|
|
* @param pm_info: search meter result info.
|
|
* @retval: ERR_OK - for success case
|
|
* @retval: ERR_XX - error code
|
|
*/
|
|
uint32_t iot_sg_cco_event_type_search_result(uint8_t *sta_mac, uint8_t *dev_mac,
|
|
uint8_t pm_count, iot_sg_cco_search_pm_info_t *pm_info);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_evnt_type_nli_abnormal_rpt() - rpt nli abnormal evt
|
|
* @param rpt_cnt: report count.
|
|
* @param data: reprot abnormal data.
|
|
* @param data_len: reprot abnormal data length.
|
|
* @param sta_mac: addr of station, Big-Endian.
|
|
* @param pm_mac: collector or pm moudle mac, little-endian.
|
|
* @param trigger_dev: event trigger device type, see IOT_SG_CCO_DEV_TYPE_XXX.
|
|
* @param evt_type: event reprot type, see IOT_SG_CCO_EVENT_XXX.
|
|
* @param seq: message sequence number.
|
|
* @retval: ERR_OK - for success case
|
|
* @retval: ERR_XX - error code
|
|
*/
|
|
uint32_t iot_sg_cco_evnt_type_nli_abnormal_rpt(uint16_t rpt_cnt,
|
|
uint8_t *data, uint16_t data_len, uint8_t *sta_mac, uint8_t *pm_mac,
|
|
uint8_t trigger_dev, uint8_t evt_type, uint16_t seq);
|
|
|
|
/**
|
|
* @brief the device type is collector or power meter.
|
|
* @param dev_type: device type, see IOT_PLC_DEV_TYPE_XXX.
|
|
* @return: 0 - no
|
|
* @return: otherwise - yes
|
|
*/
|
|
uint8_t iot_sg_cco_is_collector_or_pm(uint8_t dev_type);
|
|
|
|
/**
|
|
* @brief get a down link sn for app packet.
|
|
* @return: the sn for app packet. value range is in [1,0xFFFF]
|
|
*/
|
|
uint16_t iot_sg_cco_get_app_dl_sn();
|
|
|
|
/**
|
|
* @brief handle data from controller.
|
|
* @param pkt: iot_pkt_t containing data from controller.
|
|
* @param proto_type: proto type of the pkt, see IOT_SG_CCO_CTRL_PROTO_XXX.
|
|
* @retval: 0 - the pkt is not consumed.
|
|
* 1 - the pkt is consumed.
|
|
*/
|
|
uint32_t iot_sg_cco_handle_ctrl_proto(iot_pkt_t *pkt, uint8_t proto_type);
|
|
|
|
/**
|
|
* @brief handle passthrough data from controller.
|
|
* @param pkt: iot_pkt_t containing data from controller.
|
|
* @param proto_type: proto type of the pkt, see IOT_SG_CCO_CTRL_PROTO_XXX.
|
|
* @retval: 0 - the pkt is not consumed.
|
|
* 1 - the pkt is consumed.
|
|
*/
|
|
uint32_t iot_sg_cco_handle_ctrl_proto_passthrough(iot_pkt_t *pkt,
|
|
uint8_t proto_type);
|
|
|
|
/**
|
|
* @brief report station side transformer detect status to framework.
|
|
* @param sta_mac: the station mac, big-endian.
|
|
* @param done: 0 - transformer detect in progress,
|
|
* 1 - transformer detect done
|
|
* @param result: transformer detect result,
|
|
* see IOT_SG_CCO_STA_TSFM_DETECT_RET_XXX.
|
|
* @param tsfm_mac: station real transformer mac address, big-endian.
|
|
* @param hw_tsfm_mac:hardware transformer mac address, big-endian.
|
|
*/
|
|
void iot_sg_cco_rpt_sta_tsfm_detect_result(uint8_t *sta_mac, uint8_t done,
|
|
uint8_t result, uint8_t *tsfm_mac, uint8_t *hw_tsfm_addr);
|
|
|
|
/**
|
|
* @brief update station side transformer detect status to framework.
|
|
* @param sta_mac: the station mac, big-endian.
|
|
* @param done: 0 - transformer detect in progress,
|
|
* 1 - transformer detect done
|
|
* @param result: transformer detect result,
|
|
* see IOT_SG_CCO_STA_TSFM_DETECT_RET_XXX.
|
|
* @param tsfm_mac: station real transformer mac address, big-endian.
|
|
* @param hw_tsfm_mac:hardware transformer mac address, big-endian.
|
|
*/
|
|
void iot_sg_cco_pw_tsfm_sta_staus_update(uint8_t *sta_mac, uint8_t done,
|
|
uint8_t result, uint8_t *tsfm_mac, uint8_t *hw_tsfm_mac);
|
|
|
|
/**
|
|
* @brief handle module id report.
|
|
* @param sta_mac: the station mac, big-endian.
|
|
* @param module_info: module id information
|
|
* @param len: module id length
|
|
*/
|
|
void iot_sg_cco_handle_module_id_rpt(uint8_t *sta_mac, uint8_t *module_id,
|
|
uint8_t len);
|
|
|
|
/*
|
|
* @brief: handle version info reported from STA
|
|
* @param sta_mac: mac addr of the STA reported version info, big-endian.
|
|
* @param data: buffer contain version info
|
|
* @param len: length of version info
|
|
*/
|
|
void iot_sg_cco_handle_version_info_rpt(uint8_t *sta_mac, uint8_t *data,
|
|
uint16_t len);
|
|
|
|
/**
|
|
* @brief handle transform feature report.
|
|
* @param sta_mac: the station mac, big-endian.
|
|
*/
|
|
void iot_sg_cco_handle_tsfm_feature_rpt(uint8_t *sta_mac);
|
|
|
|
/**
|
|
* @brief process internal meter reading result
|
|
* @param cmd_entry: down link meter reading command, not consumed buf entry
|
|
* @param pkt: meter reading result data.
|
|
* @retval: 0 - the pkt is not consumed, 1 - the pkt is consumed.
|
|
*/
|
|
uint32_t iot_sg_cco_internal_mr_data_handle(iot_buf_pool_entry_t *cmd_entry,
|
|
iot_pkt_t *pkt);
|
|
|
|
/**
|
|
* @brief set sta collect parameter config result
|
|
* @param sta_mac: sta mac addr, big-endian.
|
|
* @param result: 0 - fail, 1 - success
|
|
*/
|
|
void iot_sg_cco_set_sta_clct_param_conf_ret(uint8_t *sta_mac, uint8_t result);
|
|
|
|
/**
|
|
* @brief handle meter parameter report.
|
|
* @param sta_mac: the station mac, big-endian.
|
|
* @param pm_type: 0 - single phase meter, 1 - three phase meter
|
|
* @param zc_type: 0 - falling edge, 1 - rising edge.
|
|
*/
|
|
void iot_sg_cco_handle_meter_param_rpt(uint8_t *sta_mac, uint8_t pm_type,
|
|
uint8_t zc_type);
|
|
|
|
/**
|
|
* @brief handle secondary node chip id info report.
|
|
* @param meter_mac: the meter mac addr, little-endian.
|
|
* @param id_len: chip id length.
|
|
* @param chip_id_ptr: the pointer of chip id.
|
|
* @param super_cap: flag to mark if have super capacitance.
|
|
* @param super_cap: flag to mark if could fix position.
|
|
*/
|
|
void iot_sg_cco_handle_sec_node_chip_id_info_rpt(uint8_t *meter_mac,
|
|
uint8_t id_len, uint8_t *chip_id_ptr, uint8_t super_cap,
|
|
uint8_t fix_position);
|
|
|
|
/**
|
|
* @brief: handle storage dev type rpt.
|
|
* @param minute_clct: dev support minute collection flag.
|
|
* @param sta_mac: mac address of the source sta, big-endian.
|
|
*/
|
|
void iot_sg_cco_handle_storage_dev_type_rpt(uint8_t minute_clct_flag,
|
|
uint8_t *sta_mac);
|
|
|
|
/**
|
|
* @brief: handle lock time report.
|
|
* @param sta_mac: mac address of the source sta, big-endian.
|
|
* @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_handle_lock_time_rpt(uint8_t *sta_mac, uint16_t net_lock_time,
|
|
uint16_t abn_lock_time);
|
|
|
|
/**
|
|
* @brief: check meter change status for whitelist join cnt.
|
|
* @param pm_mac: meter address, little endian.
|
|
* @param chg_status: meter change status, see IOT_SG_CCO_WL_ACTION_XXX.
|
|
*/
|
|
void iot_sg_cco_check_for_pm_chg(uint8_t *pm_mac, uint8_t chg_status);
|
|
|
|
/*
|
|
* @brief: judge the sender intern type.
|
|
* @param sender: sender type, see IOT_SG_CCO_CMD_SENDER_XXX.
|
|
* @retval: ERR_OK - intern type. otherwise - other sender type.
|
|
*/
|
|
uint32_t iot_sg_cco_sender_is_intern_type(uint8_t sender);
|
|
|
|
/**
|
|
* @brief: check if intern type concurrent meter reading count exceed
|
|
* max current count.
|
|
* @retval: 0 - not exceed max current count.
|
|
* @retval: 1 - exceed max current count.
|
|
*/
|
|
uint8_t iot_sg_cco_intern_exceed_con_cnt();
|
|
|
|
/*
|
|
* @brief: get max concurrent limit for con meter reading
|
|
* CCo rejects con mr cmd if con mr cnt reach this value.
|
|
* @param con_mr_dur: con meter reading timeout value.
|
|
* @retval: con meter reading concurrency count limit.
|
|
*/
|
|
uint16_t iot_sg_cco_get_concurrency_limit(uint16_t con_mr_dur);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_add_wl_entry() - add some whitelist entry.
|
|
* @param count: the count of entry that need to add.
|
|
* @param rm_ts: time stamp to remove the entry from white list, unit is 1s.
|
|
* @param node: the point of entry.
|
|
*/
|
|
void iot_sg_cco_add_wl_entry(uint8_t count, uint32_t rm_ts,
|
|
iot_sg_wl_op_entry_t *node);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_add_bl_entry() - add some blacklist entry.
|
|
* @param count: the count of entry that need to add.
|
|
* @param node: the point of entry.
|
|
*/
|
|
void iot_sg_cco_add_bl_entry(uint8_t count, iot_sg_bl_op_info_t *node);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_remove_wl_entry() - remove whitelist entry.
|
|
* @param count: remove node count;
|
|
* @param array_mac_addr: mac address array of node
|
|
*/
|
|
void iot_sg_cco_remove_wl_entry(uint8_t count, uint8_t *array_mac_addr);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_set_wl_state_internal() - set plc white list state
|
|
* @param wl_state: white list state, see IOT_CLI_SG_WL_STATE_XXX
|
|
* @param force_flag: 1 - force set white list state
|
|
* @return: see ERR_XXX.
|
|
*/
|
|
uint32_t iot_sg_cco_set_wl_state_internal(uint8_t wl_state, uint8_t force_flag);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_update_wl_state_to_pib() - update white list state to PIB
|
|
* @param wl_state: white list state, see IOT_CLI_SG_WL_STATE_XXX
|
|
*/
|
|
void iot_sg_cco_update_wl_state_to_pib(uint8_t wl_state);
|
|
|
|
/**
|
|
* @brief iot_sg_cco_get_sta_entry_by_index() - get sta_entry by index.
|
|
* @param sta_index: the index of station in map.
|
|
* @return: pointer to the corresponding STA info.
|
|
*/
|
|
iot_sg_sta_entry_t *iot_sg_cco_get_sta_entry_by_index(uint16_t sta_index);
|
|
|
|
/**
|
|
* @brief get tsfm detect timeout.
|
|
* @return: tsfm detect timeout, see IOT_SG_CCO_TSFM_DETECT_TIMEOUT_XXX.
|
|
*/
|
|
uint32_t iot_sg_cco_get_tsfm_detect_timeout_default();
|
|
|
|
/**
|
|
* @brief set event report flag.
|
|
* @param intf_type: the caller, CLI or concentrator.
|
|
* @param enable_flag: enable event report flag.
|
|
*/
|
|
void iot_sg_cco_set_evt_rpt_flag(uint8_t intf_type, uint8_t enable_flag);
|
|
|
|
/**
|
|
* @brief get meter list entry information
|
|
* @param start_index: get meter entry info start from this index.
|
|
* @param count: max count of meter list entry to be returned.
|
|
* @return: NULL - for failed case.
|
|
* @return: otherwise - an IOT_PKT_T with an array of type
|
|
* iot_sg_node_info_transfer_t.
|
|
*/
|
|
iot_pkt_t *iot_sg_cco_get_meter_info(uint32_t start_index, uint32_t count);
|
|
|
|
/**
|
|
* @brief get sta entry by meter address.
|
|
* @param pm_addr: meter address, little endian.
|
|
* @return: pointer to the corresponding STA info.
|
|
*/
|
|
iot_sg_sta_entry_t *iot_sg_cco_get_sta_entry_by_pm(uint8_t *pm_addr);
|
|
|
|
/**
|
|
* @brief get extension task send type by sent count.
|
|
* @param send_cnt: the collect sent count.
|
|
* @return: send type, see IOT_PLC_MSG_TYPE_XXX.
|
|
*/
|
|
uint8_t iot_sg_cco_ext_task_get_send_type(uint16_t send_cnt);
|
|
|
|
/**
|
|
* @brief get rtc time for bcd format.
|
|
* @param tm: rtc time for byte format.
|
|
*/
|
|
void iot_sg_cco_get_rtc_bcd(iot_sg_cco_time_t *tm);
|
|
|
|
/**
|
|
* @brief pw handle transformer detect data.
|
|
* @param flw_flag: follow data of flag, 0 - no data, 1 - follow-up data.
|
|
* @param node_cnt: report node count.
|
|
* @param data: tsfm_detect node data.
|
|
* @param sta_mac: mac address of the source sta, big-endian.
|
|
* @retval: ERR_OK - for success case
|
|
* @retval: ERR_XX - error code
|
|
*/
|
|
uint32_t iog_sg_cco_handle_tsfm_detect_data_pw(uint8_t flw_flag,
|
|
uint8_t node_cnt, uint8_t *data, uint8_t *sta_mac);
|
|
|
|
/**
|
|
* @brief reset route meter reading state.
|
|
*/
|
|
void iot_sg_cco_rt_mr_reset_pm_state();
|
|
|
|
/* @brief: clock manage info report.
|
|
* @param sta_mac: sta address, big endian.
|
|
* @param auto_corr: node auto correct flag.
|
|
* @param threshold: node clock manager threshold.
|
|
*/
|
|
void iot_sg_cco_handle_clock_info_rpt(uint8_t *sta_mac, uint8_t auto_corr,
|
|
uint8_t threshold);
|
|
|
|
|
|
/* @brief: check if the nw esp need to use mac list function.
|
|
* @retval: 0 - don't need to use.
|
|
* @retval: 1 - need to use.
|
|
*/
|
|
uint8_t iot_sg_cco_nw_mac_list_check();
|
|
|
|
/**
|
|
* @brief check event report, filter duplicate event .
|
|
* @param sta_mac: sta address, big endian.
|
|
* @param data: pointer to event report data.
|
|
* @param len: length of event report data.
|
|
* @retval: ERR_OK - for success case
|
|
* @retval: ERR_XX - error code
|
|
*/
|
|
uint32_t iot_sg_cco_check_evt_rpt_filter(uint8_t *sta_mac, uint8_t *data,
|
|
uint32_t len);
|
|
|
|
/* @brief: safe increase of launch sequence number
|
|
*/
|
|
void iot_sg_cco_bd_launch_sn_inc(void);
|
|
|
|
/**
|
|
* @brief get cco receive upgrade file flag .
|
|
* @retval: 1 - receiving, 0 - other.
|
|
*/
|
|
uint8_t iot_sg_cco_get_receiving_upgrade_file_flag(void);
|
|
|
|
/**
|
|
* @brief handle msdu msg.
|
|
* @param pkt: need to handle msdu data pointer.
|
|
* @param msdu: msdu data pointer.
|
|
* @retval: 0 - don't consumed pkt, others - consumed pkt
|
|
*/
|
|
uint32_t iot_sg_cco_handle_msdu_msg(iot_pkt_t *pkt,
|
|
iot_plc_msdu_recv_t *msdu);
|
|
|
|
/**
|
|
* @brief check 3phase device.
|
|
* @param dev_type: see IOT_PLC_DEV_TYPE_XXX.
|
|
* @return: non 0 is 3phase device.
|
|
*/
|
|
uint8_t iot_sg_cco_is_3phase_dev(uint8_t dev_type);
|
|
|
|
|
|
/**
|
|
* @brief get collect di by index.
|
|
* @param idx: di index.
|
|
* @param proto_type: proto type, see PROTO_TYPE_XXX.
|
|
* @return: collect di.
|
|
*/
|
|
uint32_t iot_sg_cco_get_clct_di_by_idx(uint32_t idx, uint8_t proto_type);
|
|
|
|
/**
|
|
* @brief reset white list timer.
|
|
* @param interval: reset time interval.
|
|
*/
|
|
void iot_sg_cco_restart_wl_timer(uint32_t interval);
|
|
|
|
/**
|
|
* @brief update sta collect parameter to pib
|
|
* @param meter: data point
|
|
* @param data_len: data length
|
|
* @param crc: data crc
|
|
* @param clct_period: collect period
|
|
* @param enabled: parameter enabled
|
|
* @param proto_type: proto type, see PROTO_TYPE_XXX
|
|
* @param type: sta collect parameter type,
|
|
* see IOT_SG_CCO_CURVE_COLLET_TYPE_XXX
|
|
* @param task_id: collect task id
|
|
*/
|
|
void iot_sg_cco_update_sta_clct_param_to_pib(
|
|
iot_sg_cco_meter_clct_param_t *meter, uint16_t data_len, uint32_t crc,
|
|
uint8_t clct_period, uint8_t enabled, uint8_t proto_type, uint8_t type,
|
|
uint8_t task_id);
|
|
|
|
/**
|
|
* @brief set base info bitmap.
|
|
* @param sta_entry: need set sta.
|
|
* @param element: need set element bit.
|
|
*/
|
|
void iot_sg_cco_set_base_info_bitmap(iot_sg_sta_entry_t *sta_entry,
|
|
uint8_t element);
|
|
|
|
/**
|
|
* @brief get base info bitmap.
|
|
* @param sta_entry: need get sta.
|
|
* @param element: need get element bit.
|
|
* @return: element bit result.
|
|
*/
|
|
uint8_t iot_sg_cco_get_base_info_bitmap(iot_sg_sta_entry_t *sta_entry,
|
|
uint8_t element);
|
|
|
|
#else /* PLC_SUPPORT_CCO_ROLE && IOT_SMART_GRID_ENABLE */
|
|
|
|
void iot_sg_cco_handle_clock_info_rpt(uint8_t *sta_mac, uint8_t auto_corr,
|
|
uint8_t threshold);
|
|
|
|
uint32_t iot_sg_cco_handle_msdu_msg(iot_pkt_t *pkt, iot_plc_msdu_recv_t *msdu);
|
|
|
|
#define iot_sg_cco_init() (ERR_NOSUPP)
|
|
|
|
#define iot_sg_cco_deinit()
|
|
|
|
#define iot_sg_cco_meter_mac_to_sta_mac(meter_mac, sta_mac) (ERR_FAIL)
|
|
|
|
#define iot_sg_cco_update_mac_mapping(mac_table, pm_mac, sta_mac, \
|
|
pm_proto_type) (ERR_FAIL)
|
|
|
|
#define iot_sg_cco_handle_sec_node_rpt(seq, snq_p, done, clct_min) (ERR_NOSUPP)
|
|
|
|
#define iot_sg_cco_get_dev_drv_headroom() (0)
|
|
|
|
#define iot_sg_cco_event_type_power_down(sta_addr, pm_addr, data_len, \
|
|
tei, bm, seq) (ERR_NOSUPP)
|
|
|
|
#define iot_sg_cco_event_type_power_up(sta_addr, pm_addr, seq) (ERR_NOSUPP)
|
|
|
|
#define iot_sg_cco_evt_type_power_down_addr(sta_addr, pm_addr, pm_data, \
|
|
data_len, seq) (ERR_NOSUPP)
|
|
|
|
#define iot_sg_cco_evt_type_power_up_addr(sta_addr, pm_addr, pm_data, \
|
|
data_len, trigger_dev, seq) (ERR_NOSUPP)
|
|
|
|
#define iot_sg_cco_event_type_phase_sequnence(sta_addr, pm_addr, \
|
|
phase_seq_status, seq) (ERR_NOSUPP)
|
|
|
|
#define iot_sg_cco_event_type_search_result(sta_mac, dev_mac, pm_count, \
|
|
pm_info) (0)
|
|
|
|
#define iot_sg_cco_evnt_type_nli_abnormal_rpt(rpt_cnt, data, data_len, \
|
|
sta_mac, pm_mac, trigger_dev, evt_type, seq) (ERR_FAIL)
|
|
|
|
#define iot_sg_cco_is_collector_or_pm(dev_type) (0)
|
|
|
|
#define iot_sg_cco_get_app_dl_sn() (0)
|
|
|
|
#define iot_sg_cco_handle_ctrl_proto(pkt, proto_type) (0)
|
|
|
|
#define iot_sg_cco_handle_ctrl_proto_passthrough(pkt, proto_type) (0)
|
|
|
|
#define iot_sg_cco_rpt_sta_tsfm_detect_result(sta_mac, done, result, tsfm_mac, \
|
|
hw_tsfm_mac)
|
|
|
|
#define iot_sg_cco_pw_tsfm_sta_staus_update(sta_mac, done, result, tsfm_mac, \
|
|
hw_tsfm_mac)
|
|
|
|
#define iot_sg_cco_handle_module_id_rpt(sta_mac, module_id, len)
|
|
|
|
#define iot_sg_cco_handle_version_info_rpt(sta_mac, data, len)
|
|
|
|
#define iot_sg_cco_handle_tsfm_feature_rpt(sta_mac)
|
|
|
|
#define iot_sg_cco_internal_mr_data_handle(cmd_entry, pkt) (ERR_FAIL)
|
|
|
|
#define iot_sg_cco_set_sta_clct_param_conf_ret(sta_mac, result)
|
|
|
|
#define iot_sg_cco_handle_meter_param_rpt(sta_mac, pm_type, zc_type)
|
|
|
|
#define iot_sg_cco_handle_sec_node_chip_id_info_rpt(meter_mac, id_len, \
|
|
chip_id_ptr, super_cap, fix_position)
|
|
|
|
#define iot_sg_cco_handle_storage_dev_type_rpt(minute_clct_flag, sta_mac)
|
|
|
|
#define iot_sg_cco_handle_lock_time_rpt(sta_mac, net_lock_time, abn_lock_time)
|
|
|
|
#define iot_sg_cco_check_for_pm_chg(pm_mac, chg_status)
|
|
|
|
#define iot_sg_cco_sender_is_intern_type(sender) (ERR_FAIL)
|
|
|
|
#define iot_sg_cco_intern_exceed_con_cnt() (1)
|
|
|
|
#define iot_sg_cco_get_concurrency_limit(con_mr_dur) (0)
|
|
|
|
#define iot_sg_cco_add_wl_entry(count, rm_ts, node)
|
|
|
|
#define iot_sg_cco_add_bl_entry(count, node)
|
|
|
|
#define iot_sg_cco_remove_wl_entry(count, array_mac_addr)
|
|
|
|
#define iot_sg_cco_set_wl_state_internal(wl_state, force_flag) (0)
|
|
|
|
#define iot_sg_cco_update_wl_state_to_pib(wl_state)
|
|
|
|
#define iot_sg_cco_get_sta_entry_by_index(sta_index) (NULL)
|
|
|
|
#define iot_sg_cco_get_tsfm_detect_timeout_default() (0)
|
|
|
|
#define iot_sg_cco_set_evt_rpt_flag(intf_type, enable_flag)
|
|
|
|
#define iot_sg_cco_get_meter_info(start_index, count) (NULL)
|
|
|
|
#define iot_sg_cco_get_sta_entry_by_pm(pm_addr) (NULL)
|
|
|
|
#define iot_sg_cco_ext_task_get_send_type(send_cnt) (0)
|
|
|
|
#define iot_sg_cco_get_rtc_bcd(tm)
|
|
|
|
#define iog_sg_cco_handle_tsfm_detect_data_pw(flw_flag, node_cnt, data, \
|
|
sta_mac) (ERR_FAIL)
|
|
|
|
#define iot_sg_cco_rt_mr_reset_pm_state()
|
|
|
|
#define iot_sg_cco_nw_mac_list_check() (0)
|
|
|
|
#define iot_sg_cco_check_evt_rpt_filter(sta_mac, data, len) (ERR_FAIL)
|
|
|
|
#define iot_sg_cco_bd_launch_sn_inc()
|
|
#define iot_sg_cco_get_receiving_upgrade_file_flag() (1)
|
|
|
|
#define iot_sg_cco_is_3phase_dev(dev_type) (0)
|
|
|
|
#define iot_sg_cco_get_clct_di_by_idx(idx, proto_type) (0)
|
|
|
|
#define iot_sg_cco_restart_wl_timer(interval)
|
|
|
|
#define iot_sg_cco_update_sta_clct_param_to_pib(meter, data_len, crc, \
|
|
clct_period, enabled, proto_type, type, task_id)
|
|
|
|
#define iot_sg_cco_set_base_info_bitmap(sta_entry, element)
|
|
|
|
#define iot_sg_cco_get_base_info_bitmap(sta_entry, element) (0)
|
|
|
|
#endif /* PLC_SUPPORT_CCO_ROLE && IOT_SMART_GRID_ENABLE */
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* IOT_SG_CCO_H */
|