erpc/erpc_core.h

57 lines
1.7 KiB
C
Raw Normal View History

2024-10-29 08:42:21 +00:00
#ifndef ERPC_CORE_H_
#define ERPC_CORE_H_
#include "config.h"
#define MAX_CMD_LEN (256 - 5) // crc16最大支持256字节
#define CMD_MAX_RETRY 5 // 最大重发次数
#define CMD_TIMEOUT 30 // 超时时间 tick
#define MAX_COM 20 // 最大支持端口打开数量,可认为是同时通讯的号
typedef enum erpc_error {
DEST_SYS_BUSY = 0, // 目标系统繁忙,接收到nack
DEST_SYS_TIMEOUT, // 目标系统处理超时
BUS_CRC_ERROR, // 总线CRC错误,可能是总线通讯质量不佳
};
typedef enum package_type {
PACKAGE_TYPE_DEV_POWER_ON = 0,
PACKAGE_TYPE_CMD_REQ,
PACKAGE_TYPE_CMD_REQ_ACK,
PACKAGE_TYPE_CMD_RESP,
PACKAGE_TYPE_CMD_RESP_ACK,
PACKAGE_TYPE_CMD_RESP_NACK,
PACKAGE_TYPE_CMD_REPEAT, // crc校验失败请求重发
PACKAGE_TYPE_DEV_POWER_OFF,
PACKAGE_TYPE_CMD_SERCH_DEV_ONLINE,
} package_type;
typedef struct node_cfg_t {
u8 local_id;
struct port_t {
u16 com_id;
volatile u32 time_out;
void (*pre_deal)(u8 *data, u32 len); // 数据预处理接口
u8 send_ack : 2; // 0没有ack返回1ack返回 2nack返回
u8 rec_crc : 1; // 0crc没有故障 1 crc有故障
u8 req_resend : 1; // 1:客户端请求重发
} port[MAX_COM];
u32 (*write)(u8 *data, u32 len);
void (*bus_lock)(void);
void (*bus_unlock)(void);
void (*sleep)(void);
} node_cfg_t;
// 广播ID
#define ERPC_BOARDCAST_ID 0xff
typedef struct erpc_cmd_def_t {
u8 src_id;
u8 dest_id;
package_type type;
u16 port; // 指令号,指令号=端口号
u8 msg_len;
u8 crc_16[2];
u8 *data;
} erpc_cmd_def_t;
#endif /* ERPC_CORE_H_ */