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

385 lines
13 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_NW_H
#define IOT_SG_STA_NW_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_fr.h"
#ifdef __cplusplus
extern "C" {
#endif
#if (PLC_SUPPORT_STA_ROLE && IOT_NW_APP_ENABLE)
/**
* @brief: iot_sg_sta_nw_sec_check - nw protocol security check.
* @param data: the pointer to header in nw application protocol data.
* @param len: length of data.
* @param is_mr_pkt: the pointer to the flag of meter read request data.
* @retval: ERR_OK -- check success.
* @retval: ERR_INVAL -- check fail.
*/
uint32_t iot_sg_sta_nw_sec_check(uint8_t *data, uint32_t len,
bool_t *is_mr_pkt);
/**
* @brief: compare nw sequeue in application protocol data.
* @param dst_hdr: pointer to first nw application protocol data header
* to compare.
* @param src_hdr: pointer to second nw application protocol data header
* to compare.
* @retval: 1 -- the sequeue is the same.
* @retval: 0 -- the sequeue isn't the same.
*/
uint8_t iot_sg_sta_nw_sn_cmp(uint8_t *dst_hdr, uint8_t *src_hdr);
/**
* @brief: get pm address in pkt.
* @param pkt: the iot_pkt with application protocol data in it.
* @param addr: the pointer to address cache.
* @retval: ERR_OK -- get the address successfully.
* @retval: ERR_FAIL -- get address failure.
*/
uint32_t iot_sg_sta_nw_get_pm_addr(iot_pkt_t *pkt, uint8_t *addr);
/**
* @brief: check if cached data for the request exist.
* @param pkt: the iot_pkt with application protocol data in it
* @param link_type: link type, see IOT_SG_LINK_TYPE_XXX.
* @retval: ERR_OK -- cache not exist
* @retval: ERR_EXIST -- cache exist
*/
uint32_t iot_sg_sta_nw_queue_app_cache_check(iot_pkt_t *pkt,
uint8_t link_type);
/**
* @brief: drop nw request in queue.
* @param hdr: the pointer to header of req data.
* @param reason: reason of drop request.
*/
void iot_sg_sta_nw_queue_app_drop(uint8_t *hdr, uint8_t reason);
/**
* @brief: parse nw meter reading data.
* @param hdr: the pointer to header of application protocol data.
* @retval: otherwise -- parse fail
* @retval: ERR_OK -- parse mr frame successfully.
*/
uint32_t iot_sg_sta_nw_parse_mr_frame(uint8_t *hdr);
/**
* @brief: nw meter reading counter.
* @param hdr: the pointer to header of application protocol data.
*/
void iot_sg_sta_nw_mr_counter_inc(uint8_t *hdr);
/**
* @brief: send nw bitmap power off event message.
* @param msg_type: type of message, see IOT_PLC_MSG_TYPE_XXX
* @retval: ERR_OK - event sent out successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
uint32_t iot_sg_sta_nw_pd_evt_bm_send(uint8_t msg_type);
/**
* @brief: send nw address power off event message.
* @param msg_type: type of message, see IOT_PLC_MSG_TYPE_XXX
* @retval: ERR_OK - event sent out successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
uint32_t iot_sg_sta_nw_pd_evt_addrs_send(uint8_t msg_type);
/**
* @brief: send nw power on event message.
* @param flag_bcast: flag of bcast.
* @retval: ERR_OK - event sent out successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
uint32_t iot_sg_sta_nw_power_on_evt_send(uint8_t flag_bcast);
/**
* @brief: send nw event message.
* @param addr: mac address of the power meter of the event
* @param data_ptr: pointer to the event data.
* @param len: length size of event data.
* @param new_evt 0: the event isn't new, 1: the event is new.
* @param rpt_type: report event type, see IOT_SG_STA_RPT_XXX_XXX_EVT.
* @retval: ERR_OK - event sent out successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
uint32_t iot_sg_sta_nw_event_send(uint8_t *addr, uint8_t *data_ptr,
uint32_t len, uint8_t new_evt, uint8_t rpt_type);
/**
* @brief: send nw event message with custom seq.
* @param addr mac address of the power meter of the event
* @param data_ptr pointer to the event data.
* @param len length size of event data.
* @param seq seq number of this event message
* @param rpt_type report event type, see IOT_SG_STA_RPT_XXX_XXX_EVT.
* @retval: ERR_OK - event sent out successfully.
* @retval: otherwise - error code. see ERR_XXX
* @date 2023-11-04
*/
uint32_t iot_sg_sta_nw_event_send_with_seq(uint8_t *addr, uint8_t *data_ptr,
uint32_t len, uint16_t seq, uint8_t rpt_type);
/**
* @brief: handle nan wang app protocol for GW_APP_PORT_UPGRADE
* this function always consume the pkt.
* @param pkt: the iot_pkt with nw upgrade data in it.
*/
void iot_sg_sta_nw_handle_app_upgrade(iot_pkt_t *pkt);
/**
* @brief: send a start ack reply to CCo
* @param id: upgrading session id
* @param msg_type: type for sending the message
* @param result: result to the start upgrading command
*/
void iot_sg_sta_nw_send_start_ack(uint32_t id, uint8_t msg_type,
uint32_t result);
/**
* @brief: send a upgrade data ack reply to CCo
* @param id: upgrading session id
* @param result: result to the upgrad data command
*/
void iot_sg_sta_nw_send_upgrade_data_ack(uint32_t id, uint32_t result);
/**
* @brief: send a finishe ack reply to CCo
* @param id: upgrading session id
* @param msg_type: type for sending the message
* @param result: result to the finish upgrading command
*/
void iot_sg_sta_nw_send_exe_ack(uint32_t id, uint8_t msg_type,
uint32_t result);
/**
* @brief: send a stop upgrade ack reply to CCo
* @param id: upgrading session id
* @param result: result to the stop upgrading command
*/
void iot_sg_sta_nw_send_stop_ack(uint32_t id, uint32_t result);
/**
* @brief: send query reply to STA
* @param id: upgrading session id
* @param start_seq: sn of the 1st block being queried
* @param status: STA's upgrading status
* @param bitmap_pkt: an iot_pkt with bitmap in its data block
* @param msg_type: msg_type used to send the reply
*/
void iot_sg_sta_nw_send_query_reply(uint32_t id, uint32_t start_seq,
uint16_t status, iot_pkt_t *bitmap_pkt, uint8_t msg_type);
/**
* @brief: rtc update handle
* @param ts: ts for the delta between cco rtc and the
* base timer 2000.1.1 00:00:00, unit is 1s.
* @param cco_ntb: cco ntb of corresponding date, unit is 1NTB.
*/
void iot_sg_sta_nw_rtc_update_rpt(uint32_t ts, uint32_t cco_ntb);
/**
* @brief nw 21 meter module mac get.
* @param mac: module mac.
*/
void iot_sg_sta_nw_21meter_mode_mac_get(uint8_t *mac);
#else /* PLC_SUPPORT_STA_ROLE && IOT_NW_APP_ENABLE */
#define iot_sg_sta_nw_sec_check(data, total_len, is_mr_pkt) (ERR_INVAL)
#define iot_sg_sta_nw_sn_cmp(dst_hdr, src_hdr) (0)
#define iot_sg_sta_nw_get_pm_addr(pkt, addr) (ERR_FAIL)
#define iot_sg_sta_nw_queue_app_cache_check(pkt, link_type) (ERR_EXIST)
#define iot_sg_sta_nw_queue_app_drop(hdr, reason)
#define iot_sg_sta_nw_parse_mr_frame(hdr) (ERR_FAIL)
#define iot_sg_sta_nw_mr_counter_inc(hdr)
#define iot_sg_sta_nw_pd_evt_bm_send(msg_type) (ERR_NOT_EXIST)
#define iot_sg_sta_nw_pd_evt_addrs_send(msg_type) (ERR_NOT_EXIST)
#define iot_sg_sta_nw_power_on_evt_send(flag_bcast) (ERR_NOT_EXIST)
#define iot_sg_sta_nw_event_send(addr, data_ptr, len, new_evt, \
rtp_type) (ERR_FAIL)
#define iot_sg_sta_nw_handle_app_upgrade(pkt) IOT_ASSERT(0)
#define iot_sg_sta_nw_send_start_ack(id, msg_type, result)
#define iot_sg_sta_nw_send_upgrade_data_ack(id, result)
#define iot_sg_sta_nw_send_exe_ack(id, msg_type, result)
#define iot_sg_sta_nw_send_stop_ack(id, result)
#define iot_sg_sta_nw_send_query_reply(id, start_seq, status, bitmap_pkt, \
msg_type)
#define iot_sg_sta_nw_rtc_update_rpt(ts, cco_ntb)
#define iot_sg_sta_nw_21meter_mode_mac_get(mac)
#define iot_sg_sta_nw_event_send_with_seq(addr, data_ptr, \
len, seq, rpt_type) (ERR_FAIL)
#endif /* PLC_SUPPORT_STA_ROLE && IOT_NW_APP_ENABLE */
/**
* @brief: handle nw meter read response from driver.
* @param data_type: type of response data.
* @param rsp_pkt: the rsp_pkt with response data in it
*/
void iot_sg_sta_nw_mr_done_intern(uint8_t data_type,
iot_pkt_t *rsp_pkt);
/**
* @brief: handle nw other message.
* this function always consume the pkt.
* @param pkt: the iot_pkt with application protocol data in it.
* @retval: ERR_OK - case successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
uint32_t iot_sg_sta_nw_handle_app_other(iot_pkt_t *pkt);
/**
* @brief: handle nw plc message.
* this function always consume the pkt.
* @param pkt: the iot_pkt with nw message in it.
* @param data: msdu data payload in pkt.
* @retval: ERR_OK - case successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
void iot_sg_sta_nw_msg_handle(iot_pkt_t *pkt,
uint8_t *data);
/**
* @brief: nw meter state score query response.
* @param: state score info.
* @retval: ERR_OK - case successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
uint32_t iot_sg_sta_nw_score_query_resp(iot_sg_sta_score_info_t *score_info);
/**
* @brief: handle nw ctrl protocol message.
* this function always consume the pkt.
* @param pkt: the iot_pkt with gw message in it.
*/
void iot_sg_sta_nw_ctrl_proto_msg_handle(iot_pkt_t *pkt);
/**
* @brief: nw query neighbor node info response.
* @param rpt: neighbor node info from cvg report.
* @param flag_broadcast: flag of broadcast request.
* @retval: ERR_OK - case successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
uint32_t iot_sg_sta_nw_neighbor_info_resp(iot_plc_neighbor_dev_rpt_t *rpt,
uint8_t flag_broadcast);
/**
* @brief: nw protocol correct time format check.
* @param data: data.
* @param len: data len.
* @retval: ERR_OK -- check success.
* @retval: otherwise -- check false, see ERR_XXX.
*/
uint32_t iot_sg_sta_nw_correct_time_req_check(uint8_t *data, uint32_t len);
/**
* @brief: meter state score report.
* @param new_evt: new event flag.
* @param meter_cnt: number of meters to be reported scoring results.
* @retval: ERR_OK - case successfully.
* @retval: otherwise - error code. see ERR_XXX
*/
uint32_t iot_sg_sta_nw_meter_state_score_report(uint8_t new_evt,
uint8_t meter_cnt);
/**
* @brief: meter state score event handle.
* @param fn: function of event ack from cco, see IOT_SG_STA_EVENT_RPT_XXX.
*/
void iot_sg_sta_nw_score_event_func_handle(uint8_t fn);
/**
* @brief report edge computing health event to cco.
*
* @param addr power meter address.
* @param score meter score.
* @param bitmap score desc bitmap.
*/
uint32_t iot_sg_sta_nw_report_ec_health_event(
uint8_t *addr, uint8_t score, iot_sg_sta_drv_score_bit_map_t *bitmap);
/**
* @brief report edge computing overvoltage event to cco.
*
* @param addr power meter address.
* @param is_three_phase is three phase
* @param av voltage value of phase-A, format is bin, unit is V
* @param bv voltage value of phase-B, format is bin, unit is V
* @param cv voltage value of phase-C, format is bin, unit is V
*/
uint32_t iot_sg_sta_nw_report_ec_overvoltage_event(uint8_t *addr,
uint8_t is_three_phase, uint16_t av, uint16_t bv, uint16_t cv);
/**
* @brief report edge computing undervoltage event to cco.
*
* @param addr power meter address.
* @param is_three_phase is three phase
* @param av voltage value of phase-A, format is bin, unit is V
* @param bv voltage value of phase-B, format is bin, unit is V
* @param cv voltage value of phase-C, format is bin, unit is V
*/
uint32_t iot_sg_sta_nw_report_ec_undervoltage_event(uint8_t *addr,
uint8_t is_three_phase, uint16_t av, uint16_t bv, uint16_t cv);
/**
* @brief report edge computing second pulse event to cco.
*
* @param addr power meter address.
* @param err_val clock error value compare for 1s,
* unit is 1us.
*/
uint32_t iot_sg_sta_nw_report_ec_second_pulse_event(
uint8_t *addr, uint16_t err_val);
#ifdef __cplusplus
}
#endif
#endif /* IOT_SG_STA_NW_H */