#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 /* * 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_ */