/*
LUFA Library
Copyright ( C ) Dean Camera , 2011.
dean [ at ] fourwalledcubicle [ dot ] com
www . lufa - lib . org
*/
/*
Copyright 2011 Dean Camera ( dean [ at ] fourwalledcubicle [ dot ] com )
Permission to use , copy , modify , distribute , and sell this
software and its documentation for any purpose is hereby granted
without fee , provided that the above copyright notice appear in
all copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation , and that the name of the author not be used in
advertising or publicity pertaining to distribution of the
software without specific , written prior permission .
The author disclaim all warranties with regard to this
software , including all implied warranties of merchantability
and fitness . In no event shall the author be liable for any
special , indirect or consequential damages or any damages
whatsoever resulting from loss of use , data or profits , whether
in an action of contract , negligence or other tortious action ,
arising out of or in connection with the use or performance of
this software .
*/
/** \file
*
* Header file for BluetoothHCICommands . c .
*/
# ifndef _BLUETOOTH_HCICOMMANDS_H_
# define _BLUETOOTH_HCICOMMANDS_H_
/* Includes: */
# include <avr/io.h>
# include <string.h>
# include <stdbool.h>
# include <stdio.h>
# include <LUFA/Drivers/USB/USB.h>
# include <LUFA/Drivers/Peripheral/Serial.h>
# include "BluetoothStack.h"
# include "BluetoothClassCodes.h"
/* Macros: */
# define BT_HCI_DEBUG(l, s, ...) do { if (HCI_DEBUG_LEVEL >= l) printf_P(PSTR("(HCI) " s "\r\n"), ##__VA_ARGS__); } while (0)
# define HCI_DEBUG_LEVEL 0
# define OGF_LINK_CONTROL (0x01 << 10)
# define OGF_CTRLR_BASEBAND (0x03 << 10)
# define OGF_CTRLR_INFORMATIONAL (0x04 << 10)
# define OCF_LINK_CONTROL_INQUIRY 0x0001
# define OCF_LINK_CONTROL_INQUIRY_CANCEL 0x0002
# define OCF_LINK_CONTROL_PERIODIC_INQUIRY 0x0003
# define OCF_LINK_CONTROL_EXIT_PERIODIC_INQUIRY 0x0004
# define OCF_LINK_CONTROL_CREATE_CONNECTION 0x0005
# define OCF_LINK_CONTROL_DISCONNECT 0x0006
# define OCF_LINK_CONTROL_CREATE_CONNECTION_CANCEL 0x0008
# define OCF_LINK_CONTROL_ACCEPT_CONNECTION_REQUEST 0x0009
# define OCF_LINK_CONTROL_REJECT_CONNECTION_REQUEST 0x000A
# define OCF_LINK_CONTROL_LINK_KEY_REQUEST_REPLY 0x000B
# define OCF_LINK_CONTROL_LINK_KEY_REQUEST_NEG_REPLY 0x000C
# define OCF_LINK_CONTROL_PIN_CODE_REQUEST_REPLY 0x000D
# define OCF_LINK_CONTROL_PIN_CODE_REQUEST_NEG_REPLY 0x000E
# define OCF_LINK_CONTROL_CHANGE_CONNECTION_PACKET_TYPE 0x000F
# define OCF_LINK_CONTROL_REMOTE_NAME_REQUEST 0x0019
# define OCF_CTRLR_BASEBAND_SET_EVENT_MASK 0x0001
# define OCF_CTRLR_BASEBAND_RESET 0x0003
# define OCF_CTRLR_BASEBAND_WRITE_PIN_TYPE 0x000A
# define OCF_CTRLR_BASEBAND_WRITE_LOCAL_NAME 0x0013
# define OCF_CTRLR_BASEBAND_READ_LOCAL_NAME 0x0014
# define OCF_CTRLR_BASEBAND_WRITE_SCAN_ENABLE 0x001A
# define OCF_CTRLR_BASEBAND_WRITE_CLASS_OF_DEVICE 0x0024
# define OCF_CTRLR_BASEBAND_WRITE_SIMPLE_PAIRING_MODE 0x0056
# define OCF_CTRLR_BASEBAND_WRITE_AUTHENTICATION_ENABLE 0x0020
# define OCF_CTRLR_INFORMATIONAL_READBUFFERSIZE 0x0005
# define OCF_CTRLR_INFORMATIONAL_READBDADDR 0x0009
# define EVENT_COMMAND_STATUS 0x0F
# define EVENT_COMMAND_COMPLETE 0x0E
# define EVENT_CONNECTION_COMPLETE 0x03
# define EVENT_CONNECTION_REQUEST 0x04
# define EVENT_DISCONNECTION_COMPLETE 0x05
# define EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x07
# define EVENT_PIN_CODE_REQUEST 0x16
# define EVENT_LINK_KEY_REQUEST 0x17
# define ERROR_LIMITED_RESOURCES 0x0D
# define ERROR_UNACCEPTABLE_BDADDR 0x0F
/* Type Defines: */
typedef struct
{
uint16_t OpCode ;
uint8_t ParameterLength ;
uint8_t Parameters [ ] ;
} BT_HCICommand_Header_t ;
typedef struct
{
uint8_t EventCode ;
uint8_t ParameterLength ;
} BT_HCIEvent_Header_t ;
typedef struct
{
uint8_t Status ;
uint8_t Packets ;
uint16_t OpCode ;
} BT_HCIEvent_CommandStatus_t ;
typedef struct
{
uint8_t HCIPacketsAllowable ;
uint16_t Opcode ;
uint8_t ReturnParams [ ] ;
} BT_HCIEvent_CommandComplete_t ;
typedef struct
{
uint8_t RemoteAddress [ 6 ] ;
uint8_t ClassOfDevice_Service ;
uint16_t ClassOfDevice_MajorMinor ;
uint8_t LinkType ;
} BT_HCIEvent_ConnectionRequest_t ;
typedef struct
{
uint8_t Status ;
uint16_t ConnectionHandle ;
uint8_t RemoteAddress [ 6 ] ;
uint8_t LinkType ;
uint8_t EncryptionEnabled ;
} BT_HCIEvent_ConnectionComplete_t ;
typedef struct
{
uint8_t RemoteAddress [ 6 ] ;
} BT_HCIEvent_PinCodeReq_t ;
typedef struct
{
uint8_t RemoteAddress [ 6 ] ;
} BT_HCIEvent_LinkKeyReq_t ;
typedef struct
{
uint8_t RemoteAddress [ 6 ] ;
} BT_HCICommand_LinkKeyNAKResp_t ;
typedef struct
{
uint8_t RemoteAddress [ 6 ] ;
uint8_t PINCodeLength ;
char PINCode [ 16 ] ;
} BT_HCICommand_PinCodeResp_t ;
typedef struct
{
uint8_t RemoteAddress [ 6 ] ;
uint8_t SlaveRole ;
} BT_HCICommand_AcceptConnectionReq_t ;
typedef struct
{
uint8_t RemoteAddress [ 6 ] ;
uint8_t Reason ;
} BT_HCICommand_RejectConnectionReq_t ;
/* Enums: */
enum BT_ScanEnable_Modes_t
{
BT_SCANMODE_NoScansEnabled = 0 ,
BT_SCANMODE_InquiryScanOnly = 1 ,
BT_SCANMODE_PageScanOnly = 2 ,
BT_SCANMODE_InquiryAndPageScans = 3 ,
} ;
enum BT_HCIStates_t
{
Bluetooth_ProcessEvents = 0 ,
Bluetooth_Init = 1 ,
Bluetooth_Init_Reset = 2 ,
Bluetooth_Init_ReadBufferSize = 3 ,
Bluetooth_Init_GetBDADDR = 4 ,
Bluetooth_Init_SetLocalName = 5 ,
Bluetooth_Init_SetDeviceClass = 6 ,
Bluetooth_Init_WriteScanEnable = 7 ,
Bluetooth_Init_FinalizeInit = 8 ,
Bluetooth_Conn_AcceptConnection = 9 ,
Bluetooth_Conn_RejectConnection = 10 ,
Bluetooth_Conn_SendPINCode = 11 ,
Bluetooth_Conn_SendLinkKeyNAK = 12 ,
} ;
/* Function Prototypes: */
void Bluetooth_HCITask ( void ) ;
# if defined(INCLUDE_FROM_BLUETOOTHHCICOMMANDS_C)
static uint8_t Bluetooth_SendHCICommand ( const BT_HCICommand_Header_t * const HCICommandHeader ,
const void * Parameters ,
const uint16_t ParameterLength ) ;
# endif
# endif