forked from rowelld/uscmon
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathusbclass.h
More file actions
73 lines (61 loc) · 1.35 KB
/
Copy pathusbclass.h
File metadata and controls
73 lines (61 loc) · 1.35 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
71
72
73
#ifndef USBCLASS_H
#define USBCLASS_H
#include "usbmon.h"
#include <vector>
typedef enum {
LINE_CTS_ON,
LINE_CTS_OFF,
LINE_DSR_ON,
LINE_DSR_OFF,
LINE_RLSD_ON,
LINE_RLSD_OFF,
LINE_RING,
LINE_BREAK,
LINE_OVERRUN_ERROR,
LINE_PARITY_ERROR,
LINE_FRAME_ERROR
}LINE_EVENT;
typedef enum {
FLOW_OFF,
FLOW_RTS_CTS,
FLOW_DTR_DSR,
FLOW_XON_XOFF
}FLOW_EVENT;
class UsbClass
{
protected:
int vid;
int pid;
void lineEvent(LINE_EVENT event);
void flowEvent(FLOW_EVENT event);
void dataFormatEvent(char parity, int dataBits, int stopBits);
void baudRateEvent(int baudrate);
void dataIn(unsigned char* data, unsigned int dataSize);
void dataOut(unsigned char* data, unsigned int dataSize);
public:
UsbClass(int vid, int pid);
virtual ~UsbClass() {}
virtual void classRequest(USB_REQUEST* req) = 0;
virtual void vendorRequest(USB_REQUEST* req) = 0;
virtual void epRequest(USB_REQUEST* req) = 0;
};
class UsbClassCreator
{
public:
UsbClassCreator() {}
virtual ~UsbClassCreator() {}
virtual bool check(int vid, int pid) = 0;
virtual UsbClass* create(int vid, int pid) = 0;
};
class UsbClassCreators
{
private:
std::vector<UsbClassCreator*> creators;
public:
UsbClassCreators() {}
~UsbClassCreators();
void registerCreator(UsbClassCreator* creator);
UsbClass* create(int vid, int pid);
};
extern UsbClassCreators usbClassCreators;
#endif // USBCLASS_H