summaryrefslogtreecommitdiff
path: root/lib/usbhost/USB_Host_Shield_2.0/BTHID.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/usbhost/USB_Host_Shield_2.0/BTHID.h')
-rw-r--r--lib/usbhost/USB_Host_Shield_2.0/BTHID.h155
1 files changed, 155 insertions, 0 deletions
diff --git a/lib/usbhost/USB_Host_Shield_2.0/BTHID.h b/lib/usbhost/USB_Host_Shield_2.0/BTHID.h
new file mode 100644
index 0000000000..1a7d8687c7
--- /dev/null
+++ b/lib/usbhost/USB_Host_Shield_2.0/BTHID.h
@@ -0,0 +1,155 @@
+/* Copyright (C) 2013 Kristian Lauszus, TKJ Electronics. All rights reserved.
+
+ This software may be distributed and modified under the terms of the GNU
+ General Public License version 2 (GPL2) as published by the Free Software
+ Foundation and appearing in the file GPL2.TXT included in the packaging of
+ this file. Please note that GPL2 Section 2[b] requires that all works based
+ on this software must also be made publicly available under the terms of
+ the GPL2 ("Copyleft").
+
+ Contact information
+ -------------------
+
+ Kristian Lauszus, TKJ Electronics
+ Web : http://www.tkjelectronics.com
+ e-mail : kristianl@tkjelectronics.com
+ */
+
+#ifndef _bthid_h_
+#define _bthid_h_
+
+#include "BTD.h"
+#include "hidboot.h"
+
+#define KEYBOARD_PARSER_ID 0
+#define MOUSE_PARSER_ID 1
+#define NUM_PARSERS 2
+
+/** This BluetoothService class implements support for Bluetooth HID devices. */
+class BTHID : public BluetoothService {
+public:
+ /**
+ * Constructor for the BTHID class.
+ * @param p Pointer to the BTD class instance.
+ * @param pair Set this to true in order to pair with the device. If the argument is omitted then it will not pair with it. One can use ::PAIR to set it to true.
+ * @param pin Write the pin to BTD#btdPin. If argument is omitted, then "0000" will be used.
+ */
+ BTHID(BTD *p, bool pair = false, const char *pin = "0000");
+
+ /** @name BluetoothService implementation */
+ /** Used this to disconnect the devices. */
+ void disconnect();
+ /**@}*/
+
+ /**
+ * Get HIDReportParser.
+ * @param id ID of parser.
+ * @return Returns the corresponding HIDReportParser. Returns NULL if id is not valid.
+ */
+ HIDReportParser *GetReportParser(uint8_t id) {
+ if (id >= NUM_PARSERS)
+ return NULL;
+ return pRptParser[id];
+ };
+
+ /**
+ * Set HIDReportParser to be used.
+ * @param id Id of parser.
+ * @param prs Pointer to HIDReportParser.
+ * @return Returns true if the HIDReportParser is set. False otherwise.
+ */
+ bool SetReportParser(uint8_t id, HIDReportParser *prs) {
+ if (id >= NUM_PARSERS)
+ return false;
+ pRptParser[id] = prs;
+ return true;
+ };
+
+ /**
+ * Set HID protocol mode.
+ * @param mode HID protocol to use. Either HID_BOOT_PROTOCOL or HID_RPT_PROTOCOL.
+ */
+ void setProtocolMode(uint8_t mode) {
+ protocolMode = mode;
+ };
+
+ /**
+ * Used to set the leds on a keyboard.
+ * @param data See KBDLEDS in hidboot.h
+ */
+ void setLeds(uint8_t data);
+
+ /** True if a device is connected */
+ bool connected;
+
+ /** Call this to start the paring sequence with a device */
+ void pair(void) {
+ if(pBtd)
+ pBtd->pairWithHID();
+ };
+
+protected:
+ /** @name BluetoothService implementation */
+ /**
+ * Used to pass acldata to the services.
+ * @param ACLData Incoming acldata.
+ */
+ void ACLData(uint8_t* ACLData);
+ /** Used to run part of the state machine. */
+ void Run();
+ /** Use this to reset the service. */
+ void Reset();
+ /**
+ * Called when a device is successfully initialized.
+ * Use attachOnInit(void (*funcOnInit)(void)) to call your own function.
+ * This is useful for instance if you want to set the LEDs in a specific way.
+ */
+ void onInit() {
+ if(pFuncOnInit)
+ pFuncOnInit(); // Call the user function
+ OnInitBTHID();
+ };
+ /**@}*/
+
+ /** @name Overridable functions */
+ /**
+ * Used to parse Bluetooth HID data to any class that inherits this class.
+ * @param len The length of the incoming data.
+ * @param buf Pointer to the data buffer.
+ */
+ virtual void ParseBTHIDData(uint8_t len, uint8_t *buf) {
+ return;
+ };
+ /** Called when a device is connected */
+ virtual void OnInitBTHID() {
+ return;
+ };
+ /** Used to reset any buffers in the class that inherits this */
+ virtual void ResetBTHID() {
+ return;
+ }
+ /**@}*/
+
+ /** L2CAP source CID for HID_Control */
+ uint8_t control_scid[2];
+
+ /** L2CAP source CID for HID_Interrupt */
+ uint8_t interrupt_scid[2];
+
+private:
+ HIDReportParser *pRptParser[NUM_PARSERS]; // Pointer to HIDReportParsers.
+
+ /** Set report protocol. */
+ void setProtocol();
+ uint8_t protocolMode;
+
+ void L2CAP_task(); // L2CAP state machine
+
+ bool activeConnection; // Used to indicate if it already has established a connection
+
+ /* Variables used for L2CAP communication */
+ uint8_t control_dcid[2]; // L2CAP device CID for HID_Control - Always 0x0070
+ uint8_t interrupt_dcid[2]; // L2CAP device CID for HID_Interrupt - Always 0x0071
+ uint8_t l2cap_state;
+};
+#endif