diff --git a/hardware/arduino/sam/cores/arduino/validation_usb_host/test_usb_host.cpp b/hardware/arduino/sam/cores/arduino/validation_usb_host/test_usb_host.cpp index 5bff4afc6..60583671b 100644 --- a/hardware/arduino/sam/cores/arduino/validation_usb_host/test_usb_host.cpp +++ b/hardware/arduino/sam/cores/arduino/validation_usb_host/test_usb_host.cpp @@ -2,66 +2,58 @@ #include #include -/* +class KbdRptParser : public KeyboardReportParser +{ + void PrintKey(uint8_t mod, uint8_t key); -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -*/ -class MouseRptParser : public MouseReportParser -{ protected: - virtual void OnMouseMove (MOUSEINFO *mi); - virtual void OnLeftButtonUp (MOUSEINFO *mi); - virtual void OnLeftButtonDown (MOUSEINFO *mi); - virtual void OnRightButtonUp (MOUSEINFO *mi); - virtual void OnRightButtonDown (MOUSEINFO *mi); - virtual void OnMiddleButtonUp (MOUSEINFO *mi); - virtual void OnMiddleButtonDown (MOUSEINFO *mi); + virtual void OnKeyDown (uint8_t mod, uint8_t key); + virtual void OnKeyUp (uint8_t mod, uint8_t key); + virtual void OnKeyPressed(uint8_t key); }; -void MouseRptParser::OnMouseMove(MOUSEINFO *mi) + +void KbdRptParser::PrintKey(uint8_t m, uint8_t key) { - printf("Pos={%d,%d}\r\n", mi->dX, mi->dY); + MODIFIERKEYS mod; + + *((uint8_t*)&mod) = m; + printf((mod.bmLeftCtrl == 1) ? "C" : " "); + printf((mod.bmLeftShift == 1) ? "S" : " "); + printf((mod.bmLeftAlt == 1) ? "A" : " "); + printf((mod.bmLeftGUI == 1) ? "G" : " "); + + printf("<%c>", key); + + printf((mod.bmRightCtrl == 1) ? "C" : " "); + printf((mod.bmRightShift == 1) ? "S" : " "); + printf((mod.bmRightAlt == 1) ? "A" : " "); + printf((mod.bmRightGUI == 1) ? "G" : " "); }; -void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi) + +void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key) { - printf("L Butt Up\r\n"); -}; -void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi) + printf("DN "); + PrintKey(mod, key); + uint8_t c = OemToAscii(mod, key); + + if (c) + OnKeyPressed(c); +} + +void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key) { - printf("L Butt Dn\r\n"); -}; -void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi) + printf("UP "); + PrintKey(mod, key); +} + +void KbdRptParser::OnKeyPressed(uint8_t key) { - printf("R Butt Up\r\n"); -}; -void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi) -{ - printf("R Butt Dn\r\n"); -}; -void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi) -{ - printf("M Butt Up\r\n"); -}; -void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi) -{ - printf("M Butt Dn\r\n"); + printf("ASCII: %c", key); }; USBHost Usb; -HIDBoot HostMouse(&Usb); -MouseRptParser Prs; +HIDBoot Kbd(&Usb); +KbdRptParser Prs; void setup() { @@ -69,7 +61,7 @@ void setup() printf("\r\nProgram started:\r\n"); delay(200); - HostMouse.SetReportParser(0,(HIDReportParser*)&Prs); + Kbd.SetReportParser(0, (HIDReportParser*)&Prs); } void loop() diff --git a/hardware/arduino/sam/system/USBHost/examples/HID/Keyboard/test_usb_host.cpp b/hardware/arduino/sam/system/USBHost/examples/HID/Keyboard/test_usb_host.cpp new file mode 100644 index 000000000..60583671b --- /dev/null +++ b/hardware/arduino/sam/system/USBHost/examples/HID/Keyboard/test_usb_host.cpp @@ -0,0 +1,70 @@ +#include "variant.h" +#include +#include + +class KbdRptParser : public KeyboardReportParser +{ + void PrintKey(uint8_t mod, uint8_t key); + +protected: + virtual void OnKeyDown (uint8_t mod, uint8_t key); + virtual void OnKeyUp (uint8_t mod, uint8_t key); + virtual void OnKeyPressed(uint8_t key); +}; + +void KbdRptParser::PrintKey(uint8_t m, uint8_t key) +{ + MODIFIERKEYS mod; + + *((uint8_t*)&mod) = m; + printf((mod.bmLeftCtrl == 1) ? "C" : " "); + printf((mod.bmLeftShift == 1) ? "S" : " "); + printf((mod.bmLeftAlt == 1) ? "A" : " "); + printf((mod.bmLeftGUI == 1) ? "G" : " "); + + printf("<%c>", key); + + printf((mod.bmRightCtrl == 1) ? "C" : " "); + printf((mod.bmRightShift == 1) ? "S" : " "); + printf((mod.bmRightAlt == 1) ? "A" : " "); + printf((mod.bmRightGUI == 1) ? "G" : " "); +}; + +void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key) +{ + printf("DN "); + PrintKey(mod, key); + uint8_t c = OemToAscii(mod, key); + + if (c) + OnKeyPressed(c); +} + +void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key) +{ + printf("UP "); + PrintKey(mod, key); +} + +void KbdRptParser::OnKeyPressed(uint8_t key) +{ + printf("ASCII: %c", key); +}; + +USBHost Usb; +HIDBoot Kbd(&Usb); +KbdRptParser Prs; + +void setup() +{ + cpu_irq_enable(); + printf("\r\nProgram started:\r\n"); + delay(200); + + Kbd.SetReportParser(0, (HIDReportParser*)&Prs); +} + +void loop() +{ + Usb.Task(); +} diff --git a/hardware/arduino/sam/system/USBHost/examples/HID/Mouse/test_usb_host.cpp b/hardware/arduino/sam/system/USBHost/examples/HID/Mouse/test_usb_host.cpp new file mode 100644 index 000000000..a836acfd5 --- /dev/null +++ b/hardware/arduino/sam/system/USBHost/examples/HID/Mouse/test_usb_host.cpp @@ -0,0 +1,61 @@ +#include "variant.h" +#include +#include + +class MouseRptParser : public MouseReportParser +{ +protected: + virtual void OnMouseMove (MOUSEINFO *mi); + virtual void OnLeftButtonUp (MOUSEINFO *mi); + virtual void OnLeftButtonDown (MOUSEINFO *mi); + virtual void OnRightButtonUp (MOUSEINFO *mi); + virtual void OnRightButtonDown (MOUSEINFO *mi); + virtual void OnMiddleButtonUp (MOUSEINFO *mi); + virtual void OnMiddleButtonDown (MOUSEINFO *mi); +}; +void MouseRptParser::OnMouseMove(MOUSEINFO *mi) +{ + printf("Pos={%d,%d}\r\n", mi->dX, mi->dY); +}; +void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi) +{ + printf("L Butt Up\r\n"); +}; +void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi) +{ + printf("L Butt Dn\r\n"); +}; +void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi) +{ + printf("R Butt Up\r\n"); +}; +void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi) +{ + printf("R Butt Dn\r\n"); +}; +void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi) +{ + printf("M Butt Up\r\n"); +}; +void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi) +{ + printf("M Butt Dn\r\n"); +}; + +USBHost Usb; +HIDBoot HostMouse(&Usb); +MouseRptParser Prs; + +void setup() +{ + cpu_irq_enable(); + printf("\r\nProgram started:\r\n"); + delay(200); + + HostMouse.SetReportParser(0,(HIDReportParser*)&Prs); +} + +void loop() +{ + Usb.Task(); +}