summaryrefslogtreecommitdiff
path: root/tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/BTD.h
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/BTD.h')
-rwxr-xr-xtmk_core/protocol/usb_hid/USB_Host_Shield_2.0/BTD.h620
1 files changed, 0 insertions, 620 deletions
diff --git a/tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/BTD.h b/tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/BTD.h
deleted file mode 100755
index 6549c30c98..0000000000
--- a/tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/BTD.h
+++ /dev/null
@@ -1,620 +0,0 @@
-/* Copyright (C) 2012 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 _btd_h_
-#define _btd_h_
-
-#include "Usb.h"
-#include "hid.h"
-
-//PID and VID of the Sony PS3 devices
-#define PS3_VID 0x054C // Sony Corporation
-#define PS3_PID 0x0268 // PS3 Controller DualShock 3
-#define PS3NAVIGATION_PID 0x042F // Navigation controller
-#define PS3MOVE_PID 0x03D5 // Motion controller
-
-#define IOGEAR_GBU521_VID 0x0A5C // The IOGEAR GBU521 dongle does not presents itself correctly, so we have to check for it manually
-#define IOGEAR_GBU521_PID 0x21E8
-
-/* Bluetooth dongle data taken from descriptors */
-#define BULK_MAXPKTSIZE 64 // Max size for ACL data
-
-// Used in control endpoint header for HCI Commands
-#define bmREQ_HCI_OUT USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_DEVICE
-
-/* Bluetooth HCI states for hci_task() */
-#define HCI_INIT_STATE 0
-#define HCI_RESET_STATE 1
-#define HCI_CLASS_STATE 2
-#define HCI_BDADDR_STATE 3
-#define HCI_LOCAL_VERSION_STATE 4
-#define HCI_SET_NAME_STATE 5
-#define HCI_CHECK_DEVICE_SERVICE 6
-
-#define HCI_INQUIRY_STATE 7 // These three states are only used if it should pair and connect to a device
-#define HCI_CONNECT_DEVICE_STATE 8
-#define HCI_CONNECTED_DEVICE_STATE 9
-
-#define HCI_SCANNING_STATE 10
-#define HCI_CONNECT_IN_STATE 11
-#define HCI_REMOTE_NAME_STATE 12
-#define HCI_CONNECTED_STATE 13
-#define HCI_DISABLE_SCAN_STATE 14
-#define HCI_DONE_STATE 15
-#define HCI_DISCONNECT_STATE 16
-
-/* HCI event flags*/
-#define HCI_FLAG_CMD_COMPLETE (1UL << 0)
-#define HCI_FLAG_CONNECT_COMPLETE (1UL << 1)
-#define HCI_FLAG_DISCONNECT_COMPLETE (1UL << 2)
-#define HCI_FLAG_REMOTE_NAME_COMPLETE (1UL << 3)
-#define HCI_FLAG_INCOMING_REQUEST (1UL << 4)
-#define HCI_FLAG_READ_BDADDR (1UL << 5)
-#define HCI_FLAG_READ_VERSION (1UL << 6)
-#define HCI_FLAG_DEVICE_FOUND (1UL << 7)
-#define HCI_FLAG_CONNECT_EVENT (1UL << 8)
-
-/* Macros for HCI event flag tests */
-#define hci_check_flag(flag) (hci_event_flag & (flag))
-#define hci_set_flag(flag) (hci_event_flag |= (flag))
-#define hci_clear_flag(flag) (hci_event_flag &= ~(flag))
-
-/* HCI Events managed */
-#define EV_INQUIRY_COMPLETE 0x01
-#define EV_INQUIRY_RESULT 0x02
-#define EV_CONNECT_COMPLETE 0x03
-#define EV_INCOMING_CONNECT 0x04
-#define EV_DISCONNECT_COMPLETE 0x05
-#define EV_AUTHENTICATION_COMPLETE 0x06
-#define EV_REMOTE_NAME_COMPLETE 0x07
-#define EV_ENCRYPTION_CHANGE 0x08
-#define EV_CHANGE_CONNECTION_LINK 0x09
-#define EV_ROLE_CHANGED 0x12
-#define EV_NUM_COMPLETE_PKT 0x13
-#define EV_PIN_CODE_REQUEST 0x16
-#define EV_LINK_KEY_REQUEST 0x17
-#define EV_LINK_KEY_NOTIFICATION 0x18
-#define EV_DATA_BUFFER_OVERFLOW 0x1A
-#define EV_MAX_SLOTS_CHANGE 0x1B
-#define EV_READ_REMOTE_VERSION_INFORMATION_COMPLETE 0x0C
-#define EV_QOS_SETUP_COMPLETE 0x0D
-#define EV_COMMAND_COMPLETE 0x0E
-#define EV_COMMAND_STATUS 0x0F
-#define EV_LOOPBACK_COMMAND 0x19
-#define EV_PAGE_SCAN_REP_MODE 0x20
-
-/* Bluetooth states for the different Bluetooth drivers */
-#define L2CAP_WAIT 0
-#define L2CAP_DONE 1
-
-/* Used for HID Control channel */
-#define L2CAP_CONTROL_CONNECT_REQUEST 2
-#define L2CAP_CONTROL_CONFIG_REQUEST 3
-#define L2CAP_CONTROL_SUCCESS 4
-#define L2CAP_CONTROL_DISCONNECT 5
-
-/* Used for HID Interrupt channel */
-#define L2CAP_INTERRUPT_SETUP 6
-#define L2CAP_INTERRUPT_CONNECT_REQUEST 7
-#define L2CAP_INTERRUPT_CONFIG_REQUEST 8
-#define L2CAP_INTERRUPT_DISCONNECT 9
-
-/* Used for SDP channel */
-#define L2CAP_SDP_WAIT 10
-#define L2CAP_SDP_SUCCESS 11
-
-/* Used for RFCOMM channel */
-#define L2CAP_RFCOMM_WAIT 12
-#define L2CAP_RFCOMM_SUCCESS 13
-
-#define L2CAP_DISCONNECT_RESPONSE 14 // Used for both SDP and RFCOMM channel
-
-/* Bluetooth states used by some drivers */
-#define TURN_ON_LED 17
-#define PS3_ENABLE_SIXAXIS 18
-#define WII_CHECK_MOTION_PLUS_STATE 19
-#define WII_CHECK_EXTENSION_STATE 20
-#define WII_INIT_MOTION_PLUS_STATE 21
-
-/* L2CAP event flags for HID Control channel */
-#define L2CAP_FLAG_CONNECTION_CONTROL_REQUEST (1UL << 0)
-#define L2CAP_FLAG_CONFIG_CONTROL_SUCCESS (1UL << 1)
-#define L2CAP_FLAG_CONTROL_CONNECTED (1UL << 2)
-#define L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE (1UL << 3)
-
-/* L2CAP event flags for HID Interrupt channel */
-#define L2CAP_FLAG_CONNECTION_INTERRUPT_REQUEST (1UL << 4)
-#define L2CAP_FLAG_CONFIG_INTERRUPT_SUCCESS (1UL << 5)
-#define L2CAP_FLAG_INTERRUPT_CONNECTED (1UL << 6)
-#define L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE (1UL << 7)
-
-/* L2CAP event flags for SDP channel */
-#define L2CAP_FLAG_CONNECTION_SDP_REQUEST (1UL << 8)
-#define L2CAP_FLAG_CONFIG_SDP_SUCCESS (1UL << 9)
-#define L2CAP_FLAG_DISCONNECT_SDP_REQUEST (1UL << 10)
-
-/* L2CAP event flags for RFCOMM channel */
-#define L2CAP_FLAG_CONNECTION_RFCOMM_REQUEST (1UL << 11)
-#define L2CAP_FLAG_CONFIG_RFCOMM_SUCCESS (1UL << 12)
-#define L2CAP_FLAG_DISCONNECT_RFCOMM_REQUEST (1UL << 13)
-
-#define L2CAP_FLAG_DISCONNECT_RESPONSE (1UL << 14)
-
-/* Macros for L2CAP event flag tests */
-#define l2cap_check_flag(flag) (l2cap_event_flag & (flag))
-#define l2cap_set_flag(flag) (l2cap_event_flag |= (flag))
-#define l2cap_clear_flag(flag) (l2cap_event_flag &= ~(flag))
-
-/* L2CAP signaling commands */
-#define L2CAP_CMD_COMMAND_REJECT 0x01
-#define L2CAP_CMD_CONNECTION_REQUEST 0x02
-#define L2CAP_CMD_CONNECTION_RESPONSE 0x03
-#define L2CAP_CMD_CONFIG_REQUEST 0x04
-#define L2CAP_CMD_CONFIG_RESPONSE 0x05
-#define L2CAP_CMD_DISCONNECT_REQUEST 0x06
-#define L2CAP_CMD_DISCONNECT_RESPONSE 0x07
-#define L2CAP_CMD_INFORMATION_REQUEST 0x0A
-#define L2CAP_CMD_INFORMATION_RESPONSE 0x0B
-
-// Used For Connection Response - Remember to Include High Byte
-#define PENDING 0x01
-#define SUCCESSFUL 0x00
-
-/* Bluetooth L2CAP PSM - see http://www.bluetooth.org/Technical/AssignedNumbers/logical_link.htm */
-#define SDP_PSM 0x01 // Service Discovery Protocol PSM Value
-#define RFCOMM_PSM 0x03 // RFCOMM PSM Value
-#define HID_CTRL_PSM 0x11 // HID_Control PSM Value
-#define HID_INTR_PSM 0x13 // HID_Interrupt PSM Value
-
-// Used to determine if it is a Bluetooth dongle
-#define WI_SUBCLASS_RF 0x01 // RF Controller
-#define WI_PROTOCOL_BT 0x01 // Bluetooth Programming Interface
-
-#define BTD_MAX_ENDPOINTS 4
-#define BTD_NUM_SERVICES 4 // Max number of Bluetooth services - if you need more than 4 simply increase this number
-
-#define PAIR 1
-
-class BluetoothService;
-
-/**
- * The Bluetooth Dongle class will take care of all the USB communication
- * and then pass the data to the BluetoothService classes.
- */
-class BTD : public USBDeviceConfig, public UsbConfigXtracter {
-public:
- /**
- * Constructor for the BTD class.
- * @param p Pointer to USB class instance.
- */
- BTD(USB *p);
-
- /** @name USBDeviceConfig implementation */
- /**
- * Address assignment and basic initialization is done here.
- * @param parent Hub number.
- * @param port Port number on the hub.
- * @param lowspeed Speed of the device.
- * @return 0 on success.
- */
- uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed);
- /**
- * Initialize the Bluetooth dongle.
- * @param parent Hub number.
- * @param port Port number on the hub.
- * @param lowspeed Speed of the device.
- * @return 0 on success.
- */
- uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
- /**
- * Release the USB device.
- * @return 0 on success.
- */
- uint8_t Release();
- /**
- * Poll the USB Input endpoints and run the state machines.
- * @return 0 on success.
- */
- uint8_t Poll();
-
- /**
- * Get the device address.
- * @return The device address.
- */
- virtual uint8_t GetAddress() {
- return bAddress;
- };
-
- /**
- * Used to check if the dongle has been initialized.
- * @return True if it's ready.
- */
- virtual bool isReady() {
- return bPollEnable;
- };
-
- /**
- * Used by the USB core to check what this driver support.
- * @param klass The device's USB class.
- * @return Returns true if the device's USB class matches this driver.
- */
- virtual bool DEVCLASSOK(uint8_t klass) {
- return (klass == USB_CLASS_WIRELESS_CTRL);
- };
-
- /**
- * Used by the USB core to check what this driver support.
- * Used to set the Bluetooth address into the PS3 controllers.
- * @param vid The device's VID.
- * @param pid The device's PID.
- * @return Returns true if the device's VID and PID matches this driver.
- */
- virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
- if(vid == IOGEAR_GBU521_VID && pid == IOGEAR_GBU521_PID)
- return true;
- if(my_bdaddr[0] != 0x00 || my_bdaddr[1] != 0x00 || my_bdaddr[2] != 0x00 || my_bdaddr[3] != 0x00 || my_bdaddr[4] != 0x00 || my_bdaddr[5] != 0x00) { // Check if Bluetooth address is set
- if(vid == PS3_VID && (pid == PS3_PID || pid == PS3NAVIGATION_PID || pid == PS3MOVE_PID))
- return true;
- }
- return false;
- };
- /**@}*/
-
- /** @name UsbConfigXtracter implementation */
- /**
- * UsbConfigXtracter implementation, used to extract endpoint information.
- * @param conf Configuration value.
- * @param iface Interface number.
- * @param alt Alternate setting.
- * @param proto Interface Protocol.
- * @param ep Endpoint Descriptor.
- */
- void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
- /**@}*/
-
- /** Disconnects both the L2CAP Channel and the HCI Connection for all Bluetooth services. */
- void disconnect();
-
- /**
- * Register Bluetooth dongle members/services.
- * @param pService Pointer to BluetoothService class instance.
- * @return The service ID on success or -1 on fail.
- */
- int8_t registerBluetoothService(BluetoothService *pService) {
- for(uint8_t i = 0; i < BTD_NUM_SERVICES; i++) {
- if(!btService[i]) {
- btService[i] = pService;
- return i; // Return ID
- }
- }
- return -1; // Error registering BluetoothService
- };
-
- /** @name HCI Commands */
- /**
- * Used to send a HCI Command.
- * @param data Data to send.
- * @param nbytes Number of bytes to send.
- */
- void HCI_Command(uint8_t* data, uint16_t nbytes);
- /** Reset the Bluetooth dongle. */
- void hci_reset();
- /** Read the Bluetooth address of the dongle. */
- void hci_read_bdaddr();
- /** Read the HCI Version of the Bluetooth dongle. */
- void hci_read_local_version_information();
- /**
- * Set the local name of the Bluetooth dongle.
- * @param name Desired name.
- */
- void hci_set_local_name(const char* name);
- /** Enable visibility to other Bluetooth devices. */
- void hci_write_scan_enable();
- /** Disable visibility to other Bluetooth devices. */
- void hci_write_scan_disable();
- /** Read the remote devices name. */
- void hci_remote_name();
- /** Accept the connection with the Bluetooth device. */
- void hci_accept_connection();
- /**
- * Disconnect the HCI connection.
- * @param handle The HCI Handle for the connection.
- */
- void hci_disconnect(uint16_t handle);
- /**
- * Respond with the pin for the connection.
- * The pin is automatically set for the Wii library,
- * but can be customized for the SPP library.
- */
- void hci_pin_code_request_reply();
- /** Respons when no pin was set. */
- void hci_pin_code_negative_request_reply();
- /**
- * Command is used to reply to a Link Key Request event from the BR/EDR Controller
- * if the Host does not have a stored Link Key for the connection.
- */
- void hci_link_key_request_negative_reply();
- /** Used to try to authenticate with the remote device. */
- void hci_authentication_request();
- /** Start a HCI inquiry. */
- void hci_inquiry();
- /** Cancel a HCI inquiry. */
- void hci_inquiry_cancel();
- /** Connect to last device communicated with. */
- void hci_connect();
- /**
- * Connect to device.
- * @param bdaddr Bluetooth address of the device.
- */
- void hci_connect(uint8_t *bdaddr);
- /** Used to a set the class of the device. */
- void hci_write_class_of_device();
- /**@}*/
-
- /** @name L2CAP Commands */
- /**
- * Used to send L2CAP Commands.
- * @param handle HCI Handle.
- * @param data Data to send.
- * @param nbytes Number of bytes to send.
- * @param channelLow,channelHigh Low and high byte of channel to send to.
- * If argument is omitted then the Standard L2CAP header: Channel ID (0x01) for ACL-U will be used.
- */
- void L2CAP_Command(uint16_t handle, uint8_t* data, uint8_t nbytes, uint8_t channelLow = 0x01, uint8_t channelHigh = 0x00);
- /**
- * L2CAP Connection Request.
- * @param handle HCI handle.
- * @param rxid Identifier.
- * @param scid Source Channel Identifier.
- * @param psm Protocol/Service Multiplexer - see: https://www.bluetooth.org/Technical/AssignedNumbers/logical_link.htm.
- */
- void l2cap_connection_request(uint16_t handle, uint8_t rxid, uint8_t* scid, uint16_t psm);
- /**
- * L2CAP Connection Response.
- * @param handle HCI handle.
- * @param rxid Identifier.
- * @param dcid Destination Channel Identifier.
- * @param scid Source Channel Identifier.
- * @param result Result - First send ::PENDING and then ::SUCCESSFUL.
- */
- void l2cap_connection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid, uint8_t result);
- /**
- * L2CAP Config Request.
- * @param handle HCI Handle.
- * @param rxid Identifier.
- * @param dcid Destination Channel Identifier.
- */
- void l2cap_config_request(uint16_t handle, uint8_t rxid, uint8_t* dcid);
- /**
- * L2CAP Config Response.
- * @param handle HCI Handle.
- * @param rxid Identifier.
- * @param scid Source Channel Identifier.
- */
- void l2cap_config_response(uint16_t handle, uint8_t rxid, uint8_t* scid);
- /**
- * L2CAP Disconnection Request.
- * @param handle HCI Handle.
- * @param rxid Identifier.
- * @param dcid Device Channel Identifier.
- * @param scid Source Channel Identifier.
- */
- void l2cap_disconnection_request(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid);
- /**
- * L2CAP Disconnection Response.
- * @param handle HCI Handle.
- * @param rxid Identifier.
- * @param dcid Device Channel Identifier.
- * @param scid Source Channel Identifier.
- */
- void l2cap_disconnection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid);
- /**
- * L2CAP Information Response.
- * @param handle HCI Handle.
- * @param rxid Identifier.
- * @param infoTypeLow,infoTypeHigh Infotype.
- */
- void l2cap_information_response(uint16_t handle, uint8_t rxid, uint8_t infoTypeLow, uint8_t infoTypeHigh);
- /**@}*/
-
- /** Use this to see if it is waiting for a incoming connection. */
- bool watingForConnection;
- /** This is used by the service to know when to store the device information. */
- bool l2capConnectionClaimed;
- /** This is used by the SPP library to claim the current SDP incoming request. */
- bool sdpConnectionClaimed;
- /** This is used by the SPP library to claim the current RFCOMM incoming request. */
- bool rfcommConnectionClaimed;
-
- /** The name you wish to make the dongle show up as. It is set automatically by the SPP library. */
- const char* btdName;
- /** The pin you wish to make the dongle use for authentication. It is set automatically by the SPP and BTHID library. */
- const char* btdPin;
-
- /** The bluetooth dongles Bluetooth address. */
- uint8_t my_bdaddr[6];
- /** HCI handle for the last connection. */
- uint16_t hci_handle;
- /** Last incoming devices Bluetooth address. */
- uint8_t disc_bdaddr[6];
- /** First 30 chars of last remote name. */
- char remote_name[30];
- /**
- * The supported HCI Version read from the Bluetooth dongle.
- * Used by the PS3BT library to check the HCI Version of the Bluetooth dongle,
- * it should be at least 3 to work properly with the library.
- */
- uint8_t hci_version;
-
- /** Call this function to pair with a Wiimote */
- void pairWithWiimote() {
- pairWithWii = true;
- hci_state = HCI_CHECK_DEVICE_SERVICE;
- };
- /** Used to only send the ACL data to the Wiimote. */
- bool connectToWii;
- /** True if a Wiimote is connecting. */
- bool incomingWii;
- /** True when it should pair with a Wiimote. */
- bool pairWithWii;
- /** True if it's the new Wiimote with the Motion Plus Inside or a Wii U Pro Controller. */
- bool motionPlusInside;
- /** True if it's a Wii U Pro Controller. */
- bool wiiUProController;
-
- /** Call this function to pair with a Wiimote */
- void pairWithHID() {
- pairWithHIDDevice = true;
- hci_state = HCI_CHECK_DEVICE_SERVICE;
- };
- /** Used to only send the ACL data to the Wiimote. */
- bool connectToHIDDevice;
- /** True if a Wiimote is connecting. */
- bool incomingHIDDevice;
- /** True when it should pair with a device like a mouse or keyboard. */
- bool pairWithHIDDevice;
-
- /**
- * Read the poll interval taken from the endpoint descriptors.
- * @return The poll interval in ms.
- */
- uint8_t readPollInterval() {
- return pollInterval;
- };
-
-protected:
- /** Pointer to USB class instance. */
- USB *pUsb;
- /** Device address. */
- uint8_t bAddress;
- /** Endpoint info structure. */
- EpInfo epInfo[BTD_MAX_ENDPOINTS];
-
- /** Configuration number. */
- uint8_t bConfNum;
- /** Total number of endpoints in the configuration. */
- uint8_t bNumEP;
- /** Next poll time based on poll interval taken from the USB descriptor. */
- uint32_t qNextPollTime;
-
- /** Bluetooth dongle control endpoint. */
- static const uint8_t BTD_CONTROL_PIPE;
- /** HCI event endpoint index. */
- static const uint8_t BTD_EVENT_PIPE;
- /** ACL In endpoint index. */
- static const uint8_t BTD_DATAIN_PIPE;
- /** ACL Out endpoint index. */
- static const uint8_t BTD_DATAOUT_PIPE;
-
- /**
- * Used to print the USB Endpoint Descriptor.
- * @param ep_ptr Pointer to USB Endpoint Descriptor.
- */
- void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR* ep_ptr);
-
-private:
- void Initialize(); // Set all variables, endpoint structs etc. to default values
- BluetoothService *btService[BTD_NUM_SERVICES];
-
- uint16_t PID, VID; // PID and VID of device connected
-
- uint8_t pollInterval;
- bool bPollEnable;
-
- bool pairWiiUsingSync; // True if paring was done using the Wii SYNC button.
- bool checkRemoteName; // Used to check remote device's name before connecting.
- bool incomingPS4; // True if a PS4 controller is connecting
- uint8_t classOfDevice[3]; // Class of device of last device
-
- /* Variables used by high level HCI task */
- uint8_t hci_state; // Current state of Bluetooth HCI connection
- uint16_t hci_counter; // Counter used for Bluetooth HCI reset loops
- uint16_t hci_num_reset_loops; // This value indicate how many times it should read before trying to reset
- uint16_t hci_event_flag; // HCI flags of received Bluetooth events
- uint8_t inquiry_counter;
-
- uint8_t hcibuf[BULK_MAXPKTSIZE]; // General purpose buffer for HCI data
- uint8_t l2capinbuf[BULK_MAXPKTSIZE]; // General purpose buffer for L2CAP in data
- uint8_t l2capoutbuf[14]; // General purpose buffer for L2CAP out data
-
- /* State machines */
- void HCI_event_task(); // Poll the HCI event pipe
- void HCI_task(); // HCI state machine
- void ACL_event_task(); // ACL input pipe
-
- /* Used to set the Bluetooth Address internally to the PS3 Controllers */
- void setBdaddr(uint8_t* BDADDR);
- void setMoveBdaddr(uint8_t* BDADDR);
-};
-
-/** All Bluetooth services should inherit this class. */
-class BluetoothService {
-public:
- BluetoothService(BTD *p) : pBtd(p) {
- if(pBtd)
- pBtd->registerBluetoothService(this); // Register it as a Bluetooth service
- };
- /**
- * Used to pass acldata to the Bluetooth service.
- * @param ACLData Pointer to the incoming acldata.
- */
- virtual void ACLData(uint8_t* ACLData) = 0;
- /** Used to run the different state machines in the Bluetooth service. */
- virtual void Run() = 0;
- /** Used to reset the Bluetooth service. */
- virtual void Reset() = 0;
- /** Used to disconnect both the L2CAP Channel and the HCI Connection for the Bluetooth service. */
- virtual void disconnect() = 0;
-
- /**
- * Used to call your own function when the device is successfully initialized.
- * @param funcOnInit Function to call.
- */
- void attachOnInit(void (*funcOnInit)(void)) {
- pFuncOnInit = funcOnInit; // TODO: This really belong in a class of it's own as it is repeated several times
- };
-
-protected:
- /**
- * 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.
- */
- virtual void onInit() = 0;
-
- /** Used to check if the incoming L2CAP data matches the HCI Handle */
- bool checkHciHandle(uint8_t *buf, uint16_t handle) {
- return (buf[0] == (handle & 0xFF)) && (buf[1] == ((handle >> 8) | 0x20));
- }
-
- /** Pointer to function called in onInit(). */
- void (*pFuncOnInit)(void);
-
- /** Pointer to BTD instance. */
- BTD *pBtd;
-
- /** The HCI Handle for the connection. */
- uint16_t hci_handle;
-
- /** L2CAP flags of received Bluetooth events. */
- uint32_t l2cap_event_flag;
-
- /** Identifier for L2CAP commands. */
- uint8_t identifier;
-};
-
-#endif