https://forum.pjrc.com/threads/45740-USB-Host-Mouse-Drivermain
@@ -654,4 +654,37 @@ private: | |||
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 |
@@ -0,0 +1,55 @@ | |||
// 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(); | |||
} | |||
@@ -1,6 +1,7 @@ | |||
USBHost KEYWORD1 | |||
USBHub KEYWORD1 | |||
KeyboardController KEYWORD1 | |||
MouseController KEYWORD1 | |||
MIDIDevice KEYWORD1 | |||
Task KEYWORD2 | |||
getKey KEYWORD2 | |||
@@ -8,3 +9,7 @@ getModifiers KEYWORD2 | |||
getOemKey KEYWORD2 | |||
attachPress KEYWORD2 | |||
attachRelease KEYWORD2 | |||
getButtons KEYWORD2 | |||
getWheel KEYWORD2 | |||
getMouseX KEYWORD2 | |||
getMouseY KEYWORD2 |