📄 protocol.h
字号:
/* protocol.h */
#ifndef PROTOCOL_H
#define PROTOCOL_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "uart.h"
typedef unsigned char (*COMM_PROC_PTR)(void);
// 通信端口选择定义
#define NULL_PORT 0x0000
#define IR_PORT 0x0001
#define RS485_PORT 0x0002
#define IR_PORT_WITH_BATTERY 0x0004
#define RS485_PORT_TX 0x0008
/* 长度定义 */
#define FRM_ADDR_LEN 6 // 电表地址长度
/* 通信属性定义 */
#define COM_ATTRIBUTE_SINGLE 0x5A // 单机通信
#define COM_ATTRIBUTE_BROADCAST 0xA5 // 广播通信
/* 桢格式说明 */
#define FRM_START_BYTE1 0
#define FRM_ADDR 1
#define FRM_START_BYTE2 7
#define FRM_COMMAND 8
#define FRM_DATALEN 9
#define FRM_DATA 10
#define FRM_CS _frm_buf[FRM_DATALEN]+10
#define FRM_STOP_BYTE FRM_CS+1
/* 命令索引 */
#define DI1 FRM_DATA+1
#define DI0 FRM_DATA
/* 桢数据域处理值 */
#define FRAME_DATA_APPENDVALUE 0x33
/* 桢起始字节及结束字节定义 */
#define PRE_FRAME_FLAG 0xFE
#define FRAME_START_FLAG 0x68
#define FRAME_END_FLAG 0x16
/* 串口状态定义*/
#define UART_RXD_OK 0
#define UART_WAIT_START_BYTE1 1
#define UART_WAIT_ADDRESS 2
#define UART_WAIT_START_BYTE2 3
#define UART_WAIT_CTL_WORD 4
#define UART_WAIT_DATA_LENGTH 5
#define UART_WAIT_DATA 6
#define UART_WAIT_CS 7
#define UART_WAIT_STOP_BYTE 8
#define UART_RXD_PARITY_ERR 9
#define UART_RXD_OVERTIME_ERR 10
#define UART_RXD_CONFIRM_BONDRATE 11
/* Commands */
#define FRM_CTRW_READ_SLVS_DATA 0x01 // 读电表数据
#define FRM_CTRW_WRITE_SLVS_DATA 0x04 // 写电表数据
#define FRM_CTRW_WRITE_PASSWORD 0x0F // 写密码
#define FRM_CTRW_CLR_PWRDATA 0x09 // 电量清零
#define FRM_CTRW_CLR_METER_DATA 0x6B // 电表清零
#define FRM_CTRW_CLR_PASSWORD 0x6F // 清密码
#define FRM_CTRW_CLR_CONSTANT 0x6E // 清电表常数
#define FRM_CTRW_CLR_E2PROM_A 0x6D // 清存储固定数据的E2prom
#define FRM_CTRW_CLR_E2PROM_V 0x6A // 清存储可变数据的E2prom
#define FRM_CTRW_DISP_INFO 0x60 // 遥控器控制LCD显示
#define FRM_CTRW_REVISE_TIME 0x08 // 广播校时
#define FRM_CTRW_WRITE_MNUM 0x0A // 广播写设备地址
#define FRM_CTRW_CLR_REQ_PWRDATA 0x10 // 最大需量清零
#define FRM_CTRW_CLR_ZT_DATA 0x6C // 时区冻结电量清零
#define FRM_CTRW_SAVE_ZT_DATA 0x19 // 时区冻结电量
/* commands of response */
#define CMD_RIGNT_RESP 0xE5 // right response
#define CMD_WRONG_RESP 0xEA // wrong response
/* process of ending-comm */
#define COMM_SEND_RIGHT_RESP BIT0
#define COMM_SEND_WRONG_RESP BIT1
#define COMM_NO_RESP BIT2
#define COMM_LOAD_DATA BIT3
#define COMM_SAVE_DATA BIT4
/* 返回数据定义 */
#define RET_READ_E2PROM_A 0x01 // 读存储固定数据的E2prom
#define RET_READ_E2PROM_V 0x02 // 读存储可变数据的E2prom
#define RET_WRITE_E2PROM_A 0x04 // 写存储固定数据的E2prom
#define RET_WRITE_E2PROM_V 0x08 // 写存储可变数据的E2prom
#define RET_SEND_RIGHT_RESPONSION 0x10 // 正确应答
#define RET_SEND_ERROR_RESPONSION 0x20 // 错误应答
#define RET_NO_RESPONSION 0x40 // 无应答
//extern const unsigned char _slvs_req_frm_len[];
//extern const unsigned char _slvs_right_resp_len[];
//extern const unsigned char _slvs_cmd[];
extern unsigned char DI0_H;
extern unsigned char DI0_L;
extern void parse_frame(void);
#ifdef __cplusplus
}
#endif
#endif /* PROTOCOL_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -