323 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			323 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/****************************************************************************
 | 
						|
 | 
						|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
 | 
						|
 | 
						|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | 
						|
be copied by any method or incorporated into another program without
 | 
						|
the express written consent of Aerospace C.Power. This Information or any portion
 | 
						|
thereof remains the property of Aerospace C.Power. The Information contained herein
 | 
						|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | 
						|
liability for its use in any way and conveys no license or title under
 | 
						|
any patent or copyright and makes no representation or warranty that this
 | 
						|
Information is free from patent or copyright infringement.
 | 
						|
 | 
						|
****************************************************************************/
 | 
						|
#ifndef IOT_SG_STA_EXT_H
 | 
						|
#define IOT_SG_STA_EXT_H
 | 
						|
 | 
						|
/* os shim includes */
 | 
						|
#include "os_types_api.h"
 | 
						|
 | 
						|
/* common includes */
 | 
						|
#include "iot_pkt_api.h"
 | 
						|
#include "iot_errno_api.h"
 | 
						|
 | 
						|
/* smart grid internal header files */
 | 
						|
#include "iot_sg_sta.h"
 | 
						|
#include "iot_sg_sta_ext_ai.h"
 | 
						|
#include "iot_sg_sta_ext_fj.h"
 | 
						|
#include "iot_sg_sta_ext_js.h"
 | 
						|
#include "iot_sg_sta_ext_gw.h"
 | 
						|
#include "iot_sg_sta_ext_lr.h"
 | 
						|
#include "iot_sg_sta_ext_nli.h"
 | 
						|
#include "iot_sg_sta_ext_nw.h"
 | 
						|
#include "iot_sg_sta_ext_score.h"
 | 
						|
#include "iot_sg_sta_ext_tm.h"
 | 
						|
#include "iot_sg_sta_ext_x4.h"
 | 
						|
#include "iot_sg_sta_ext_ec.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* define extend function read data timeout time,
 | 
						|
 * uint is IOT_SG_STA_EXT_SM_DELAY
 | 
						|
 */
 | 
						|
#define IOT_SG_STA_EXT_READ_DATA_TIMEOUT        (5)
 | 
						|
 | 
						|
/* define extend function state machine trigger delay time, uint is 1ms */
 | 
						|
#define IOT_SG_STA_EXT_SM_DELAY                 (2 * 1000)
 | 
						|
/* define extend function state machine next meter delay time, uint is 1ms */
 | 
						|
#define IOT_SG_STA_EXT_SM_METER_DELAY           (500)
 | 
						|
/* define extend function state machine trigger min delay time, uint is 1ms */
 | 
						|
#define IOT_SG_STA_EXT_SM_MIN_DELAY             (50)
 | 
						|
/* define drv read meter timeout, uint is 100ms */
 | 
						|
#define IOT_SG_STA_EXT_DRV_READ_TIMEOUT         (20)
 | 
						|
 | 
						|
/* define extend function collect task interval time, uint is 1s */
 | 
						|
#define IOT_SG_STA_EXT_CLCT_PRD_1MIN            (1 * 60)
 | 
						|
#define IOT_SG_STA_EXT_CLCT_PRD_5MIN            (5 * 60)
 | 
						|
#define IOT_SG_STA_EXT_CLCT_PRD_15MIN           (15 * 60)
 | 
						|
#define IOT_SG_STA_EXT_CLCT_PRD_30MIN           (30 * 60)
 | 
						|
#define IOT_SG_STA_EXT_CLCT_PRD_60MIN           (60 * 60)
 | 
						|
#define IOT_SG_STA_EXT_CLCT_PRD_1DAY            (60 * 60 * 24)
 | 
						|
 | 
						|
/* define collection period in collection task structure */
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_DEFAULT     0
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_15MIN       3
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_30MIN       4
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_60MIN       5
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_DAY         6
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_15MIN_LR    13
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_30MIN_LR    14
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_60MIN_LR    15
 | 
						|
#define IOT_SG_EXT_CLCT_TASK_PERIOD_SINGLE      16
 | 
						|
 | 
						|
