1441 lines
48 KiB
C
1441 lines
48 KiB
C
#ifndef _GAPM_TASK_H_
|
|
#define _GAPM_TASK_H_
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup GAPM_TASK Generic Access Profile Manager Task
|
|
* @ingroup GAPM
|
|
* @brief Handles ALL messages to/from GAP Manager block.
|
|
*
|
|
* It handles messages from lower and higher layers not related to an ongoing connection.
|
|
*
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
#include "rwip_task.h" // Task definitions
|
|
#include "gap.h"
|
|
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Offset for List Management Operation Codes
|
|
#define GAPM_OP_OFFSET_LIST_MGMT (0x90)
|
|
/// Offset for Extended Air Operation Codes
|
|
#define GAPM_OP_OFFSET_EXT_AIR (0xA0)
|
|
|
|
/*
|
|
* ENUMERATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// GAP Manager Message Interface
|
|
enum gapm_msg_id
|
|
{
|
|
/* Default event */
|
|
/// Command Complete event
|
|
GAPM_CMP_EVT = TASK_FIRST_MSG(TASK_ID_GAPM),
|
|
/// Event triggered to inform that lower layers are ready
|
|
GAPM_DEVICE_READY_IND,
|
|
|
|
/* Default commands */
|
|
/// Reset link layer and the host command
|
|
GAPM_RESET_CMD,
|
|
/// Cancel ongoing operation - DEPRECATED
|
|
GAPM_CANCEL_CMD,
|
|
|
|
/* Device Configuration */
|
|
/// Set device configuration command
|
|
GAPM_SET_DEV_CONFIG_CMD,
|
|
/// Set device channel map
|
|
GAPM_SET_CHANNEL_MAP_CMD,
|
|
|
|
/* Local device information */
|
|
/// Get local device info command
|
|
GAPM_GET_DEV_INFO_CMD,
|
|
/// Local device version indication event
|
|
GAPM_DEV_VERSION_IND,
|
|
/// Local device BD Address indication event
|
|
GAPM_DEV_BDADDR_IND,
|
|
/// Advertising channel Tx power level
|
|
GAPM_DEV_ADV_TX_POWER_IND,
|
|
/// Indication containing information about memory usage.
|
|
GAPM_DBG_MEM_INFO_IND,
|
|
|
|
/* White List */
|
|
/// White List Management Command - DEPRECATED
|
|
GAPM_WHITE_LIST_MGT_CMD,
|
|
/// White List Size indication event - DEPRECATED
|
|
GAPM_WHITE_LIST_SIZE_IND,
|
|
|
|
/* Air Operations */
|
|
/// Set advertising mode Command - DEPRECATED
|
|
GAPM_START_ADVERTISE_CMD,
|
|
/// Update Advertising Data Command - On fly update when device is advertising - DEPRECATED, 41
|
|
GAPM_UPDATE_ADVERTISE_DATA_CMD,
|
|
|
|
/// Set Scan mode Command - DEPRECATED
|
|
GAPM_START_SCAN_CMD,
|
|
/// Advertising or scanning report information event - DEPRECATED
|
|
GAPM_ADV_REPORT_IND,
|
|
|
|
/// Set connection initialization Command - DEPRECATED
|
|
GAPM_START_CONNECTION_CMD,
|
|
/// Name of peer device indication
|
|
GAPM_PEER_NAME_IND,
|
|
/// Confirm connection to a specific device (Connection Operation in Selective mode) - DEPRECATED
|
|
GAPM_CONNECTION_CFM,
|
|
|
|
/* Security / Encryption Toolbox */
|
|
/// Resolve address command
|
|
GAPM_RESOLV_ADDR_CMD,
|
|
/// Indicate that resolvable random address has been solved
|
|
GAPM_ADDR_SOLVED_IND,
|
|
/// Generate a random address.
|
|
GAPM_GEN_RAND_ADDR_CMD,
|
|
/// Use the AES-128 block in the controller
|
|
GAPM_USE_ENC_BLOCK_CMD,
|
|
/// AES-128 block result indication
|
|
GAPM_USE_ENC_BLOCK_IND,
|
|
/// Generate a 8-byte random number
|
|
GAPM_GEN_RAND_NB_CMD,
|
|
/// Random Number Indication
|
|
GAPM_GEN_RAND_NB_IND,
|
|
|
|
/* Profile Management */
|
|
/// Create new task for specific profile, 3355
|
|
GAPM_PROFILE_TASK_ADD_CMD,
|
|
/// Inform that profile task has been added.
|
|
GAPM_PROFILE_ADDED_IND,
|
|
|
|
/// Indicate that a message has been received on an unknown task
|
|
GAPM_UNKNOWN_TASK_IND,
|
|
|
|
/* Data Length Extension */
|
|
/// Suggested Default Data Length indication
|
|
GAPM_SUGG_DFLT_DATA_LEN_IND,
|
|
/// Maximum Data Length indication
|
|
GAPM_MAX_DATA_LEN_IND,
|
|
|
|
/* Resolving list for controller-based privacy*/
|
|
/// Resolving address list management - DEPRECATED
|
|
GAPM_RAL_MGT_CMD,
|
|
/// Resolving address list size indication - DEPRECATED
|
|
GAPM_RAL_SIZE_IND,
|
|
/// Resolving address list address indication
|
|
GAPM_RAL_ADDR_IND,
|
|
|
|
/* Set new IRK */
|
|
/// Modify current IRK
|
|
GAPM_SET_IRK_CMD,
|
|
|
|
/* LE Protocol/Service Multiplexer Management */
|
|
/// Register a LE Protocol/Service Multiplexer command
|
|
GAPM_LEPSM_REGISTER_CMD,
|
|
/// Unregister a LE Protocol/Service Multiplexer command
|
|
GAPM_LEPSM_UNREGISTER_CMD,
|
|
|
|
/* ************************************************ */
|
|
/* ------------ NEW COMMANDS FOR BLE 5 ------------ */
|
|
/* ************************************************ */
|
|
|
|
/* List Management Operations */
|
|
/// Get local or peer address
|
|
/// @see struct gapm_get_ral_addr_cmd
|
|
GAPM_GET_RAL_ADDR_CMD = TASK_FIRST_MSG(TASK_ID_GAPM) + GAPM_OP_OFFSET_LIST_MGMT,
|
|
/// Set content of either white list or resolving list or periodic advertiser list
|
|
/// @see struct gapm_list_set_wl_cmd
|
|
/// @see struct gapm_list_set_ral_cmd
|
|
/// @see struct gapm_list_set_pal_cmd
|
|
GAPM_LIST_SET_CMD,
|
|
/// Indicate size of list indicated in GAPM_GET_DEV_CONFIG_CMD message
|
|
/// @see struct gapm_list_size_ind
|
|
GAPM_LIST_SIZE_IND,
|
|
|
|
/* Extended Air Operations */
|
|
/// Create an advertising, a scanning, an initiating or a periodic synchronization activity
|
|
/// @see struct gapm_activity_create_cmd
|
|
/// @see struct gapm_activity_create_adv_cmd
|
|
GAPM_ACTIVITY_CREATE_CMD = TASK_FIRST_MSG(TASK_ID_GAPM) + GAPM_OP_OFFSET_EXT_AIR,
|
|
/// Start a previously created activity
|
|
/// @see struct gapm_activity_start_cmd
|
|
GAPM_ACTIVITY_START_CMD,
|
|
/// Stop either a given activity or all existing activities
|
|
/// @see struct gapm_activity_stop_cmd
|
|
GAPM_ACTIVITY_STOP_CMD,
|
|
/// Delete either a given activity or all existing activities
|
|
/// @see struct gapm_activity_delete_cmd
|
|
GAPM_ACTIVITY_DELETE_CMD,
|
|
/// Indicate that an activity has well been created
|
|
/// @see struct gapm_activity_create_ind
|
|
GAPM_ACTIVITY_CREATED_IND,
|
|
/// Indicate that an activity has been stopped and can be restarted
|
|
/// @see struct gapm_activity_stopped_ind
|
|
GAPM_ACTIVITY_STOPPED_IND,
|
|
/// Set either advertising data or scan response data or periodic advertising data
|
|
/// @see struct gapm_set_adv_data_cmd
|
|
GAPM_SET_ADV_DATA_CMD,
|
|
/// Indicate reception of an advertising report (periodic or not), a scan response report
|
|
/// @see struct gapm_ext_adv_report_ind
|
|
GAPM_EXT_ADV_REPORT_IND,
|
|
/// Indicate reception of a scan request
|
|
/// @see struct gapm_scan_request_ind
|
|
GAPM_SCAN_REQUEST_IND,
|
|
/// Indicate that synchronization has been successfully established with a periodic advertiser
|
|
/// @see struct gapm_sync_established_ind
|
|
GAPM_SYNC_ESTABLISHED_IND,
|
|
/// Indicate maximum advertising data length supported by controller
|
|
/// @see struct gapm_max_adv_data_len_ind
|
|
GAPM_MAX_ADV_DATA_LEN_IND,
|
|
/// Indicate number of available advertising sets
|
|
/// @see struct gapm_nb_adv_sets_ind
|
|
GAPM_NB_ADV_SETS_IND,
|
|
|
|
/* ************************************************ */
|
|
/* -------------- Internal usage only ------------- */
|
|
/* ************************************************ */
|
|
/// Message received to unknown task received
|
|
GAPM_UNKNOWN_TASK_MSG,
|
|
|
|
/* Secure Connections */
|
|
/// Request to provide DH Key
|
|
GAPM_GEN_DH_KEY_CMD,
|
|
/// if the controller do not supp DHK GEN we make it on host..
|
|
GAPM_GEN_DH_KEY_ON_HOST_CMD,
|
|
/// Indicates the DH Key computation is complete and available
|
|
GAPM_GEN_DH_KEY_IND,
|
|
|
|
/* Internal messages for timer events, not part of API*/
|
|
/// Limited discoverable timeout indication - DEPRECATED
|
|
GAPM_LIM_DISC_TO_IND,
|
|
/// Scan timeout indication - DEPRECATED
|
|
GAPM_SCAN_TO_IND,
|
|
/// Address renewal timeout indication
|
|
GAPM_ADDR_RENEW_TO_IND,
|
|
/// Automatic connection establishment timeout indication
|
|
GAPM_AUTO_CONN_TO_IND,
|
|
/// Renew random private addresses
|
|
/// @see struct gapm_actv_addr_renew_cmd
|
|
GAPM_ACTV_ADDR_RENEW_CMD,
|
|
};
|
|
|
|
|
|
/// GAP Manager operation type - application interface
|
|
enum gapm_operation
|
|
{
|
|
/* No Operation (if nothing has been requested) */
|
|
/* ************************************************ */
|
|
/// No operation.
|
|
GAPM_NO_OP = 0x00,
|
|
|
|
/* Default operations */
|
|
/* ************************************************ */
|
|
/// Reset BLE subsystem: LL and HL.
|
|
GAPM_RESET,
|
|
/// Cancel currently executed operation. - DEPRECATED
|
|
GAPM_CANCEL,
|
|
|
|
/* Configuration operations */
|
|
/* ************************************************ */
|
|
/// Set device configuration
|
|
GAPM_SET_DEV_CONFIG,
|
|
/// Set device channel map
|
|
GAPM_SET_CHANNEL_MAP,
|
|
|
|
/* Retrieve device information */
|
|
/* ************************************************ */
|
|
/// Get Local device version
|
|
GAPM_GET_DEV_VERSION,
|
|
/// Get Local device BD Address
|
|
GAPM_GET_DEV_BDADDR,
|
|
/// Get device advertising power level, 7
|
|
GAPM_GET_DEV_ADV_TX_POWER,
|
|
|
|
/* Operation on White list */
|
|
/* ************************************************ */
|
|
/// Get White List Size.
|
|
GAPM_GET_WLIST_SIZE,
|
|
/// Add devices in white list. - DEPRECATED
|
|
GAPM_ADD_DEV_IN_WLIST,
|
|
/// Remove devices form white list. - DEPRECATED
|
|
GAPM_RMV_DEV_FRM_WLIST,
|
|
/// Clear all devices from white list. - DEPRECATED
|
|
GAPM_CLEAR_WLIST,
|
|
|
|
/* Advertise mode operations */
|
|
/* ************************************************ */
|
|
/// Start non connectable advertising - DEPRECATED
|
|
GAPM_ADV_NON_CONN,
|
|
/// Start undirected connectable advertising - DEPRECATED 13
|
|
GAPM_ADV_UNDIRECT,
|
|
/// Start directed connectable advertising - DEPRECATED
|
|
GAPM_ADV_DIRECT,
|
|
/// Start directed connectable advertising using Low Duty Cycle - DEPRECATED
|
|
GAPM_ADV_DIRECT_LDC,
|
|
/// Update on the fly advertising data - DEPRECATED
|
|
GAPM_UPDATE_ADVERTISE_DATA,
|
|
|
|
/* Scan mode operations */
|
|
/* ************************************************ */
|
|
/// Start active scan operation - DEPRECATED
|
|
GAPM_SCAN_ACTIVE,
|
|
/// Start passive scan operation - DEPRECATED
|
|
GAPM_SCAN_PASSIVE,
|
|
|
|
/* Connection mode operations */
|
|
/* ************************************************ */
|
|
/// Direct connection operation - DEPRECATED
|
|
GAPM_CONNECTION_DIRECT,
|
|
/// Automatic connection operation - DEPRECATED
|
|
GAPM_CONNECTION_AUTO,
|
|
/// Selective connection operation - DEPRECATED
|
|
GAPM_CONNECTION_SELECTIVE,
|
|
/// Name Request operation (requires to start a direct connection) - DEPRECATED
|
|
GAPM_CONNECTION_NAME_REQUEST,
|
|
|
|
/* Security / Encryption Toolbox */
|
|
/* ************************************************ */
|
|
/// Resolve device address
|
|
GAPM_RESOLV_ADDR,
|
|
/// Generate a random address
|
|
GAPM_GEN_RAND_ADDR,
|
|
/// Use the controller's AES-128 block
|
|
GAPM_USE_ENC_BLOCK,
|
|
/// Generate a 8-byte random number
|
|
GAPM_GEN_RAND_NB,
|
|
|
|
/* Profile Management */
|
|
/* ************************************************ */
|
|
/// Create new task for specific profile , 27
|
|
GAPM_PROFILE_TASK_ADD,
|
|
|
|
/* DEBUG */
|
|
/* ************************************************ */
|
|
/// Get memory usage
|
|
GAPM_DBG_GET_MEM_INFO,
|
|
/// Perform a platform reset
|
|
GAPM_PLF_RESET,
|
|
|
|
/* Data Length Extension */
|
|
/* ************************************************ */
|
|
/// Set Suggested Default LE Data Length
|
|
GAPM_SET_SUGGESTED_DFLT_LE_DATA_LEN,
|
|
/// Get Suggested Default LE Data Length
|
|
GAPM_GET_SUGGESTED_DFLT_LE_DATA_LEN,
|
|
/// Get Maximum LE Data Length
|
|
GAPM_GET_MAX_LE_DATA_LEN,
|
|
|
|
/* Operation on Resolving List */
|
|
/* ************************************************ */
|
|
/// Get resolving address list size
|
|
GAPM_GET_RAL_SIZE,
|
|
/// Get resolving local address
|
|
GAPM_GET_RAL_LOC_ADDR,
|
|
/// Get resolving peer address
|
|
GAPM_GET_RAL_PEER_ADDR,
|
|
/// Add device in resolving address list - DEPRECATED
|
|
GAPM_ADD_DEV_IN_RAL,
|
|
/// Remove device from resolving address list - DEPRECATED
|
|
GAPM_RMV_DEV_FRM_RAL,
|
|
/// Clear resolving address list - DEPRECATED
|
|
GAPM_CLEAR_RAL,
|
|
|
|
/* Connection mode operations - cont */
|
|
/* ************************************************ */
|
|
/// General connection operation - DEPRECATED
|
|
GAPM_CONNECTION_GENERAL,
|
|
|
|
/* Change current IRK */
|
|
/* ************************************************ */
|
|
/// Set IRK
|
|
GAPM_SET_IRK,
|
|
|
|
/* LE Protocol/Service Multiplexer management */
|
|
/* ************************************************ */
|
|
/// Register a LE Protocol/Service Multiplexer
|
|
GAPM_LEPSM_REG,
|
|
/// Unregister a LE Protocol/Service Multiplexer
|
|
GAPM_LEPSM_UNREG,
|
|
|
|
/* Secure Connection - Internal API */
|
|
/* ************************************************ */
|
|
/// Generate DH_Key
|
|
GAPM_GEN_DH_KEY,
|
|
|
|
/* List Management */
|
|
/* ************************************************ */
|
|
/// Set content of white list
|
|
GAPM_SET_WLIST = GAPM_NO_OP + GAPM_OP_OFFSET_LIST_MGMT,
|
|
/// Set content of resolving list
|
|
GAPM_SET_RAL,
|
|
/// Set content of periodic advertiser list
|
|
GAPM_SET_PAL,
|
|
/// Get white list size
|
|
//GAPM_GET_WHITE_LIST_SIZE,
|
|
/// Get resolving list size
|
|
//GAPM_GET_RAL_SIZE,
|
|
/// Get periodic advertiser list size
|
|
GAPM_GET_PAL_SIZE = GAPM_SET_PAL + 3,
|
|
|
|
/* Extended Air Operations */
|
|
/* ************************************************ */
|
|
/// Create advertising activity
|
|
GAPM_CREATE_ADV_ACTIVITY = GAPM_NO_OP + GAPM_OP_OFFSET_EXT_AIR,
|
|
/// Create scanning activity
|
|
GAPM_CREATE_SCAN_ACTIVITY,
|
|
/// Create initiating activity
|
|
GAPM_CREATE_INIT_ACTIVITY,
|
|
/// Create periodic synchronization activity
|
|
GAPM_CREATE_PERIOD_SYNC_ACTIVITY,
|
|
/// Start an activity
|
|
GAPM_START_ACTIVITY,
|
|
/// Stop an activity
|
|
GAPM_STOP_ACTIVITY,
|
|
/// Stop all activities
|
|
GAPM_STOP_ALL_ACTIVITIES,
|
|
/// Delete an activity
|
|
GAPM_DELETE_ACTIVITY,
|
|
/// Delete all activities
|
|
GAPM_DELETE_ALL_ACTIVITIES,
|
|
/// Set advertising data
|
|
GAPM_SET_ADV_DATA,
|
|
/// Set scan response data
|
|
GAPM_SET_SCAN_RSP_DATA,
|
|
/// Set periodic advertising data
|
|
GAPM_SET_PERIOD_ADV_DATA,
|
|
/// Get number of available advertising sets
|
|
GAPM_GET_NB_ADV_SETS,
|
|
/// Get maximum advertising data length supported by the controller
|
|
GAPM_GET_MAX_LE_ADV_DATA_LEN,
|
|
/// INTERNAL OPERATION - Renew random addresses
|
|
GAPM_RENEW_ADDR,
|
|
};
|
|
|
|
/// Device Address type Configuration
|
|
enum gapm_addr_type
|
|
{
|
|
/// Device Address is a Public Static address
|
|
GAPM_CFG_ADDR_PUBLIC = 0,
|
|
/// Device Address is a Private Static address
|
|
GAPM_CFG_ADDR_PRIVATE = 1,
|
|
/// Device Address generated using host-based Privacy feature - DEPRECATED
|
|
GAPM_CFG_ADDR_HOST_PRIVACY = 2,
|
|
/// Device Address generated using controller-based Privacy feature
|
|
GAPM_CFG_ADDR_CTNL_PRIVACY = 4,
|
|
};
|
|
|
|
/// Own BD address source of the device
|
|
enum gapm_own_addr
|
|
{
|
|
/// Public or Private Static Address according to device address configuration
|
|
GAPM_STATIC_ADDR,
|
|
/// Generated resolvable private random address
|
|
GAPM_GEN_RSLV_ADDR,
|
|
/// Generated non-resolvable private random address
|
|
GAPM_GEN_NON_RSLV_ADDR,
|
|
};
|
|
|
|
/// Device Attribute write permission requirement
|
|
enum gapm_write_att_perm
|
|
{
|
|
/// Disable write access
|
|
GAPM_WRITE_DISABLE = 0,
|
|
/// Enable write access - no authentication required
|
|
GAPM_WRITE_NO_AUTH = 1,
|
|
/// Write access requires unauthenticated link
|
|
GAPM_WRITE_UNAUTH = 2,
|
|
/// Write access requires authenticated link
|
|
GAPM_WRITE_AUTH = 3,
|
|
/// Write access requires secure connected link
|
|
GAPM_WRITE_SEC_CON = 4
|
|
};
|
|
|
|
/// Attribute database configuration
|
|
/// 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
|
/// +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
/// | DBG | RFU | SC |PCP | APP_PERM | NAME_PERM |
|
|
/// +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
/// - Bit [0-2] : Device Name write permission requirements for peer device (@see gapm_write_att_perm)
|
|
/// - Bit [3-5] : Device Appearance write permission requirements for peer device (@see gapm_write_att_perm)
|
|
/// - Bit [6] : Slave Preferred Connection Parameters present
|
|
/// - Bit [7] : Service change feature present in GATT attribute database.
|
|
/// - Bit [8-14]: Reserved
|
|
/// - Bit [15] : Enable Debug Mode
|
|
enum gapm_att_cfg_flag
|
|
{
|
|
/// Device Name write permission requirements for peer device (@see gapm_write_att_perm)
|
|
GAPM_MASK_ATT_NAME_PERM = 0x0007,
|
|
GAPM_POS_ATT_NAME_PERM = 0x00,
|
|
/// Device Appearance write permission requirements for peer device (@see gapm_write_att_perm)
|
|
GAPM_MASK_ATT_APPEARENCE_PERM = 0x0038,
|
|
GAPM_POS_ATT_APPEARENCE_PERM = 0x03,
|
|
/// Slave Preferred Connection Parameters present in GAP attribute database.
|
|
GAPM_MASK_ATT_SLV_PREF_CON_PAR_EN = 0x0040,
|
|
GAPM_POS_ATT_SLV_PREF_CON_PAR_EN = 0x06,
|
|
/// Service change feature present in GATT attribute database.
|
|
GAPM_MASK_ATT_SVC_CHG_EN = 0x0080,
|
|
GAPM_POS_ATT_SVC_CHG_EN = 0x07,
|
|
/// Service change feature present in GATT attribute database.
|
|
GAPM_MASK_ATT_DBG_MODE_EN = 0x8000,
|
|
GAPM_POS_ATT_DBG_MODE_EN = 0x0F,
|
|
};
|
|
|
|
/// Pairing mode authorized on the device
|
|
/// 7 6 5 4 3 2 1 0
|
|
/// +----+----+----+----+----+----+----+----+
|
|
/// |KGEN| RFU | SCP| LP |
|
|
/// +----+----+----+----+----+----+----+----+
|
|
enum gapm_pairing_mode
|
|
{
|
|
/// No pairing authorized
|
|
GAPM_PAIRING_DISABLE = 0,
|
|
/// Legacy pairing Authorized
|
|
GAPM_PAIRING_LEGACY = (1 << 0),
|
|
/// Secure Connection pairing Authorized
|
|
GAPM_PAIRING_SEC_CON = (1 << 1),
|
|
|
|
|
|
/// Force re-generation of P256 private and public keys
|
|
GAPM_PAIRING_FORCE_P256_KEY_GEN = (1<<7),
|
|
};
|
|
|
|
/// LE Audio Mode Configuration
|
|
/// 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
|
/// +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
/// | RFU | AM0|
|
|
/// +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
enum gapm_audio_cfg_flag
|
|
{
|
|
/// LE Audio Mode 0 Supported
|
|
GAPM_MASK_AUDIO_AM0_SUP = 0x0001,
|
|
GAPM_POS_AUDIO_AM0_SUP = 0x00,
|
|
};
|
|
|
|
/*
|
|
* TYPE DEFINITIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Operation command structure in order to keep requested operation.
|
|
struct gapm_operation_cmd
|
|
{
|
|
/// GAP request type
|
|
uint8_t operation;
|
|
};
|
|
|
|
/// Command complete event data structure
|
|
struct gapm_cmp_evt
|
|
{
|
|
/// GAP requested operation
|
|
uint8_t operation;
|
|
/// Status of the request
|
|
uint8_t status;
|
|
};
|
|
|
|
/// Reset link layer and the host command
|
|
struct gapm_reset_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_RESET: Reset BLE subsystem: LL and HL.
|
|
uint8_t operation;
|
|
};
|
|
|
|
/// Set device configuration command
|
|
struct gapm_set_dev_config_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_SET_DEV_CONFIG: Set device configuration
|
|
uint8_t operation;
|
|
/// Device Role: Central, Peripheral, Observer, Broadcaster or All roles.
|
|
uint8_t role;
|
|
|
|
/// -------------- Privacy Config -----------------------
|
|
/// Duration before regenerate device address when privacy is enabled.
|
|
uint16_t renew_dur;
|
|
/// Provided own static private random address
|
|
bd_addr_t addr;
|
|
/// Device IRK used for resolvable random BD address generation (LSB first)
|
|
struct gap_sec_key irk;
|
|
/// Privacy configuration bit field (@see enum gap_priv_cfg for bit signification)
|
|
uint8_t privacy_cfg;
|
|
|
|
/// -------------- Security Config -----------------------
|
|
|
|
/// Pairing mode authorized (@see enum gapm_pairing_mode)
|
|
uint8_t pairing_mode;
|
|
|
|
/// -------------- ATT Database Config -----------------------
|
|
|
|
/// GAP service start handle
|
|
uint16_t gap_start_hdl;
|
|
/// GATT service start handle
|
|
uint16_t gatt_start_hdl;
|
|
|
|
/// Attribute database configuration
|
|
/// 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
|
/// +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
/// | DBG | RFU | SC |PCP | APP_PERM | NAME_PERM |
|
|
/// +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
|
|
/// - Bit [0-2] : Device Name write permission requirements for peer device (@see gapm_write_att_perm)
|
|
/// - Bit [3-5] : Device Appearance write permission requirements for peer device (@see gapm_write_att_perm)
|
|
/// - Bit [6] : Slave Preferred Connection Parameters present
|
|
/// - Bit [7] : Service change feature present in GATT attribute database.
|
|
/// - Bit [8-14]: Reserved
|
|
/// - Bit [15] : Enable Debug Mode
|
|
uint16_t att_cfg;
|
|
|
|
/// -------------- LE Data Length Extension -----------------------
|
|
///Suggested value for the Controller's maximum transmitted number of payload octets to be used
|
|
uint16_t sugg_max_tx_octets;
|
|
///Suggested value for the Controller's maximum packet transmission time to be used
|
|
uint16_t sugg_max_tx_time;
|
|
|
|
/// --------------- L2CAP Configuration ---------------------------
|
|
/// Maximal MTU acceptable for device
|
|
uint16_t max_mtu;
|
|
/// Maximal MPS Packet size acceptable for device
|
|
uint16_t max_mps;
|
|
/// Maximum number of LE Credit based connection that can be established
|
|
uint8_t max_nb_lecb;
|
|
|
|
/// --------------------- Miscellaneous ---------------------------
|
|
/// API settings bit field (@see enum gap_api_settings for each bit meaning)
|
|
uint8_t api_settings;
|
|
|
|
/// --------------- LE Audio Mode Supported -----------------------
|
|
///
|
|
/// LE Audio Mode Configuration (@see gapm_audio_cfg_flag)
|
|
uint16_t audio_cfg;
|
|
|
|
/// ------------------ LE PHY Management -------------------------
|
|
/// Preferred LE PHY rate for data transmission (@see enum gap_rate)
|
|
uint8_t tx_pref_rates;
|
|
/// Preferred LE PHY rate for data reception (@see enum gap_rate)
|
|
uint8_t rx_pref_rates;
|
|
};
|
|
|
|
/// Set new IRK
|
|
struct gapm_set_irk_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_SET_IRK: Set device configuration
|
|
uint8_t operation;
|
|
/// Device IRK used for resolvable random BD address generation (LSB first)
|
|
struct gap_sec_key irk;
|
|
};
|
|
|
|
/// Set device channel map
|
|
struct gapm_set_channel_map_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_SET_CHANNEL_MAP: Set device channel map.
|
|
uint8_t operation;
|
|
/// Channel map
|
|
le_chnl_map_t chmap;
|
|
};
|
|
|
|
/// Get local device info command
|
|
struct gapm_get_dev_info_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_GET_DEV_VERSION: Get Local device version
|
|
/// - GAPM_GET_DEV_BDADDR: Get Local device BD Address
|
|
/// - GAPM_GET_DEV_ADV_TX_POWER: Get device advertising power level
|
|
/// - GAPM_DBG_GET_MEM_INFO: Get memory usage (debug only)
|
|
uint8_t operation;
|
|
};
|
|
|
|
/// Local device version indication event
|
|
struct gapm_dev_version_ind
|
|
{
|
|
/// HCI version
|
|
uint8_t hci_ver;
|
|
/// LMP version
|
|
uint8_t lmp_ver;
|
|
/// Host version
|
|
uint8_t host_ver;
|
|
/// HCI revision
|
|
uint16_t hci_subver;
|
|
/// LMP subversion
|
|
uint16_t lmp_subver;
|
|
/// Host revision
|
|
uint16_t host_subver;
|
|
/// Manufacturer name
|
|
uint16_t manuf_name;
|
|
};
|
|
|
|
/// Local device BD Address indication event
|
|
struct gapm_dev_bdaddr_ind
|
|
{
|
|
/// Local device address information
|
|
struct gap_bdaddr addr;
|
|
};
|
|
|
|
/// Advertising channel Tx power level indication event
|
|
struct gapm_dev_adv_tx_power_ind
|
|
{
|
|
/// Advertising channel Tx power level
|
|
int8_t power_lvl;
|
|
};
|
|
|
|
/// Cancel ongoing operation - DEPRECATED
|
|
struct gapm_cancel_cmd
|
|
{
|
|
/// GAPM requested operation
|
|
/// - GAPM_CANCEL: Cancel running operation
|
|
uint8_t operation;
|
|
};
|
|
|
|
/// White List Management Command - DEPRECATED
|
|
struct gapm_white_list_mgt_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_GET_WLIST_SIZE: Get White List Size.
|
|
/// - GAPM_ADD_DEV_IN_WLIST: Add devices in white list.
|
|
/// - GAPM_RMV_DEV_FRM_WLIST: Remove devices form white list.
|
|
/// - GAPM_CLEAR_WLIST: Clear all devices from white list.
|
|
uint8_t operation;
|
|
/// Number of device information present in command
|
|
uint8_t nb;
|
|
/// Device address information that can be used to add or remove element in device list.
|
|
struct gap_bdaddr devices[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Resolving List Management Command - DEPRECATED
|
|
struct gapm_ral_mgt_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_GET_RAL_SIZE: Get Resolving List Size.
|
|
/// - GAPM_GET_RAL_LOC_ADDR: Get Resolving Local Address.
|
|
/// - GAPM_GET_RAL_PEER_ADDR: Get Resolving Peer Address.
|
|
/// - GAPM_ADD_DEV_IN_RAL: Add devices in resolving list.
|
|
/// - GAPM_RMV_DEV_FRM_RAL: Remove devices form resolving list.
|
|
/// - GAPM_CLEAR_RAL: Clear all devices from resolving list.
|
|
uint8_t operation;
|
|
/// Number of device information present in command
|
|
uint8_t nb;
|
|
/// Device address information that can be used to add or remove element in device list.
|
|
struct gap_ral_dev_info devices[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Resolving Address indication event
|
|
struct gapm_ral_addr_ind
|
|
{
|
|
/// Peer or local read operation
|
|
uint8_t operation;
|
|
/// Resolving List address
|
|
struct gap_bdaddr addr;
|
|
};
|
|
|
|
/// Resolve Address command
|
|
struct gapm_resolv_addr_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_RESOLV_ADDR: Resolve device address
|
|
uint8_t operation;
|
|
/// Number of provided IRK (sahlle be > 0)
|
|
uint8_t nb_key;
|
|
/// Resolvable random address to solve
|
|
bd_addr_t addr;
|
|
/// Array of IRK used for address resolution (MSB -> LSB)
|
|
struct gap_sec_key irk[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Indicate that resolvable random address has been solved
|
|
struct gapm_addr_solved_ind
|
|
{
|
|
/// Resolvable random address solved
|
|
bd_addr_t addr;
|
|
/// IRK that correctly solved the random address
|
|
struct gap_sec_key irk;
|
|
};
|
|
|
|
/// Advertising data that contains information set by host. - DEPRECATED
|
|
struct gapm_adv_host
|
|
{
|
|
/// Advertising mode :
|
|
/// - GAP_NON_DISCOVERABLE: Non discoverable mode
|
|
/// - GAP_GEN_DISCOVERABLE: General discoverable mode
|
|
/// - GAP_LIM_DISCOVERABLE: Limited discoverable mode
|
|
/// - GAP_BROADCASTER_MODE: Broadcaster mode
|
|
uint8_t mode;
|
|
|
|
/// Advertising filter policy:
|
|
/// - ADV_ALLOW_SCAN_ANY_CON_ANY: Allow both scan and connection requests from anyone
|
|
/// - ADV_ALLOW_SCAN_WLST_CON_ANY: Allow both scan req from White List devices only and
|
|
/// connection req from anyone
|
|
/// - ADV_ALLOW_SCAN_ANY_CON_WLST: Allow both scan req from anyone and connection req
|
|
/// from White List devices only
|
|
/// - ADV_ALLOW_SCAN_WLST_CON_WLST: Allow scan and connection requests from White List
|
|
/// devices only
|
|
uint8_t adv_filt_policy;
|
|
|
|
/// Advertising data length - maximum 28 bytes, 3 bytes are reserved to set
|
|
/// Advertising AD type flags, shall not be set in advertising data
|
|
uint8_t adv_data_len;
|
|
/// Advertising data
|
|
uint8_t adv_data[GAP_ADV_DATA_LEN];
|
|
/// Scan response data length- maximum 31 bytes
|
|
uint8_t scan_rsp_data_len;
|
|
/// Scan response data
|
|
uint8_t scan_rsp_data[GAP_SCAN_RSP_DATA_LEN];
|
|
/// Peer address
|
|
struct gap_bdaddr peer_addr;
|
|
|
|
uint8_t flags;
|
|
};
|
|
|
|
/// Air operation default parameters - DEPRECATED
|
|
struct gapm_air_operation
|
|
{
|
|
/// Operation code.
|
|
uint8_t code;
|
|
|
|
/**
|
|
* Own BD address source of the device:
|
|
* - GAPM_STATIC_ADDR: Public or Private Static Address according to device address configuration
|
|
* - GAPM_GEN_RSLV_ADDR: Generated resolvable private random address
|
|
* - GAPM_GEN_NON_RSLV_ADDR: Generated non-resolvable private random address
|
|
*/
|
|
uint8_t addr_src;
|
|
|
|
/// Dummy data use to retrieve internal operation state (should be set to 0).
|
|
uint16_t state;
|
|
|
|
uint16_t randomAddrRenewIntervalInSecond;
|
|
};
|
|
|
|
/// Set advertising mode Command - DEPRECATED
|
|
struct gapm_start_advertise_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_ADV_NON_CONN: Start non connectable advertising
|
|
/// - GAPM_ADV_UNDIRECT: Start undirected connectable advertising
|
|
/// - GAPM_ADV_DIRECT: Start directed connectable advertising
|
|
/// - GAPM_ADV_DIRECT_LDC: Start directed connectable advertising using Low Duty Cycle
|
|
struct gapm_air_operation op;
|
|
|
|
/// Minimum interval for advertising
|
|
uint16_t intv_min;
|
|
/// Maximum interval for advertising
|
|
uint16_t intv_max;
|
|
|
|
///Advertising channel map
|
|
uint8_t channel_map;
|
|
//true:force reserve 3 byte for ourself;false:all 31 byte can use by customer,default open this flag,reserve 3byte
|
|
uint8_t isIncludedFlags;
|
|
|
|
/// Advertising information
|
|
union gapm_adv_info
|
|
{
|
|
/// Host information advertising data (GAPM_ADV_NON_CONN and GAPM_ADV_UNDIRECT)
|
|
struct gapm_adv_host host;
|
|
/// Direct address information (GAPM_ADV_DIRECT)
|
|
/// (used only if reconnection address isn't set or privacy disabled)
|
|
struct gap_bdaddr direct;
|
|
} info;
|
|
};
|
|
|
|
/// Update Advertising Data Command - On fly update when device is advertising - DEPRECATED
|
|
struct gapm_update_advertise_data_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_UPDATE_ADVERTISE_DATA: Update on the fly advertising data
|
|
uint8_t operation;
|
|
/// Advertising data length - maximum 28 bytes, 3 bytes are reserved to set
|
|
/// Advertising AD type flags, shall not be set in advertising data
|
|
uint8_t adv_data_len;
|
|
/// Advertising data
|
|
uint8_t adv_data[GAP_ADV_DATA_LEN];
|
|
/// Scan response data length- maximum 31 bytes
|
|
uint8_t scan_rsp_data_len;
|
|
/// Scan response data
|
|
uint8_t scan_rsp_data[GAP_SCAN_RSP_DATA_LEN];
|
|
};
|
|
|
|
/// Set scan mode Command - DEPRECATED
|
|
struct gapm_start_scan_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_SCAN_ACTIVE: Start active scan operation
|
|
/// - GAPM_SCAN_PASSIVE: Start passive scan operation
|
|
struct gapm_air_operation op;
|
|
|
|
/// Scan interval
|
|
uint16_t interval;
|
|
/// Scan window size
|
|
uint16_t window;
|
|
|
|
/// Scanning mode :
|
|
/// - GAP_GEN_DISCOVERY: General discovery mode
|
|
/// - GAP_LIM_DISCOVERY: Limited discovery mode
|
|
/// - GAP_OBSERVER_MODE: Observer mode
|
|
uint8_t mode;
|
|
|
|
/// Scan filter policy:
|
|
/// - SCAN_ALLOW_ADV_ALL: Allow advertising packets from anyone
|
|
/// - SCAN_ALLOW_ADV_WLST: Allow advertising packets from White List devices only
|
|
uint8_t filt_policy;
|
|
/// Scan duplicate filtering policy:
|
|
/// - SCAN_FILT_DUPLIC_DIS: Disable filtering of duplicate packets
|
|
/// - SCAN_FILT_DUPLIC_EN: Enable filtering of duplicate packets
|
|
uint8_t filter_duplic;
|
|
};
|
|
|
|
/// Advertising or scanning report information event - DEPRECATED
|
|
struct gapm_adv_report_ind
|
|
{
|
|
/// Advertising report structure
|
|
adv_report_t report;
|
|
};
|
|
|
|
/// Set connection initialization Command - DEPRECATED
|
|
struct gapm_start_connection_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_CONNECTION_DIRECT: Direct connection operation
|
|
/// - GAPM_CONNECTION_AUTO: Automatic connection operation
|
|
/// - GAPM_CONNECTION_SELECTIVE: Selective connection operation
|
|
/// - GAPM_CONNECTION_NAME_REQUEST: Name Request operation (requires to start a direct
|
|
/// connection)
|
|
/// - GAPM_CONNECTION_GENERAL: General connection operation
|
|
struct gapm_air_operation op;
|
|
|
|
/// Scan interval
|
|
uint16_t scan_interval;
|
|
/// Scan window size
|
|
uint16_t scan_window;
|
|
|
|
/// Minimum of connection interval
|
|
uint16_t con_intv_min;
|
|
/// Maximum of connection interval
|
|
uint16_t con_intv_max;
|
|
/// Connection latency
|
|
uint16_t con_latency;
|
|
/// Link supervision timeout
|
|
uint16_t superv_to;
|
|
/// Minimum CE length
|
|
uint16_t ce_len_min;
|
|
/// Maximum CE length
|
|
uint16_t ce_len_max;
|
|
|
|
/// Number of peer device information present in message.
|
|
/// Shall be 1 for GAPM_CONNECTION_DIRECT or GAPM_CONNECTION_NAME_REQUEST operations
|
|
/// Shall be greater than 0 for other operations
|
|
uint8_t nb_peers;
|
|
|
|
/// Peer device information
|
|
struct gap_bdaddr peers[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Confirm connection to a specific device (Connection Operation in Selective mode) - DEPRECATED
|
|
struct gapm_connection_cfm
|
|
{
|
|
/// peer device bd address
|
|
bd_addr_t addr;
|
|
/// peer device address type
|
|
uint8_t addr_type;
|
|
|
|
/// Minimum of connection interval
|
|
uint16_t con_intv_min;
|
|
/// Maximum of connection interval
|
|
uint16_t con_intv_max;
|
|
/// Connection latency
|
|
uint16_t con_latency;
|
|
/// Link supervision timeout
|
|
uint16_t superv_to;
|
|
/// Minimum CE length
|
|
uint16_t ce_len_min;
|
|
/// Maximum CE length
|
|
uint16_t ce_len_max;
|
|
};
|
|
|
|
/// Name of peer device indication
|
|
struct gapm_peer_name_ind
|
|
{
|
|
/// peer device bd address
|
|
bd_addr_t addr;
|
|
/// peer device address type
|
|
uint8_t addr_type;
|
|
/// peer device name length
|
|
uint8_t name_len;
|
|
/// peer device name
|
|
uint8_t name[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Generate a random address.
|
|
struct gapm_gen_rand_addr_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_GEN_RAND_ADDR: Generate a random address
|
|
uint8_t operation;
|
|
/// Dummy parameter used to store the prand part of the address
|
|
uint8_t prand[GAP_ADDR_PRAND_LEN];
|
|
/// Random address type @see gap_rnd_addr_type
|
|
/// - GAP_STATIC_ADDR: Static random address
|
|
/// - GAP_NON_RSLV_ADDR: Private non resolvable address
|
|
/// - GAP_RSLV_ADDR: Private resolvable address
|
|
uint8_t rnd_type;
|
|
};
|
|
|
|
/// Parameters of the @ref GAPM_USE_ENC_BLOCK_CMD message
|
|
struct gapm_use_enc_block_cmd
|
|
{
|
|
/// Command Operation Code (shall be GAPM_USE_ENC_BLOCK)
|
|
uint8_t operation;
|
|
/// Operand 1
|
|
uint8_t operand_1[GAP_KEY_LEN];
|
|
/// Operand 2
|
|
uint8_t operand_2[GAP_KEY_LEN];
|
|
};
|
|
|
|
/// Parameters of the @ref GAPM_USE_ENC_BLOCK_IND message
|
|
struct gapm_use_enc_block_ind
|
|
{
|
|
/// Result (16 bytes)
|
|
uint8_t result[GAP_KEY_LEN];
|
|
};
|
|
|
|
/// Parameters of the @ref GAPM_GEN_DH_KEY_CMD message
|
|
struct gapm_gen_dh_key_cmd
|
|
{
|
|
/// Command Operation Code (shall be GAPM_GEN_DH_KEY)
|
|
uint8_t operation;
|
|
/// X coordinate
|
|
uint8_t operand_1[GAP_P256_KEY_LEN];
|
|
/// Y coordinate
|
|
uint8_t operand_2[GAP_P256_KEY_LEN];
|
|
};
|
|
|
|
/// Parameters of the @ref GAPM_GEN_DH_KEY_IND message
|
|
struct gapm_gen_dh_key_ind
|
|
{
|
|
/// Result (32 bytes)
|
|
uint8_t result[GAP_P256_KEY_LEN];
|
|
};
|
|
|
|
/// Parameters of the @ref GAPM_GEN_RAND_NB_CMD message
|
|
struct gapm_gen_rand_nb_cmd
|
|
{
|
|
/// Command Operation Code (shall be GAPM_GEN_RAND_NB)
|
|
uint8_t operation;
|
|
};
|
|
|
|
/// Parameters of the @ref GAPM_GEN_RAND_NB_IND message
|
|
struct gapm_gen_rand_nb_ind
|
|
{
|
|
/// Generation Random Number (8 bytes)
|
|
rand_nb_t randnb;
|
|
};
|
|
|
|
/// Create new task for specific profile
|
|
struct gapm_profile_task_add_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_PROFILE_TASK_ADD: Add new profile task
|
|
uint8_t operation;
|
|
/// Security Level :
|
|
/// 7 6 5 4 3 2 1 0
|
|
/// +----+----+----+----+----+----+----+----+
|
|
/// | Reserved |DIS | AUTH |EKS | MI |
|
|
/// +----+----+----+----+----+----+----+----+
|
|
///
|
|
/// - MI: 1 - Application task is a Multi-Instantiated task, 0 - Mono-Instantiated
|
|
/// Only applies for service - Ignored by collectors:
|
|
/// - EKS: Service needs a 16 bytes encryption key
|
|
/// - AUTH: 0 - Disable, 1 - Enable, 2 - Unauth, 3 - Auth
|
|
/// - DIS: Disable the service
|
|
uint8_t sec_lvl;
|
|
/// Profile task identifier
|
|
uint16_t prf_task_id;
|
|
/// Application task number
|
|
uint16_t app_task;
|
|
/// Service start handle
|
|
/// Only applies for services - Ignored by collectors
|
|
/// 0: dynamically allocated in Attribute database
|
|
uint16_t start_hdl;
|
|
/// 32 bits value that contains value to initialize profile (database parameters, etc...)
|
|
uint32_t param[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Inform that profile task has been added.
|
|
struct gapm_profile_added_ind
|
|
{
|
|
/// Profile task identifier
|
|
uint16_t prf_task_id;
|
|
/// Profile task number allocated
|
|
uint16_t prf_task_nb;
|
|
/// Service start handle
|
|
/// Only applies for services - Ignored by collectors
|
|
uint16_t start_hdl;
|
|
};
|
|
|
|
/// Indicate that a message has been received on an unknown task
|
|
struct gapm_unknown_task_ind
|
|
{
|
|
/// Message identifier
|
|
uint16_t msg_id;
|
|
/// Task identifier
|
|
uint16_t task_id;
|
|
};
|
|
|
|
/// Indicates suggested default data length
|
|
struct gapm_sugg_dflt_data_len_ind
|
|
{
|
|
///Host's suggested value for the Controller's maximum transmitted number of payload octets
|
|
uint16_t suggted_max_tx_octets;
|
|
///Host's suggested value for the Controller's maximum packet transmission time
|
|
uint16_t suggted_max_tx_time;
|
|
};
|
|
|
|
/// Indicates maximum data length
|
|
struct gapm_max_data_len_ind
|
|
{
|
|
///Maximum number of payload octets that the local Controller supports for transmission
|
|
uint16_t suppted_max_tx_octets;
|
|
///Maximum time, in microseconds, that the local Controller supports for transmission
|
|
uint16_t suppted_max_tx_time;
|
|
///Maximum number of payload octets that the local Controller supports for reception
|
|
uint16_t suppted_max_rx_octets;
|
|
///Maximum time, in microseconds, that the local Controller supports for reception
|
|
uint16_t suppted_max_rx_time;
|
|
};
|
|
|
|
/// Register a LE Protocol/Service Multiplexer command
|
|
struct gapm_lepsm_register_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_LEPSM_REG: Register a LE Protocol/Service Multiplexer
|
|
uint8_t operation;
|
|
/// LE Protocol/Service Multiplexer
|
|
uint16_t le_psm;
|
|
/// Application task number
|
|
uint16_t app_task;
|
|
/// Security level
|
|
/// 7 6 5 4 3 2 1 0
|
|
/// +---+---+---+---+---+---+---+---+
|
|
/// |MI | RFU |EKS|SEC_LVL|
|
|
/// +---+---+---+---+---+---+---+---+
|
|
/// bit[0-1]: Security level requirement (0=NO_AUTH, 1=UNAUTH, 2=AUTH, 3=SEC_CON)
|
|
/// bit[2] : Encryption Key Size length must have 16 bytes
|
|
/// bit[7] : Does the application task is multi-instantiated or not
|
|
uint8_t sec_lvl;
|
|
};
|
|
|
|
/// Unregister a LE Protocol/Service Multiplexer command
|
|
struct gapm_lepsm_unregister_cmd
|
|
{
|
|
/// GAPM requested operation:
|
|
/// - GAPM_LEPSM_UNREG: Unregister a LE Protocol/Service Multiplexer
|
|
uint8_t operation;
|
|
/// LE Protocol/Service Multiplexer
|
|
uint16_t le_psm;
|
|
};
|
|
|
|
/// Create an advertising, a scanning, an initiating, a periodic synchonization activity command (common)
|
|
struct gapm_activity_create_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_CREATE_ADV_ACTIVITY: Create advertising activity
|
|
/// - GAPM_CREATE_SCAN_ACTIVITY: Create scanning activity
|
|
/// - GAPM_CREATE_INIT_ACTIVITY: Create initiating activity
|
|
/// - GAPM_CREATE_PERIOD_SYNC_ACTIVITY: Create periodic synchronization activity
|
|
uint8_t operation;
|
|
/// Own address type
|
|
uint8_t own_addr_type;
|
|
};
|
|
|
|
/// Create an advertising activity command
|
|
struct gapm_activity_create_adv_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_CREATE_ADV_ACTIVITY: Create advertising activity
|
|
uint8_t operation;
|
|
/// Own address type (@see gap_own_addr_type)
|
|
uint8_t own_addr_type;
|
|
/// Advertising parameters (optional, shall be present only if operation is GAPM_CREATE_ADV_ACTIVITY)
|
|
struct gap_adv_param adv_param;
|
|
};
|
|
|
|
/// Start a given activity command
|
|
struct gapm_activity_start_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_START_ACTIVITY: Start a given activity
|
|
uint8_t operation;
|
|
/// Activity identifier
|
|
uint8_t actv_idx;
|
|
/// Activity parameters
|
|
union
|
|
{
|
|
/// Additional advertising parameters (for advertising activity)
|
|
struct gap_adv_add_param adv_add_param;
|
|
/// Scan parameters (for scanning activity)
|
|
struct gap_scan_param scan_param;
|
|
/// Initiating parameters (for initiating activity)
|
|
struct gap_init_param init_param;
|
|
/// Periodic synchronization parameters (for periodic synchronization activity)
|
|
struct gap_period_sync_param period_sync_param;
|
|
} u_param;
|
|
};
|
|
|
|
/// Stop one or all activity(ies) command
|
|
struct gapm_activity_stop_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_STOP_ACTIVITY: Stop a given activity
|
|
/// - GAPM_STOP_ALL_ACTIVITIES: Stop all existing activities
|
|
uint8_t operation;
|
|
/// Activity identifier - used only if operation is GAPM_STOP_ACTIVITY
|
|
uint8_t actv_idx;
|
|
};
|
|
|
|
/// Delete one or all activity(ies) command
|
|
struct gapm_activity_delete_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_DELETE_ACTIVITY: Delete a given activity
|
|
/// - GAPM_DELETE_ALL_ACTIVITIES: Delete all existing activities
|
|
uint8_t operation;
|
|
/// Activity identifier - used only if operation is GAPM_STOP_ACTIVITY
|
|
uint8_t actv_idx;
|
|
};
|
|
|
|
/// Indicate creation of an activity
|
|
struct gapm_activity_created_ind
|
|
{
|
|
/// Activity identifier
|
|
uint8_t actv_idx;
|
|
/// Activity type (@see enum gap_actv_type)
|
|
uint8_t actv_type;
|
|
/// Selected TX power for advertising activity
|
|
int8_t tx_pwr;
|
|
};
|
|
|
|
/// Indicate that an activity has been stopped
|
|
struct gapm_activity_stopped_ind
|
|
{
|
|
/// Activity identifier
|
|
uint8_t actv_idx;
|
|
/// Activity type (@see enum gap_actv_type)
|
|
uint8_t actv_type;
|
|
/// Activity stop reason
|
|
uint8_t reason;
|
|
/// In case of periodic advertising, indicate if periodic advertising has been stoppped
|
|
uint8_t per_adv_stop;
|
|
};
|
|
|
|
/// Set advertising, scan response or periodic advertising data command
|
|
struct gapm_set_adv_data_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_SET_ADV_DATA: Set advertising data
|
|
/// - GAPM_SET_SCAN_RSP_DATA: Set scan response data
|
|
/// - GAPM_SET_PERIOD_ADV_DATA: Set periodic advertising data
|
|
uint8_t operation;
|
|
/// Activity identifier
|
|
uint8_t actv_idx;
|
|
/// Data length
|
|
uint16_t length;
|
|
/// Data
|
|
uint8_t data[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Indicate reception of scan request
|
|
struct gapm_scan_request_ind
|
|
{
|
|
/// Activity identifier
|
|
uint8_t actv_idx;
|
|
/// Transmitter device address
|
|
struct gap_bdaddr trans_addr;
|
|
};
|
|
|
|
/// Indicate reception of advertising, scan response or periodic advertising data
|
|
struct gapm_ext_adv_report_ind
|
|
{
|
|
/// Activity identifier
|
|
uint8_t actv_idx;
|
|
/// Bit field providing information about the received report (@see enum gap_adv_report_info)
|
|
/// - Bit 0-2: Report type (@see enum gap_adv_report_type)
|
|
/// - Bit 3: Report is complete
|
|
/// - Bit 4: Connectable advertising
|
|
/// - Bit 5: Scannable advertising
|
|
/// - Bit 6: Directed advertising
|
|
/// - Bit 7: Reserved for future use
|
|
uint8_t info;
|
|
/// Transmitter device address
|
|
struct gap_bdaddr trans_addr;
|
|
/// Target address (in case of a directed advertising report)
|
|
struct gap_bdaddr target_addr;
|
|
/// TX power (in dBm)
|
|
int8_t tx_pwr;
|
|
/// RSSI (between -127 and +20 dBm)
|
|
int8_t rssi;
|
|
/// Primary PHY on which advertising report has been received
|
|
uint8_t phy_prim;
|
|
/// Secondary PHY on which advertising report has been received
|
|
uint8_t phy_second;
|
|
/// Advertising SID
|
|
/// Valid only for periodic advertising report
|
|
uint8_t adv_sid;
|
|
/// Periodic advertising interval (in unit of 1.25ms, min is 7.5ms)
|
|
/// Valid only for periodic advertising report
|
|
uint16_t period_adv_intv;
|
|
/// Report length
|
|
uint16_t length;
|
|
/// Report
|
|
uint8_t data[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Indicate that synchronization has been established with a periodic advertiser
|
|
struct gapm_sync_established_ind
|
|
{
|
|
/// Activity identifier
|
|
uint8_t actv_idx;
|
|
/// PHY on which synchronization has been established (@see gap_phy_type)
|
|
uint8_t phy;
|
|
/// Periodic advertising interval (in unit of 1.25ms, min is 7.5ms)
|
|
uint16_t intv;
|
|
/// Advertising SID
|
|
uint8_t adv_sid;
|
|
/// Advertiser clock accuracy (@see enum gap_clock_accuracy)
|
|
uint8_t clk_acc;
|
|
/// Advertiser address
|
|
struct gap_bdaddr addr;
|
|
};
|
|
|
|
/// Read local or peer address
|
|
struct gapm_get_ral_addr_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_GET_RAL_LOC_ADDR: Set white list content
|
|
/// - GAPM_GET_RAL_PEER_ADDR: Set resolving list content
|
|
uint8_t operation;
|
|
/// Peer device identity
|
|
struct gap_bdaddr peer_identity;
|
|
};
|
|
|
|
/// Set content of either white list or resolving list or periodic advertiser list command (common part)
|
|
struct gapm_list_set_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_SET_WHITE_LIST: Set white list content
|
|
/// - GAPM_SET_RAL: Set resolving list content
|
|
/// - GAPM_SET_PAL: Set periodic advertiser list content
|
|
uint8_t operation;
|
|
/// Number of entries to be added in the list. 0 means that list content has to be cleared
|
|
uint8_t size;
|
|
};
|
|
|
|
/// Set content of white list
|
|
struct gapm_list_set_wl_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_SET_WHITE_LIST: Set white list content
|
|
uint8_t operation;
|
|
/// Number of entries to be added in the list. 0 means that list content has to be cleared
|
|
uint8_t size;
|
|
/// List of entries to be added in the list
|
|
struct gap_bdaddr wl_info[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Set content of resolving list command
|
|
struct gapm_list_set_ral_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_SET_RAL: Set resolving list content
|
|
uint8_t operation;
|
|
/// Number of entries to be added in the list. 0 means that list content has to be cleared
|
|
uint8_t size;
|
|
/// List of entries to be added in the list
|
|
struct gap_ral_dev_info ral_info[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Set content of periodic advertiser list command
|
|
struct gapm_list_set_pal_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_SET_PAL: Set periodic advertiser list content
|
|
uint8_t operation;
|
|
/// Number of entries to be added in the list. 0 means that list content has to be cleared
|
|
uint8_t size;
|
|
/// List of entries to be added in the list
|
|
struct gap_period_adv_addr_cfg pal_info[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// White List Size indication event - DEPRECATED
|
|
struct gapm_white_list_size_ind
|
|
{
|
|
/// White list size
|
|
uint8_t size;
|
|
};
|
|
|
|
/// Resolving List Size indication event - DEPRECATED
|
|
struct gapm_ral_size_ind
|
|
{
|
|
/// Resolving list size
|
|
uint8_t size;
|
|
};
|
|
|
|
/// List Size indication event
|
|
struct gapm_list_size_ind
|
|
{
|
|
/// Operation code, indicate list for which size has been read
|
|
uint8_t operation;
|
|
/// List size
|
|
uint8_t size;
|
|
};
|
|
|
|
/// Maximum advertising data length indication event
|
|
struct gapm_max_adv_data_len_ind
|
|
{
|
|
/// Maximum advertising data length supported by controller
|
|
uint16_t length;
|
|
};
|
|
|
|
/// Number of available advertising sets indication event
|
|
struct gapm_nb_adv_sets_ind
|
|
{
|
|
/// Number of available advertising sets
|
|
uint8_t nb_adv_sets;
|
|
};
|
|
|
|
/// Request to renew all currently used random private addresses (non-resolvable or resolvable)
|
|
/// For internal use only
|
|
struct gapm_actv_addr_renew_cmd
|
|
{
|
|
/// GAPM request operation:
|
|
/// - GAPM_RENEW_ADDR: Renew random private addresses
|
|
uint8_t operation;
|
|
/// Activity index, sued by GAPM state machine in order to remind for which activity
|
|
/// a new address has been generated
|
|
uint8_t actv_idx;
|
|
};
|
|
|
|
/*
|
|
* MACROS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* GLOBAL VARIABLE DECLARATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* FUNCTION DECLARATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
int hci_no_operation_cmd_cmp_evt_handler(uint16_t opcode, void const *param);
|
|
|
|
/// @} GAPM_TASK
|
|
|
|
#endif /* _GAPM_TASK_H_ */
|