diff --git a/USBHost_t36.h b/USBHost_t36.h index 38169a0..4e24401 100644 --- a/USBHost_t36.h +++ b/USBHost_t36.h @@ -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 diff --git a/examples/Mouse/Mouse.ino b/examples/Mouse/Mouse.ino new file mode 100644 index 0000000..f4361b3 --- /dev/null +++ b/examples/Mouse/Mouse.ino @@ -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(); +} + diff --git a/keywords.txt b/keywords.txt index 70a97a4..0688d4f 100644 --- a/keywords.txt +++ b/keywords.txt @@ -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