Zoltan Hudak / UsbHostMAX3421E

Dependents:   UsbHostMAX3421E_Hello

Embed: (wiki syntax)

« Back to documentation index

BTD Class Reference

The Bluetooth Dongle class will take care of all the USB communication and then pass the data to the BluetoothService classes. More...

#include <BTD.h>

Inherits USBDeviceConfig, and UsbConfigXtracter.

Public Member Functions

 BTD (Usb *p)
 Constructor for the BTD class.
void disconnect ()
 Disconnects both the L2CAP Channel and the HCI Connection for all Bluetooth services.
int8_t registerBluetoothService (BluetoothService *pService)
 Register Bluetooth dongle members/services.
void pairWithWiimote ()
 Call this function to pair with a Wiimote.
void pairWithHID ()
 Call this function to pair with a HID device.
uint8_t readPollInterval ()
 Read the poll interval taken from the endpoint descriptors.
USBDeviceConfig implementation
uint8_t ConfigureDevice (uint8_t parent, uint8_t port, bool lowspeed)
 Address assignment and basic initialization is done here.
uint8_t Init (uint8_t parent, uint8_t port, bool lowspeed)
 Initialize the Bluetooth dongle.
uint8_t Release ()
 Release the USB device.
uint8_t Poll ()
 Poll the USB Input endpoints and run the state machines.
virtual uint8_t GetAddress ()
 Get the device address.
virtual bool isReady ()
 Used to check if the dongle has been initialized.
virtual bool DEVCLASSOK (uint8_t klass)
 Used by the USB core to check what this driver support.
virtual bool VIDPIDOK (uint16_t vid, uint16_t pid)
 Used by the USB core to check what this driver support.
UsbConfigXtracter implementation
void EndpointXtract (uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)
 UsbConfigXtracter implementation, used to extract endpoint information.
HCI Commands
void HCI_Command (uint8_t *data, uint16_t nbytes)
 Used to send a HCI Command.
void hci_reset ()
 Reset the Bluetooth dongle.
void hci_read_bdaddr ()
 Read the Bluetooth address of the dongle.
void hci_read_local_version_information ()
 Read the HCI Version of the Bluetooth dongle.
void hci_set_local_name (const char *name)
 Set the local name of the Bluetooth dongle.
void hci_write_scan_enable ()
 Enable visibility to other Bluetooth devices.
void hci_write_scan_disable ()
 Disable visibility to other Bluetooth devices.
void hci_remote_name ()
 Read the remote devices name.
void hci_accept_connection ()
 Accept the connection with the Bluetooth device.
void hci_disconnect (uint16_t handle)
 Disconnect the HCI connection.
void hci_pin_code_request_reply ()
 Respond with the pin for the connection.
void hci_pin_code_negative_request_reply ()
 Respons when no pin was set.
void hci_link_key_request_negative_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_authentication_request ()
 Used to try to authenticate with the remote device.
void hci_inquiry ()
 Start a HCI inquiry.
void hci_inquiry_cancel ()
 Cancel a HCI inquiry.
void hci_connect ()
 Connect to last device communicated with.
void hci_connect (uint8_t *bdaddr)
 Connect to device.
void hci_write_class_of_device ()
 Used to a set the class of the device.
L2CAP Commands
void L2CAP_Command (uint16_t handle, uint8_t *data, uint8_t nbytes, uint8_t channelLow=0x01, uint8_t channelHigh=0x00)
 Used to send L2CAP Commands.
void l2cap_connection_request (uint16_t handle, uint8_t rxid, uint8_t *scid, uint16_t psm)
 L2CAP Connection Request.
void l2cap_connection_response (uint16_t handle, uint8_t rxid, uint8_t *dcid, uint8_t *scid, uint8_t result)
 L2CAP Connection Response.
void l2cap_config_request (uint16_t handle, uint8_t rxid, uint8_t *dcid)
 L2CAP Config Request.
