vos/ambiq-hal-sys/ambiq-sparkfun-sdk/third_party/exactle/ble-host/include/dm_api.h
2022-10-23 23:45:43 -07:00

2722 lines
120 KiB
C

/*************************************************************************************************/
/*!
* \file
*
* \brief Device Manager subsystem API.
*
* Copyright (c) 2016-2019 Arm Ltd.
*
* Copyright (c) 2019 Packetcraft, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*************************************************************************************************/
#ifndef DM_API_H
#define DM_API_H
#include "hci_api.h"
#include "cfg_stack.h"
#include "smp_defs.h"
#include "sec_api.h"
#ifdef __cplusplus
extern "C" {
#endif
/*! \addtogroup STACK_DM_API
* \{ */
/**************************************************************************************************
Macros
**************************************************************************************************/
/** \name GAP Device Role
* Connectable GAP Roles.
*/
/**@{*/
#define DM_ROLE_MASTER HCI_ROLE_MASTER /*!< \brief Role is master */
#define DM_ROLE_SLAVE HCI_ROLE_SLAVE /*!< \brief Role is slave */
/**@}*/
/** \name GAP Discovery Mode
* When setup as a discoverable device, these are the possible modes of discovery.
*/
/**@{*/
#define DM_DISC_MODE_NONE 0 /*!< \brief GAP non-discoverable */
#define DM_DISC_MODE_LIMITED 1 /*!< \brief GAP limited discoverable mode */
#define DM_DISC_MODE_GENERAL 2 /*!< \brief GAP general discoverable mode */
/**@}*/
/** \name GAP Advertising Type
* Type of connectable or disconverable advertising to perform.
*/
/**@{*/
#define DM_ADV_CONN_UNDIRECT 0 /*!< \brief Connectable and scannable undirected advertising */
#define DM_ADV_CONN_DIRECT 1 /*!< \brief Connectable directed advertising */
#define DM_ADV_SCAN_UNDIRECT 2 /*!< \brief Scannable undirected advertising */
#define DM_ADV_NONCONN_UNDIRECT 3 /*!< \brief Non-connectable and non-scannable undirected advertising */
#define DM_ADV_CONN_DIRECT_LO_DUTY 4 /*!< \brief Connectable directed low duty cycle advertising */
/**@}*/
/** \name GAP AE Advertising Types
* Advertising extension types - AE only.
*/
/**@{*/
#define DM_EXT_ADV_CONN_UNDIRECT 5 /*!< \brief Connectable undirected advertising */
#define DM_EXT_ADV_NONCONN_DIRECT 6 /*!< \brief Non-connectable and non-scannable directed advertising */
#define DM_EXT_ADV_SCAN_DIRECT 7 /*!< \brief Scannable directed advertising */
#define DM_ADV_NONE 255 /*!< \brief For internal use only */
/**@}*/
/** \name GAP Advertising Report Type
* Type of an advertising report observed while scanning.
*/
/**@{*/
#define DM_RPT_CONN_UNDIRECT 0 /*!< \brief Connectable and scannable undirected advertising */
#define DM_RPT_CONN_DIRECT 1 /*!< \brief Connectable directed advertising */
#define DM_RPT_SCAN_UNDIRECT 2 /*!< \brief Scannable undirected advertising */
#define DM_RPT_NONCONN_UNDIRECT 3 /*!< \brief Non-connectable undirected advertising */
#define DM_RPT_SCAN_RESPONSE 4 /*!< \brief Scan response */
/**@}*/
/** \name GAP Advertising Data Location
* Whether data is located in the advertising data or in the scan response data
*/
/**@{*/
#define DM_DATA_LOC_ADV 0 /*!< \brief Locate data in the advertising data */
#define DM_DATA_LOC_SCAN 1 /*!< \brief Locate data in the scan response data */
/**@}*/
/** \name GAP Scan Type
* When setup as a connectable or observer device, this is the type of scanning to perform.
*/
/**@{*/
#define DM_SCAN_TYPE_PASSIVE 0 /*!< \brief Passive scan */
#define DM_SCAN_TYPE_ACTIVE 1 /*!< \brief Active scan */
/**@}*/
/** \name GAP Advertising Channel Map
* Advertising channel map codes
*/
/**@{*/
#define DM_ADV_CHAN_37 HCI_ADV_CHAN_37 /*!< \brief Advertising channel 37 */
#define DM_ADV_CHAN_38 HCI_ADV_CHAN_38 /*!< \brief Advertising channel 38 */
#define DM_ADV_CHAN_39 HCI_ADV_CHAN_39 /*!< \brief Advertising channel 39 */
/*! \brief All advertising channels */
#define DM_ADV_CHAN_ALL (HCI_ADV_CHAN_37 | HCI_ADV_CHAN_38 | HCI_ADV_CHAN_39)
/**@}*/
/** \name DM Client IDs
* The client ID parameter to function DmConnRegister()
*/
/**@{*/
#define DM_CLIENT_ID_ATT 0 /*!< \brief Identifier for attribute protocol, for internal use only */
#define DM_CLIENT_ID_SMP 1 /*!< \brief Identifier for security manager protocol, for internal use only */
#define DM_CLIENT_ID_DM 2 /*!< \brief Identifier for device manager, for internal use only */
#define DM_CLIENT_ID_APP 3 /*!< \brief Identifier for the application */
#define DM_CLIENT_ID_L2C 4 /*!< \brief Identifier for L2CAP */
#define DM_CLIENT_ID_MAX 5 /*!< \brief For internal use only */
/**@}*/
/** \name DM Unknown IDs
* Values for unknown or unspecificed device identifiers.
*/
/**@{*/
/*! \brief Unknown connection ID or other error */
#define DM_CONN_ID_NONE 0
/*! \brief Unknown sync ID or other error */
#define DM_SYNC_ID_NONE 0
/**@}*/
/** \name GAP Address Type
* The address type to use over the air or that is associated with a received address.
*/
/**@{*/
#define DM_ADDR_PUBLIC 0x00 /*!< \brief Public device address */
#define DM_ADDR_RANDOM 0x01 /*!< \brief Random device address */
#define DM_ADDR_PUBLIC_IDENTITY 0x02 /*!< \brief Public identity address (corresponds to resolved private address) */
#define DM_ADDR_RANDOM_IDENTITY 0x03 /*!< \brief Random (static) identity address (corresponds to resolved private address) */
#define DM_ADDR_RANDOM_UNRESOLVED 0xFE /*!< \brief Random device address (Controller unable to resolve) */
#define DM_ADDR_NONE 0xFF /*!< \brief No address provided (anonymous) */
/**@}*/
/** \name GAP Advertising Data Types
* Advertising data types flags.
*/
/**@{*/
#define DM_ADV_TYPE_FLAGS 0x01 /*!< \brief Flag bits */
#define DM_ADV_TYPE_16_UUID_PART 0x02 /*!< \brief Partial list of 16 bit UUIDs */
#define DM_ADV_TYPE_16_UUID 0x03 /*!< \brief Complete list of 16 bit UUIDs */
#define DM_ADV_TYPE_32_UUID_PART 0x04 /*!< \brief Partial list of 32 bit UUIDs */
#define DM_ADV_TYPE_32_UUID 0x05 /*!< \brief Complete list of 32 bit UUIDs */
#define DM_ADV_TYPE_128_UUID_PART 0x06 /*!< \brief Partial list of 128 bit UUIDs */
#define DM_ADV_TYPE_128_UUID 0x07 /*!< \brief Complete list of 128 bit UUIDs */
#define DM_ADV_TYPE_SHORT_NAME 0x08 /*!< \brief Shortened local name */
#define DM_ADV_TYPE_LOCAL_NAME 0x09 /*!< \brief Complete local name */
#define DM_ADV_TYPE_TX_POWER 0x0A /*!< \brief TX power level */
#define DM_ADV_TYPE_SM_TK_VALUE 0x10 /*!< \brief Security manager TK value */
#define DM_ADV_TYPE_SM_OOB_FLAGS 0x11 /*!< \brief Security manager OOB flags */
#define DM_ADV_TYPE_CONN_INTERVAL 0x12 /*!< \brief Slave preferred connection interval */
#define DM_ADV_TYPE_SIGNED_DATA 0x13 /*!< \brief Signed data */
#define DM_ADV_TYPE_16_SOLICIT 0x14 /*!< \brief Service soliticiation list of 16 bit UUIDs */
#define DM_ADV_TYPE_128_SOLICIT 0x15 /*!< \brief Service soliticiation list of 128 bit UUIDs */
#define DM_ADV_TYPE_SERVICE_DATA 0x16 /*!< \brief Service data - 16-bit UUID */
#define DM_ADV_TYPE_PUBLIC_TARGET 0x17 /*!< \brief Public target address */
#define DM_ADV_TYPE_RANDOM_TARGET 0x18 /*!< \brief Random target address */
#define DM_ADV_TYPE_APPEARANCE 0x19 /*!< \brief Device appearance */
#define DM_ADV_TYPE_ADV_INTERVAL 0x1A /*!< \brief Advertising interval */
#define DM_ADV_TYPE_BD_ADDR 0x1B /*!< \brief LE Bluetooth device address */
#define DM_ADV_TYPE_ROLE 0x1C /*!< \brief LE role */
#define DM_ADV_TYPE_32_SOLICIT 0x1F /*!< \brief Service soliticiation list of 32 bit UUIDs */
#define DM_ADV_TYPE_SVC_DATA_32 0x20 /*!< \brief Service data - 32-bit UUID */
#define DM_ADV_TYPE_SVC_DATA_128 0x21 /*!< \brief Service data - 128-bit UUID */
#define DM_ADV_TYPE_LESC_CONFIRM 0x22 /*!< \brief LE Secure Connections confirm value */
#define DM_ADV_TYPE_LESC_RANDOM 0x23 /*!< \brief LE Secure Connections random value */
#define DM_ADV_TYPE_URI 0x24 /*!< \brief URI */
#define DM_ADV_TYPE_MANUFACTURER 0xFF /*!< \brief Manufacturer specific data */
/**@}*/
/** \name GAP Advertising Data Flag Advertising Type
* Bit mask for Advertising Type flag in advertising data.
*/
/**@{*/
#define DM_FLAG_LE_LIMITED_DISC 0x01 /*!< \brief Limited discoverable flag */
#define DM_FLAG_LE_GENERAL_DISC 0x02 /*!< \brief General discoverable flag */
#define DM_FLAG_LE_BREDR_NOT_SUP 0x04 /*!< \brief BR/EDR not supported flag */
/**@}*/
/** \name GAP Advertising Data Element Indexes
* Advertising data element indexes.
*/
/**@{*/
#define DM_AD_LEN_IDX 0 /*!< \brief Advertising data element len */
#define DM_AD_TYPE_IDX 1 /*!< \brief Advertising data element type */
#define DM_AD_DATA_IDX 2 /*!< \brief Advertising data element data */
/**@}*/
/** \name GAP Advertising URI
* Advertising URI Scheme
*/
/**@{*/
#define DM_URI_SCHEME_HTTP 0x16 /*!< \brief URI HTTP Scheme */
#define DM_URI_SCHEME_HTTPS 0x17 /*!< \brief URI HTTPS Scheme */
/**@}*/
/** \name GAP Timeouts
* Timeouts defined by the GAP specification; in units of milliseconds.
*/
/**@{*/
#define DM_GAP_LIM_ADV_TIMEOUT 180000 /*!< \brief Maximum advertising duration in limited discoverable mode */
#define DM_GAP_GEN_DISC_SCAN_MIN 10240 /*!< \brief Minimum scan duration for general discovery */
#define DM_GAP_LIM_DISC_SCAN_MIN 10240 /*!< \brief Minimum scan duration for limited discovery */
#define DM_GAP_CONN_PARAM_TIMEOUT 30000 /*!< \brief Connection parameter update timeout */
#define DM_GAP_SCAN_FAST_PERIOD 30720 /*!< \brief Minimum time to perform scanning when user initiated */
#define DM_GAP_ADV_FAST_PERIOD 30000 /*!< \brief Minimum time to perform advertising when user initiated */
/**@}*/
/** \name GAP 1M PHY Timing
* Advertising, scanning, and connection parameters defined in the GAP specification for the LE 1M PHY.
* In units of 625 microseconds.
*/
/**@{*/
#define DM_GAP_SCAN_FAST_INT_MIN 48 /*!< \brief Minimum scan interval when user initiated */
#define DM_GAP_SCAN_FAST_INT_MAX 96 /*!< \brief Maximum scan interval when user initiated */
#define DM_GAP_SCAN_FAST_WINDOW 48 /*!< \brief Scan window when user initiated */
#define DM_GAP_SCAN_SLOW_INT_1 2048 /*!< \brief Scan interval 1 when background scannning */
#define DM_GAP_SCAN_SLOW_WINDOW_1 18 /*!< \brief Scan window 1 when background scanning */
#define DM_GAP_SCAN_SLOW_INT_2 4096 /*!< \brief Scan interval 2 when background scannning */
#define DM_GAP_SCAN_SLOW_WINDOW_2 36 /*!< \brief Scan window 2 when background scanning */
#define DM_GAP_ADV_FAST_INT_MIN_1 48 /*!< \brief Minimum advertising interval 1 when user initiated */
#define DM_GAP_ADV_FAST_INT_MAX_1 96 /*!< \brief Maximum advertising interval 1 when user initiated */
#define DM_GAP_ADV_FAST_INT_MIN_2 160 /*!< \brief Minimum advertising interval 2 when user initiated */
#define DM_GAP_ADV_FAST_INT_MAX_2 240 /*!< \brief Maximum advertising interval 2 when user initiated */
#define DM_GAP_ADV_SLOW_INT_MIN 1600 /*!< \brief Minimum advertising interval when background advertising */
#define DM_GAP_ADV_SLOW_INT_MAX 1920 /*!< \brief Maximum advertising interval when background advertising */
/**@}*/
/** \name GAP Coded PHY Timing
* Advertising, scanning, and connection parameters defined in the GAP specification for the LE Coded PHY.
* In units of 625 microseconds.
*/
/**@{*/
#define DM_GAP_SCAN_CODED_FAST_INT_MIN 144 /*!< \brief Minimum scan interval when user initiated on LE Coded PHY */
#define DM_GAP_SCAN_CODED_FAST_INT_MAX 288 /*!< \brief Maximum scan interval when user initiated on LE Coded PHY */
#define DM_GAP_SCAN_CODED_FAST_WINDOW 144 /*!< \brief Scan window when user initiated on LE Coded PHY */
#define DM_GAP_SCAN_CODED_SLOW_INT_1 6144 /*!< \brief Scan interval 1 when background scannning on LE Coded PHY */
#define DM_GAP_SCAN_CODED_SLOW_WINDOW_1 54 /*!< \brief Scan window 1 when background scanning on LE Coded PHY */
#define DM_GAP_SCAN_CODED_SLOW_INT_2 12288 /*!< \brief Scan interval 2 when background scannning on LE Coded PHY */
#define DM_GAP_SCAN_CODED_SLOW_WINDOW_2 108 /*!< \brief Scan window 2 when background scanning on LE Coded PHY */
#define DM_GAP_ADV_CODED_FAST_INT_MIN_1 144 /*!< \brief Minimum advertising interval 1 when user initiated on LE Coded PHY */
#define DM_GAP_ADV_CODED_FAST_INT_MAX_1 288 /*!< \brief Maximum advertising interval 1 when user initiated on LE Coded PHY */
#define DM_GAP_ADV_CODED_FAST_INT_MIN_2 480 /*!< \brief Minimum advertising interval 2 when user initiated on LE Coded PHY */
#define DM_GAP_ADV_CODED_FAST_INT_MAX_2 720 /*!< \brief Maximum advertising interval 2 when user initiated on LE Coded PHY */
#define DM_GAP_ADV_CODED_SLOW_INT_MIN 4800 /*!< \brief Minimum advertising interval when background advertising on LE Coded PHY */
#define DM_GAP_ADV_CODED_SLOW_INT_MAX 5760 /*!< \brief Maximum advertising interval when background advertising on LE Coded PHY */
/**@}*/
/** \name GAP Connection Slave Latency
*
*/
/**@{*/
/*! \brief GAP connection establishment slaves latency */
#define DM_GAP_CONN_EST_LATENCY 0
/**@}*/
/** \name GAP Connection Interval
* GAP connection interval in 1.25ms units.
*/
/**@{*/
#define DM_GAP_INITIAL_CONN_INT_MIN 24 /*!< \brief Minimum initial connection interval */
#define DM_GAP_INITIAL_CONN_INT_MAX 40 /*!< \brief Maximum initial connection interval */
/**@}*/
/** \name GAP Connection Event Lengths
* GAP connection establishment minimum and maximum connection event lengths.
*/
/**@{*/
#define DM_GAP_CONN_EST_MIN_CE_LEN 0 /*!< \brief Connection establishment minimum event length */
#define DM_GAP_CONN_EST_MAX_CE_LEN 0 /*!< \brief Connection establishment maximum event length */
/**@}*/
/** \name GAP Peripheral Privacy Characteristic Values
*
*/
/**@{*/
#define DM_GAP_PRIV_DISABLED 0 /*!< \brief Privacy Disabled */
#define DM_GAP_PRIV_ENABLED 1 /*!< \brief Privacy Enabled */
/**@}*/
/** \name GAP Connection Supervision Timeout
* Connection supervision timeout, in 10ms units
*/
/**@{*/
/*! \brief Connection establishment supervision timeout default, in 10ms units */
#define DM_DEFAULT_EST_SUP_TIMEOUT 2000
/**@}*/
/** \name GAP Security Pairing Authentication Requirements
* Pairing authentication/security properties bit mask.
*/
/**@{*/
#define DM_AUTH_BOND_FLAG SMP_AUTH_BOND_FLAG /*!< \brief Bonding requested */
#define DM_AUTH_MITM_FLAG SMP_AUTH_MITM_FLAG /*!< \brief MITM (authenticated pairing) requested */
#define DM_AUTH_SC_FLAG SMP_AUTH_SC_FLAG /*!< \brief LE Secure Connections requested */
#define DM_AUTH_KP_FLAG SMP_AUTH_KP_FLAG /*!< \brief Keypress notifications requested */
/**@}*/
/** \name GAP Key Distribution Flags
* Key distribution bit mask
*/
/**@{*/
#define DM_KEY_DIST_LTK SMP_KEY_DIST_ENC /*!< \brief Distribute LTK used for encryption */
#define DM_KEY_DIST_IRK SMP_KEY_DIST_ID /*!< \brief Distribute IRK used for privacy */
#define DM_KEY_DIST_CSRK SMP_KEY_DIST_SIGN /*!< \brief Distribute CSRK used for signed data */
/**@}*/
/** \name DM Security Key Indication Types
* Type of key used in \ref DM_SEC_KEY_IND.
*/
/**@{*/
#define DM_KEY_LOCAL_LTK 0x01 /*!< \brief LTK generated locally for this device */
#define DM_KEY_PEER_LTK 0x02 /*!< \brief LTK received from peer device */
#define DM_KEY_IRK 0x04 /*!< \brief IRK and identity info of peer device */
#define DM_KEY_CSRK 0x08 /*!< \brief CSRK of peer device */
/**@}*/
/*! \brief Base value for HCI error status values for \ref DM_SEC_PAIR_CMPL_IND */
#define DM_SEC_HCI_ERR_BASE 0x20
/** \name GAP Security Level
* GAP Mode 1 Security Levels
*/
/**@{*/
#define DM_SEC_LEVEL_NONE 0 /*!< \brief Connection has no security */
#define DM_SEC_LEVEL_ENC 1 /*!< \brief Connection is encrypted with unauthenticated key */
#define DM_SEC_LEVEL_ENC_AUTH 2 /*!< \brief Connection is encrypted with authenticated key */
#define DM_SEC_LEVEL_ENC_LESC 3 /*!< \brief Connection is encrypted with LE Secure Connections */
/**@}*/
/** \name GAP Random Address Types
* Random address type masks.
*/
/**@{*/
#define DM_RAND_ADDR_STATIC 0xC0 /*!< \brief Static address */
#define DM_RAND_ADDR_RESOLV 0x40 /*!< \brief Resolvable private address */
#define DM_RAND_ADDR_NONRESOLV 0x00 /*!< \brief Non-resolvable private address */
/**@}*/
/** \name GAP Random Address Macros
* Macros for identifying address type.
*/
/**@{*/
/*! \brief Get the type of random address */
#define DM_RAND_ADDR_GET(addr) ((addr)[5] & 0xC0)
/*! \brief Set the type of random address */
#define DM_RAND_ADDR_SET(addr, type) {(addr)[5] = ((addr)[5] & 0x3F) | (type);}
/*! \brief Check for Static Address */
#define DM_RAND_ADDR_SA(addr, type) (((type) == DM_ADDR_RANDOM) && \
(DM_RAND_ADDR_GET((addr)) == DM_RAND_ADDR_STATIC))
/*! \brief Check for Resolvable Private Address */
#define DM_RAND_ADDR_RPA(addr, type) (((type) == DM_ADDR_RANDOM) && \
(DM_RAND_ADDR_GET((addr)) == DM_RAND_ADDR_RESOLV))
/**@}*/
/** \name GAP Privacy Mode
* Privacy Mode of this device in regards to a peer device.
*/
/**@{*/
#define DM_PRIV_MODE_NETWORK 0x00 /*!< \brief Network privacy mode (default). */
#define DM_PRIV_MODE_DEVICE 0x01 /*!< \brief Device privacy mode. */
/**@}*/
/** \name DM Internal State
* Connection busy or idle state
*/
/**@{*/
#define DM_CONN_IDLE 0 /*!< \brief Connection is idle. */
#define DM_CONN_BUSY 1 /*!< \brief Connection is busy. */
/**@}*/
/** \name DM Internal State Flags
* Connection busy/idle state bitmask.
*/
/**@{*/
#define DM_IDLE_SMP_PAIR 0x0001 /*!< \brief SMP pairing in progress */
#define DM_IDLE_DM_ENC 0x0002 /*!< \brief DM Encryption setup in progress */
#define DM_IDLE_ATTS_DISC 0x0004 /*!< \brief ATTS service discovery in progress */
#define DM_IDLE_APP_DISC 0x0008 /*!< \brief App framework service discovery in progress */
#define DM_IDLE_USER_1 0x0010 /*!< \brief For use by user application */
#define DM_IDLE_USER_2 0x0020 /*!< \brief For use by user application */
#define DM_IDLE_USER_3 0x0040 /*!< \brief For use by user application */
#define DM_IDLE_USER_4 0x0080 /*!< \brief For use by user application */
/**@}*/
/** \name GAP Filter Policy Modes
* Filter policy modes.
*/
/**@{*/
#define DM_FILT_POLICY_MODE_ADV 0 /*!< \brief Advertising filter policy mode */
#define DM_FILT_POLICY_MODE_SCAN 1 /*!< \brief Scanning filter policy mode */
#define DM_FILT_POLICY_MODE_INIT 2 /*!< \brief Initiator filter policy mode */
#define DM_FILT_POLICY_MODE_SYNC 3 /*!< \brief Synchronization filter policy mode */
/**@}*/
/** \name DM Proprietary Error Codes
* Internal error codes not sent in any PDU.
*/
/**@{*/
#define DM_ERR_SMP_RX_PDU_LEN_EXCEEDED 0x01 /*!< \brief LESC key length exceeded maximum RX PDU length */
#define DM_ERR_ATT_RX_PDU_LEN_EXCEEDED 0x02 /*!< \brief Configured ATT MTU exceeded maximum RX PDU length */
#define DM_ERR_L2C_RX_PDU_LEN_EXCEEDED 0x03 /*!< \brief Registered COC MPS exceeded maximum RX PDU length */
/**@}*/
/** \name DM Legacy Advertising Handle
* Default handle for legacy advertising when using legacy HCI interface. In this case only one advertising
* set is allowed so all activity uses the same handle.
*/
/**@{*/
/*! \brief Default Advertising handle for legacy advertising */
#define DM_ADV_HANDLE_DEFAULT 0
/**@}*/
/** \name DM Callback Events
* Events handled by the DM state machine.
*/
/**@{*/
#define DM_CBACK_START 0x20 /*!< \brief DM callback event starting value */
/*! \brief DM callback events */
enum
{
DM_RESET_CMPL_IND = DM_CBACK_START, /*!< \brief Reset complete */
DM_ADV_START_IND, /*!< \brief Advertising started */
DM_ADV_STOP_IND, /*!< \brief Advertising stopped */
DM_ADV_NEW_ADDR_IND, /*!< \brief New resolvable address has been generated */
DM_SCAN_START_IND, /*!< \brief Scanning started */
DM_SCAN_STOP_IND, /*!< \brief Scanning stopped */
DM_SCAN_REPORT_IND, /*!< \brief Scan data received from peer device */
DM_CONN_OPEN_IND, /*!< \brief Connection opened */
DM_CONN_CLOSE_IND, /*!< \brief Connection closed */
DM_CONN_UPDATE_IND, /*!< \brief Connection update complete */
DM_SEC_PAIR_CMPL_IND, /*!< \brief Pairing completed successfully */
DM_SEC_PAIR_FAIL_IND, /*!< \brief Pairing failed or other security failure */
DM_SEC_ENCRYPT_IND, /*!< \brief Connection encrypted */
DM_SEC_ENCRYPT_FAIL_IND, /*!< \brief Encryption failed */
DM_SEC_AUTH_REQ_IND, /*!< \brief PIN or OOB data requested for pairing */
DM_SEC_KEY_IND, /*!< \brief Security key indication */
DM_SEC_LTK_REQ_IND, /*!< \brief LTK requested for encyption */
DM_SEC_PAIR_IND, /*!< \brief Incoming pairing request from master */
DM_SEC_SLAVE_REQ_IND, /*!< \brief Incoming security request from slave */
DM_SEC_CALC_OOB_IND, /*!< \brief Result of OOB Confirm Calculation Generation */
DM_SEC_ECC_KEY_IND, /*!< \brief Result of ECC Key Generation */
DM_SEC_COMPARE_IND, /*!< \brief Result of Just Works/Numeric Comparison Compare Value Calculation */
DM_SEC_KEYPRESS_IND, /*!< \brief Keypress indication from peer in passkey security */
DM_PRIV_RESOLVED_ADDR_IND, /*!< \brief Private address resolved */
DM_PRIV_GENERATE_ADDR_IND, /*!< \brief Private resolvable address generated */
DM_CONN_READ_RSSI_IND, /*!< \brief Connection RSSI read */
DM_PRIV_ADD_DEV_TO_RES_LIST_IND, /*!< \brief Device added to resolving list */
DM_PRIV_REM_DEV_FROM_RES_LIST_IND, /*!< \brief Device removed from resolving list */
DM_PRIV_CLEAR_RES_LIST_IND, /*!< \brief Resolving list cleared */
DM_PRIV_READ_PEER_RES_ADDR_IND, /*!< \brief Peer resolving address read */
DM_PRIV_READ_LOCAL_RES_ADDR_IND, /*!< \brief Local resolving address read */
DM_PRIV_SET_ADDR_RES_ENABLE_IND, /*!< \brief Address resolving enable set */
DM_REM_CONN_PARAM_REQ_IND, /*!< \brief Remote connection parameter requested */
DM_CONN_DATA_LEN_CHANGE_IND, /*!< \brief Data length changed */
DM_CONN_WRITE_AUTH_TO_IND, /*!< \brief Write authenticated payload complete */
DM_CONN_AUTH_TO_EXPIRED_IND, /*!< \brief Authenticated payload timeout expired */
DM_PHY_READ_IND, /*!< \brief Read PHY */
DM_PHY_SET_DEF_IND, /*!< \brief Set default PHY */
DM_PHY_UPDATE_IND, /*!< \brief PHY update */
DM_ADV_SET_START_IND, /*!< \brief Advertising set(s) started */
DM_ADV_SET_STOP_IND, /*!< \brief Advertising set(s) stopped */
DM_SCAN_REQ_RCVD_IND, /*!< \brief Scan request received */
DM_EXT_SCAN_START_IND, /*!< \brief Extended scanning started */
DM_EXT_SCAN_STOP_IND, /*!< \brief Extended scanning stopped */
DM_EXT_SCAN_REPORT_IND, /*!< \brief Extended scan data received from peer device */
DM_PER_ADV_SET_START_IND, /*!< \brief Periodic advertising set started */
DM_PER_ADV_SET_STOP_IND, /*!< \brief Periodic advertising set stopped */
DM_PER_ADV_SYNC_EST_IND, /*!< \brief Periodic advertising sync established */
DM_PER_ADV_SYNC_EST_FAIL_IND, /*!< \brief Periodic advertising sync establishment failed */
DM_PER_ADV_SYNC_LOST_IND, /*!< \brief Periodic advertising sync lost */
DM_PER_ADV_SYNC_TRSF_EST_IND, /*!< \brief Periodic advertising sync transfer established */
DM_PER_ADV_SYNC_TRSF_EST_FAIL_IND, /*!< \brief Periodic advertising sync transfer establishment failed */
DM_PER_ADV_SYNC_TRSF_IND, /*!< \brief Periodic advertising sync info transferred */
DM_PER_ADV_SET_INFO_TRSF_IND, /*!< \brief Periodic advertising set sync info transferred */
DM_PER_ADV_REPORT_IND, /*!< \brief Periodic advertising data received from peer device */
DM_REMOTE_FEATURES_IND, /*!< \brief Remote features from peer device */
DM_READ_REMOTE_VER_INFO_IND, /*!< \brief Remote LL version information read */
DM_CONN_IQ_REPORT_IND, /*!< \brief IQ samples from CTE of received packet from peer device */
DM_CTE_REQ_FAIL_IND, /*!< \brief CTE request failed */
DM_CONN_CTE_RX_SAMPLE_START_IND, /*!< \brief Sampling received CTE started */
DM_CONN_CTE_RX_SAMPLE_STOP_IND, /*!< \brief Sampling received CTE stopped */
DM_CONN_CTE_TX_CFG_IND, /*!< \brief Connection CTE transmit parameters configured */
DM_CONN_CTE_REQ_START_IND, /*!< \brief Initiating connection CTE request started */
DM_CONN_CTE_REQ_STOP_IND, /*!< \brief Initiating connection CTE request stopped */
DM_CONN_CTE_RSP_START_IND, /*!< \brief Responding to connection CTE request started */
DM_CONN_CTE_RSP_STOP_IND, /*!< \brief Responding to connection CTE request stopped */
DM_READ_ANTENNA_INFO_IND, /*!< \brief Antenna information read */
DM_L2C_CMD_REJ_IND, /*!< \brief L2CAP Command Reject */
DM_ERROR_IND, /*!< \brief General error */
DM_HW_ERROR_IND, /*!< \brief Hardware error */
DM_VENDOR_SPEC_IND, /*!< \brief Vendor specific event */
DM_VENDOR_SPEC_CMD_CMPL_IND /*!< \brief Vendor specific command complete event */
};
#define DM_CBACK_END DM_VENDOR_SPEC_CMD_CMPL_IND /*!< \brief DM callback event ending value */
/**@}*/
/**************************************************************************************************
Data Types
**************************************************************************************************/
/*! \brief Connection identifier. */
typedef uint8_t dmConnId_t;
/*! \brief Synchronization identifier. */
typedef uint8_t dmSyncId_t;
/*! \brief Configuration structure. */
typedef struct
{
uint8_t dummy; /*!< \brief Placeholder variable. */
} dmCfg_t;
/*! \brief LTK data type. */
typedef struct
{
uint8_t key[SMP_KEY_LEN]; /*!< \brief LTK */
uint8_t rand[SMP_RAND8_LEN]; /*!< \brief Rand */
uint16_t ediv; /*!< \brief EDIV */
} dmSecLtk_t;
/*! \brief IRK data type. */
typedef struct
{
uint8_t key[SMP_KEY_LEN]; /*!< \brief IRK */
bdAddr_t bdAddr; /*!< \brief BD Address */
uint8_t addrType; /*!< \brief Address Type */
} dmSecIrk_t;
/*! \brief CSRK data type. */
typedef struct
{
uint8_t key[SMP_KEY_LEN]; /*!< \brief CSRK */
} dmSecCsrk_t;
/*! \brief Union of key types. */
typedef union
{
dmSecLtk_t ltk; /*!< \brief LTK */
dmSecIrk_t irk; /*!< \brief IRK */
dmSecCsrk_t csrk; /*!< \brief CSRK */
} dmSecKey_t;
/*! \brief Data type for \ref DM_SEC_PAIR_CMPL_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t auth; /*!< \brief Authentication and bonding flags */
} dmSecPairCmplIndEvt_t;
/*! \brief Data type for \ref DM_SEC_ENCRYPT_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
bool_t usingLtk; /*!< \brief TRUE if connection encrypted with LTK */
} dmSecEncryptIndEvt_t;
/*! \brief Data type for \ref DM_SEC_AUTH_REQ_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
bool_t oob; /*!< \brief Out-of-band data requested */
bool_t display; /*!< \brief TRUE if pin is to be displayed */
} dmSecAuthReqIndEvt_t;
/*! \brief Data type for \ref DM_SEC_PAIR_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t auth; /*!< \brief Authentication and bonding flags */
bool_t oob; /*!< \brief Out-of-band pairing data present or not present */
uint8_t iKeyDist; /*!< \brief Initiator key distribution flags */
uint8_t rKeyDist; /*!< \brief Responder key distribution flags */
} dmSecPairIndEvt_t;
/*! \brief Data type for \ref DM_SEC_SLAVE_REQ_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t auth; /*!< \brief Authentication and bonding flags */
} dmSecSlaveIndEvt_t;
/*! \brief Data type for \ref DM_SEC_KEY_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
dmSecKey_t keyData; /*!< \brief Key data */
uint8_t type; /*!< \brief Key type */
uint8_t secLevel; /*!< \brief Security level of pairing when key was exchanged */
uint8_t encKeyLen; /*!< \brief Length of encryption key used when data was transferred */
} dmSecKeyIndEvt_t;
/*! \brief Data type for \ref DM_SEC_COMPARE_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t confirm[SMP_CONFIRM_LEN]; /*!< \brief Confirm value */
} dmSecCnfIndEvt_t;
/*! \brief Data type for \ref DM_SEC_KEYPRESS_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t notificationType; /*!< \brief Type of keypress notification */
} dmSecKeypressIndEvt_t;
/*! \brief Data type for \ref DM_PRIV_GENERATE_ADDR_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
bdAddr_t addr; /*!< \brief Resolvable private address */
} dmPrivGenAddrIndEvt_t;
/*! \brief Data type for \ref DM_SEC_CALC_OOB_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t confirm[SMP_CONFIRM_LEN]; /*!< \brief Local confirm value */
uint8_t random[SMP_RAND_LEN]; /*!< \brief Local random value */
} dmSecOobCalcIndEvt_t;
/*! \brief Data type for \ref DM_ADV_NEW_ADDR_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
bdAddr_t addr; /*!< \brief New resolvable private address */
bool_t firstTime; /*!< \brief TRUE when address is generated for the first time */
} dmAdvNewAddrIndEvt_t;
/*! \brief Data structure for \ref DM_ADV_SET_START_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t numSets; /*!< \brief Number of advertising sets */
uint8_t advHandle[DM_NUM_ADV_SETS];/*!< \brief Advertising handle array */
} dmAdvSetStartEvt_t;
/*! \brief Data structure for \ref DM_PER_ADV_SET_START_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t advHandle; /*!< \brief Advertising handle */
} dmPerAdvSetStartEvt_t;
/*! \brief Data structure for \ref DM_PER_ADV_SET_STOP_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint8_t advHandle; /*!< \brief Advertising handle */
} dmPerAdvSetStopEvt_t;
/*! \brief Data structure for \ref DM_L2C_CMD_REJ_IND. */
typedef struct
{
wsfMsgHdr_t hdr; /*!< \brief Header */
uint16_t reason; /*!< \brief Rejection reason */
uint16_t handle; /*!< \brief Connection handle */
} dmL2cCmdRejEvt_t;
/*! \brief Union of DM callback event data types.
*
* \note the following events use only the common \ref wsfMsgHdr_t header:
* \ref DM_RESET_CMPL_IND,
* \ref DM_ADV_START_IND,
* \ref DM_ADV_STOP_IND,
* \ref DM_SCAN_START_IND,
* \ref DM_SCAN_STOP_IND,
* \ref DM_SEC_PAIR_FAIL_IND,
* \ref DM_SEC_ENCRYPT_FAIL_IND,
* \ref DM_PRIV_RESOLVED_ADDR_IND,
* \ref DM_EXT_SCAN_START_IND,
* \ref DM_EXT_SCAN_STOP_IND,
* \ref DM_ERROR_IND
*/
typedef union
{
wsfMsgHdr_t hdr; /*!< \brief Common header */
/* common header used by DM_RESET_CMPL_IND */
/* common header used by DM_ADV_START_IND */
/* common header used by DM_ADV_STOP_IND */
dmAdvNewAddrIndEvt_t advNewAddr; /*!< \brief handles \ref DM_ADV_NEW_ADDR_IND */
/* common header used by DM_SCAN_START_IND */
/* common header used by DM_SCAN_STOP_IND */
hciLeAdvReportEvt_t scanReport; /*!< \brief handles \ref DM_SCAN_REPORT_IND */
hciLeConnCmplEvt_t connOpen; /*!< \brief handles \ref DM_CONN_OPEN_IND */
hciDisconnectCmplEvt_t connClose; /*!< \brief handles \ref DM_CONN_CLOSE_IND */
hciLeConnUpdateCmplEvt_t connUpdate; /*!< \brief handles \ref DM_CONN_UPDATE_IND */
dmSecPairCmplIndEvt_t pairCmpl; /*!< \brief handles \ref DM_SEC_PAIR_CMPL_IND */
/* common header used by DM_SEC_PAIR_FAIL_IND */
dmSecEncryptIndEvt_t encryptInd; /*!< \brief handles \ref DM_SEC_ENCRYPT_IND */
/* common header used by DM_SEC_ENCRYPT_FAIL_IND */
dmSecAuthReqIndEvt_t authReq; /*!< \brief handles \ref DM_SEC_AUTH_REQ_IND */
dmSecKeyIndEvt_t keyInd; /*!< \brief handles \ref DM_SEC_KEY_IND */
hciLeLtkReqEvt_t ltkReqInd; /*!< \brief handles \ref DM_SEC_LTK_REQ_IND */
dmSecPairIndEvt_t pairInd; /*!< \brief handles \ref DM_SEC_PAIR_IND */
dmSecSlaveIndEvt_t slaveInd; /*!< \brief handles \ref DM_SEC_SLAVE_REQ_IND */
dmSecOobCalcIndEvt_t oobCalcInd; /*!< \brief handles \ref DM_SEC_CALC_OOB_IND */
secEccMsg_t eccMsg; /*!< \brief handles \ref DM_SEC_ECC_KEY_IND */
dmSecCnfIndEvt_t cnfInd; /*!< \brief handles \ref DM_SEC_COMPARE_IND */
dmSecKeypressIndEvt_t keypressInd; /*!< \brief handles \ref DM_SEC_KEYPRESS_IND */
/* common header used by DM_PRIV_RESOLVED_ADDR_IND */
dmPrivGenAddrIndEvt_t genAddr; /*!< \brief handles \ref DM_PRIV_GENERATE_ADDR_IND */
hciReadRssiCmdCmplEvt_t readRssi; /*!< \brief handles \ref DM_CONN_READ_RSSI_IND */
hciLeAddDevToResListCmdCmplEvt_t addDevToResList; /*!< \brief handles \ref DM_PRIV_ADD_DEV_TO_RES_LIST_IND */
hciLeRemDevFromResListCmdCmplEvt_t remDevFromResList; /*!< \brief handles \ref DM_PRIV_REM_DEV_FROM_RES_LIST_IND */
hciLeClearResListCmdCmplEvt_t clearResList; /*!< \brief handles \ref DM_PRIV_CLEAR_RES_LIST_IND */
hciLeReadPeerResAddrCmdCmplEvt_t readPeerResAddr; /*!< \brief handles \ref DM_PRIV_READ_PEER_RES_ADDR_IND */
hciLeReadLocalResAddrCmdCmplEvt_t readLocalResAddr; /*!< \brief handles \ref DM_PRIV_READ_LOCAL_RES_ADDR_IND */
hciLeSetAddrResEnableCmdCmplEvt_t setAddrResEnable; /*!< \brief handles \ref DM_PRIV_SET_ADDR_RES_ENABLE_IND */
hciLeRemConnParamReqEvt_t remConnParamReq; /*!< \brief handles \ref DM_REM_CONN_PARAM_REQ_IND */
hciLeDataLenChangeEvt_t dataLenChange; /*!< \brief handles \ref DM_CONN_DATA_LEN_CHANGE_IND */
hciWriteAuthPayloadToCmdCmplEvt_t writeAuthTo; /*!< \brief handles \ref DM_CONN_WRITE_AUTH_TO_IND */
hciAuthPayloadToExpiredEvt_t authToExpired; /*!< \brief handles \ref DM_CONN_AUTH_TO_EXPIRED_IND */
hciLeReadPhyCmdCmplEvt_t readPhy; /*!< \brief handles \ref DM_PHY_READ_IND */
hciLeSetDefPhyCmdCmplEvt_t setDefPhy; /*!< \brief handles \ref DM_PHY_SET_DEF_IND */
hciLePhyUpdateEvt_t phyUpdate; /*!< \brief handles \ref DM_PHY_UPDATE_IND */
dmAdvSetStartEvt_t advSetStart; /*!< \brief handles \ref DM_ADV_SET_START_IND */
hciLeAdvSetTermEvt_t advSetStop; /*!< \brief handles \ref DM_ADV_SET_STOP_IND */
hciLeScanReqRcvdEvt_t scanReqRcvd; /*!< \brief handles \ref DM_SCAN_REQ_RCVD_IND */
/* common header used by DM_EXT_SCAN_START_IND */
/* common header used by DM_EXT_SCAN_STOP_IND */
hciLeExtAdvReportEvt_t extScanReport; /*!< \brief handles \ref DM_EXT_SCAN_REPORT_IND */
dmPerAdvSetStartEvt_t perAdvSetStart; /*!< \brief handles \ref DM_PER_ADV_SET_START_IND */
dmPerAdvSetStopEvt_t perAdvSetStop; /*!< \brief handles \ref DM_PER_ADV_SET_STOP_IND */
hciLePerAdvSyncEstEvt_t perAdvSyncEst; /*!< \brief handles \ref DM_PER_ADV_SYNC_EST_IND */
hciLePerAdvSyncEstEvt_t perAdvSyncEstFail; /*!< \brief handles \ref DM_PER_ADV_SYNC_EST_FAIL_IND */
hciLePerAdvSyncLostEvt_t perAdvSyncLost; /*!< \brief handles \ref DM_PER_ADV_SYNC_LOST_IND */
HciLePerAdvSyncTrsfRcvdEvt_t perAdvSyncTrsfEst; /*!< \brief handles \ref DM_PER_ADV_SYNC_TRSF_EST_IND */
HciLePerAdvSyncTrsfRcvdEvt_t perAdvSyncTrsEstFail; /*!< \brief handles \ref DM_PER_ADV_SYNC_TRSF_EST_FAIL_IND */
hciLePerAdvSyncTrsfCmdCmplEvt_t perAdvSyncTrsf; /*!< \brief handles \ref DM_PER_ADV_SYNC_TRSF_IND */
hciLePerAdvSetInfoTrsfCmdCmplEvt_t perAdvSetInfoTrsf; /*!< \brief handles \ref DM_PER_ADV_SET_INFO_TRSF_IND */
hciLePerAdvReportEvt_t perAdvReport; /*!< \brief handles \ref DM_PER_ADV_REPORT_IND */
hciLeReadRemoteFeatCmplEvt_t readRemoteFeat; /*!< \brief handles \ref DM_REMOTE_FEATURES_IND */
hciReadRemoteVerInfoCmplEvt_t readRemVerInfo; /*!< \brief handles \ref DM_READ_REMOTE_VER_INFO_IND */
hciLeConnIQReportEvt_t connIQReport; /*!< \brief handles \ref DM_CONN_IQ_REPORT_IND */
hciLeCteReqFailedEvt_t cteReqFail; /*!< \brief handles \ref DM_CTE_REQ_FAIL_IND */
hciLeSetConnCteRxParamsCmdCmplEvt_t connCteRxSampleStart; /*!< \brief handles \ref DM_CONN_CTE_RX_SAMPLE_START_IND */
hciLeSetConnCteRxParamsCmdCmplEvt_t connCteRxSampleStop; /*!< \brief handles \ref DM_CONN_CTE_RX_SAMPLE_STOP_IND */
hciLeSetConnCteTxParamsCmdCmplEvt_t connCteTxCfg; /*!< \brief handles \ref DM_CONN_CTE_TX_CFG_IND */
hciLeConnCteReqEnableCmdCmplEvt_t connCteReqStart; /*!< \brief handles \ref DM_CONN_CTE_REQ_START_IND */
hciLeConnCteReqEnableCmdCmplEvt_t connCteReqStop; /*!< \brief handles \ref DM_CONN_CTE_REQ_STOP_IND */
hciLeConnCteRspEnableCmdCmplEvt_t connCteRspStart; /*!< \brief handles \ref DM_CONN_CTE_RSP_START_IND */
hciLeConnCteRspEnableCmdCmplEvt_t connCteRspStop; /*!< \brief handles \ref DM_CONN_CTE_RSP_STOP_IND */
hciLeReadAntennaInfoCmdCmplEvt_t readAntennaInfo; /*!< \brief handles \ref DM_READ_ANTENNA_INFO_IND */
dmL2cCmdRejEvt_t l2cCmdRej; /*!< \brief handles \ref DM_L2C_CMD_REJ_IND */
/* common header used by DM_ERROR_IND */
hciHwErrorEvt_t hwError; /*!< \brief handles \ref DM_HW_ERROR_IND */
hciVendorSpecEvt_t vendorSpec; /*!< \brief handles \ref DM_VENDOR_SPEC_IND */
hciVendorSpecCmdCmplEvt_t vendorSpecCmdCmpl; /*!< \brief handles \ref DM_VENDOR_SPEC_CMD_CMPL_IND */
} dmEvt_t;
/*! \brief Data type for DmSecSetOob(). */
typedef struct
{
uint8_t localRandom[SMP_RAND_LEN]; /*!< \brief Random value of the local device */
uint8_t localConfirm[SMP_CONFIRM_LEN]; /*!< \brief Confirm value of the local device */
uint8_t peerRandom[SMP_RAND_LEN]; /*!< \brief Random value of the peer device */
uint8_t peerConfirm[SMP_CONFIRM_LEN]; /*!< \brief Confirm value of the peer device */
} dmSecLescOobCfg_t;
/*! \brief Callback type. */
typedef void (*dmCback_t)(dmEvt_t *pDmEvt);
/**************************************************************************************************
Function Declarations
**************************************************************************************************/
/** \name DM App Callback Registration
*
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Register a callback with DM for scan and advertising events.
*
* \param cback Client callback function.
*
* \return None.
*/
/*************************************************************************************************/
void DmRegister(dmCback_t cback);
/**@}*/
/** \name DM Advertising Functions
* Functions used to control Legacy and Extended Advertising.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Find an advertising data element in the given advertising or scan response data.
*
* \param adType Advertising data element type to find.
* \param dataLen Data length.
* \param pData Pointer to advertising or scan response data.
*
* \return Pointer to the advertising data element byte array or NULL if not found.
*/
/*************************************************************************************************/
uint8_t *DmFindAdType(uint8_t adType, uint16_t dataLen, uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief Initialize DM legacy advertising.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM extended advertising.
*
* \return None.
*/
/*************************************************************************************************/
void DmExtAdvInit(void);
/*************************************************************************************************/
/*!
* \brief Whether DM advertising is in legacy mode.
*
* \return TRUE if DM advertising is in legacy mode. FALSE, otherwise.
*/
/*************************************************************************************************/
bool_t DmAdvModeLeg(void);
/*************************************************************************************************/
/*!
* \brief Whether DM advertising is in extended mode.
*
* \return TRUE if DM advertising is in extended mode. FALSE, otherwise.
*/
/*************************************************************************************************/
bool_t DmAdvModeExt(void);
/*************************************************************************************************/
/*!
* \brief Set the advertising parameters using the given advertising type, and peer address.
*
* \param advHandle Advertising handle.
* \param advType Advertising type.
* \param peerAddrType Peer address type.
* \param pPeerAddr Peer address.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvConfig(uint8_t advHandle, uint8_t advType, uint8_t peerAddrType, uint8_t *pPeerAddr);
/*************************************************************************************************/
/*!
* \brief Set the advertising or scan response data to the given data.
*
* \param advHandle Advertising handle.
* \param op Data operation.
* \param location Data location.
* \param len Length of the data. Maximum length is 236 bytes.
* \param pData Pointer to the data.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvSetData(uint8_t advHandle, uint8_t op, uint8_t location, uint8_t len, uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief Start advertising using the given advertising set and duration.
*
* \param numSets Number of advertising sets to enable.
* \param pAdvHandles Advertising handles array.
* \param pDuration Advertising duration (in milliseconds) array.
* \param pMaxEaEvents Maximum number of extended advertising events array.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvStart(uint8_t numSets, uint8_t *pAdvHandles, uint16_t *pDuration, uint8_t *pMaxEaEvents);
/*************************************************************************************************/
/*!
* \brief Stop advertising for the given advertising set. If the number of sets is set to 0
* then all advertising sets are disabled.
*
* \param numSets Number of advertising sets to disable.
* \param pAdvHandles Advertising handles array.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvStop(uint8_t numSets, uint8_t *pAdvHandles);
/*************************************************************************************************/
/*!
* \brief Remove an advertising set.
*
* \param advHandle Advertising handle.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvRemoveAdvSet(uint8_t advHandle);
/*************************************************************************************************/
/*!
* \brief Clear advertising sets.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvClearAdvSets(void);
/*************************************************************************************************/
/*!
* \brief Set the random device address for a given advertising set.
*
* \param advHandle Advertising handle.
* \param pAddr Random device address.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvSetRandAddr(uint8_t advHandle, const uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief Set the minimum and maximum advertising intervals.
*
* \param advHandle Advertising handle.
* \param intervalMin Minimum advertising interval.
* \param intervalMax Maximum advertising interval.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvSetInterval(uint8_t advHandle, uint16_t intervalMin, uint16_t intervalMax);
/*************************************************************************************************/
/*!
* \brief Include or exclude certain channels from the advertising channel map.
*
* \param advHandle Advertising handle.
* \param channelMap Advertising channel map.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvSetChannelMap(uint8_t advHandle, uint8_t channelMap);
/*************************************************************************************************/
/*!
* \brief Set the local address type used while advertising. This function can be used to
* configure advertising to use a random address.
*
* \param addrType Address type.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvSetAddrType(uint8_t addrType);
/*************************************************************************************************/
/*!
* \brief Set the value of an advertising data element in the given advertising or
* scan response data. If the element already exists in the data then it is replaced
* with the new value. If the element does not exist in the data it is appended
* to it, space permitting.
*
* \param adType Advertising data element type.
* \param len Length of the value. Maximum length is 29 bytes.
* \param pValue Pointer to the value.
* \param pAdvDataLen Advertising or scan response data length. The new length is returned
* in this parameter.
* \param pAdvData Pointer to advertising or scan response data.
* \param advDataBufLen Length of the advertising or scan response data buffer maintained by
* Application.
*
* \return TRUE if the element was successfully added to the data, FALSE otherwise.
*/
/*************************************************************************************************/
bool_t DmAdvSetAdValue(uint8_t adType, uint8_t len, uint8_t *pValue, uint16_t *pAdvDataLen,
uint8_t *pAdvData, uint16_t advDataBufLen);
/*************************************************************************************************/
/*!
* \brief Set the device name in the given advertising or scan response data. If the
* name can only fit in the data if it is shortened, the name is shortened
* and the AD type is changed to DM_ADV_TYPE_SHORT_NAME.
*
* \param len Length of the name. Maximum length is 29 bytes.
* \param pValue Pointer to the name in UTF-8 format.
* \param pAdvDataLen Advertising or scan response data length. The new length is returned
* in this parameter.
* \param pAdvData Pointer to advertising or scan response data.
* \param advDataBufLen Length of the advertising or scan response data buffer maintained by
* Application.
*
* \return TRUE if the element was successfully added to the data, FALSE otherwise.
*/
/*************************************************************************************************/
bool_t DmAdvSetName(uint8_t len, uint8_t *pValue, uint16_t *pAdvDataLen, uint8_t *pAdvData,
uint16_t advDataBufLen);
/*************************************************************************************************/
/*!
* \brief Initialize device privacy module.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevPrivInit(void);
/*************************************************************************************************/
/*!
* \brief Start using a private resolvable address.
*
* \param changeInterval Interval between automatic address changes, in seconds.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevPrivStart(uint16_t changeInterval);
/*************************************************************************************************/
/*!
* \brief Stop using a private resolvable address.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevPrivStop(void);
/*************************************************************************************************/
/*!
* \brief Set whether or not to use legacy advertising PDUs with extended advertising.
*
* \param advHandle Advertising handle.
* \param useLegacyPdu Whether to use legacy advertising PDUs (default value is TRUE).
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvUseLegacyPdu(uint8_t advHandle, bool_t useLegacyPdu);
/*************************************************************************************************/
/*!
* \brief Set whether or not to omit advertiser's address from all PDUs (anonymous advertising).
*
* \param advHandle Advertising handle.
* \param omitAdvAddr Whether to omit advertiser's address from all PDUs (default value is FALSE).
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvOmitAdvAddr(uint8_t advHandle, bool_t omitAdvAddr);
/*************************************************************************************************/
/*!
* \brief Set whether or not to include TxPower in extended header of advertising PDU.
*
* \param advHandle Advertising handle.
* \param incTxPwr Whether to include TxPower in extended header of advertising PDU (default
* value is FALSE).
* \param advTxPwr Advertising tx power (127 = no preference).
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvIncTxPwr(uint8_t advHandle, bool_t incTxPwr, int8_t advTxPwr);
/*************************************************************************************************/
/*!
* \brief Set extended advertising PHY parameters.
*
* \param advHandle Advertising handle.
* \param priAdvPhy Primary advertising Phy.
* \param secAdvMaxSkip Maximum advertising events Controller can skip before sending AUX_ADV_IND
* on secondary advertising channel (0 = AUX_ADV_IND will be sent prior to
* next advertising event).
* \param secAdvPhy Secondary advertising Phy.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvSetPhyParam(uint8_t advHandle, uint8_t priAdvPhy, uint8_t secAdvMaxSkip, uint8_t secAdvPhy);
/*************************************************************************************************/
/*!
* \brief Set scan request notification enable.
*
* \param advHandle Advertising handle.
* \param scanReqNotifEna Scan request notification enable.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvScanReqNotifEnable(uint8_t advHandle, bool_t scanReqNotifEna);
/*************************************************************************************************/
/*!
* \brief Set fragment preference for advertising data.
*
* \param advHandle Advertising handle.
* \param fragPref Fragment preference.
*
* \return None.
*/
/*************************************************************************************************/
void DmAdvSetFragPref(uint8_t advHandle, uint8_t fragPref);
/*************************************************************************************************/
/*!
* \brief Set the advertising parameters for periodic advertising.
*
* \param advHandle Advertising handle.
*
* \return None.
*/
/*************************************************************************************************/
void DmPerAdvConfig(uint8_t advHandle);
/*************************************************************************************************/
/*!
* \brief Set the advertising data to the given data for periodic advertising.
*
* \param advHandle Advertising handle.
* \param op Data operation.
* \param len Length of the data. Maximum length is 236 bytes.
* \param pData Pointer to the data.
*
* \return None.
*/
/*************************************************************************************************/
void DmPerAdvSetData(uint8_t advHandle, uint8_t op, uint8_t len, uint8_t *pData);
/*************************************************************************************************/
/*!
* \brief Start periodic advertising for the advertising set specified by the advertising handle.
*
* \param advHandle Advertising handle.
*
* \return None.
*/
/*************************************************************************************************/
void DmPerAdvStart(uint8_t advHandle);
/*************************************************************************************************/
/*!
* \brief Stop periodic advertising for the advertising set specified by the advertising handle.
*
* \param advHandle Advertising handle.
*
* \return None.
*/
/*************************************************************************************************/
void DmPerAdvStop(uint8_t advHandle);
/*************************************************************************************************/
/*!
* \brief Set the minimum and maximum advertising intervals for periodic advertising.
*
* \param advHandle Advertising handle.
* \param intervalMin Minimum advertising interval.
* \param intervalMax Maximum advertising interval.
*
* \return None.
*/
/*************************************************************************************************/
void DmPerAdvSetInterval(uint8_t advHandle, uint16_t intervalMin, uint16_t intervalMax);
/*************************************************************************************************/
/*!
* \brief Set whether or not to include TxPower in extended header of advertising PDU for
* periodic advertising.
*
* \param advHandle Advertising handle.
* \param incTxPwr Whether to include TxPower in extended header of advertising PDU (default
* value is FALSE).
*
* \return None.
*/
/*************************************************************************************************/
void DmPerAdvIncTxPwr(uint8_t advHandle, bool_t incTxPwr);
/*************************************************************************************************/
/*!
* \brief Get the maximum advertising data length supported by Controller for a given advertising
* type.
*
* \param advType Advertising type.
* \param useLegacyPdu Whether to use legacy advertising PDUs with extended advertising.
*
* \return Maximum advertising data length.
*/
/*************************************************************************************************/
uint16_t DmExtMaxAdvDataLen(uint8_t advType, bool_t useLegacyPdu);
/**@}*/
/** \name DM Privacy Functions
* Functions for controlling Privacy.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Initialize DM privacy module.
*
* \return None.
*/
/*************************************************************************************************/
void DmPrivInit(void);
/*************************************************************************************************/
/*!
* \brief Resolve a private resolvable address. When complete the client's callback function
* is called with a DM_PRIV_RESOLVED_ADDR_IND event. The client must wait to receive
* this event before executing this function again.
*
* \param pAddr Peer device address.
* \param pIrk The peer's identity resolving key.
* \param param Client-defined parameter returned with callback event.
*
* \return None.
*/
/*************************************************************************************************/
void DmPrivResolveAddr(uint8_t *pAddr, uint8_t *pIrk, uint16_t param);
/*************************************************************************************************/
/*!
* \brief Add device to resolving list. When complete the client's callback function
* is called with a DM_PRIV_ADD_DEV_TO_RES_LIST_IND event. The client must wait
* to receive this event before executing this function again.
*
* \param addrType Peer identity address type.
* \param pIdentityAddr Peer identity address.
* \param pPeerIrk The peer's identity resolving key.
* \param pLocalIrk The local identity resolving key.
* \param enableLlPriv Set to TRUE to enable address resolution in LL.
* \param param client-defined parameter returned with callback event.
*
* \return None.
*
* \Note This command cannot be used when address resolution is enabled in the Controller and:
* - Advertising (other than periodic advertising) is enabled,
* - Scanning is enabled, or
* - (Extended) Create connection or Create Sync command is outstanding.
*
* \Note If the local or peer IRK associated with the peer Identity Address is all zeros then
* the Controller will use or accept the local or peer Identity Address respectively.
*
* \Note Parameter 'enableLlPriv' should be set to TRUE when the last device is being added
* to resolving list to enable address resolution in the Controller.
*/
/*************************************************************************************************/
void DmPrivAddDevToResList(uint8_t addrType, const uint8_t *pIdentityAddr, uint8_t *pPeerIrk,
uint8_t *pLocalIrk, bool_t enableLlPriv, uint16_t param);
/*************************************************************************************************/
/*!
* \brief Remove device from resolving list. When complete the client's callback function
* is called with a DM_PRIV_REM_DEV_FROM_RES_LIST_IND event. The client must wait to
* receive this event before executing this function again.
*
* \param addrType Peer identity address type.
* \param pIdentityAddr Peer identity address.
* \param param client-defined parameter returned with callback event.
*
* \return None.
*
* \Note This command cannot be used when address resolution is enabled in the Controller and:
* - Advertising (other than periodic advertising) is enabled,
* - Scanning is enabled, or
* - (Extended) Create connection or Create Sync command is outstanding.
*/
/*************************************************************************************************/
void DmPrivRemDevFromResList(uint8_t addrType, const uint8_t *pIdentityAddr, uint16_t param);
/*************************************************************************************************/
/*!
* \brief Clear resolving list. When complete the client's callback function is called with a
* DM_PRIV_CLEAR_RES_LIST_IND event. The client must wait to receive this event before
* executing this function again.
*
* \return None.
*
* \Note This command cannot be used when address resolution is enabled in the Controller and:
* - Advertising (other than periodic advertising) is enabled,
* - Scanning is enabled, or
* - (Extended) Create connection or Create Sync command is outstanding.
*
* \Note Address resolution in Controller will be disabled when resolving list's cleared
* successfully.
*/
/*************************************************************************************************/
void DmPrivClearResList(void);
/*************************************************************************************************/
/*!
* \brief HCI read peer resolvable address command. When complete the client's callback
* function is called with a DM_PRIV_READ_PEER_RES_ADDR_IND event. The client must
* wait to receive this event before executing this function again.
*
* \param addrType Peer identity address type.
* \param pIdentityAddr Peer identity address.
*
* \return None.
*/
/*************************************************************************************************/
void DmPrivReadPeerResolvableAddr(uint8_t addrType, const uint8_t *pIdentityAddr);
/*************************************************************************************************/
/*!
* \brief Read local resolvable address command. When complete the client's callback
* function is called with a DM_PRIV_READ_LOCAL_RES_ADDR_IND event. The client must
* wait to receive this event before executing this function again.
*
* \param addrType Peer identity address type.
* \param pIdentityAddr Peer identity address.
*
* \return None.
*/
/*************************************************************************************************/
void DmPrivReadLocalResolvableAddr(uint8_t addrType, const uint8_t *pIdentityAddr);
/*************************************************************************************************/
/*!
* \brief Enable or disable address resolution in LL. When complete the client's callback
* function is called with a DM_PRIV_SET_ADDR_RES_ENABLE_IND event. The client must
* wait to receive this event before executing this function again.
*
* \param enable Set to TRUE to enable address resolution or FALSE to disable it.
*
* \return None.
*
* \Note This command can be used at any time except when:
* - Advertising (other than periodic advertising) is enabled,
* - Scanning is enabled, or
* - (Extended) Create connection or Create Sync command is outstanding.
*/
/*************************************************************************************************/
void DmPrivSetAddrResEnable(bool_t enable);
/*************************************************************************************************/
/*!
* \brief Set resolvable private address timeout command.
*
* \param rpaTimeout Timeout measured in seconds.
*
* \return None.
*/
/*************************************************************************************************/
void DmPrivSetResolvablePrivateAddrTimeout(uint16_t rpaTimeout);
/*************************************************************************************************/
/*!
* \brief Set privacy mode for a given entry in the resolving list.
*
* \param addrType Peer identity address type.
* \param pIdentityAddr Peer identity address.
* \param mode Privacy mode (by default, network privacy mode is used).
*
* \return None.
*
* \Note This command can be used at any time except when:
* - Advertising (other than periodic advertising) is enabled,
* - Scanning is enabled, or
* - (Extended) Create connection or Create Sync command is outstanding.
*/
/*************************************************************************************************/
void DmPrivSetPrivacyMode(uint8_t addrType, const uint8_t *pIdentityAddr, uint8_t mode);
/*************************************************************************************************/
/*!
* \brief Generate a Resolvable Private Address (RPA).
*
* \param pIrk The identity resolving key.
* \param param Client-defined parameter returned with callback event.
*
* \return None.
*/
/*************************************************************************************************/
void DmPrivGenerateAddr(uint8_t *pIrk, uint16_t param);
/*************************************************************************************************/
/*!
* \brief Whether LL Privacy is enabled.
*
* \return TRUE if LL Privacy is enabled. FALSE, otherwise.
*/
/*************************************************************************************************/
bool_t DmLlPrivEnabled(void);
/**@}*/
/** \name DM Scanner Functions
* Functions for controlling Legacy and Extended Scanner behavior.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Initialize DM legacy scanning.
*
* \return None.
*/
/*************************************************************************************************/
void DmScanInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM extended scanning.
*
* \return None.
*/
/*************************************************************************************************/
void DmExtScanInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM Periodic Advertising Sync Transfer (PAST) module.
*
* \return None.
*/
/*************************************************************************************************/
void DmPastInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM Connection Constant Tone Extension (CTE) module.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnCteInit(void);
/*************************************************************************************************/
/*!
* \brief Whether DM scanning is in legacy mode.
*
* \return TRUE if DM scanning is in legacy mode. FALSE, otherwise.
*/
/*************************************************************************************************/
bool_t DmScanModeLeg(void);
/*************************************************************************************************/
/*!
* \brief Whether DM scanning is in extended mode.
*
* \return TRUE if DM scanning is in extended mode. FALSE, otherwise.
*/
/*************************************************************************************************/
bool_t DmScanModeExt(void);
/*************************************************************************************************/
/*!
* \brief Start scanning on the given PHYs.
*
* \param scanPhys Scanner PHYs.
* \param mode Discoverability mode.
* \param pScanType Scan type array.
* \param filterDup Filter duplicates. Set to TRUE to filter duplicate responses received
* from the same device. Set to FALSE to receive all responses.
* \param duration The scan duration, in milliseconds. If set to zero or both duration and
* period set to non-zero, scanning will continue until DmScanStop() is called.
* \param period The scan period, in 1.28 sec units (only applicable to AE). If set to zero,
* periodic scanning is disabled.
*
* \return None.
*/
/*************************************************************************************************/
void DmScanStart(uint8_t scanPhys, uint8_t mode, const uint8_t *pScanType, bool_t filterDup,
uint16_t duration, uint16_t period);
/*************************************************************************************************/
/*!
* \brief Stop scanning.
*
* \return None.
*/
/*************************************************************************************************/
void DmScanStop(void);
/*************************************************************************************************/
/*!
* \brief Set the scan interval and window for the specified PHYs.
*
* \param scanPhys Scanning PHYs.
* \param pScanInterval Scan interval array.
* \param pScanWindow Scan window array.
*
* \return None.
*/
/*************************************************************************************************/
void DmScanSetInterval(uint8_t scanPhys, uint16_t *pScanInterval, uint16_t *pScanWindow);
/*************************************************************************************************/
/*!
* \brief Set the local address type used while scanning. This function can be used to
* configure scanning to use a random address.
*
* \param addrType Address type.
*
* \return None.
*/
/*************************************************************************************************/
void DmScanSetAddrType(uint8_t addrType);
/*************************************************************************************************/
/*!
* \brief Synchronize with periodic advertising from the given advertiser, and start receiving
* periodic advertising packets.
*
* Note: The synchronization filter policy is used to determine whether the periodic
* advertiser list is used. If the periodic advertiser list is not used, the
* advertising SID, advertiser address type, and advertiser address parameters
* specify the periodic advertising device to listen to; otherwise these parameters
* are ignored.
*
* \param advSid Advertising SID.
* \param advAddrType Advertiser address type.
* \param pAdvAddr Advertiser address.
* \param skip Number of periodic advertising packets that can be skipped after
* successful receive.
* \param syncTimeout Synchronization timeout.
*
* \return Sync indentifier.
*/
/*************************************************************************************************/
dmSyncId_t DmSyncStart(uint8_t advSid, uint8_t advAddrType, const uint8_t *pAdvAddr, uint16_t skip,
uint16_t syncTimeout);
/*************************************************************************************************/
/*!
* \brief Stop reception of the periodic advertising identified by the given sync identifier.
*
* \param syncId Sync identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmSyncStop(dmSyncId_t syncId);
/*************************************************************************************************/
/*!
* \brief DM enable or disable initial periodic advertisement reporting.
*
* \param enable TRUE to enable initial reporting, FALSE to disable initial reporting.
*
* \return None.
*/
/*************************************************************************************************/
void DmSyncInitialRptEnable(bool_t enable);
/*************************************************************************************************/
/*!
* \brief Add device to periodic advertiser list.
*
* \param advAddrType Advertiser address type.
* \param pAdvAddr Advertiser address.
* \param advSid Advertising SID.
*
* \return None.
*/
/*************************************************************************************************/
void DmAddDeviceToPerAdvList(uint8_t advAddrType, uint8_t *pAdvAddr, uint8_t advSid);
/*************************************************************************************************/
/*!
* \brief DM remove device from periodic advertiser list.
*
* \param advAddrType Advertiser address type.
* \param pAdvAddr Advertiser address.
* \param advSid Advertising SID.
*
* \return None.
*/
/*************************************************************************************************/
void DmRemoveDeviceFromPerAdvList(uint8_t advAddrType, uint8_t *pAdvAddr, uint8_t advSid);
/*************************************************************************************************/
/*!
* \brief DM clear periodic advertiser list.
*
* \return None.
*/
/*************************************************************************************************/
void DmClearPerAdvList(void);
/*************************************************************************************************/
/*!
* \brief Enable or disable reports for the periodic advertising identified by the sync id.
*
* \param syncId Sync identifier.
* \param enable TRUE to enable reporting, FALSE to disable reporting.
*
* \return None.
*/
/*************************************************************************************************/
void DmPastRptRcvEnable(dmSyncId_t syncId, bool_t enable);
/*************************************************************************************************/
/*!
* \brief Send synchronization information about the periodic advertising identified by the
* sync id to a connected device.
*
* \param connId Connection identifier.
* \param serviceData Value provided by the Host.
* \param syncId Sync identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmPastSyncTrsf(dmConnId_t connId, uint16_t serviceData, dmSyncId_t syncId);
/*************************************************************************************************/
/*!
* \brief Send synchronization information about the periodic advertising in an advertising
* set to a connected device.
*
* \param connId Connection identifier.
* \param serviceData Value provided by the Host.
* \param advHandle Advertising handle.
*
* \return None.
*/
/*************************************************************************************************/
void DmPastSetInfoTrsf(dmConnId_t connId, uint16_t serviceData, uint8_t advHandle);
/*************************************************************************************************/
/*!
* \brief Specify how the Controller should process periodic advertising synchronization
* information received from the device identified by the connnection handle.
*
* \param connId Connection identifier.
* \param mode Action to be taken when periodic advertising info is received.
* \param skip Number of consecutive periodic advertising packets that the receiver
* may skip after successfully receiving a periodic advertising packet.
* \param syncTimeout Maximum permitted time between successful receives. If this time is
* exceeded, synchronization is lost.
* \param cteType Whether to only synchronize to periodic advertising with certain
* types of Constant Tone Extension.
*
* \return None.
*/
/*************************************************************************************************/
void DmPastConfig(dmConnId_t connId, uint8_t mode, uint16_t skip, uint16_t syncTimeout,
uint8_t cteType);
/*************************************************************************************************/
/*!
* \brief Specify the initial value for the mode, skip, timeout, and Constant Tone Extension type
* to be used for all subsequent connections over the LE transport.
*
* \param mode Action to be taken when periodic advertising info is received.
* \param skip Number of consecutive periodic advertising packets that the receiver
* may skip after successfully receiving a periodic advertising packet.
* \param syncTimeout Maximum permitted time between successful receives. If this time is
* exceeded, synchronization is lost.
* \param cteType Whether to only synchronize to periodic advertising with certain
* types of Constant Tone Extension.
*
* \return None.
*/
/*************************************************************************************************/
void DmPastDefaultConfig(uint8_t mode, uint16_t skip, uint16_t syncTimeout, uint8_t cteType);
/*************************************************************************************************/
/*!
* \brief Enable sampling received CTE fields on the specified connection, and configure the
* antenna switching pattern, and switching and sampling slot durations to be used.
*
* \param connId Connection identifier.
* \param slotDurations Switching and sampling slot durations to be used while receiving CTE.
* \param switchPatternLen Number of Antenna IDs in switching pattern.
* \param pAntennaIDs List of Antenna IDs in switching pattern.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnCteRxSampleStart(dmConnId_t connId, uint8_t slotDurations, uint8_t switchPatternLen,
uint8_t *pAntennaIDs);
/*************************************************************************************************/
/*!
* \brief Disable sampling received CTE fields on the specified connection.
*
* \param connId Connection identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnCteRxSampleStop(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Configure the antenna switching pattern, and permitted CTE types used for transmitting
* CTEs requested by the peer device on the specified connection.
*
* \param connId Connection identifier.
* \param cteTypeBits Permitted CTE type bits used for transmitting CTEs requested by peer.
* \param switchPatternLen Number of Antenna IDs in switching pattern.
* \param pAntennaIDs List of Antenna IDs in switching pattern.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnCteTxConfig(dmConnId_t connId, uint8_t cteTypeBits, uint8_t switchPatternLen,
uint8_t *pAntennaIDs);
/*************************************************************************************************/
/*!
* \brief Initiate the CTE Request procedure on the specified connection.
*
* \param connId Connection identifier.
* \param cteReqInt CTE request interval.
* \param reqCteLen Minimum length of CTE being requested in 8 us units.
* \param reqCteType Requested CTE type.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnCteReqStart(dmConnId_t connId, uint16_t cteReqInt, uint8_t reqCteLen,
uint8_t reqCteType);
/*************************************************************************************************/
/*!
* \brief Stop initiating the CTE Request procedure on the specified connection.
*
* \param connId Connection identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnCteReqStop(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Start responding to LL_CTE_REQ PDUs with LL_CTE_RSP PDUs on the specified connection.
*
* \param connId Connection identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnCteRspStart(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Stop responding to LL_CTE_REQ PDUs with LL_CTE_RSP PDUs on the specified connection.
*
* \param connId Connection identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnCteRspStop(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Read the switching rates, the sampling rates, the number of antennae, and the maximum
* length of a transmitted Constant Tone Extension supported by the Controller.
*
* \return None.
*
* \note The antenna info will be returned with DM indication \ref DM_READ_ANTENNA_INFO_IND.
*/
/*************************************************************************************************/
void DmReadAntennaInfo(void);
/**@}*/
/** \name DM Connection Functions
* Functions for forming connections and managing connection behavior and parameter updates.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Initialize DM connection manager.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM connection manager for operation as legacy master.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnMasterInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM connection manager for operation as extended master.
*
* \return None.
*/
/*************************************************************************************************/
void DmExtConnMasterInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM connection manager for operation as legacy slave.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnSlaveInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM connection manager for operation as extended slave.
*
* \return None.
*/
/*************************************************************************************************/
void DmExtConnSlaveInit(void);
/*************************************************************************************************/
/*!
* \brief Register with the DM connection manager.
*
* \param clientId The client identifier.
* \param cback Client callback function.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnRegister(uint8_t clientId, dmCback_t cback);
/*************************************************************************************************/
/*!
* \brief Open a connection to a peer device with the given address.
*
* \param clientId The client identifier.
* \param initPhys Initiator PHYs.
* \param addrType Address type.
* \param pAddr Peer device address.
*
* \return Connection identifier.
*/
/*************************************************************************************************/
dmConnId_t DmConnOpen(uint8_t clientId, uint8_t initPhys, uint8_t addrType, uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief Close the connection with the give connection identifier.
*
* \param clientId The client identifier.
* \param connId Connection identifier.
* \param reason Reason connection is being closed.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnClose(uint8_t clientId, dmConnId_t connId, uint8_t reason);
/*************************************************************************************************/
/*!
* \brief Accept a connection from the given peer device by initiating directed advertising.
*
* \param clientId The client identifier.
* \param advHandle Advertising handle.
* \param advType Advertising type.
* \param duration Advertising duration (in ms).
* \param maxEaEvents Maximum number of extended advertising events.
* \param addrType Address type.
* \param pAddr Peer device address.
*
* \return Connection identifier.
*/
/*************************************************************************************************/
dmConnId_t DmConnAccept(uint8_t clientId, uint8_t advHandle, uint8_t advType, uint16_t duration,
uint8_t maxEaEvents, uint8_t addrType, uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief Update the connection parameters of an open connection
*
* \param connId Connection identifier.
* \param pConnSpec Connection specification.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnUpdate(dmConnId_t connId, hciConnSpec_t *pConnSpec);
/*************************************************************************************************/
/*!
* \brief Set the scan interval and window for connections to be created with DmConnOpen().
*
* \param scanInterval The scan interval.
* \param scanWindow The scan window.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnSetScanInterval(uint16_t scanInterval, uint16_t scanWindow);
/*************************************************************************************************/
/*!
* \brief Set the scan interval and window for extended connections to be created with
* DmConnOpen().
*
* \param initPhys Initiator PHYs.
* \param pScanInterval Scan interval array.
* \param pScanWindow Scan window array.
*
* \return None.
*/
/*************************************************************************************************/
void DmExtConnSetScanInterval(uint8_t initPhys, uint16_t *pScanInterval, uint16_t *pScanWindow);
/*************************************************************************************************/
/*!
* \brief Set the connection spec parameters for connections to be created with DmConnOpen().
*
* \param pConnSpec Connection spec parameters.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnSetConnSpec(hciConnSpec_t *pConnSpec);
/*************************************************************************************************/
/*!
* \brief Set the extended connection spec parameters for extended connections to be created
* with DmConnOpen().
*
* \param initPhys The initiator PHYs.
* \param pConnSpec Connection spec parameters array.
*
* \return None.
*/
/*************************************************************************************************/
void DmExtConnSetConnSpec(uint8_t initPhys, hciConnSpec_t *pConnSpec);
/*************************************************************************************************/
/*!
* \brief Set the local address type used for connections created with DmConnOpen().
*
* \param addrType Address type.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnSetAddrType(uint8_t addrType);
/*************************************************************************************************/
/*!
* \brief Configure a bit in the connection idle state mask as busy or idle.
*
* \param connId Connection identifier.
* \param idleMask Bit in the idle state mask to configure.
* \param idle DM_CONN_BUSY or DM_CONN_IDLE.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnSetIdle(dmConnId_t connId, uint16_t idleMask, uint8_t idle);
/*************************************************************************************************/
/*!
* \brief Check if a connection is idle.
*
* \param connId Connection identifier.
*
* \return Zero if connection is idle, nonzero if busy.
*/
/*************************************************************************************************/
uint16_t DmConnCheckIdle(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Read RSSI of a given connection.
*
* \param connId Connection identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnReadRssi(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Reply to the HCI remote connection parameter request event. This command is used to
* indicate that the Host has accepted the remote device's request to change connection
* parameters.
*
* \param connId Connection identifier.
* \param pConnSpec Connection specification.
*
* \return None.
*/
/*************************************************************************************************/
void DmRemoteConnParamReqReply(dmConnId_t connId, hciConnSpec_t *pConnSpec);
/*************************************************************************************************/
/*!
* \brief Negative reply to the HCI remote connection parameter request event. This command
* is used to indicate that the Host has rejected the remote device's request to change
* connection parameters.
*
* \param connId Connection identifier.
* \param reason Reason for rejection.
*
* \return None.
*/
/*************************************************************************************************/
void DmRemoteConnParamReqNegReply(dmConnId_t connId, uint8_t reason);
/*************************************************************************************************/
/*!
* \brief Set data length for a given connection.
*
* \param connId Connection identifier.
* \param txOctets Maximum number of payload octets for a Data PDU.
* \param txTime Maximum number of microseconds for a Data PDU.
*
* \return None.
*/
/*************************************************************************************************/
void DmConnSetDataLen(dmConnId_t connId, uint16_t txOctets, uint16_t txTime);
/*************************************************************************************************/
/*!
* \brief Return the connection role indicating master or slave.
*
* \param connId Connection identifier.
*
* \return Device role.
*/
/*************************************************************************************************/
uint8_t DmConnRole(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Set authenticated payload timeout for a given connection.
*
* \param connId Connection identifier.
* \param timeout Timeout period in units of 10ms.
*
* \return None.
*/
/*************************************************************************************************/
void DmWriteAuthPayloadTimeout(dmConnId_t connId, uint16_t timeout);
/**@}*/
/** \name DM PHY Control Functions
* Functions for setting PHY preferences.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Set the preferred values for the transmitter PHY and receiver PHY for all subsequent
* connections.
*
* \param allPhys All PHYs preferences.
* \param txPhys Preferred transmitter PHYs.
* \param rxPhys Preferred receiver PHYs.
*
* \return None.
*/
/*************************************************************************************************/
void DmSetDefaultPhy(uint8_t allPhys, uint8_t txPhys, uint8_t rxPhys);
/*************************************************************************************************/
/*!
* \brief Read the current transmitter PHY and receiver PHY for a given connection.
*
* \param connId Connection identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmReadPhy(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Set the PHY preferences for a given connection.
*
* \param connId Connection identifier.
* \param allPhys All PHYs preferences.
* \param txPhys Preferred transmitter PHYs.
* \param rxPhys Preferred receiver PHYs.
* \param phyOptions PHY options.
*
* \return None.
*/
/*************************************************************************************************/
void DmSetPhy(dmConnId_t connId, uint8_t allPhys, uint8_t txPhys, uint8_t rxPhys, uint16_t phyOptions);
/*************************************************************************************************/
/*!
* \brief Initialize DM PHY.
*
* \return None.
*/
/*************************************************************************************************/
void DmPhyInit(void);
/**@}*/
/** \name DM Device Functions
* Device control functions
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Reset the device.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevReset(void);
/*************************************************************************************************/
/*!
* \brief Set the random address to be used by the local device.
*
* \param pAddr Random address.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevSetRandAddr(uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief Add a peer device to the white list. Note that this function cannot be called
* while advertising, scanning, or connecting with white list filtering active.
*
* \param addrType Address type.
* \param pAddr Peer device address.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevWhiteListAdd(uint8_t addrType, uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief Remove a peer device from the white list. Note that this function cannot be called
* while advertising, scanning, or connecting with white list filtering active.
*
* \param addrType Address type.
* \param pAddr Peer device address.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevWhiteListRemove(uint8_t addrType, uint8_t *pAddr);
/*************************************************************************************************/
/*!
* \brief Clear the white list. Note that this function cannot be called while
* advertising, scanning, or connecting with white list filtering active.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevWhiteListClear(void);
/*************************************************************************************************/
/*!
* \brief Set the Advertising, Scanning or Initiator filter policy.
*
* \param mode Policy mode.
* \param policy Filter policy.
*
* \return TRUE if the filter policy was successfully set, FALSE otherwise.
*/
/*************************************************************************************************/
bool_t DmDevSetFilterPolicy(uint8_t mode, uint8_t policy);
/*************************************************************************************************/
/*!
* \brief Set the Advertising filter policy for the given advertising, Scanning or Initiator
* filter policy.
*
* \param advHandle Advertising handle (only applicable to advertising).
* \param mode Policy mode.
* \param policy Filter policy.
*
* \return TRUE if the filter policy was successfully set, FALSE otherwise.
*/
/*************************************************************************************************/
bool_t DmDevSetExtFilterPolicy(uint8_t advHandle, uint8_t mode, uint8_t policy);
/*************************************************************************************************/
/*!
* \brief Vendor-specific controller initialization function.
*
* \param param Vendor-specific parameter.
*
* \return None.
*/
/*************************************************************************************************/
void DmDevVsInit(uint8_t param);
/**@}*/
/** \name DM Security Functions
* Functions for accessing and controlling security configuration of device.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Initialize DM security.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecInit(void);
/*************************************************************************************************/
/*!
* \brief Initialize DM LE Secure Connections security.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecLescInit(void);
/*************************************************************************************************/
/*!
* \brief This function is called by a master device to initiate pairing.
*
* \param connId DM connection ID.
* \param oob Out-of-band pairing data present or not present.
* \param auth Authentication and bonding flags.
* \param iKeyDist Initiator key distribution flags.
* \param rKeyDist Responder key distribution flags.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecPairReq(dmConnId_t connId, bool_t oob, uint8_t auth, uint8_t iKeyDist, uint8_t rKeyDist);
/*************************************************************************************************/
/*!
* \brief This function is called by a slave device to proceed with pairing after a
* DM_SEC_PAIR_IND event is received.
*
* \param connId DM connection ID.
* \param oob Out-of-band pairing data present or not present.
* \param auth Authentication and bonding flags.
* \param iKeyDist Initiator key distribution flags.
* \param rKeyDist Responder key distribution flags.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecPairRsp(dmConnId_t connId, bool_t oob, uint8_t auth, uint8_t iKeyDist, uint8_t rKeyDist);
/*************************************************************************************************/
/*!
* \brief This function is called to cancel the pairing process.
*
* \param connId DM connection ID.
* \param reason Failure reason.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecCancelReq(dmConnId_t connId, uint8_t reason);
/*************************************************************************************************/
/*!
* \brief This function is called in response to a DM_SEC_AUTH_REQ_IND event to provide
* PIN or OOB data during pairing.
*
* \param connId DM connection ID.
* \param authDataLen Length of PIN or OOB data.
* \param pAuthData pointer to PIN or OOB data.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecAuthRsp(dmConnId_t connId, uint8_t authDataLen, uint8_t *pAuthData);
/*************************************************************************************************/
/*!
* \brief This function is called by a slave device to request that the master initiates
* pairing or link encryption.
*
* \param connId DM connection ID.
* \param auth Authentication flags.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecSlaveReq(dmConnId_t connId, uint8_t auth);
/*************************************************************************************************/
/*!
* \brief This function is called by a master device to initiate link encryption.
*
* \param connId DM connection ID.
* \param secLevel Security level of pairing when LTK was exchanged.
* \param pLtk Pointer to LTK parameter structure.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecEncryptReq(dmConnId_t connId, uint8_t secLevel, dmSecLtk_t *pLtk);
/*************************************************************************************************/
/*!
* \brief This function is called by a slave in response to a DM_SEC_LTK_REQ_IND event
* to provide the long term key used for encryption.
*
* \param connId DM connection ID.
* \param keyFound TRUE if key found.
* \param secLevel Security level of pairing when key was exchanged.
* \param pKey Pointer to the key, if found.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecLtkRsp(dmConnId_t connId, bool_t keyFound, uint8_t secLevel, uint8_t *pKey);
/*************************************************************************************************/
/*!
* \brief This function sets the local CSRK used by the device.
*
* \param pCsrk Pointer to CSRK.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecSetLocalCsrk(uint8_t *pCsrk);
/*************************************************************************************************/
/*!
* \brief This function sets the local IRK used by the device.
*
* \param pIrk Pointer to IRK.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecSetLocalIrk(uint8_t *pIrk);
/*************************************************************************************************/
/*!
* \brief This function generates an ECC key for use with LESC security.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecGenerateEccKeyReq(void);
/*************************************************************************************************/
/*!
* \brief This function sets the ECC key for use with LESC security.
*
* \param pKey Pointer to key.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecSetEccKey(secEccKey_t *pKey);
/*************************************************************************************************/
/*!
* \brief This function gets the local ECC key for use with LESC security.
*
* \return Pointer to local ECC key.
*/
/*************************************************************************************************/
secEccKey_t *DmSecGetEccKey(void);
/*************************************************************************************************/
/*!
* \brief This function sets the ECC key for use with LESC security to standard debug keys values.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecSetDebugEccKey(void);
/*************************************************************************************************/
/*!
* \brief This function configures the DM to use OOB pairing for the given connection.
* The pRand and pConfirm contain the Random and Confirm values exchanged via
* out of band methods.
*
* \param connId ID of the connection.
* \param pConfig Pointer to OOB configuration.
*
* \return Pointer to IRK.
*/
/*************************************************************************************************/
void DmSecSetOob(dmConnId_t connId, dmSecLescOobCfg_t *pConfig);
/*************************************************************************************************/
/*!
* \brief This function calculates the local random and confirm values used in LESC OOB pairing.
* The operation's result is posted as a DM_SEC_CALC_OOB_IND event to the application's DM
* callback handler. The local rand and confirm values are exchanged with the peer via
* out-of-band (OOB) methods and passed into the DmSecSetOob after DM_CONN_OPEN_IND.
*
* \param pRand Random value used in calculation.
* \param pPubKeyX X component of the local public key.
*
* \return None.
*/
/*************************************************************************************************/
void DmSecCalcOobReq(uint8_t *pRand, uint8_t *pPubKeyX);
/*************************************************************************************************/
/*!
* \brief This function is called by the application in response to a DM_SEC_COMPARE_IND event.
* The valid parameter indicates if the compare value of the DM_SEC_COMPARE_IND was valid.
*
* \param connId ID of the connection.
* \param valid TRUE if compare value was valid
*
* \return None.
*/
/*************************************************************************************************/
void DmSecCompareRsp(dmConnId_t connId, bool_t valid);
/*************************************************************************************************/
/*!
* \brief This function returns the 6-digit compare value for the specified 128-bit confirm value.
*
* \param pConfirm Pointer to 128-bit comfirm value.
*
* \return Six-digit compare value.
*/
/*************************************************************************************************/
uint32_t DmSecGetCompareValue(uint8_t *pConfirm);
/**@}*/
/** \name DM Internal Functions
* Functions called internally by the stack.
*/
/**@{*/
/*************************************************************************************************/
/*!
* \brief Map an address type to a type used by LL.
*
* \param addrType Address type used by Host.
*
* \return Address type used by LL.
*/
/*************************************************************************************************/
uint8_t DmLlAddrType(uint8_t addrType);
/*************************************************************************************************/
/*!
* \brief Map an address type to a type used by Host.
*
* \param addrType Address type used by LL.
*
* \return Address type used by Host.
*/
/*************************************************************************************************/
uint8_t DmHostAddrType(uint8_t addrType);
/*************************************************************************************************/
/*!
* \brief Return size of a DM callback event.
*
* \param pDmEvt DM callback event.
*
* \return Size of DM callback event.
*/
/*************************************************************************************************/
uint16_t DmSizeOfEvt(dmEvt_t *pDmEvt);
/*************************************************************************************************/
/*!
* \brief For internal use only. L2C calls this function to send the result of an L2CAP
* connection update response to DM.
*
* \param handle Connection handle.
* \param reason Connection update response reason code.
* \return None.
*/
/*************************************************************************************************/
void DmL2cConnUpdateCnf(uint16_t handle, uint16_t reason);
/*************************************************************************************************/
/*!
* \brief For internal use only. L2C calls this function to send the result of an L2CAP
* Command Reject up to the application.
*
* \param handle Connection handle.
* \param result Connection update result code.
* \return None.
*/
/*************************************************************************************************/
void DmL2cCmdRejInd(uint16_t handle, uint16_t result);
/*************************************************************************************************/
/*!
* \brief For internal use only. L2C calls this function when it receives a connection update
* request from a peer device.
*
* \param identifier Identifier value.
* \param handle Connection handle.
* \param pConnSpec Connection spec parameters.
*
* \return None.
*/
/*************************************************************************************************/
void DmL2cConnUpdateInd(uint8_t identifier, uint16_t handle, hciConnSpec_t *pConnSpec);
/*************************************************************************************************/
/*!
* \brief For internal use only. Find the connection ID with matching handle.
*
* \param handle Handle to find.
*
* \return Connection ID or DM_CONN_ID_NONE if error.
*/
/*************************************************************************************************/
dmConnId_t DmConnIdByHandle(uint16_t handle);
/*************************************************************************************************/
/*!
* \brief For internal use only. Return TRUE if the connection is in use.
*
* \param connId Connection ID.
*
* \return TRUE if the connection is in use, FALSE otherwise.
*/
/*************************************************************************************************/
bool_t DmConnInUse(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief For internal use only. Return the peer address type.
*
* \param connId Connection ID.
*
* \return Peer address type.
*/
/*************************************************************************************************/
uint8_t DmConnPeerAddrType(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief For internal use only. Return the peer device address.
*
* \param connId Connection ID.
*
* \return Pointer to peer device address.
*/
/*************************************************************************************************/
uint8_t *DmConnPeerAddr(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief For internal use only. Return the local address type.
*
* \param connId Connection ID.
*
* \return Local address type.
*/
/*************************************************************************************************/
uint8_t DmConnLocalAddrType(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief For internal use only. Return the local address.
*
* \param connId Connection ID.
*
* \return Pointer to local address.
*/
/*************************************************************************************************/
uint8_t *DmConnLocalAddr(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief For internal use only. Return the peer resolvable private address (RPA).
*
* \param connId Connection ID.
*
* \return Pointer to peer RPA.
*/
/*************************************************************************************************/
uint8_t *DmConnPeerRpa(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief For internal use only. Return the local resolvable private address (RPA).
*
* \param connId Connection ID.
*
* \return Pointer to local RPA.
*/
/*************************************************************************************************/
uint8_t *DmConnLocalRpa(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief For internal use only. Return the security level of the connection.
*
* \param connId Connection ID.
*
* \return Security level of the connection.
*/
/*************************************************************************************************/
uint8_t DmConnSecLevel(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief For internal use only. This function is called by SMP to request encryption.
*
* \param connId DM connection ID.
* \param secLevel Security level of pairing when key was exchanged.
* \param pKey Pointer to key.
*
* \return None.
*/
/*************************************************************************************************/
void DmSmpEncryptReq(dmConnId_t connId, uint8_t secLevel, uint8_t *pKey);
/*************************************************************************************************/
/*!
* \brief For internal use only. Execute DM callback from SMP procedures.
*
* \param pDmEvt Pointer to callback event data.
*
* \return None.
*/
/*************************************************************************************************/
void DmSmpCbackExec(dmEvt_t *pDmEvt);
/*************************************************************************************************/
/*!
* \brief For internal use only. This function gets the local CSRK used by the device.
*
* \return Pointer to CSRK.
*/
/*************************************************************************************************/
uint8_t *DmSecGetLocalCsrk(void);
/*************************************************************************************************/
/*!
* \brief For internal use only. This function gets the local IRK used by the device.
*
* \return Pointer to IRK.
*/
/*************************************************************************************************/
uint8_t *DmSecGetLocalIrk(void);
/*************************************************************************************************/
/*!
* \brief For internal use only. Read the features of the remote device.
*
* \param connId Connection identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmReadRemoteFeatures(dmConnId_t connId);
/*************************************************************************************************/
/*!
* \brief Read the version info of the remote device.
*
* \param connId Connection identifier.
*
* \return None.
*/
/*************************************************************************************************/
void DmReadRemoteVerInfo(dmConnId_t connId);
/**@}*/
/*! \} */ /* STACK_DM_API */
#ifdef __cplusplus
};
#endif
#endif /* DM_API_H */