84 lines
2.1 KiB
C
84 lines
2.1 KiB
C
/*
|
|
* Copyright (c) CompanyNameMagicTag 2019-2020. All rights reserved.
|
|
* Description: MRS meter-reading list.
|
|
*/
|
|
|
|
#ifndef __MRS_CCO_MR_LIST_H__
|
|
#define __MRS_CCO_MR_LIST_H__
|
|
|
|
#include "mrs_config.h"
|
|
#include "mrs_proto_1376_2.h"
|
|
#include "mrs_common_plc.h"
|
|
#include "mrs_msg.h"
|
|
|
|
#if defined(PRODUCT_CFG_PRODUCT_TYPE_CCO)
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
typedef enum {
|
|
MRS_CCO_MR_TYPE_XR, /* read meter by transparent treaty: AFN=13H-F1 */
|
|
MRS_CCO_MR_TYPE_PR, /* parallel read meter: AFN=F1H-F1 */
|
|
MRS_CCO_MR_TYPE_MAX
|
|
} mrs_cco_mr_type;
|
|
|
|
#define MRS_MR_TASK_PRI_LO (0)
|
|
#define MRS_MR_TASK_PRI_ML (1)
|
|
#define MRS_MR_TASK_PRI_MH (2)
|
|
#define MRS_MR_TASK_PRI_HI (3)
|
|
|
|
#define MRS_XR_13H_F1 (0)
|
|
#define MRS_XR_13H_F255 (1)
|
|
#define MRS_XR_02H_F1 (2)
|
|
#define MRS_XR_02H_F255 (3)
|
|
#define MRS_PR_F1H_F1 (4)
|
|
|
|
struct mr_task_node;
|
|
|
|
typedef td_u32 (*mrs_create_mr_uart_frame)(td_pbyte *, td_u16 *, struct mr_task_node *, td_pbyte, td_u16);
|
|
typedef td_u32 (*mrs_send_uart_frame)(td_pbyte, td_u16);
|
|
|
|
/* struct of read meter task node */
|
|
typedef struct mr_task_node {
|
|
EXT_LIST link;
|
|
td_u8 src_addr[MRS_METER_ADDR_LEN];
|
|
td_u8 dst_addr[MRS_METER_ADDR_LEN];
|
|
td_u8 type : 4;
|
|
td_u8 option : 4;
|
|
td_u8 protocol;
|
|
td_u8 priority;
|
|
td_u8 seq;
|
|
td_u8 tx_max;
|
|
td_u8 timeout;
|
|
td_u16 plc_seq;
|
|
td_u32 rx_time;
|
|
mrs_plc_frame_data *plc_frame;
|
|
mrs_create_mr_uart_frame create_uart_frame;
|
|
mrs_send_uart_frame send_uart_frame;
|
|
} mr_task_node;
|
|
|
|
typedef struct {
|
|
td_u32 item_num;
|
|
EXT_LIST mr_list;
|
|
} mr_task_list_head;
|
|
|
|
/* read meter list initialization */
|
|
td_void mrs_cco_mr_list_init(mr_task_list_head *head);
|
|
/* insert meter */
|
|
td_u32 mrs_cco_mr_list_insert(mr_task_node *node);
|
|
/* remove meter */
|
|
td_void mrs_cco_mr_list_remove(mr_task_node *node);
|
|
/* periodically check read meter queue status */
|
|
td_void mrs_mr_queue_check_on_timer(td_void);
|
|
|
|
#define mrs_cco_mr_notify() mrs_msg_queue_send(MRS_MSG_ID_MR_NOTIFY, 0, 0, 0)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* defined(PRODUCT_CFG_PRODUCT_TYPE_CCO) */
|
|
#endif /* __MRS_CCO_MR_LIST_H__ */
|
|
|