prj to mdks

This commit is contained in:
hwq
2025-09-17 09:11:22 +08:00
parent ea8dcada90
commit 31a048e428
44 changed files with 268 additions and 2966 deletions
+99
View File
@@ -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__ */