void l2cap_config_response (uint16_t handle, uint8_t rxid, uint8_t *scid)
 L2CAP Config Response.
void l2cap_disconnection_request (uint16_t handle, uint8_t rxid, uint8_t *dcid, uint8_t *scid)
 L2CAP Disconnection Request.
void l2cap_disconnection_response (uint16_t handle, uint8_t rxid, uint8_t *dcid, uint8_t *scid)
 L2CAP Disconnection Response.
void l2cap_information_response (uint16_t handle, uint8_t rxid, uint8_t infoTypeLow, uint8_t infoTypeHigh)
 L2CAP Information Response.

Data Fields

bool waitingForConnection
 Use this to see if it is waiting for a incoming connection.
bool l2capConnectionClaimed
 This is used by the service to know when to store the device information.
bool sdpConnectionClaimed
 This is used by the SPP library to claim the current SDP incoming request.
bool rfcommConnectionClaimed
 This is used by the SPP library to claim the current RFCOMM incoming request.
const char * btdName
 The name you wish to make the dongle show up as.
const char * btdPin
 The pin you wish to make the dongle use for authentication.
uint8_t my_bdaddr [6]
 The bluetooth dongles Bluetooth address.
uint16_t hci_handle
 HCI handle for the last connection.
uint8_t disc_bdaddr [6]
 Last incoming devices Bluetooth address.
char remote_name [30]
 First 30 chars of last remote name.
uint8_t hci_version
 The supported HCI Version read from the Bluetooth dongle.
bool connectToWii
 Used to only send the ACL data to the Wiimote.
bool incomingWii
 True if a Wiimote is connecting.
bool pairWithWii
 True when it should pair with a Wiimote.
bool motionPlusInside
 True if it's the new Wiimote with the Motion Plus Inside or a Wii U Pro Controller.
bool wiiUProController
 True if it's a Wii U Pro Controller.
bool connectToHIDDevice
 Used to only send the ACL data to the HID device.
bool incomingHIDDevice
 True if a HID device is connecting.
bool pairWithHIDDevice
 True when it should pair with a device like a mouse or keyboard.

Protected Member Functions

void PrintEndpointDescriptor (const USB_ENDPOINT_DESCRIPTOR *ep_ptr)
 Used to print the USB Endpoint Descriptor.

Protected Attributes

Usb * pUsb
 Pointer to USB class instance.
uint8_t bAddress
 Device address.
EpInfo epInfo [BTD_MAX_ENDPOINTS]
 Endpoint info structure.
uint8_t bConfNum
 Configuration number.
uint8_t bNumEP
 Total number of endpoints in the configuration.
uint32_t qNextPollTime
 Next poll time based on poll interval taken from the USB descriptor.

Static Protected Attributes

static const uint8_t BTD_CONTROL_PIPE = 0
 Bluetooth dongle control endpoint.
static const uint8_t BTD_EVENT_PIPE = 1
 HCI event endpoint index.
static const uint8_t BTD_DATAIN_PIPE = 2
 ACL In endpoint index.
static const uint8_t BTD_DATAOUT_PIPE = 3
 ACL Out endpoint index.

Detailed Description

The Bluetooth Dongle class will take care of all the USB communication and then pass the data to the BluetoothService classes.

Definition at line 202 of file BTD.h.


Constructor & Destructor Documentation

BTD ( Usb *  p )

Constructor for the BTD class.

Parameters:
pPointer to USB class instance.

Definition at line 27 of file BTD.cpp.


Member Function Documentation

uint8_t ConfigureDevice ( uint8_t  parent,
uint8_t  port,
bool  lowspeed 
)

Address assignment and basic initialization is done here.

Parameters:
parentHub number.
portPort number on the hub.
lowspeedSpeed of the device.
Returns:
0 on success.

Definition at line 48 of file BTD.cpp.

virtual bool DEVCLASSOK ( uint8_t  klass ) [virtual]

Used by the USB core to check what this driver support.

