pinebuds/services/ble_stack/hl/api/gapc_task.h
2022-08-15 17:20:27 +08:00

959 lines
26 KiB
C

#ifndef _GAPC_TASK_H_
#define _GAPC_TASK_H_
/**
****************************************************************************************
* @addtogroup GAPC_TASK Generic Access Profile Controller Task
* @ingroup GAPC
* @brief Handles ALL messages to/from GAP Controller block.
*
* It handles messages from lower and higher layers related to an ongoing connection.
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "rwip_task.h" // Task definitions
#include "gap.h"
#include <stdbool.h>
/*
* MACROS
****************************************************************************************
*/
/*
* DEFINES
****************************************************************************************
*/
/// GAP Controller Task messages
enum gapc_msg_id
{
/* Default event */
/// Command Complete event
GAPC_CMP_EVT = TASK_FIRST_MSG(TASK_ID_GAPC),
/* Connection state information */
/// Indicate that a connection has been established
GAPC_CONNECTION_REQ_IND,
/// Set specific link data configuration.
GAPC_CONNECTION_CFM,
/// Indicate that a link has been disconnected
GAPC_DISCONNECT_IND,
/* Link management command */
/// Request disconnection of current link command.
GAPC_DISCONNECT_CMD,
/* Peer device info */
/// Retrieve information command
GAPC_GET_INFO_CMD,
/// Peer device attribute DB info such as Device Name, Appearance or Slave Preferred Parameters
GAPC_PEER_ATT_INFO_IND,
/// Indication of peer version info
GAPC_PEER_VERSION_IND,
/// Indication of peer features info
GAPC_PEER_FEATURES_IND,
/// Indication of ongoing connection RSSI
GAPC_CON_RSSI_IND,
/* Device Name Management */
/// Peer device request local device info such as name, appearance or slave preferred parameters
GAPC_GET_DEV_INFO_REQ_IND,
/// Send requested info to peer device
GAPC_GET_DEV_INFO_CFM,
/// Peer device request to modify local device info such as name or appearance
GAPC_SET_DEV_INFO_REQ_IND,
/// Local device accept or reject device info modification
GAPC_SET_DEV_INFO_CFM,
/* Connection parameters update */
/// Perform update of connection parameters command
GAPC_PARAM_UPDATE_CMD,
/// Request of updating connection parameters indication
GAPC_PARAM_UPDATE_REQ_IND,
/// Master confirm or not that parameters proposed by slave are accepted or not
GAPC_PARAM_UPDATE_CFM,
/// Connection parameters updated indication
GAPC_PARAM_UPDATED_IND,
/* Bonding procedure */
/// Start Bonding command procedure
GAPC_BOND_CMD,
/// Bonding requested by peer device indication message.
GAPC_BOND_REQ_IND,
/// Confirm requested bond information.
GAPC_BOND_CFM,
/// Bonding information indication message
GAPC_BOND_IND,
/* Encryption procedure */
/// Start Encryption command procedure
GAPC_ENCRYPT_CMD,
/// Encryption requested by peer device indication message.
GAPC_ENCRYPT_REQ_IND,
/// Confirm requested Encryption information.
GAPC_ENCRYPT_CFM,
/// Encryption information indication message
GAPC_ENCRYPT_IND,
/* Security request procedure */
/// Start Security Request command procedure
GAPC_SECURITY_CMD,
/// Security requested by peer device indication message
GAPC_SECURITY_IND,
/* Signature procedure */
/// Indicate the current sign counters to the application
GAPC_SIGN_COUNTER_IND,
/* Device information */
/// Indication of ongoing connection Channel Map
GAPC_CON_CHANNEL_MAP_IND,
/* Deprecated */
/// Deprecated messages
GAPC_DEPRECATED_0,
GAPC_DEPRECATED_1,
GAPC_DEPRECATED_2,
GAPC_DEPRECATED_3,
GAPC_DEPRECATED_4,
GAPC_DEPRECATED_5,
GAPC_DEPRECATED_6,
GAPC_DEPRECATED_7,
GAPC_DEPRECATED_8,
GAPC_DEPRECATED_9,
/* LE Ping */
/// Update LE Ping timeout value
GAPC_SET_LE_PING_TO_CMD,
/// LE Ping timeout indication
GAPC_LE_PING_TO_VAL_IND,
/// LE Ping timeout expires indication
GAPC_LE_PING_TO_IND,
/* LE Data Length extension*/
/// LE Set Data Length Command
GAPC_SET_LE_PKT_SIZE_CMD,
/// LE Set Data Length Indication
GAPC_LE_PKT_SIZE_IND,
/* Secure Connections */
/// Request to inform the remote device when keys have been entered or erased
GAPC_KEY_PRESS_NOTIFICATION_CMD,
/// Indication that a KeyPress has been performed on the peer device.
GAPC_KEY_PRESS_NOTIFICATION_IND,
/* LE PHY update */
/// Set the PHY configuration for current active link
GAPC_SET_PHY_CMD,
/// Active link PHY configuration. Triggered when configuration is read or during an update.
GAPC_LE_PHY_IND,
// ---------------------- INTERNAL API ------------------------
/* Internal messages for timer events, not part of API*/
/// Signature procedure
GAPC_SIGN_CMD,
/// Signature result
GAPC_SIGN_IND,
/// Parameter update procedure timeout indication
GAPC_PARAM_UPDATE_TO_IND,
/// Pairing procedure timeout indication
GAPC_SMP_TIMEOUT_TIMER_IND,
/// Pairing repeated attempts procedure timeout indication
GAPC_SMP_REP_ATTEMPTS_TIMER_IND,
};
/// request operation type - application interface
enum gapc_operation
{
/* Operation Flags */
/* No Operation (if nothing has been requested) */
/* ************************************************ */
/// No operation
GAPC_NO_OP = 0x00,
/* Connection management */
/// Disconnect link
GAPC_DISCONNECT,
/* Connection information */
/// Retrieve name of peer device.
GAPC_GET_PEER_NAME,
/// Retrieve peer device version info.
GAPC_GET_PEER_VERSION,
/// Retrieve peer device features.
GAPC_GET_PEER_FEATURES,
/// Get Peer device appearance
GAPC_GET_PEER_APPEARANCE,
/// Get Peer device Slaved Preferred Parameters
GAPC_GET_PEER_SLV_PREF_PARAMS,
/// Retrieve connection RSSI.
GAPC_GET_CON_RSSI,
/// Retrieve Connection Channel MAP.
GAPC_GET_CON_CHANNEL_MAP,
/* Connection parameters update */
/// Perform update of connection parameters.
GAPC_UPDATE_PARAMS,
/* Security procedures */
/// Start bonding procedure.
GAPC_BOND,
/// Start encryption procedure.
GAPC_ENCRYPT,
/// Start security request procedure
GAPC_SECURITY_REQ,
/* Deprecated */
/// Deprecated operation
GAPC_OP_DEPRECATED_0,
GAPC_OP_DEPRECATED_1,
GAPC_OP_DEPRECATED_2,
GAPC_OP_DEPRECATED_3,
GAPC_OP_DEPRECATED_4,
/* LE Ping*/
/// get timer timeout value
GAPC_GET_LE_PING_TO,
/// set timer timeout value
GAPC_SET_LE_PING_TO,
/* LE Data Length extension*/
/// LE Set Data Length
GAPC_SET_LE_PKT_SIZE,
/* Central Address resolution supported*/
GAPC_GET_ADDR_RESOL_SUPP,
/* Secure Connections */
/// Request to inform the remote device when keys have been entered or erased
GAPC_KEY_PRESS_NOTIFICATION,
/* LE PHY update */
/// Set the PHY configuration for current active link
GAPC_SET_PHY,
/// Retrieve PHY configuration of active link
GAPC_GET_PHY,
// ---------------------- INTERNAL API ------------------------
/* Packet signature */
/// sign an attribute packet
GAPC_SIGN_PACKET,
/// Verify signature or an attribute packet
GAPC_SIGN_CHECK,
};
/// Bond event type.
enum gapc_bond
{
/// Bond Pairing request
GAPC_PAIRING_REQ,
/// Respond to Pairing request
GAPC_PAIRING_RSP,
/// Pairing Finished information
GAPC_PAIRING_SUCCEED,
/// Pairing Failed information
GAPC_PAIRING_FAILED,
/// Used to retrieve pairing Temporary Key
GAPC_TK_EXCH,
/// Used for Identity Resolving Key exchange
GAPC_IRK_EXCH,
/// Used for Connection Signature Resolving Key exchange
GAPC_CSRK_EXCH,
/// Used for Long Term Key exchange
GAPC_LTK_EXCH,
/// Bond Pairing request issue, Repeated attempt
GAPC_REPEATED_ATTEMPT,
/// Out of Band - exchange of confirm and rand.
GAPC_OOB_EXCH,
/// Numeric Comparison - Exchange of Numeric Value -
GAPC_NC_EXCH
};
/// List of device info that should be provided by application
enum gapc_dev_info
{
/// Device Name
GAPC_DEV_NAME,
/// Device Appearance Icon
GAPC_DEV_APPEARANCE,
/// Device Slave preferred parameters
GAPC_DEV_SLV_PREF_PARAMS,
/// Device Central address resolution
GAPC_DEV_CTL_ADDR_RESOL,
/// maximum device info parameter
GAPC_DEV_INFO_MAX,
};
/// List of features available on a device
enum gapc_features_list
{
/// LE encryption
GAPC_ENCRYPT_FEAT_MASK = (1 << 0),
/// Connection Parameters Request Procedure
GAPC_CONN_PARAM_REQ_FEAT_MASK = (1 << 1),
/// Extended Reject Indication
GAPC_EXT_REJECT_IND_FEAT_MASK = (1 << 2),
/// Slave-initiated Features Exchange
GAPC_SLAVE_FEAT_EXCH_FEAT_MASK = (1 << 3),
/// LE ping
GAPC_LE_PING_FEAT_MASK = (1 << 4),
/// data packet length extension
GAPC_EXT_DATA_LEN_MASK = (1 << 5),
/// LL privacy
GAPC_LL_PRIVACY_MASK = (1 << 6),
/// Extended Scanner Filter Policies
GAPC_EXT_SCANNER_FILTER_POLICIES_MASK = (1 << 7),
};
/*
* TYPE DEFINITIONS
****************************************************************************************
*/
/// Operation command structure in order to keep requested operation.
struct gapc_operation_cmd
{
/// GAP request type
uint8_t operation;
};
/// Command complete event data structure
struct gapc_cmp_evt
{
/// GAP request type
uint8_t operation;
/// Status of the request
uint8_t status;
};
/// Indicate that a connection has been established
struct gapc_connection_req_ind
{
/// Connection handle
uint16_t conhdl;
/// Connection interval
uint16_t con_interval;
/// Connection latency
uint16_t con_latency;
/// Link supervision timeout
uint16_t sup_to;
/// Clock accuracy
uint8_t clk_accuracy;
/// Peer address type
uint8_t peer_addr_type;
/// Peer BT address
bd_addr_t peer_addr;
};
/// Set specific link data configuration.
struct gapc_connection_cfm
{
/// Local CSRK value
struct gap_sec_key lcsrk;
/// Local signature counter value
uint32_t lsign_counter;
/// Remote CSRK value
struct gap_sec_key rcsrk;
/// Remote signature counter value
uint32_t rsign_counter;
/// Authentication (@see gap_auth)
uint8_t auth;
/// Service Changed Indication enabled
uint8_t svc_changed_ind_enable;
/// LTK exchanged during pairing.
bool ltk_present;
};
/// Request disconnection of current link command.
struct gapc_disconnect_cmd
{
/// GAP request type:
/// - GAPC_DISCONNECT: Disconnect link.
uint8_t operation;
/// Reason of disconnection
uint8_t reason;
};
/// Indicate that a link has been disconnected
struct gapc_disconnect_ind
{
/// Connection handle
uint16_t conhdl;
/// Reason of disconnection
uint8_t reason;
};
/// Retrieve information command
struct gapc_get_info_cmd
{
/// GAP request type:
/// - GAPC_GET_PEER_NAME: Retrieve name of peer device.
/// - GAPC_GET_PEER_VERSION: Retrieve peer device version info.
/// - GAPC_GET_PEER_FEATURES: Retrieve peer device features.
/// - GAPC_GET_CON_RSSI: Retrieve connection RSSI.
/// - GAPC_GET_CON_CHANNEL_MAP: Retrieve Connection Channel MAP.
/// - GAPC_GET_PEER_APPEARANCE: Get Peer device appearance
/// - GAPC_GET_PEER_SLV_PREF_PARAMS: Get Peer device Slaved Preferred Parameters
/// - GAPC_GET_ADDR_RESOL_SUPP: Address Resolution Supported
/// - GAPC_GET_LE_PING_TIMEOUT: Retrieve LE Ping Timeout Value
uint8_t operation;
};
/// device information data
union gapc_dev_info_val
{
/// Device name
struct gap_dev_name name;
/// Appearance Icon
uint16_t appearance;
/// Slave preferred parameters
struct gap_slv_pref slv_params;
/// Central address resolution
uint8_t cnt_addr_resol;
};
/// Peer device attribute DB info such as Device Name, Appearance or Slave Preferred Parameters
struct gapc_peer_att_info_ind
{
/// Requested information
/// - GAPC_DEV_NAME: Device Name
/// - GAPC_DEV_APPEARANCE: Device Appearance Icon
/// - GAPC_DEV_SLV_PREF_PARAMS: Device Slave preferred parameters
/// - GAPC_GET_ADDR_RESOL_SUPP: Address resolution supported
uint8_t req;
/// Attribute handle
uint16_t handle;
/// device information data
union gapc_dev_info_val info;
};
/// Indication of peer version info
struct gapc_peer_version_ind
{
/// Manufacturer name
uint16_t compid;
/// LMP subversion
uint16_t lmp_subvers;
/// LMP version
uint8_t lmp_vers;
};
/// Indication of peer features info
struct gapc_peer_features_ind
{
/// 8-byte array for LE features
uint8_t features[GAP_LE_FEATS_LEN];
};
/// Indication of ongoing connection RSSI
struct gapc_con_rssi_ind
{
/// RSSI value
uint8_t rssi;
};
/// Indication of ongoing connection Channel Map
struct gapc_con_channel_map_ind
{
/// channel map value
le_chnl_map_t ch_map;
};
/// Sign counter value changed due to packet signing or signature verification.
struct gapc_sign_counter_updated_ind
{
/// New Local signature counter value
uint32_t lsign_counter;
/// New Remote signature counter value
uint32_t rsign_counter;
};
/// Indication of LE Ping
struct gapc_le_ping_to_val_ind
{
///Authenticated payload timeout
uint16_t timeout;
};
/// Peer device request local device info such as name, appearance or slave preferred parameters
struct gapc_get_dev_info_req_ind
{
/// Requested information
/// - GAPC_DEV_NAME: Device Name
/// - GAPC_DEV_APPEARANCE: Device Appearance Icon
/// - GAPC_DEV_SLV_PREF_PARAMS: Device Slave preferred parameters
uint8_t req;
};
/// Send requested info to peer device
struct gapc_get_dev_info_cfm
{
/// Requested information
/// - GAPC_DEV_NAME: Device Name
/// - GAPC_DEV_APPEARANCE: Device Appearance Icon
/// - GAPC_DEV_SLV_PREF_PARAMS: Device Slave preferred parameters
uint8_t req;
/// Peer device information data
union gapc_dev_info_val info;
};
/// Peer device request to modify local device info such as name or appearance
struct gapc_set_dev_info_req_ind
{
/// Requested information
/// - GAPC_DEV_NAME: Device Name
/// - GAPC_DEV_APPEARANCE: Device Appearance Icon
uint8_t req;
/// device information data
union gapc_set_dev_info
{
/// Device name
struct gap_dev_name name;
/// Appearance Icon
uint16_t appearance;
} info;
};
/// Local device accept or reject device info modification
struct gapc_set_dev_info_cfm
{
/// Requested information
/// - GAPC_DEV_NAME: Device Name
/// - GAPC_DEV_APPEARANCE: Device Appearance Icon
uint8_t req;
/// Status code used to know if requested has been accepted or not
uint8_t status;
};
/// Connection Parameter used to update connection parameters
struct gapc_conn_param
{
/// Connection interval minimum
uint16_t intv_min;
/// Connection interval maximum
uint16_t intv_max;
/// Latency
uint16_t latency;
/// Supervision timeout
uint16_t time_out;
};
/// Perform update of connection parameters command
struct gapc_param_update_cmd
{
/// GAP request type:
/// - GAPC_UPDATE_PARAMS: Perform update of connection parameters.
uint8_t operation;
/// Internal parameter used to manage internally l2cap packet identifier for signaling
uint8_t pkt_id;
/// Connection interval minimum
uint16_t intv_min;
/// Connection interval maximum
uint16_t intv_max;
/// Latency
uint16_t latency;
/// Supervision timeout
uint16_t time_out;
/// Minimum Connection Event Duration
uint16_t ce_len_min;
/// Maximum Connection Event Duration
uint16_t ce_len_max;
};
/// Request of updating connection parameters indication
struct gapc_param_update_req_ind
{
/// Connection interval minimum
uint16_t intv_min;
/// Connection interval maximum
uint16_t intv_max;
/// Latency
uint16_t latency;
/// Supervision timeout
uint16_t time_out;
};
/// Connection parameters updated indication
struct gapc_param_updated_ind
{
///Connection interval value
uint16_t con_interval;
///Connection latency value
uint16_t con_latency;
///Supervision timeout
uint16_t sup_to;
};
/// Master confirm or not that parameters proposed by slave are accepted or not
struct gapc_param_update_cfm
{
/// True to accept slave connection parameters, False else.
bool accept;
/// Minimum Connection Event Duration
uint16_t ce_len_min;
/// Maximum Connection Event Duration
uint16_t ce_len_max;
};
/// Pairing parameters
struct gapc_pairing
{
/// IO capabilities (@see gap_io_cap)
uint8_t iocap;
/// OOB information (@see gap_oob)
uint8_t oob;
/// Authentication (@see gap_auth)
/// Note in BT 4.1 the Auth Field is extended to include 'Key Notification' and
/// and 'Secure Connections'.
uint8_t auth;
/// Encryption key size (7 to 16)
uint8_t key_size;
///Initiator key distribution (@see gap_kdist)
uint8_t ikey_dist;
///Responder key distribution (@see gap_kdist)
uint8_t rkey_dist;
/// Device security requirements (minimum security level). (@see gap_sec_req)
uint8_t sec_req;
};
/// Long Term Key information
struct gapc_ltk
{
/// Long Term Key
struct gap_sec_key ltk;
/// Encryption Diversifier
uint16_t ediv;
/// Random Number
rand_nb_t randnb;
/// Encryption key size (7 to 16)
uint8_t key_size;
uint8_t isLocal;
};
/// Out of Band Information
struct gapc_oob
{
/// Confirm Value
uint8_t conf[GAP_KEY_LEN];
/// Random Number
uint8_t rand[GAP_KEY_LEN];
};
struct gapc_nc
{
uint8_t value[4];
};
/// Identity Resolving Key information
struct gapc_irk
{
/// Identity Resolving Key
struct gap_sec_key irk;
/// Device BD Identity Address
struct gap_bdaddr addr;
};
/// Start Bonding command procedure
struct gapc_bond_cmd
{
/// GAP request type:
/// - GAPC_BOND: Start bonding procedure.
uint8_t operation;
/// Pairing information
struct gapc_pairing pairing;
};
/// Bonding requested by peer device indication message.
struct gapc_bond_req_ind
{
/// Bond request type (@see gapc_bond)
uint8_t request;
/// Bond procedure requested information data
union gapc_bond_req_data
{
/// Authentication level (@see gap_auth) (if request = GAPC_PAIRING_REQ)
uint8_t auth_req;
/// LTK Key Size (if request = GAPC_LTK_EXCH)
uint8_t key_size;
/// Device IO used to get TK: (if request = GAPC_TK_EXCH)
/// - GAP_TK_OOB: TK get from out of band method
/// - GAP_TK_DISPLAY: TK generated and shall be displayed by local device
/// - GAP_TK_KEY_ENTRY: TK shall be entered by user using device keyboard
uint8_t tk_type;
/// Addition OOB Data for the OOB Conf and Rand values
struct gapc_oob oob_data;
/// Numeric Comparison Data
struct gapc_nc nc_data;
} data;
};
/// Confirm requested bond information.
struct gapc_bond_cfm
{
/// Bond request type (@see gapc_bond)
uint8_t request;
/// Request accepted
uint8_t accept;
/// Bond procedure information data
union gapc_bond_cfm_data
{
/// Pairing Features (request = GAPC_PAIRING_RSP)
struct gapc_pairing pairing_feat;
/// LTK (request = GAPC_LTK_EXCH)
struct gapc_ltk ltk;
/// CSRK (request = GAPC_CSRK_EXCH)
struct gap_sec_key csrk;
/// TK (request = GAPC_TK_EXCH)
struct gap_sec_key tk;
/// IRK (request = GAPC_IRK_EXCH)
struct gapc_irk irk;
/// OOB Confirm and Random from the peer (request = GAPC_OOB_EXCH)
struct gapc_oob oob;
} data;
};
/**
* Authentication information
*/
struct gapc_bond_auth
{
/// Authentication information (@see gap_auth)
uint8_t info;
/// LTK exchanged during pairing.
bool ltk_present;
};
/// Bonding information indication message
struct gapc_bond_ind
{
/// Bond information type (@see gapc_bond)
uint8_t info;
/// Bond procedure information data
union gapc_bond_data
{
/// Authentication information (@see gap_auth)
/// (if info = GAPC_PAIRING_SUCCEED)
struct gapc_bond_auth auth;
/// Pairing failed reason (if info = GAPC_PAIRING_FAILED)
uint8_t reason;
/// Long Term Key information (if info = GAPC_LTK_EXCH)
struct gapc_ltk ltk;
/// Identity Resolving Key information (if info = GAPC_IRK_EXCH)
struct gapc_irk irk;
/// Connection Signature Resolving Key information (if info = GAPC_CSRK_EXCH)
struct gap_sec_key csrk;
} data;
};
/// Start Encryption command procedure
struct gapc_encrypt_cmd
{
/// GAP request type:
/// - GAPC_ENCRYPT: Start encryption procedure.
uint8_t operation;
/// Long Term Key information
struct gapc_ltk ltk;
};
/// Encryption requested by peer device indication message.
struct gapc_encrypt_req_ind
{
/// Encryption Diversifier
uint16_t ediv;
/// Random Number
rand_nb_t rand_nb;
};
/// Confirm requested Encryption information.
struct gapc_encrypt_cfm
{
/// Indicate if a LTK has been found for the peer device
uint8_t found;
/// Long Term Key
struct gap_sec_key ltk;
/// LTK Key Size
uint8_t key_size;
};
/// Encryption information indication message
struct gapc_encrypt_ind
{
/// Authentication level (@see gap_auth)
uint8_t auth;
};
/// Start Security Request command procedure
struct gapc_security_cmd
{
/// GAP request type:
/// - GAPC_SECURITY_REQ: Start security request procedure
uint8_t operation;
/// Authentication level (@see gap_auth)
uint8_t auth;
};
/// Security requested by peer device indication message
struct gapc_security_ind
{
/// Authentication level (@see gap_auth)
uint8_t auth;
};
/// Parameters of the @ref GAPC_SIGN_COUNTER_IND message
struct gapc_sign_counter_ind
{
/// Local SignCounter value
uint32_t local_sign_counter;
/// Peer SignCounter value
uint32_t peer_sign_counter;
};
/// Parameters of the @ref GAPC_SET_LE_PING_TO_CMD message
struct gapc_set_le_ping_to_cmd
{
/// GAP request type:
/// - GAPC_SET_LE_PING_TO : Set the LE Ping timeout value
uint8_t operation;
/// Authenticated payload timeout
uint16_t timeout;
};
/// Parameters of the @ref GAPC_SET_LE_PKT_SIZE_CMD message
struct gapc_set_le_pkt_size_cmd
{
/// GAP request type:
/// - GAPC_SET_LE_PKT_SIZE : Set the LE Data length value
uint8_t operation;
///Preferred maximum number of payload octets that the local Controller should include
///in a single Link Layer Data Channel PDU.
uint16_t tx_octets;
///Preferred maximum number of microseconds that the local Controller should use to transmit
///a single Link Layer Data Channel PDU
uint16_t tx_time;
};
/// Parameters of the @ref GAPC_LE_PKT_SIZE_IND message
struct gapc_le_pkt_size_ind
{
///The maximum number of payload octets in TX
uint16_t max_tx_octets;
///The maximum time that the local Controller will take to TX
uint16_t max_tx_time;
///The maximum number of payload octets in RX
uint16_t max_rx_octets;
///The maximum time that the local Controller will take to RX
uint16_t max_rx_time;
};
/// Parameters of the @ref GAPC_KEY_PRESS_NOTIFICATION_CMD message
struct gapc_key_press_notif_cmd
{
/// GAP request type:
/// - GAPC_KEY_PRESS_NOTIFICATION_CMD : Inform the remote device when keys have been entered or erased
uint8_t operation;
/// notification type
uint8_t notification_type;
};
/// Parameters of the @ref GAPC_KEY_PRESS_NOTIFICATION_IND message
struct gapc_key_press_notif_ind
{
/// notification type
uint8_t notification_type;
};
/// Set the PHY configuration for current active link
struct gapc_set_phy_cmd
{
/// GAP request type:
/// - GAPC_SET_PHY : Set the PHY configuration for current active link
uint8_t operation;
/// Supported LE PHY rates for data transmission (@see enum gap_rate)
uint8_t tx_rates;
/// Supported LE PHY rates for data reception (@see enum gap_rate)
uint8_t rx_rates;
};
/// Active link PHY configuration. Triggered when configuration is read or during an update.
struct gapc_le_phy_ind
{
/// LE PHY rate for data transmission (@see enum gap_rate)
uint8_t tx_rate;
/// LE PHY rate for data reception (@see enum gap_rate)
uint8_t rx_rate;
};
/// Parameters of the @ref GAPC_SIGN_CMD message
struct gapc_sign_cmd
{
/// GAP request type:
/// - GAPC_SIGN_PACKET: Sign an attribute packet
/// - GAPC_SIGN_CHECK: Verify signature or an attribute packet
uint8_t operation;
/// Data PDU length (Bytes)
uint16_t byte_len;
/// Data PDU + SignCounter if generation, Data PDU + SignCounter + MAC if verification
uint8_t msg[__ARRAY_EMPTY];
};
/// Parameters of the @ref GAPC_SIGN_IND message
struct gapc_sign_ind
{
/// GAP request type:
/// - GAPC_SIGN_PACKET: Sign an attribute packet
/// - GAPC_SIGN_CHECK: Verify signature or an attribute packet
uint8_t operation;
/// Data PDU length (Bytes)
uint16_t byte_len;
/// Data PDU + SignCounter + MAC
uint8_t signed_msg[__ARRAY_EMPTY];
};
/// @} GAPC_TASK
#endif /* _GAPC_TASK_H_ */