#ifndef __YMODEM_H__ #define __YMODEM_H__ #include "board.h" #ifdef __cplusplus extern "C" { #endif #define YMODEM_FLAG_UNKNOWN (0x0001u) #define YMODEM_FLAG_BLK_END (0x0002u) #define YMODEM_FLAG_FILE_END (0x0004u) #define YMODEM_SOH (0x01u) #define YMODEM_STX (0x02u) #define YMODEM_EOT (0x04u) #define YMODEM_ACK (0x06u) #define YMODEM_NAK (0x15u) #define YMODEM_CAN (0x18u) #define YMODEM_C (0x43u) #define YMODEM_LONG_SIZE (1024) #define YMODEM_SHORT_SIZE (128) #define YMODEM_GOOD_CRC (0x0000u) #define YMODEM_BUF_DEPTH (2048+256) typedef struct { uint8_t HeadByte; uint8_t BlkSeq; uint16_t Flag; uint16_t CalCRC; uint16_t ByteLeft; uint16_t ByteIdx; uint16_t WrAddr; uint16_t AckAddr; uint16_t RdAddr; uint32_t Fsize; uint32_t MaxSize; uint32_t FlashAddr; uint8_t *Buf; } ymodem_cntxt_t; extern ymodem_cntxt_t ymodem_cntxt; extern uint16_t ymodem_crc(uint8_t byte, uint16_t crc_old); extern void ymodem_rx_byte(uint8_t RxByte, void *arg); extern uint16_t ymodem_rx_file(ymodem_cntxt_t *p); extern uint16_t FIFO_to_MCU_pp(uint8_t last_blk, uint8_t *buf, uint16_t waddr, uint16_t raddr, uint32_t *faddr); #ifdef __cplusplus } #endif #endif