123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501 |
- /**************************************************************************************************
-
- Phyplus Microelectronics Limited confidential and proprietary.
- All rights reserved.
- IMPORTANT: All rights of this software belong to Phyplus Microelectronics
- Limited ("Phyplus"). Your use of this Software is limited to those
- specific rights granted under the terms of the business contract, the
- confidential agreement, the non-disclosure agreement and any other forms
- of agreements as a customer or a partner of Phyplus. You may not use this
- Software unless you agree to abide by the terms of these agreements.
- You acknowledge that the Software may not be modified, copied,
- distributed or disclosed unless embedded on a Phyplus Bluetooth Low Energy
- (BLE) integrated circuit, either as a product or is integrated into your
- products. Other than for the aforementioned purposes, you may not use,
- reproduce, copy, prepare derivative works of, modify, distribute, perform,
- display or sell this Software and/or its documentation for any purposes.
- YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
- PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
- INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
- NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
- PHYPLUS OR ITS SUBSIDIARIES BE LIABLE OR OBLIGATED UNDER CONTRACT,
- NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
- LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
- INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
- OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
- OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
- (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
-
- **************************************************************************************************/
- /**************************************************************************************************
- **************************************************************************************************/
- #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 */
|