https://forum.pjrc.com/threads/45740-USB-Host-Mouse-Drivermain
Transfer_t mytransfers[7] __attribute__ ((aligned(32))); | Transfer_t mytransfers[7] __attribute__ ((aligned(32))); | ||||
}; | }; | ||||
class MouseController : public USBDriver { | |||||
public: | |||||
MouseController(USBHost &host) { init(); } | |||||
MouseController(USBHost *host) { init(); } | |||||
bool available() { return mouseEvent; } | |||||
void mouseDataClear(); | |||||
uint8_t getButtons() { return buttons; } | |||||
int8_t getMouseX() { return mouseX; } | |||||
int8_t getMouseY() { return mouseY; } | |||||
int8_t getWheel() { return wheel; } | |||||
protected: | |||||
virtual bool claim(Device_t *device, int type, const uint8_t *descriptors, uint32_t len); | |||||
virtual void control(const Transfer_t *transfer); | |||||
virtual void disconnect(); | |||||
static void callback(const Transfer_t *transfer); | |||||
void new_data(const Transfer_t *transfer); | |||||
void init(); | |||||
private: | |||||
void update(); | |||||
Pipe_t *datapipe; | |||||
setup_t setup; | |||||
uint32_t packetSize; | |||||
uint8_t buttons; | |||||
int8_t mouseX; | |||||
int8_t mouseY; | |||||
int8_t wheel; | |||||
bool mouseEvent = false; | |||||
uint8_t report[20]; // Set to largest packet size 20 bytes | |||||
uint8_t prev_report[20]; // Same as above | |||||
Pipe_t mypipes[2] __attribute__ ((aligned(32))); | |||||
Transfer_t mytransfers[4] __attribute__ ((aligned(32))); | |||||
}; | |||||
#endif | #endif |
// Simple test of USB Host Mouse/Keyboard | |||||
// | |||||
// This example is in the public domain | |||||
#include "USBHost_t36.h" | |||||
USBHost myusb; | |||||
USBHub hub1(myusb); | |||||
USBHub hub2(myusb); | |||||
USBHub hub3(myusb); | |||||
KeyboardController keyboard1(myusb); | |||||
KeyboardController keyboard2(myusb); | |||||
MouseController mouse1(myusb); | |||||
void setup() | |||||
{ | |||||
while (!Serial) ; // wait for Arduino Serial Monitor | |||||
Serial.println("USB Host Testing"); | |||||
myusb.begin(); | |||||
keyboard1.attachPress(OnPress); | |||||
keyboard2.attachPress(OnPress); | |||||
} | |||||
void loop() | |||||
{ | |||||
myusb.Task(); | |||||
if(mouse1.available()) { | |||||
Serial.print("buttons = "); | |||||
Serial.print(mouse1.getButtons(),DEC); | |||||
Serial.print(", wheel = "); | |||||
Serial.print(mouse1.getWheel(),DEC); | |||||
Serial.print(", mouseX = "); | |||||
Serial.print(mouse1.getMouseX(),DEC); | |||||
Serial.print(", mouseY = "); | |||||
Serial.println(mouse1.getMouseY(),DEC); | |||||
mouse1.mouseDataClear(); | |||||
} | |||||
delay(50); | |||||
} | |||||
void OnPress(int key) | |||||
{ | |||||
Serial.print("key '"); | |||||
Serial.print((char)key); | |||||
Serial.print("' "); | |||||
Serial.println(key); | |||||
//Serial.print("key "); | |||||
//Serial.print((char)keyboard1.getKey()); | |||||
//Serial.print(" "); | |||||
//Serial.print((char)keyboard2.getKey()); | |||||
//Serial.println(); | |||||
} | |||||
USBHost KEYWORD1 | USBHost KEYWORD1 | ||||
USBHub KEYWORD1 | USBHub KEYWORD1 | ||||
KeyboardController KEYWORD1 | KeyboardController KEYWORD1 | ||||
MouseController KEYWORD1 | |||||
MIDIDevice KEYWORD1 | MIDIDevice KEYWORD1 | ||||
Task KEYWORD2 | Task KEYWORD2 | ||||
getKey KEYWORD2 | getKey KEYWORD2 | ||||
getOemKey KEYWORD2 | getOemKey KEYWORD2 | ||||
attachPress KEYWORD2 | attachPress KEYWORD2 | ||||
attachRelease KEYWORD2 | attachRelease KEYWORD2 | ||||
getButtons KEYWORD2 | |||||
getWheel KEYWORD2 | |||||
getMouseX KEYWORD2 | |||||
getMouseY KEYWORD2 |