/* define load curve state */
 | 
						|
#define IOT_SG_STA_EXT_LC_STATE_IDLE              (0)
 | 
						|
#define IOT_SG_STA_EXT_LC_STATE_SEND              (1)
 | 
						|
#define IOT_SG_STA_EXT_LC_STATE_WAIT              (2)
 | 
						|
#define IOT_SG_STA_EXT_LC_STATE_END               (3)
 | 
						|
 | 
						|
/* type of record for power event */
 | 
						|
#define IOT_SG_STA_POWER_REC_TYPE_UP              (0)
 | 
						|
#define IOT_SG_STA_POWER_REC_TYPE_DOWN            (1)
 | 
						|
#define IOT_SG_STA_POWER_REC_TYPE_CLEAR           (2)
 | 
						|
 | 
						|
/* define index of load curve configuration */
 | 
						|
#define IOT_SG_STA_EXT_LC_GX_CFG                  (0)
 | 
						|
#define IOT_SG_STA_EXT_LC_XIAN_CFG                (1)
 | 
						|
#define IOT_SG_STA_EXT_LC_XIAN_3P_CFG             (2)
 | 
						|
#define IOT_SG_STA_EXT_LC_PEIWANG                 (3)
 | 
						|
 | 
						|
/* define extend function read load data interval time, uint is 1s */
 | 
						|
#define IOT_SG_STA_EXT_LC_CFG_PRD_1MIN            (60)
 | 
						|
#define IOT_SG_STA_EXT_LC_CFG_PRD_5MIN            (5 * 60)
 | 
						|
#define IOT_SG_STA_EXT_LC_CFG_PRD_15MIN           (15 * 60)
 | 
						|
#define IOT_SG_STA_EXT_LC_CFG_PRD_30MIN           (30 * 60)
 | 
						|
#define IOT_SG_STA_EXT_LC_CFG_PRD_60MIN           (60 * 60)
 | 
						|
 | 
						|
