-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathxmodem.h
More file actions
70 lines (54 loc) · 1.31 KB
/
xmodem.h
File metadata and controls
70 lines (54 loc) · 1.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#ifndef __XMODEM_H__
#define __XMODEM_H__
#include "Stream.h"
#define XSTART 'C'
#define XMODEM_SOH 0x01
#define XMODEM_ACK 0x06
#define XMODEM_EOT 0x04
#define XMODEM_NACK 0x15
#define XMODEM_ETB 0x17
#define XMODEM_CAN 0x18
#define XMODEM_SUB 0x1A
#define XMODEM_BLOCK_SIZE 128
typedef unsigned short xm_size_t;
extern char xm_preamble;
extern unsigned char xm_blk;
extern char xm_result;
char xm_receive_char(char *dst);
char xm_receive_block(char *dst);
xm_size_t xm_receive(char *dst, xm_size_t size);
class XModem {
private:
// serial terminal stream
Stream * terminal;
uint8_t timeout_flag;
uint32_t block;
uint16_t crc;
void crc_update(uint8_t octet);
void octet_send(uint8_t octet);
uint8_t octet_available(void);
uint8_t octet_receive(void);
public:
static const uint8_t NACK = XMODEM_NACK;
static const uint8_t ACK = XMODEM_ACK;
static const uint8_t SOH = XMODEM_SOH;
static const uint8_t EOT = XMODEM_EOT;
static const uint8_t ETB = XMODEM_ETB;
static const uint8_t CAN = XMODEM_CAN;
enum block_result {
START,
END,
NEXT,
CANCEL,
TIMEOUT,
ERROR
};
int retries;
XModem(Stream & terminal);
void reset(void);
enum block_result start_send(void);
enum block_result finish_send(void);
enum block_result block_send(uint8_t *dst);
enum block_result block_receive(uint8_t *dst);
};
#endif