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 | |||