Parameters:
klassThe device's USB class.
Returns:
Returns true if the device's USB class matches this driver.

Definition at line 259 of file BTD.h.

void disconnect (  )

Disconnects both the L2CAP Channel and the HCI Connection for all Bluetooth services.

Definition at line 394 of file BTD.cpp.

void EndpointXtract ( uint8_t  conf,
uint8_t  iface,
uint8_t  alt,
uint8_t  proto,
const USB_ENDPOINT_DESCRIPTOR *  ep 
)

UsbConfigXtracter implementation, used to extract endpoint information.

Parameters:
confConfiguration value.
ifaceInterface number.
altAlternate setting.
protoInterface Protocol.
epEndpoint Descriptor.
virtual uint8_t GetAddress (  ) [virtual]

Get the device address.

Returns:
The device address.

Definition at line 242 of file BTD.h.

void hci_accept_connection (  )

Accept the connection with the Bluetooth device.

Definition at line 1002 of file BTD.cpp.

void hci_authentication_request (  )

Used to try to authenticate with the remote device.

Definition at line 1161 of file BTD.cpp.

void HCI_Command ( uint8_t *  data,
uint16_t  nbytes 
)

Used to send a HCI Command.

Parameters:
dataData to send.
nbytesNumber of bytes to send.

Definition at line 948 of file BTD.cpp.

void hci_connect (  )

Connect to last device communicated with.

Definition at line 1071 of file BTD.cpp.

void hci_connect ( uint8_t *  bdaddr )

Connect to device.

Parameters:
bdaddrBluetooth address of the device.

Definition at line 1075 of file BTD.cpp.

void hci_disconnect ( uint16_t  handle )

Disconnect the HCI connection.

Parameters:
handleThe HCI Handle for the connection.

Definition at line 1171 of file BTD.cpp.

void hci_inquiry (  )

Start a HCI inquiry.

Definition at line 1049 of file BTD.cpp.

void hci_inquiry_cancel (  )

Cancel a HCI inquiry.

Definition at line 1063 of file BTD.cpp.

void hci_link_key_request_negative_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.

Definition at line 1147 of file BTD.cpp.

void hci_pin_code_negative_request_reply (  )

Respons when no pin was set.

Definition at line 1133 of file BTD.cpp.

void hci_pin_code_request_reply (  )

Respond with the pin for the connection.

The pin is automatically set for the Wii library, but can be customized for the SPP library.

Definition at line 1097 of file BTD.cpp.

void hci_read_bdaddr (  )

Read the Bluetooth address of the dongle.

Definition at line 984 of file BTD.cpp.

void hci_read_local_version_information (  )

Read the HCI Version of the Bluetooth dongle.

Definition at line 993 of file BTD.cpp.

void hci_remote_name (  )

Read the remote devices name.

Definition at line 1018 of file BTD.cpp.

void hci_reset (  )

Reset the Bluetooth dongle.

Definition at line 953 of file BTD.cpp.

void hci_set_local_name ( const char *  name )

Set the local name of the Bluetooth dongle.

Parameters:
nameDesired name.

Definition at line 1037 of file BTD.cpp.

void hci_write_class_of_device (  )

Used to a set the class of the device.

Definition at line 1183 of file BTD.cpp.

void hci_write_scan_disable (  )

Disable visibility to other Bluetooth devices.

Definition at line 975 of file BTD.cpp.

void hci_write_scan_enable (  )

Enable visibility to other Bluetooth devices.

Definition at line 962 of file BTD.cpp.

uint8_t Init ( uint8_t  parent,
uint8_t  port,
bool  lowspeed 
)

Initialize the Bluetooth dongle.

Parameters:
parentHub number.
portPort number on the hub.
lowspeedSpeed of the device.
Returns:
0 on success.
virtual bool isReady (  ) [virtual]

Used to check if the dongle has been initialized.

Returns:
True if it's ready.

Definition at line 250 of file BTD.h.

