154 lines
5.6 KiB
C
154 lines
5.6 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_BRM_MR_H
|
|
#define IOT_BRM_MR_H
|
|
|
|
/* os shim includes */
|
|
#include "os_types_api.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if (IOT_BRM_ENABLE && PLC_SUPPORT_STA_ROLE)
|
|
|
|
/* define the maximum number of customers supported */
|
|
#define IOT_BRM_MR_CUSTOMER_INVALID 0xFF
|
|
|
|
|
|
/* meter read canmmand prio defining */
|
|
typedef enum {
|
|
iot_brm_mr_cmd_prio_0,
|
|
iot_brm_mr_cmd_prio_1,
|
|
iot_brm_mr_cmd_prio_max,
|
|
} iot_brm_mr_cmd_prio_t;
|
|
|
|
/* meter read canmmand type defining */
|
|
typedef enum {
|
|
/* normal connectionless meter read from sg app */
|
|
iot_brm_mr_type_normal,
|
|
/* connectionless meter read for assembly check */
|
|
iot_brm_mr_type_ass_chk,
|
|
/* connectionless transmit forward frame witch from sg app */
|
|
iot_brm_mr_type_fwd_sg,
|
|
/* connectionless transmit forward frame from rs485 */
|
|
iot_brm_mr_type_fwd_rs485,
|
|
/* connectionless transmit frame witch from rs485 */
|
|
iot_brm_mr_type_nor_rs485,
|
|
/* connectionless transmit forward frame from multifunction rs485 */
|
|
iot_brm_mr_type_fwd_mf_rs485,
|
|
/* connectionless transmit frame witch from multifunction rs485 */
|
|
iot_brm_mr_type_nor_mf_rs485,
|
|
} iot_brm_mr_type_t;
|
|
|
|
/**
|
|
* @brief - callback function to transfer data to customers after read done
|
|
* @param arg: meter reading buffer handle
|
|
* @param ext_sn: meter reading buffer handle
|
|
* @param addr: meter reading buffer handle
|
|
* @param rsp_bm: eter read respose status bitmap. each bit reflect respose
|
|
* status for a frame. the lowest bit corresponding to the first frame
|
|
* in the read request.
|
|
* @param pkt: iot_pkt with mr response, the ownership will be transferred
|
|
* to callback. if it's NULL, meter reading timeout.
|
|
* @param type: meter read canmmand type, see iot_brm_mr_type_t.
|
|
*/
|
|
typedef void (*iot_brm_mr_done_func_t)(void *arg, uint16_t ext_sn,
|
|
uint8_t *addr, iot_pkt_t *pkt, uint16_t rsp_bm, iot_brm_mr_type_t type);
|
|
|
|
/**
|
|
* @brief iot_brm_mr_buf_refresh() - meter reading buffer refresh
|
|
*/
|
|
void iot_brm_mr_buf_refresh(void);
|
|
|
|
/**
|
|
* @brief iot_brm_mr_buf_cmd_match() - matching Meter Reading Response Packet
|
|
* @param sn: seq num of meter reading response.
|
|
* @param pkt: iot_pkt with meter reading response. this pkt will be
|
|
* consumed
|
|
* @param rsp_bm: eter read respose status bitmap. each bit reflect respose
|
|
* status for a frame. the lowest bit corresponding to the first frame
|
|
* in the read request.
|
|
* @retval 1 -- match success.
|
|
* @retval 0 -- match fail.
|
|
*/
|
|
uint8_t iot_brm_mr_buf_cmd_match(uint16_t sn, iot_pkt_t *pkt,
|
|
uint16_t rsp_bm);
|
|
|
|
/**
|
|
* @brief iot_brm_mr_buf_cmd_add() - add a meter reading command to mr buff
|
|
* @param customer_num: customer num.
|
|
* @param dest_addr: destination node address, little endian.
|
|
* @param ext_sn: customer-initiated meter reading seq number
|
|
* @param proto_type: dest node proto type, not currently used. see
|
|
* IOT_BRM_PROTO_TYPE_XXXX.
|
|
* @param pkt: meter reading packet. this pkt will be consumed.
|
|
* @param timeout: command timeout, uint is ms.
|
|
* @param prio: command prio.
|
|
* @param type: meter read canmmand type, see iot_brm_mr_type_t.
|
|
* @param ppm_fix: current transmission PPM fix value.
|
|
* @retval ERR_OK -- for success case.
|
|
* @retval othersie -- error code.
|
|
*/
|
|
uint8_t iot_brm_mr_buf_cmd_add(uint8_t customer_num,
|
|
uint8_t *dest_addr, uint16_t ext_sn, uint8_t proto_type, iot_pkt_t *pkt,
|
|
uint32_t timeout, iot_brm_mr_cmd_prio_t prio, iot_brm_mr_type_t type,
|
|
int8_t ppm_fix);
|
|
|
|
/**
|
|
* @brief iot_brm_mr_buf_cmd_clean() - clean the read command in Mr buf
|
|
* @param cus_id: specified customer id.
|
|
* @param addr: specified destination address
|
|
*/
|
|
void iot_brm_mr_buf_cmd_clean(uint8_t cus_id, uint8_t *addr);
|
|
|
|
/**
|
|
* @brief iot_brm_mr_buf_customer_register() - register a customer in meter
|
|
* reading buffer.
|
|
* @param func: callback function for customer receiving mr response.
|
|
* @param arg: callback function arg.
|
|
* @retval: customer id, if equal to IOT_BRM_MR_CUSTOMER_INVALID, regist fail.
|
|
*/
|
|
uint8_t iot_brm_mr_buf_customer_register(
|
|
iot_brm_mr_done_func_t func, void *arg);
|
|
|
|
/**
|
|
* @brief iot_brm_mr_buf_customer_deregister() - deegister a customer in meter
|
|
* reading buffer.
|
|
* @param cus_id: specified customer id;
|
|
*/
|
|
void iot_brm_mr_buf_customer_deregister(uint8_t cus_id);
|
|
|
|
/**
|
|
* @brief iot_brm_mr_buf_init() - initialize a meter reading buffer
|
|
* @retval ERR_OK -- for success case.
|
|
* @retval othersie -- error code.
|
|
*/
|
|
uint32_t iot_brm_mr_buf_init(void);
|
|
|
|
/**
|
|
* @brief iot_brm_mr_buf_init() - deinit a meter reading buffer
|
|
* @param handle: meter reading buffer handle
|
|
*/
|
|
void iot_brm_mr_buf_deinit(void);
|
|
|
|
#endif /* IOT_BRM_ENABLE && PLC_SUPPORT_STA_ROLE */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* IOT_BRM_MR_H */
|