inwudriver-weibo/app/mrs/proto/mrs_proto_645.h

76 lines
2.5 KiB
C
Raw Normal View History

/*
* Copyright (c) CompanyNameMagicTag 2019-2020. All rights reserved.
* Description: MRS protocol
*/
#ifndef __MRS_PROTO_645_H__
#define __MRS_PROTO_645_H__
#include "mrs_proto.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MRS_645_97_DATA_DI_SIZE 2
#define MRS_645_DATA_DI_SIZE 4
#define MRS_645_CTRL_READ_DATA 0x11
#define MRS_645_FRAME_LEN_MIN 12
#define MRS_645_FRAME_DATA_LEN_MAX 200
#define MRS_645_FRAME_LEN_MAX (MRS_645_FRAME_LEN_MIN + MRS_645_FRAME_DATA_LEN_MAX)
#define MRS_645_FRAME_1ST_HEAD_LEN 1
#define MRS_645_FRAME_METERADD_LEN 6
#define MRS_645_FRAME_2ND_HEAD_LEN 1
#define MRS_645_FRAME_CTRL_LEN 1
#define MRS_645_FRAME_LEN_LEN 1
#define MRS_645_FRAME_1ST_HEAD_OFFSET 0
#define MRS_645_FRAME_METERADD_OFFSET (MRS_645_FRAME_1ST_HEAD_OFFSET + MRS_645_FRAME_1ST_HEAD_LEN)
#define MRS_645_FRAME_2ND_HEAD_OFFSET (MRS_645_FRAME_METERADD_OFFSET + MRS_645_FRAME_METERADD_LEN)
#define MRS_645_FRAME_CTRL_OFFSET (MRS_645_FRAME_2ND_HEAD_OFFSET + MRS_645_FRAME_2ND_HEAD_LEN)
#define MRS_645_FRAME_LEN_OFFSET (MRS_645_FRAME_CTRL_OFFSET + MRS_645_FRAME_CTRL_LEN)
#define MRS_645_FRAME_DATA_OFFSET (MRS_645_FRAME_LEN_OFFSET + MRS_645_FRAME_LEN_LEN)
#define MRS_645_FRAME_HEX33 0x33
#define MRS_645_FRAME_WILD_MAC "\xAA\xAA\xAA\xAA\xAA\xAA"
#define mrs_is_wild_mac(mac) (memcmp((mac), MRS_645_FRAME_WILD_MAC, 6) == 0)
typedef struct {
td_u8 addr[MRS_METER_ADDR_LEN];
td_u8 ctrl;
td_u8 data_len;
td_u8 *data;
} mrs_proto_645_frame_inf;
typedef struct {
td_u16 datagram_size;
td_u16 reserved;
td_pbyte datagram;
} mrs_raw_frame_t;
td_u32 mrs_proto_645_find_frame(const td_pbyte buffer, const td_u16 length, td_u16 *start_pos, td_u16 *frm_len);
td_bool mrs_proto_645_check(const td_pbyte buffer, const td_u16 length);
td_void mrs_proto_645_on_timer(td_void);
/* Init */
td_u32 mrs_proto_645_init(td_void);
/* Generate 645 frame */
td_u32 mrs_proto_645_create_frame(const mrs_proto_645_frame_inf *frame_inf, td_u8 **frame, td_u16 *frame_len);
td_u32 mrs_proto_645_decode_frame(const td_pbyte buffer, const td_u16 length, mrs_proto_645_frame_inf *frame);
/* Decode 645 frame data */
td_void mrs_proto_645_data_decode(td_u8 *buf, td_u32 len);
/* Encode 645 frame data */
td_void mrs_proto_645_data_encode(td_u8 *buf, td_u32 len);
td_bool mrs_proto_is_rcv_p2p_pkt_by_dest_mac(EXT_CONST td_u8 *dest_mac, td_u8 mac_len);
#ifdef __cplusplus
}
#endif
#endif /* __MRS_PROTO_645_H__ */