Files
kunlun/app/brm/inc/iot_brm_mr.h
2024-09-28 14:24:04 +08:00

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 */