File syn_ymodem.h¶
File List > proto > syn_ymodem.h
Go to the documentation of this file
#ifndef SYN_YMODEM_H
#define SYN_YMODEM_H
#include "../common/syn_defs.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SYN_YMODEM_SOH 0x01U
#define SYN_YMODEM_STX 0x02U
#define SYN_YMODEM_EOT 0x04U
#define SYN_YMODEM_ACK 0x06U
#define SYN_YMODEM_NAK 0x15U
#define SYN_YMODEM_CAN 0x18U
#define SYN_YMODEM_CRC 0x43U
#ifndef SYN_YMODEM_MAX_FILENAME
#define SYN_YMODEM_MAX_FILENAME 64U
#endif
#ifndef SYN_YMODEM_MAX_BLOCK_SIZE
#define SYN_YMODEM_MAX_BLOCK_SIZE 1024U
#endif
#ifndef SYN_YMODEM_MAX_RETRIES
#define SYN_YMODEM_MAX_RETRIES 10U
#endif
typedef enum {
SYN_YMODEM_OK = 0,
SYN_YMODEM_ERR_TIMEOUT = -1,
SYN_YMODEM_ERR_CRC = -2,
SYN_YMODEM_ERR_CANCEL = -3,
SYN_YMODEM_ERR_SEQUENCE = -4,
SYN_YMODEM_ERR_OVERFLOW = -5,
SYN_YMODEM_ERR_PARAM = -6
} SYN_YMODEM_Status;
typedef enum {
SYN_YMODEM_EVENT_FILE_START = 0,
SYN_YMODEM_EVENT_DATA = 1,
SYN_YMODEM_EVENT_FILE_END = 2,
SYN_YMODEM_EVENT_SESSION_END = 3
} SYN_YMODEM_Event;
typedef void (*SYN_YMODEM_PutChar)(uint8_t byte, void *ctx);
typedef int (*SYN_YMODEM_GetChar)(uint32_t timeout_ms, void *ctx);
typedef int (*SYN_YMODEM_EventCallback)(SYN_YMODEM_Event event, const uint8_t *data, size_t len,
void *ctx);
typedef struct {
SYN_YMODEM_PutChar putchar_fn;
SYN_YMODEM_GetChar getchar_fn;
SYN_YMODEM_EventCallback event_fn;
void *ctx;
uint8_t pkt_buf[SYN_YMODEM_MAX_BLOCK_SIZE + 5U];
uint8_t expected_seq;
char filename[SYN_YMODEM_MAX_FILENAME];
uint32_t filesize;
uint32_t bytes_received;
} SYN_YMODEM_Receiver;
void syn_ymodem_receiver_init(SYN_YMODEM_Receiver *rx, SYN_YMODEM_PutChar putchar_fn,
SYN_YMODEM_GetChar getchar_fn, SYN_YMODEM_EventCallback event_fn,
void *ctx);
SYN_YMODEM_Status syn_ymodem_receive(SYN_YMODEM_Receiver *rx);
#ifdef __cplusplus
}
#endif
#endif /* SYN_YMODEM_H */