#if (IOT_SMART_GRID_EXT_FUNC_ENABLE)
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: sta extended function init.
 | 
						|
 * @retval: ERR_OK    --   initialization success
 | 
						|
 * @retval: otherwise --   other value for failed case, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_sta_ext_init(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: sta extended function deinit.
 | 
						|
 */
 | 
						|
void iot_sg_sta_ext_deinit(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: state machine function for sta extension function.
 | 
						|
 */
 | 
						|
void iot_sg_sta_ext_sm_func(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: add meter expansion function.
 | 
						|
 * @param node: the pointer to the meter in node list.
 | 
						|
 * @retval: ERR_OK    --   add meter success
 | 
						|
 * @retval: otherwise --   other value for failed case, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_sta_ext_meter_add(iot_sg_sta_node_desc_t *node);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: delete meter expansion function.
 | 
						|
 * @param node: the pointer to the meter in node list.
 | 
						|
 * @retval: ERR_OK    --   delete meter success
 | 
						|
 * @retval: otherwise --   other value for failed case, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_sta_ext_meter_delete(iot_sg_sta_node_desc_t *node);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief handle extend read data response from meter.
 | 
						|
 * @param seq:       sequence of extend read request.
 | 
						|
 * @param data_type: data type, see IOT_SG_STA_DATA_TYPE_XXX.
 | 
						|
 * @param resp_data: extend read data of response from meter.
 | 
						|
 * @param resp_len:  response data length.
 | 
						|
 * @param req_data:  request data of extend read function.
 | 
						|
 * @param req_len:   request data length.
 | 
						|
 */
 | 
						|
void iot_sg_ext_read_data_handle(uint16_t seq,
 | 
						|
    uint8_t data_type, uint8_t *resp_data, uint16_t resp_len,
 | 
						|
    uint8_t *req_data, uint16_t req_len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: sta extension function to reset next read data time.
 | 
						|
 */
 | 
						|
void iot_sg_sta_ext_tm_reset(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief set integral point time.
 | 
						|
 * @param tm: start time.
 | 
						|
 * @param interval: interval time, uint is 1s.
 | 
						|
 * @param after_flag: 1 - set integral point time after the start time.
 | 
						|
 *                    0 - set integral point time before the start time.
 | 
						|
 */
 | 
						|
void iot_sg_ext_set_integral_point(iot_time_tm_t *tm,
 | 
						|
    int64_t interval, uint8_t after_flag);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: state machine stop for sta extension function.
 | 
						|
 */
 | 
						|
void iot_sg_sta_ext_sm_stop_action(void);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief: state machine goto next action for sta extension function.
 | 
						|
 * @param dur: delay time.
 | 
						|
 */
 | 
						|
void iot_sg_sta_ext_sm_next_action(uint32_t dur);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: sta extend task 645 meter read nack check.
 | 
						|
 * @param req_data:  request data of extend read function.
 | 
						|
 * @param req_len:   request data length.
 | 
						|
 * @param resp_data: extend read data of response from meter.
 | 
						|
 * @param resp_len:  response data length.
 | 
						|
 * @param ext_addr:  extend task current meter mac.
 | 
						|
 * @retval: ERR_OK    --   abnormal ack.
 | 
						|
 * @retval: otherwise --   normal ack.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_ext_read_645_nack_check(uint8_t *req_data,
 | 
						|
    uint16_t req_len, uint8_t *resp_data, uint16_t resp_len, uint8_t *ext_addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  sta extend task 69845 meter read apdu sn get.
 | 
						|
 * @retval: apdu sn.
 | 
						|
 */
 | 
						|
uint8_t iot_sg_sta_ext_get_69845_apdu_sn(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  sta extend function dl/t645 - 97 meter response data handle.
 | 
						|
 * @param req_data:  request data of extend read function.
 | 
						|
 * @param req_len:   request data length.
 | 
						|
 * @param resp_data: extend read data of response from meter.
 | 
						|
 * @param resp_len:  response data length.
 | 
						|
 * @param ext_addr:  extend task current meter mac.
 | 
						|
 * @retval: ERR_OK    --   handle success.
 | 
						|
 * @retval: otherwise --   handle fail, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_ext_read_645_97_data_handle(uint16_t seq,
 | 
						|
    uint8_t data_type, uint8_t *resp_data, uint16_t resp_len,
 | 
						|
    uint8_t *req_data, uint16_t req_len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  sta extend function dl/t 645 - 07 meter response data handle.
 | 
						|
 * @param req_data:  request data of extend read function.
 | 
						|
 * @param req_len:   request data length.
 | 
						|
 * @param resp_data: extend read data of response from meter.
 | 
						|
 * @param resp_len:  response data length.
 | 
						|
 * @param ext_addr:  extend task current meter mac.
 | 
						|
 * @param is_nack: returns whether the pkt is NACK
 | 
						|
 * @retval: ERR_OK    --   handle success.
 | 
						|
 * @retval: otherwise --   handle fail, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_ext_read_645_07_data_handle(uint16_t seq,
 | 
						|
    uint8_t data_type, uint8_t *resp_data, uint16_t resp_len,
 | 
						|
    uint8_t *req_data, uint16_t req_len, uint8_t *is_nack);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:  sta extend function dl/t 698.45 meter response data handle.
 | 
						|
 * @param req_data:  request data of extend read function.
 | 
						|
 * @param req_len:   request data length.
 | 
						|
 * @param resp_data: extend read data of response from meter.
 | 
						|
 * @param resp_len:  response data length.
 | 
						|
 * @param ext_addr:  extend task current meter mac.
 | 
						|
 * @retval: ERR_OK    --   handle success.
 | 
						|
 * @retval: otherwise --   handle fail, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_ext_read_698_data_handle(uint16_t seq,
 | 
						|
    uint8_t data_type, uint8_t *resp_data, uint16_t resp_len,
 | 
						|
    uint8_t *req_data, uint16_t req_len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: sta node time check;
 | 
						|
 * @param tm: node time.
 | 
						|
 * @param max_delta: task interval time.
 | 
						|
 * @retval: ERR_OK    --   check success.
 | 
						|
 * @retval: otherwise --   other value for failed case, see ERR_XXX.
 | 
						|
 */
 | 
						|
uint32_t iot_sg_sta_ext_node_tm_check(iot_time_tm_t *tm, int64_t max_delta);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: sta get lr data next collect time.
 | 
						|
 * @param start_ts: collect start time.
 | 
						|
 * @param period: collect period.
 | 
						|
 * @param curr_tm: current time.
 | 
						|
 * @retval: next collect time.
 | 
						|
 */
 | 
						|
iot_time_tm_t iot_sg_ext_get_next_lr_ts(iot_time_tm_t start_ts,
 | 
						|
    uint16_t period, iot_time_tm_t curr_tm);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: sta extend get min lenght of filled data.
 | 
						|
 * @param len:  length of data.
 | 
						|
 * @param fill_len:  length of data filled.
 | 
						|
 * @param unit_len: unit length of data.
 | 
						|
 * @retval: min length of data filled
 | 
						|
 */
 | 
						|
 | 
						|
uint8_t iot_sg_ext_get_min_data_len(uint8_t len,
 | 
						|
    uint8_t fill_len, uint8_t unit_len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief: sta extended function disable.
 | 
						|
 */
 | 
						|
void iot_sg_sta_ext_disable(void);
 | 
						|
 | 
						|
#else /* IOT_SMART_GRID_EXT_FUNC_ENABLE */
 | 
						|
 | 
						|
#define iot_sg_sta_ext_init() (ERR_NOSUPP)
 | 
						|
 | 
						|
#define iot_sg_sta_ext_deinit()
 | 
						|
 | 
						|
#define iot_sg_sta_ext_sm_func()
 | 
						|
 | 
						|
#define iot_sg_sta_ext_meter_add(node)
 | 
						|
 | 
						|
#define iot_sg_sta_ext_meter_delete(node)
 | 
						|
 | 
						|
#define iot_sg_ext_read_data_handle(seq, data_type, resp_data, resp_len, \
 | 
						|
    req_data, req_len)
 | 
						|
 | 
						|
#define iot_sg_sta_ext_tm_reset()
 | 
						|
 | 
						|
#define iot_sg_ext_set_integral_point(tm, interval, after_flag)
 | 
						|
 | 
						|
#define iot_sg_sta_ext_sm_stop_action()
 | 
						|
 | 
						|
#define iot_sg_sta_ext_sm_next_action(dur)
 | 
						|
 | 
						|
#define iot_sg_ext_read_645_nack_check(req_data, req_len, resp_data, \
 | 
						|
    resp_len, ext_addr) (ERR_FAIL)
 | 
						|
 | 
						|
#define iot_sg_sta_ext_get_69845_apdu_sn() (0)
 | 
						|
 | 
						|
#define iot_sg_ext_read_645_97_data_handle(seq, data_type, resp_data, \
 | 
						|
    resp_len, req_data, req_len) (ERR_NOSUPP)
 | 
						|
 | 
						|
#define iot_sg_ext_read_645_07_data_handle(seq, data_type, resp_data, \
 | 
						|
    resp_len, req_data, req_len, is_nack) (ERR_NOSUPP)
 | 
						|
 | 
						|
#define iot_sg_ext_read_698_data_handle(seq, data_type, resp_data, \
 | 
						|
    resp_len, req_data, req_len) (ERR_NOSUPP)
 | 
						|
 | 
						|
#define iot_sg_sta_ext_node_tm_check(tm, max_delta) (ERR_NOSUPP)
 | 
						|
 | 
						|
#define iot_sg_ext_get_next_lr_ts(start_ts, period, curr_tm) (0)
 | 
						|
 | 
						|
#define iot_sg_ext_get_min_data_len(len, fill_len, unit_len) (0)
 | 
						|
 | 
						|
#define iot_sg_sta_ext_disable()
 | 
						|
 | 
						|
#endif /* IOT_SMART_GRID_EXT_FUNC_ENABLE */
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif  /* IOT_SG_STA_EXT_H */
 |