Statistics
| Branch: | Revision:

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) */