first commit for chrg
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
|
||||
#ifndef __YMODEM_H__
|
||||
#define __YMODEM_H__
|
||||
|
||||
#include "bsp_common.h"
|
||||
#include "firmware.h"
|
||||
|
||||
/* YModem 协议 */
|
||||
#define YMODEM_SOH 0x01
|
||||
#define YMODEM_STX 0x02
|
||||
#define YMODEM_EOT 0x04
|
||||
#define YMODEM_ACK 0x06
|
||||
#define YMODEM_NAK 0x15
|
||||
#define YMODEM_CAN 0x18 // graceful abort: two CAN (0x18)
|
||||
|
||||
#define YMODEM_FRAME_FIXED_LEN (5)
|
||||
#define YMODEM_SOH_DATA_LEN (128)
|
||||
#define YMODEM_STX_DATA_LEN (1024)
|
||||
#define YMODEM_SOH_FRAME_LEN (YMODEM_FRAME_FIXED_LEN + YMODEM_SOH_DATA_LEN)
|
||||
#define YMODEM_STX_FRAME_LEN (YMODEM_FRAME_FIXED_LEN + YMODEM_STX_DATA_LEN)
|
||||
#define YMODEM_C 'C'
|
||||
|
||||
/* 协议包数据最大长度定义,因以下两个宏定义在 app.c 中也使用,因此不建议修改宏定义名称,更改宏定义内容即可 */
|
||||
#define YM_BODY_SIZE_MAX YMODEM_STX_DATA_LEN
|
||||
#define YM_MSG_SIZE_MAX YMODEM_STX_FRAME_LEN
|
||||
|
||||
typedef enum {
|
||||
YMODEM_FLOW_NONE = 0x00,
|
||||
YMODEM_FLOW_START,
|
||||
YMODEM_FLOW_FIRST_EOT,
|
||||
YMODEM_FLOW_SECOND_EOT,
|
||||
YMODEM_FLOW_ASK,
|
||||
YMODEM_FLOW_SUCCESS,
|
||||
YMODEM_FLOW_FAILED,
|
||||
YMODEM_FLOW_CANCEL
|
||||
|
||||
} eYmFLOW;
|
||||
|
||||
#pragma pack(1)
|
||||
union message_raw_t {
|
||||
uint8_t raw_data[YM_MSG_SIZE_MAX]; /* 数据缓存池,接收到来自上位机的原始数据 */
|
||||
|
||||
struct {
|
||||
uint8_t header; /* start of header */
|
||||
uint8_t pkt_num; /* packet number */
|
||||
uint8_t not_pkt_num; /* the invert of packet number's bit */
|
||||
uint8_t data[]; /* packet data */
|
||||
} pkg;
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/* 协议包含的指令 */
|
||||
typedef enum {
|
||||
YM_CMD_NONE = 0x00,
|
||||
YM_CMD_SOH = YMODEM_SOH,
|
||||
YM_CMD_STX = YMODEM_STX,
|
||||
YM_CMD_EOT = YMODEM_EOT,
|
||||
YM_CMD_CAN = YMODEM_CAN
|
||||
} eYmCMD;
|
||||
|
||||
/* 协议指令的执行结果 */
|
||||
typedef enum {
|
||||
YM_RESULT_OK = 0x00, /* 执行成功 */
|
||||
YM_RESULT_PROCESS = 0x01, /* 执行中 */
|
||||
YM_RESULT_FAILED = 0x02, /* 执行失败,重试 */
|
||||
YM_RESULT_CANCEL = 0x03 /* 执行失败,取消传输 */
|
||||
} eRESULT;
|
||||
|
||||
/* 对协议析构层的配置选项 */
|
||||
typedef enum {
|
||||
YM_MODE_NONE = 0x00,
|
||||
YM_MODE_RESET = 0x01,
|
||||
YM_MODE_RECV = 0x02
|
||||
} eYmMODE;
|
||||
|
||||
/* 需要打包发送至上位机的数据 */
|
||||
struct tx_raw_t {
|
||||
uint8_t response;
|
||||
};
|
||||
|
||||
|
||||
/* typedef of function */
|
||||
typedef void (*ymSend)(uint8_t *data, uint16_t len, uint32_t timeout);
|
||||
typedef void (*ymPrepareCallback)(eYmCMD cmd, uint8_t *data, uint16_t data_len);
|
||||
typedef void (*ymReplyCallback)(eYmCMD cmd, eRESULT *result, uint8_t *data, uint16_t *data_len);
|
||||
|
||||
|
||||
/* 函数定义 */
|
||||
extern void ymodem_init (ymSend Send,
|
||||
ymPrepareCallback PrepareCallback,
|
||||
ymReplyCallback Set_ResponseInfo);
|
||||
|
||||
extern eErrCode ymodemHandler (uint8_t *data, uint16_t len);
|
||||
extern void ymodemConfig (eYmMODE para, void *value);
|
||||
|
||||
#endif /* __YMODEM_H__ */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user