void L2CAP_Command ( uint16_t  handle,
uint8_t *  data,
uint8_t  nbytes,
uint8_t  channelLow = 0x01,
uint8_t  channelHigh = 0x00 
)

Used to send L2CAP Commands.

Parameters:
handleHCI Handle.
dataData to send.
nbytesNumber of bytes to send.
channelLow,channelHighLow 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.

Definition at line 1219 of file BTD.cpp.

void l2cap_config_request ( uint16_t  handle,
uint8_t  rxid,
uint8_t *  dcid 
)

L2CAP Config Request.

Parameters:
handleHCI Handle.
rxidIdentifier.
dcidDestination Channel Identifier.

Definition at line 1277 of file BTD.cpp.

void l2cap_config_response ( uint16_t  handle,
uint8_t  rxid,
uint8_t *  scid 
)

L2CAP Config Response.

Parameters:
handleHCI Handle.
rxidIdentifier.
scidSource Channel Identifier.

Definition at line 1294 of file BTD.cpp.

void l2cap_connection_request ( uint16_t  handle,
uint8_t  rxid,
uint8_t *  scid,
uint16_t  psm 
)

L2CAP Connection Request.

Parameters:
handleHCI handle.
rxidIdentifier.
scidSource Channel Identifier.
psmProtocol/Service Multiplexer - see: https://www.bluetooth.org/Technical/AssignedNumbers/logical_link.htm.

Definition at line 1247 of file BTD.cpp.

void l2cap_connection_response ( uint16_t  handle,
uint8_t  rxid,
uint8_t *  dcid,
uint8_t *  scid,
uint8_t  result 
)

L2CAP Connection Response.

Parameters:
handleHCI handle.
rxidIdentifier.
dcidDestination Channel Identifier.
scidSource Channel Identifier.
resultResult - First send PENDING and then SUCCESSFUL.

Definition at line 1260 of file BTD.cpp.

void l2cap_disconnection_request ( uint16_t  handle,
uint8_t  rxid,
uint8_t *  dcid,
uint8_t *  scid 
)

L2CAP Disconnection Request.

Parameters:
handleHCI Handle.
rxidIdentifier.
dcidDevice Channel Identifier.
scidSource Channel Identifier.

Definition at line 1313 of file BTD.cpp.

void l2cap_disconnection_response ( uint16_t  handle,
uint8_t  rxid,
uint8_t *  dcid,
uint8_t *  scid 
)

L2CAP Disconnection Response.

Parameters:
handleHCI Handle.
rxidIdentifier.
dcidDevice Channel Identifier.
scidSource Channel Identifier.

Definition at line 1326 of file BTD.cpp.

void l2cap_information_response ( uint16_t  handle,
uint8_t  rxid,
uint8_t  infoTypeLow,
uint8_t  infoTypeHigh 
)

L2CAP Information Response.

Parameters:
handleHCI Handle.
rxidIdentifier.
infoTypeLow,infoTypeHighInfotype.

Definition at line 1339 of file BTD.cpp.

void pairWithHID (  )

Call this function to pair with a HID device.

Definition at line 484 of file BTD.h.

void pairWithWiimote (  )

Call this function to pair with a Wiimote.

Definition at line 468 of file BTD.h.

uint8_t Poll (  )

Poll the USB Input endpoints and run the state machines.

Returns:
0 on success.

Definition at line 382 of file BTD.cpp.

void PrintEndpointDescriptor ( const USB_ENDPOINT_DESCRIPTOR *  ep_ptr ) [protected]

Used to print the USB Endpoint Descriptor.

Parameters:
ep_ptrPointer to USB Endpoint Descriptor.
uint8_t readPollInterval (  )

Read the poll interval taken from the endpoint descriptors.

Returns:
The poll interval in ms.

Definition at line 500 of file BTD.h.

int8_t registerBluetoothService ( BluetoothService pService )

Register Bluetooth dongle members/services.

