root / arduino-1.0 / hardware / arduino / cores / arduino / USBAPI.h @ 58d82c77
History | View | Annotate | Download (4.43 KB)
1 |
|
---|---|
2 |
|
3 |
#ifndef __USBAPI__
|
4 |
#define __USBAPI__
|
5 |
|
6 |
#if defined(USBCON)
|
7 |
|
8 |
//================================================================================
|
9 |
//================================================================================
|
10 |
// USB
|
11 |
|
12 |
class USB_ |
13 |
{ |
14 |
public:
|
15 |
USB_(); |
16 |
bool configured();
|
17 |
|
18 |
void attach();
|
19 |
void detach(); // Serial port goes down too... |
20 |
void poll();
|
21 |
}; |
22 |
extern USB_ USB;
|
23 |
|
24 |
//================================================================================
|
25 |
//================================================================================
|
26 |
// Serial over CDC (Serial1 is the physical port)
|
27 |
|
28 |
class Serial_ : public Stream |
29 |
{ |
30 |
public:
|
31 |
void begin(uint16_t baud_count);
|
32 |
void end(void); |
33 |
|
34 |
virtual int available(void); |
35 |
virtual int peek(void); |
36 |
virtual int read(void); |
37 |
virtual void flush(void); |
38 |
virtual size_t write(uint8_t); |
39 |
}; |
40 |
extern Serial_ Serial;
|
41 |
|
42 |
//================================================================================
|
43 |
//================================================================================
|
44 |
// Mouse
|
45 |
|
46 |
#define MOUSE_LEFT 1 |
47 |
#define MOUSE_RIGHT 2 |
48 |
#define MOUSE_MIDDLE 4 |
49 |
#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE)
|
50 |
|
51 |
class Mouse_ |
52 |
{ |
53 |
private:
|
54 |
uint8_t _buttons; |
55 |
void buttons(uint8_t b);
|
56 |
public:
|
57 |
Mouse_(); |
58 |
void click(uint8_t b = MOUSE_LEFT);
|
59 |
void move(signed char x, signed char y, signed char wheel = 0); |
60 |
void press(uint8_t b = MOUSE_LEFT); // press LEFT by default |
61 |
void release(uint8_t b = MOUSE_LEFT); // release LEFT by default |
62 |
bool isPressed(uint8_t b = MOUSE_ALL); // check all buttons by default |
63 |
}; |
64 |
extern Mouse_ Mouse;
|
65 |
|
66 |
//================================================================================
|
67 |
//================================================================================
|
68 |
// Keyboard
|
69 |
|
70 |
#define KEY_MODIFIER_LEFT_CTRL 0x01 |
71 |
#define KEY_MODIFIER_LEFT_SHIFT 0x02 |
72 |
#define KEY_MODIFIER_LEFT_ALT 0x04 |
73 |
#define KEY_MODIFIER_LEFT_GUI 0x08 |
74 |
#define KEY_MODIFIER_RIGHT_CTRL 0x010 |
75 |
#define KEY_MODIFIER_RIGHT_SHIFT 0x020 |
76 |
#define KEY_MODIFIER_RIGHT_ALT 0x040 |
77 |
#define KEY_MODIFIER_RIGHT_GUI 0x080 |
78 |
|
79 |
// Low level key report: up to 6 keys and shift, ctrl etc at once
|
80 |
typedef struct |
81 |
{ |
82 |
uint8_t modifiers; |
83 |
uint8_t reserved; |
84 |
uint8_t keys[6];
|
85 |
} KeyReport; |
86 |
|
87 |
// Map a character into a key report
|
88 |
// Called from Print to map text to keycodes
|
89 |
class KeyMap |
90 |
{ |
91 |
public:
|
92 |
virtual void charToKey(int c, KeyReport* keyReport) = 0; |
93 |
}; |
94 |
|
95 |
//
|
96 |
class Keyboard_ : public Print |
97 |
{ |
98 |
private:
|
99 |
KeyMap* _keyMap; |
100 |
void sendReport(KeyReport* keys);
|
101 |
void setKeyMap(KeyMap* keyMap);
|
102 |
public:
|
103 |
Keyboard_(); |
104 |
virtual size_t write(uint8_t); |
105 |
}; |
106 |
extern Keyboard_ Keyboard;
|
107 |
|
108 |
//================================================================================
|
109 |
//================================================================================
|
110 |
// Low level API
|
111 |
|
112 |
typedef struct |
113 |
{ |
114 |
uint8_t bmRequestType; |
115 |
uint8_t bRequest; |
116 |
uint8_t wValueL; |
117 |
uint8_t wValueH; |
118 |
uint16_t wIndex; |
119 |
uint16_t wLength; |
120 |
} Setup; |
121 |
|
122 |
//================================================================================
|
123 |
//================================================================================
|
124 |
// HID 'Driver'
|
125 |
|
126 |
int HID_GetInterface(uint8_t* interfaceNum);
|
127 |
int HID_GetDescriptor(int i); |
128 |
bool HID_Setup(Setup& setup);
|
129 |
void HID_SendReport(uint8_t id, const void* data, int len); |
130 |
|
131 |
//================================================================================
|
132 |
//================================================================================
|
133 |
// MSC 'Driver'
|
134 |
|
135 |
int MSC_GetInterface(uint8_t* interfaceNum);
|
136 |
int MSC_GetDescriptor(int i); |
137 |
bool MSC_Setup(Setup& setup);
|
138 |
bool MSC_Data(uint8_t rx,uint8_t tx);
|
139 |
|
140 |
//================================================================================
|
141 |
//================================================================================
|
142 |
// CSC 'Driver'
|
143 |
|
144 |
int CDC_GetInterface(uint8_t* interfaceNum);
|
145 |
int CDC_GetDescriptor(int i); |
146 |
bool CDC_Setup(Setup& setup);
|
147 |
|
148 |
//================================================================================
|
149 |
//================================================================================
|
150 |
|
151 |
#define TRANSFER_PGM 0x80 |
152 |
#define TRANSFER_RELEASE 0x40 |
153 |
#define TRANSFER_ZERO 0x20 |
154 |
|
155 |
int USB_SendControl(uint8_t flags, const void* d, int len); |
156 |
int USB_RecvControl(void* d, int len); |
157 |
|
158 |
uint8_t USB_Available(uint8_t ep); |
159 |
int USB_Send(uint8_t ep, const void* data, int len); // blocking |
160 |
int USB_Recv(uint8_t ep, void* data, int len); // non-blocking |
161 |
int USB_Recv(uint8_t ep); // non-blocking |
162 |
void USB_Flush(uint8_t ep);
|
163 |
|
164 |
#endif
|
165 |
|
166 |
#endif /* if defined(USBCON) */ |