THB2/bthome_phy6222/SDK/components/ble/host/gap_internal.h

471 lines
15 KiB
C

/*************
gap_internal.h
SDK_LICENSE
***************/
#ifndef GAP_INTERNAL_H
#define GAP_INTERNAL_H
#ifdef __cplusplus
extern "C"
{
#endif
/*********************************************************************
* INCLUDES
*/
#include "bcomdef.h"
#include "hci.h"
#include "l2cap.h"
#include "gap.h"
/*********************************************************************
* MACROS
*/
/*********************************************************************
* CONSTANTS
*/
// GAP OSAL Events
#define GAP_OSAL_TIMER_SCAN_DURATION_EVT 0x0001
#define GAP_END_ADVERTISING_EVT 0x0002
#define GAP_CHANGE_RESOLVABLE_PRIVATE_ADDR_EVT 0x0004
#define ADDRTYPE_RANDOM 1 // Not public
#define GAP_PRIVATE_ADDR_CHANGE_RESOLUTION 0xEA60 // Timer resolution is 1 minute
#define ADV_TOKEN_HDR 2
// Address header bits
#define RANDOM_ADDR_HDR 0xC0 // Used for LL RANDOM Address
#define STATIC_ADDR_HDR 0xC0 // Host Static Address, same as RANDOM address
#define PRIVATE_RESOLVE_ADDR_HDR 0x40
#if defined ( TESTMODES )
// GAP TestModes
#define GAP_TESTMODE_OFF 0 // No Test mode
#define GAP_TESTMODE_NO_RESPONSE 1 // Don't respond to any GAP message
#endif // TESTMODES
// L2CAP Connection Parameters Update Request event
#define L2CAP_PARAM_UPDATE 0xFFFF
/*********************************************************************
* TYPEDEFS
*/
typedef struct gapAdvToken
{
struct gapAdvToken *pNext; // Pointer to next item in link list
gapAdvDataToken_t *pToken; // Pointer to data token
} gapAdvToken_t;
/** Advertising and Scan Response Data **/
typedef struct
{
uint8 dataLen; // Number of bytes used in "dataField"
uint8 dataField[B_MAX_ADV_LEN]; // Data field of the advertisement or SCAN_RSP
} gapAdvertisingData_t;
typedef struct
{
uint8 dataLen; // length (in bytes) of "dataField"
uint8 dataField[1]; // This is just a place holder size
// The dataField will be allocated bigger
} gapAdvertRecData_t;
// Temporary advertising record
typedef struct
{
uint8 eventType; // Avertisement or SCAN_RSP
uint8 addrType; // Advertiser's address type
uint8 addr[B_ADDR_LEN]; // Advertiser's address
gapAdvertRecData_t *pAdData; // Advertising data field. This space is allocated.
gapAdvertRecData_t *pScanData; // SCAN_RSP data field. This space is allocated.
} gapAdvertRec_t;
typedef enum
{
GAP_ADSTATE_SET_PARAMS, // Setting the advertisement parameters
GAP_ADSTATE_SET_MODE, // Turning on advertising
GAP_ADSTATE_ADVERTISING, // Currently Advertising
GAP_ADSTATE_ENDING // Turning off advertising
} gapAdvertStatesIDs_t;
// Advertising State Information
typedef struct
{
uint8 taskID; // App that started an advertising period
gapAdvertStatesIDs_t state; // Make Discoverable state
gapAdvertisingParams_t params; // Advertisement parameters
} gapAdvertState_t;
typedef struct
{
uint8 state; // Authentication states
uint16 connectionHandle; // Connection Handle from controller,
smLinkSecurityReq_t secReqs; // Pairing Control info
// The following are only used if secReqs.bondable == BOUND, which means that
// the device is already bound and we should use the security information and
// keys
smSecurityInfo_t *pSecurityInfo; // BOUND - security information
smIdentityInfo_t *pIdentityInfo; // BOUND - identity information
smSigningInfo_t *pSigningInfo; // Signing information
} gapAuthStateParams_t;
// Callback when an HCI Command Event has been received on the Central.
typedef uint8 (*gapProcessHCICmdEvt_t)( uint16 cmdOpcode, hciEvt_CmdComplete_t *pMsg );
// Callback when an Scanning Report has been received on the Central.
typedef void (*gapProcessScanningEvt_t)( hciEvt_BLEAdvPktReport_t *pMsg );
// Callback to cancel a connection initiation on the Central.
typedef bStatus_t (*gapCancelLinkReq_t)( uint8 taskID, uint16 connectionHandle );
// Callback when a connection-related event has been received on the Central.
typedef uint8(*gapProcessConnEvt_t)( uint16 cmdOpcode, hciEvt_CommandStatus_t *pMsg );
// Callback when an HCI Command Command Event on the Peripheral.
typedef uint8 (*gapProcessHCICmdCompleteEvt_t)( hciEvt_CmdComplete_t *pMsg );
// Callback when an Advertising Event has been received on the Peripheral.
typedef void (*gapProcessAdvertisingEvt_t)( uint8 timeout );
// Callback when a Set Advertising Params has been received on the Peripheral.
typedef bStatus_t (*gapSetAdvParams_t)( void );
// Central callback structure - must be setup by the Central.
typedef struct
{
gapProcessHCICmdEvt_t pfnProcessHCICmdEvt; // When HCI Command Event received
gapProcessScanningEvt_t pfnProcessScanningEvt; // When Scanning Report received
} gapCentralCBs_t;
// Central connection-related callback structure - must be setup by the Central.
typedef struct
{
gapCancelLinkReq_t pfnCancelLinkReq; // When cancel connection initiation requested
gapProcessConnEvt_t pfnProcessConnEvt; // When connection-related event received
} gapCentralConnCBs_t;
// Peripheral callback structure - must be setup by the Peripheral.
typedef struct
{
gapProcessHCICmdCompleteEvt_t pfnProcessHCICmdCompleteEvt; // When HCI Command Complete Event received
gapProcessAdvertisingEvt_t pfnProcessAdvertisingEvt; // When Advertising Event received
gapSetAdvParams_t pfnSetAdvParams; // When Set Advertising Params received
} gapPeripheralCBs_t;
/*********************************************************************
* GLOBAL VARIABLES
*/
extern uint8 gapTaskID;
extern uint8 gapUnwantedTaskID;
extern uint8 gapAppTaskID; // default task ID to send events
extern uint8 gapProfileRole; // device GAP Profile Role(s)
extern uint8 gapDeviceAddrMode; // ADDRTYPE_PUBLIC, ADDRTYPE_STATIC,
// ADDRTYPE_PRIVATE_NONRESOLVE
// or ADDRTYPE_PRIVATE_RESOLVE
// Central Peripheral variables
extern gapDevDiscReq_t *pGapDiscReq;
extern gapEstLinkReq_t *pEstLink;
extern gapCentralConnCBs_t *pfnCentralConnCBs;
// Peripheral variables
extern gapAdvertState_t *pGapAdvertState;
extern gapPeripheralCBs_t *pfnPeripheralCBs;
// Common variables
extern gapAuthStateParams_t* pAuthLink[];
extern uint16 gapPrivateAddrChangeTimeout;
extern uint8 gapAutoAdvPrivateAddrChange;
/*********************************************************************
* FUNCTIONS - API
*/
/*********************************************************************
* Application Level Functions
*/
/*
* gapSetScanParamStatus - Process HCI Command Complete Event status for
* the call to HCI_BLESetScanParamCmd().
*/
extern uint8 gapSetScanParamStatus( uint8 status );
/*
* gapSetAdvParamsStatus - Process HCI Command Complete Event status for
* the call to HCI_BLESetAdvParamCmd().
*/
extern uint8 gapSetAdvParamsStatus( uint8 status );
/*
* gapWriteAdvEnableStatus - Process HCI Command Complete Event status for
* the call to HCI_BLEWriteAdvEnableCmd().
*/
extern uint8 gapWriteAdvEnableStatus( uint8 status, uint16 interval );
/*
* gapWriteAdvDataStatus - Process HCI Command Complete Event status for
* the call to HCI_BLEWriteAdvDataCmd() or
* HCI_BLEWriteScanRspDataCmd().
*/
extern void gapWriteAdvDataStatus( uint8 adType, uint8 status );
/*
* gapReadBD_ADDRStatus - Process the HCI Command Complete Event for the
* call to HCI_ReadBDADDRCmd().
*/
extern uint8 gapReadBD_ADDRStatus( uint8 status, uint8 *pBdAddr );
/*
* gapReadBufSizeCmdStatus - Process the HCI Command Complete Event for the
* call to HCI_BLEReadBufSizeCmd().
*/
extern uint8 gapReadBufSizeCmdStatus( hciRetParam_LeReadBufSize_t *pCmdStat );
/*
* gapProcessConnectionCompleteEvt - Process the HCI Connection Complete
* event for the call to HCI_BLECreateLLConnCmd().
*/
extern void gapProcessConnectionCompleteEvt( hciEvt_BLEConnComplete_t *pPkt );
/*
* gapProcessConnUpdateCompleteEvt - Process the HCI Connection Parameters
* Update Complete event for the call to HCI_BLEUpdateLLConnCmd().
*/
extern void gapProcessConnUpdateCompleteEvt( hciEvt_BLEConnUpdateComplete_t *pPkt );
/*
* gapProcessDisconnectCompleteEvt - Process the LL Disconnection Complete Event
* for the call to HCI_DisconnectCmd().
*/
extern void gapProcessDisconnectCompleteEvt( hciEvt_DisconnComplete_t *pPkt );
/*
* gapProcessCreateLLConnCmdStatus - Process the status for the HCI_BLECreateLLConnCmd().
*/
extern void gapProcessCreateLLConnCmdStatus( uint8 status );
/*
* gapProcessConnUpdateCmdStatus - Process the status for the HCI_LE_ConnUpdateCmd().
*/
extern void gapProcessConnUpdateCmdStatus( uint8 status );
/*
* gapProcessNewAddr - Process message SM
*/
extern bStatus_t gapProcessNewAddr( uint8 *pNewAddr );
/*
* gapAddAddrAdj - Add the top two bits based on the address type.
*/
extern uint8 gapAddAddrAdj( uint8 addrType, uint8 *pAddr );
/*
* gapDetermineAddrType - Convert from LL address type to host address type.
*/
extern uint8 gapDetermineAddrType( uint8 addrType, uint8 *pAddr );
/*
* gapProcessRandomAddrComplete - Process message HCI
*/
extern void gapProcessRandomAddrComplete( uint8 status );
/*
* gapGetSRK - Get pointer to the SRK
*/
extern uint8 *gapGetSRK( void );
/*
* gapGetSignCounter - Get the signature counter
*/
extern uint32 gapGetSignCounter( void );
/*
* gapIncSignCounter - Increment the signature counter
*/
extern void gapIncSignCounter( void );
/*
* gapUpdateConnSignCounter - Update a connection's signature's counter
*/
extern void gapUpdateConnSignCounter( uint16 connHandle, uint32 newSignCounter );
/*
* gapLinkCheck - linkDB callback function
*/
extern void gapLinkCheck( uint16 connectionHandle, uint8 changeType );
/*
* gapGetDevAddressMode - Get the device address mode.
*/
extern uint8 gapGetDevAddressMode( void );
/*
* gapGetDevAddress - Get the device address.
* real - TRUE if you always want BD_ADDR, FALSE will allow random addresses.
*/
extern uint8 *gapGetDevAddress( uint8 real );
/*
* gapGetIRK - Get the device's IRK.
*/
extern uint8 *gapGetIRK( void );
/*
* gapPasskeyNeededCB - Callback function to ask for passkey
*/
extern void gapPasskeyNeededCB( uint16 connectionHandle, uint8 type );
/*
* gapPairingCompleteCB - Callback function to inform pairing process complete.
*/
extern void gapPairingCompleteCB( uint8 status, uint8 initiatorRole,
uint16 connectionHandle,
uint8 authState,
smSecurityInfo_t *pEncParams,
smSecurityInfo_t *pDevEncParams,
smIdentityInfo_t *pIdInfo,
smSigningInfo_t *pSigningInfo );
/*
* gapTerminateConnComplete - Process command complete for HCI_BLECreateLLConnCancelCmd.
*/
extern void gapTerminateConnComplete( void );
/*
* gapSendSlaveSecurityReqEvent - Generate a Slave Security Request event to the app.
*/
extern void gapSendSlaveSecurityReqEvent( uint8 taskID, uint16 connHandle, uint8 *pDevAddr, uint8 authReq );
/*
* gapSetAdvParams - Send the advertisement parameters to the LL.
*/
extern bStatus_t gapSetAdvParams( void );
/*
* gapAddAdvToken - Add token to the end of the list.
*/
extern bStatus_t gapAddAdvToken( gapAdvDataToken_t *pToken );
/*
* gapDeleteAdvToken - Remove a token from the list.
*/
extern gapAdvDataToken_t *gapDeleteAdvToken( uint8 ADType );
/*
* gapFindAdvToken - Find a Advertisement data token from the advertisement type.
*/
extern gapAdvToken_t *gapFindAdvToken( uint8 ADType );
/*
* gapCalcAdvTokenDataLen - Find a Advertisement data token from the advertisement type.
*/
extern void gapCalcAdvTokenDataLen( uint8 *pAdLen, uint8 *pSrLen );
/*
* gapValidADType - Is a Advertisement Data Type valid.
*/
extern uint8 gapValidADType( uint8 adType );
/*
* gapBuildADTokens - Is a Advertisement Data Type valid.
*/
extern bStatus_t gapBuildADTokens( void );
/*
* gapSendBondCompleteEvent - Indicate that a bond has occurred.
*/
extern void gapSendBondCompleteEvent( uint8 status, uint16 connectionHandle );
/*
* gapSendPairingReqEvent - Indicate that an unexpected Pairing Request was received.
*/
extern void gapSendPairingReqEvent( uint8 status, uint16 connectionHandle,
uint8 ioCap,
uint8 oobDataFlag,
uint8 authReq,
uint8 maxEncKeySize,
keyDist_t keyDist );
/*
* gapFindADType - Find Advertisement Data Type field in advertising data
* field.
*/
extern uint8 *gapFindADType( uint8 adType, uint8 *pAdLen,
uint8 dataLen, uint8 *pDataField );
/*
* gapRegisterCentral - Register Central's processing function with GAP task
*/
extern void gapRegisterCentral( gapCentralCBs_t *pfnCBs );
/*
* gapRegisterCentralConn - Register Central's connection-related processing function with GAP task
*/
extern void gapRegisterCentralConn( gapCentralConnCBs_t *pfnCBs);
/*
* gapRegisterPeripheral - Register Peripheral's processing function with GAP task
*/
extern void gapRegisterPeripheral( gapPeripheralCBs_t *pfnCBs );
/*
* gapIsAdvertising - Check if we are currently advertising.
*/
extern uint8 gapIsAdvertising( void );
/*
* gapIsScanning - Check if we are currently scanning.
*/
extern uint8 gapIsScanning( void );
/*
* gapCancelLinkReq - Cancel a connection create request.
*/
extern bStatus_t gapCancelLinkReq( uint8 taskID, uint16 connectionHandle );
/*
* gapFreeEstLink - Free the establish link memory.
*/
extern void gapFreeEstLink( void );
/*
* sendEstLinkEvent - Build and send the GAP_LINK_ESTABLISHED_EVENT to the app.
*/
extern void sendEstLinkEvent( uint8 status, uint8 taskID, uint8 devAddrType,
uint8 *pDevAddr, uint16 connectionHandle,
uint16 connInterval, uint16 connLatency,
uint16 connTimeout, uint16 clockAccuracy );
/*
* gapSendLinkUpdateEvent - Build and send the GAP_LINK_PARAM_UPDATE_EVENT to the app.
*
*/
extern void gapSendLinkUpdateEvent( uint8 status, uint16 connectionHandle,
uint16 connInterval, uint16 connLatency,
uint16 connTimeout );
/*
* gapProcessL2CAPSignalEvt - Process L2CAP Signaling messages.
*/
extern void gapProcessL2CAPSignalEvt( l2capSignalEvent_t *pCmd );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* GAP_INTERNAL_H */