Parameters:
pServicePointer to BluetoothService class instance.
Returns:
The service ID on success or -1 on fail.

Definition at line 301 of file BTD.h.

uint8_t Release (  )

Release the USB device.

Returns:
0 on success.

Definition at line 376 of file BTD.cpp.

virtual bool VIDPIDOK ( uint16_t  vid,
uint16_t  pid 
) [virtual]

Used by the USB core to check what this driver support.

Used to set the Bluetooth address into the PS3 controllers.

Parameters:
vidThe device's VID.
pidThe device's PID.
Returns:
Returns true if the device's VID and PID matches this driver.

Definition at line 270 of file BTD.h.


Field Documentation

uint8_t bAddress [protected]

Device address.

Definition at line 508 of file BTD.h.

uint8_t bConfNum [protected]

Configuration number.

Definition at line 513 of file BTD.h.

uint8_t bNumEP [protected]

Total number of endpoints in the configuration.

Definition at line 515 of file BTD.h.

const uint8_t BTD_CONTROL_PIPE = 0 [static, protected]

Bluetooth dongle control endpoint.

Definition at line 520 of file BTD.h.

const uint8_t BTD_DATAIN_PIPE = 2 [static, protected]

ACL In endpoint index.

Definition at line 524 of file BTD.h.

const uint8_t BTD_DATAOUT_PIPE = 3 [static, protected]

ACL Out endpoint index.

Definition at line 526 of file BTD.h.

const uint8_t BTD_EVENT_PIPE = 1 [static, protected]

HCI event endpoint index.

Definition at line 522 of file BTD.h.

const char* btdName

The name you wish to make the dongle show up as.

It is set automatically by the SPP library.

Definition at line 448 of file BTD.h.

const char* btdPin

The pin you wish to make the dongle use for authentication.

It is set automatically by the SPP and BTHID library.

Definition at line 450 of file BTD.h.

Used to only send the ACL data to the HID device.

Definition at line 488 of file BTD.h.

Used to only send the ACL data to the Wiimote.

Definition at line 471 of file BTD.h.

uint8_t disc_bdaddr[6]

Last incoming devices Bluetooth address.

Definition at line 457 of file BTD.h.

EpInfo epInfo[BTD_MAX_ENDPOINTS] [protected]

Endpoint info structure.

Definition at line 510 of file BTD.h.

uint16_t hci_handle

HCI handle for the last connection.

Definition at line 455 of file BTD.h.

uint8_t hci_version

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.

Definition at line 465 of file BTD.h.

True if a HID device is connecting.

Definition at line 492 of file BTD.h.

True if a Wiimote is connecting.

Definition at line 475 of file BTD.h.

This is used by the service to know when to store the device information.

Definition at line 441 of file BTD.h.

True if it's the new Wiimote with the Motion Plus Inside or a Wii U Pro Controller.

Definition at line 479 of file BTD.h.

uint8_t my_bdaddr[6]

The bluetooth dongles Bluetooth address.

Definition at line 453 of file BTD.h.

True when it should pair with a device like a mouse or keyboard.

Definition at line 494 of file BTD.h.

True when it should pair with a Wiimote.

Definition at line 477 of file BTD.h.

Usb* pUsb [protected]

Pointer to USB class instance.

Definition at line 502 of file BTD.h.

uint32_t qNextPollTime [protected]

Next poll time based on poll interval taken from the USB descriptor.

Definition at line 517 of file BTD.h.

char remote_name[30]

First 30 chars of last remote name.

Definition at line 459 of file BTD.h.

This is used by the SPP library to claim the current RFCOMM incoming request.

Definition at line 445 of file BTD.h.

This is used by the SPP library to claim the current SDP incoming request.

Definition at line 443 of file BTD.h.

Use this to see if it is waiting for a incoming connection.

Definition at line 439 of file BTD.h.

True if it's a Wii U Pro Controller.

Definition at line 481 of file BTD.h.