Move USB Host Shield and Arduino core to lib/
(#13973)
This commit is contained in:
@ -0,0 +1,55 @@
|
||||
/*
|
||||
Example sketch for the HID Bluetooth library - developed by Kristian Lauszus
|
||||
For more information visit my blog: http://blog.tkjelectronics.dk/ or
|
||||
send me an e-mail: kristianl@tkjelectronics.com
|
||||
*/
|
||||
|
||||
#include <BTHID.h>
|
||||
#include <usbhub.h>
|
||||
#include "KeyboardParser.h"
|
||||
#include "MouseParser.h"
|
||||
|
||||
// Satisfy the IDE, which needs to see the include statment in the ino too.
|
||||
#ifdef dobogusinclude
|
||||
#include <spi4teensy3.h>
|
||||
#include <SPI.h>
|
||||
#endif
|
||||
|
||||
USB Usb;
|
||||
//USBHub Hub1(&Usb); // Some dongles have a hub inside
|
||||
BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
|
||||
|
||||
/* You can create the instance of the class in two ways */
|
||||
// This will start an inquiry and then pair with your device - you only have to do this once
|
||||
// If you are using a Bluetooth keyboard, then you should type in the password on the keypad and then press enter
|
||||
BTHID bthid(&Btd, PAIR, "0000");
|
||||
|
||||
// After that you can simply create the instance like so and then press any button on the device
|
||||
//BTHID hid(&Btd);
|
||||
|
||||
KbdRptParser keyboardPrs;
|
||||
MouseRptParser mousePrs;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
#if !defined(__MIPSEL__)
|
||||
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
|
||||
#endif
|
||||
if (Usb.Init() == -1) {
|
||||
Serial.print(F("\r\nOSC did not start"));
|
||||
while (1); // Halt
|
||||
}
|
||||
|
||||
bthid.SetReportParser(KEYBOARD_PARSER_ID, (HIDReportParser*)&keyboardPrs);
|
||||
bthid.SetReportParser(MOUSE_PARSER_ID, (HIDReportParser*)&mousePrs);
|
||||
|
||||
// If "Boot Protocol Mode" does not work, then try "Report Protocol Mode"
|
||||
// If that does not work either, then uncomment PRINTREPORT in BTHID.cpp to see the raw report
|
||||
bthid.setProtocolMode(HID_BOOT_PROTOCOL); // Boot Protocol Mode
|
||||
//bthid.setProtocolMode(HID_RPT_PROTOCOL); // Report Protocol Mode
|
||||
|
||||
Serial.print(F("\r\nHID Bluetooth Library Started"));
|
||||
}
|
||||
void loop() {
|
||||
Usb.Task();
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
#ifndef __kbdrptparser_h_
|
||||
#define __kbdrptparser_h_
|
||||
|
||||
class KbdRptParser : public KeyboardReportParser {
|
||||
protected:
|
||||
virtual uint8_t HandleLockingKeys(HID *hid, uint8_t key);
|
||||
virtual void OnControlKeysChanged(uint8_t before, uint8_t after);
|
||||
virtual void OnKeyDown(uint8_t mod, uint8_t key);
|
||||
virtual void OnKeyUp(uint8_t mod, uint8_t key);
|
||||
virtual void OnKeyPressed(uint8_t key);
|
||||
|
||||
private:
|
||||
void PrintKey(uint8_t mod, uint8_t key);
|
||||
};
|
||||
|
||||
uint8_t KbdRptParser::HandleLockingKeys(HID *hid, uint8_t key) {
|
||||
uint8_t old_keys = kbdLockingKeys.bLeds;
|
||||
|
||||
switch (key) {
|
||||
case UHS_HID_BOOT_KEY_NUM_LOCK:
|
||||
Serial.println(F("Num lock"));
|
||||
kbdLockingKeys.kbdLeds.bmNumLock = ~kbdLockingKeys.kbdLeds.bmNumLock;
|
||||
break;
|
||||
case UHS_HID_BOOT_KEY_CAPS_LOCK:
|
||||
Serial.println(F("Caps lock"));
|
||||
kbdLockingKeys.kbdLeds.bmCapsLock = ~kbdLockingKeys.kbdLeds.bmCapsLock;
|
||||
break;
|
||||
case UHS_HID_BOOT_KEY_SCROLL_LOCK:
|
||||
Serial.println(F("Scroll lock"));
|
||||
kbdLockingKeys.kbdLeds.bmScrollLock = ~kbdLockingKeys.kbdLeds.bmScrollLock;
|
||||
break;
|
||||
}
|
||||
|
||||
if (old_keys != kbdLockingKeys.bLeds && hid) {
|
||||
BTHID *pBTHID = reinterpret_cast<BTHID *> (hid); // A cast the other way around is done in BTHID.cpp
|
||||
pBTHID->setLeds(kbdLockingKeys.bLeds); // Update the LEDs on the keyboard
|
||||
}
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
void KbdRptParser::PrintKey(uint8_t m, uint8_t key) {
|
||||
MODIFIERKEYS mod;
|
||||
*((uint8_t*)&mod) = m;
|
||||
Serial.print((mod.bmLeftCtrl == 1) ? F("C") : F(" "));
|
||||
Serial.print((mod.bmLeftShift == 1) ? F("S") : F(" "));
|
||||
Serial.print((mod.bmLeftAlt == 1) ? F("A") : F(" "));
|
||||
Serial.print((mod.bmLeftGUI == 1) ? F("G") : F(" "));
|
||||
|
||||
Serial.print(F(" >"));
|
||||
PrintHex<uint8_t>(key, 0x80);
|
||||
Serial.print(F("< "));
|
||||
|
||||
Serial.print((mod.bmRightCtrl == 1) ? F("C") : F(" "));
|
||||
Serial.print((mod.bmRightShift == 1) ? F("S") : F(" "));
|
||||
Serial.print((mod.bmRightAlt == 1) ? F("A") : F(" "));
|
||||
Serial.println((mod.bmRightGUI == 1) ? F("G") : F(" "));
|
||||
};
|
||||
|
||||
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key) {
|
||||
Serial.print(F("DN "));
|
||||
PrintKey(mod, key);
|
||||
uint8_t c = OemToAscii(mod, key);
|
||||
|
||||
if (c)
|
||||
OnKeyPressed(c);
|
||||
};
|
||||
|
||||
void KbdRptParser::OnControlKeysChanged(uint8_t before, uint8_t after) {
|
||||
MODIFIERKEYS beforeMod;
|
||||
*((uint8_t*)&beforeMod) = before;
|
||||
|
||||
MODIFIERKEYS afterMod;
|
||||
*((uint8_t*)&afterMod) = after;
|
||||
|
||||
if (beforeMod.bmLeftCtrl != afterMod.bmLeftCtrl)
|
||||
Serial.println(F("LeftCtrl changed"));
|
||||
if (beforeMod.bmLeftShift != afterMod.bmLeftShift)
|
||||
Serial.println(F("LeftShift changed"));
|
||||
if (beforeMod.bmLeftAlt != afterMod.bmLeftAlt)
|
||||
Serial.println(F("LeftAlt changed"));
|
||||
if (beforeMod.bmLeftGUI != afterMod.bmLeftGUI)
|
||||
Serial.println(F("LeftGUI changed"));
|
||||
|
||||
if (beforeMod.bmRightCtrl != afterMod.bmRightCtrl)
|
||||
Serial.println(F("RightCtrl changed"));
|
||||
if (beforeMod.bmRightShift != afterMod.bmRightShift)
|
||||
Serial.println(F("RightShift changed"));
|
||||
if (beforeMod.bmRightAlt != afterMod.bmRightAlt)
|
||||
Serial.println(F("RightAlt changed"));
|
||||
if (beforeMod.bmRightGUI != afterMod.bmRightGUI)
|
||||
Serial.println(F("RightGUI changed"));
|
||||
};
|
||||
|
||||
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key) {
|
||||
Serial.print(F("UP "));
|
||||
PrintKey(mod, key);
|
||||
};
|
||||
|
||||
void KbdRptParser::OnKeyPressed(uint8_t key) {
|
||||
Serial.print(F("ASCII: "));
|
||||
Serial.println((char)key);
|
||||
};
|
||||
|
||||
#endif
|
@ -0,0 +1,46 @@
|
||||
#ifndef __mouserptparser_h__
|
||||
#define __mouserptparser_h__
|
||||
|
||||
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) {
|
||||
Serial.print(F("dx="));
|
||||
Serial.print(mi->dX, DEC);
|
||||
Serial.print(F(" dy="));
|
||||
Serial.println(mi->dY, DEC);
|
||||
};
|
||||
|
||||
void MouseRptParser::OnLeftButtonUp(MOUSEINFO *mi) {
|
||||
Serial.println(F("L Butt Up"));
|
||||
};
|
||||
|
||||
void MouseRptParser::OnLeftButtonDown(MOUSEINFO *mi) {
|
||||
Serial.println(F("L Butt Dn"));
|
||||
};
|
||||
|
||||
void MouseRptParser::OnRightButtonUp(MOUSEINFO *mi) {
|
||||
Serial.println(F("R Butt Up"));
|
||||
};
|
||||
|
||||
void MouseRptParser::OnRightButtonDown(MOUSEINFO *mi) {
|
||||
Serial.println(F("R Butt Dn"));
|
||||
};
|
||||
|
||||
void MouseRptParser::OnMiddleButtonUp(MOUSEINFO *mi) {
|
||||
Serial.println(F("M Butt Up"));
|
||||
};
|
||||
|
||||
void MouseRptParser::OnMiddleButtonDown(MOUSEINFO *mi) {
|
||||
Serial.println(F("M Butt Dn"));
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user