-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathYmodem.h
92 lines (77 loc) · 1.71 KB
/
Ymodem.h
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#ifndef YMODEM_H
#define YMODEM_H
#include <QThread>
#include <queue>
#include <QTime>
#include <time.h>
using namespace std;
class Modem;
class Ymodem : public QThread
{
Q_OBJECT
public:
Ymodem(Modem *parent);
void close();
void put(const QByteArray &data);
void setModemMode(int m);
private:
int makeFirstRsp(string &name, int size, QByteArray &byte);
int makeNextRsp(char *data, int size, QByteArray &byte, int mode);
int makeEotRsp(QByteArray &byte);
int makeFinishRsp(QByteArray &byte);
signals:
void showTransfer(int total, int remain, float speed);
private:
enum modemWaitfor
{
mwNon = 0x00,
mwReq = 0x43,
mwAck = 0x06,
};
enum modemStage
{
msFirst,
msReady,
msTrans,
msRepeat,
msEnding,
msFinish,
};
enum modemCode
{
mcSOH = 0x01,
mcSTX = 0x02,
mcEOT = 0x04,
mcACK = 0x06,
mcNAK = 0x15,
mcCAN = 0x18,
mcREQ = 0x43,
};
typedef struct
{
uint8_t start;
uint8_t sn;
uint8_t nsn;
char data[128];
//short crc;
}ymhead_t;
private:
void run();
void msgq_push(int msg);
bool msgq_get(int &msg);
uint16_t crc16(char *data, int size);
void time_start();
float speed_clc(int total, int remain);
void outData(const QByteArray &data);
void showStatus(const char *s);
private:
enum modemStage Stage;
enum modemWaitfor Wait;
bool isrun;
Modem *ui;
uint8_t sn;
queue <int> msgq;
time_t stx_time;
int mMode;
};
#endif // YMODEM_H