diff options
Diffstat (limited to 'platform/atm2/ATM22xx-x1x/include/ble/co_lmp.h')
-rw-r--r-- | platform/atm2/ATM22xx-x1x/include/ble/co_lmp.h | 1555 |
1 files changed, 1555 insertions, 0 deletions
diff --git a/platform/atm2/ATM22xx-x1x/include/ble/co_lmp.h b/platform/atm2/ATM22xx-x1x/include/ble/co_lmp.h new file mode 100644 index 0000000..2eac206 --- /dev/null +++ b/platform/atm2/ATM22xx-x1x/include/ble/co_lmp.h @@ -0,0 +1,1555 @@ +/** + **************************************************************************************** + * + * @file co_lmp.h + * + * @brief This file contains the HCI Bluetooth defines, enumerations and structures + * definitions for use by all modules in RW stack. + * + * Copyright (C) RivieraWaves 2009-2015 + * + **************************************************************************************** + */ + +#ifndef CO_LMP_H_ +#define CO_LMP_H_ + +/** + **************************************************************************************** + * @addtogroup CO_BT + * @{ + **************************************************************************************** + */ + + +/* + * INCLUDE FILES + **************************************************************************************** + */ +#include "co_bt.h" +/* + * DEFINES + **************************************************************************************** + */ + +/// LMP Opcodes +/*@TRACE*/ +enum co_lmp_opcode +{ + LMP_NAME_REQ_OPCODE = 1 , + LMP_NAME_RES_OPCODE = 2 , + LMP_ACCEPTED_OPCODE = 3 , + LMP_NOT_ACCEPTED_OPCODE = 4 , + LMP_CLK_OFF_REQ_OPCODE = 5 , + LMP_CLK_OFF_RES_OPCODE = 6 , + LMP_DETACH_OPCODE = 7 , + LMP_INRAND_OPCODE = 8 , + LMP_COMBKEY_OPCODE = 9 , + LMP_UNITKEY_OPCODE = 10 , + LMP_AURAND_OPCODE = 11 , + LMP_SRES_OPCODE = 12 , + LMP_TEMPRAND_OPCODE = 13 , + LMP_TEMPKEY_OPCODE = 14 , + LMP_ENC_MODE_REQ_OPCODE = 15 , + LMP_ENC_KEY_SIZE_REQ_OPCODE = 16 , + LMP_START_ENC_REQ_OPCODE = 17 , + LMP_STOP_ENC_REQ_OPCODE = 18 , + LMP_SWITCH_REQ_OPCODE = 19 , + LMP_HOLD_OPCODE = 20 , + LMP_HOLD_REQ_OPCODE = 21 , + LMP_SNIFF_REQ_OPCODE = 23 , + LMP_UNSNIFF_REQ_OPCODE = 24 , + LMP_PARK_REQ_OPCODE = 25 , + LMP_SET_BSWIN_OPCODE = 27 , + LMP_MODIF_BEACON_OPCODE = 28 , + LMP_UNPARK_BD_REQ_OPCODE = 29 , + LMP_UNPARK_PM_REQ_OPCODE = 30 , + LMP_INCR_PWR_REQ_OPCODE = 31 , + LMP_DECR_PWR_REQ_OPCODE = 32 , + LMP_MAX_PWR_OPCODE = 33 , + LMP_MIN_PWR_OPCODE = 34 , + LMP_AUTO_RATE_OPCODE = 35 , + LMP_PREF_RATE_OPCODE = 36 , + LMP_VER_REQ_OPCODE = 37 , + LMP_VER_RES_OPCODE = 38 , + LMP_FEATS_REQ_OPCODE = 39 , + LMP_FEATS_RES_OPCODE = 40 , + LMP_QOS_OPCODE = 41 , + LMP_QOS_REQ_OPCODE = 42 , + LMP_SCO_LINK_REQ_OPCODE = 43 , + LMP_RMV_SCO_LINK_REQ_OPCODE = 44 , + LMP_MAX_SLOT_OPCODE = 45 , + LMP_MAX_SLOT_REQ_OPCODE = 46 , + LMP_TIMING_ACCU_REQ_OPCODE = 47 , + LMP_TIMING_ACCU_RES_OPCODE = 48 , + LMP_SETUP_CMP_OPCODE = 49 , + LMP_USE_SEMI_PERM_KEY_OPCODE = 50 , + LMP_HOST_CON_REQ_OPCODE = 51 , + LMP_SLOT_OFF_OPCODE = 52 , + LMP_PAGE_MODE_REQ_OPCODE = 53 , + LMP_PAGE_SCAN_MODE_REQ_OPCODE = 54 , + LMP_SUPV_TO_OPCODE = 55 , + LMP_TEST_ACTIVATE_OPCODE = 56 , + LMP_TEST_CTRL_OPCODE = 57 , + LMP_ENC_KEY_SIZE_MASK_REQ_OPCODE = 58 , + LMP_ENC_KEY_SIZE_MASK_RES_OPCODE = 59 , + LMP_SET_AFH_OPCODE = 60 , + LMP_ENCAPS_HDR_OPCODE = 61 , + LMP_ENCAPS_PAYL_OPCODE = 62 , + LMP_SP_CFM_OPCODE = 63 , + LMP_SP_NB_OPCODE = 64 , + LMP_DHKEY_CHK_OPCODE = 65 , + LMP_PAUSE_ENC_AES_REQ_OPCODE = 66 , + LMP_ESC1_OPCODE = 124, + LMP_ESC2_OPCODE = 125, + LMP_ESC3_OPCODE = 126, + LMP_ESC4_OPCODE = 127, +}; + +/// LMP Escape 4 Extended Opcodes +enum co_lmp_ext_opcode +{ + LMP_ACCEPTED_EXT_EXTOPCODE = 1, + LMP_NOT_ACCEPTED_EXT_EXTOPCODE = 2, + LMP_FEATS_REQ_EXT_EXTOPCODE = 3, + LMP_FEATS_RES_EXT_EXTOPCODE = 4, + LMP_CLK_ADJ_EXTOPCODE = 5, + LMP_CLK_ADJ_ACK_EXTOPCODE = 6, + LMP_CLK_ADJ_REQ_EXTOPCODE = 7, + LMP_PKT_TYPE_TBL_REQ_EXTOPCODE = 11, + LMP_ESCO_LINK_REQ_EXTOPCODE = 12, + LMP_RMV_ESCO_LINK_REQ_EXTOPCODE = 13, + LMP_CH_CLASS_REQ_EXTOPCODE = 16, + LMP_CH_CLASS_EXTOPCODE = 17, + LMP_SSR_REQ_EXTOPCODE = 21, + LMP_SSR_RES_EXTOPCODE = 22, + LMP_PAUSE_ENC_REQ_EXTOPCODE = 23, + LMP_RESUME_ENC_REQ_EXTOPCODE = 24, + LMP_IO_CAP_REQ_EXTOPCODE = 25, + LMP_IO_CAP_RES_EXTOPCODE = 26, + LMP_NUM_COMPARISON_FAIL_EXTOPCODE = 27, + LMP_PASSKEY_FAIL_EXTOPCODE = 28, + LMP_OOB_FAIL_EXTOPCODE = 29, + LMP_KEYPRESS_NOTIF_EXTOPCODE = 30, + LMP_PWR_CTRL_REQ_EXTOPCODE = 31, + LMP_PWR_CTRL_RES_EXTOPCODE = 32, + LMP_PING_REQ_EXTOPCODE = 33, + LMP_PING_RES_EXTOPCODE = 34, + LMP_SAM_SET_TYPE0_EXTOPCODE = 35, + LMP_SAM_DEFINE_MAP_EXTOPCODE = 36, + LMP_SAM_SWITCH_EXTOPCODE = 37, +}; + +/// PDU lengths (including opcode) +enum co_lmp_pdu_length +{ + LMP_NAME_REQ_LEN = 2 , + LMP_NAME_RES_LEN = 17, + LMP_ACCEPTED_LEN = 2 , + LMP_NOT_ACCEPTED_LEN = 3 , + LMP_CLK_OFF_REQ_LEN = 1 , + LMP_CLK_OFF_RES_LEN = 3 , + LMP_DETACH_LEN = 2 , + LMP_INRAND_LEN = 17, + LMP_COMBKEY_LEN = 17, + LMP_UNITKEY_LEN = 17, + LMP_AURAND_LEN = 17, + LMP_SRES_LEN = 5 , + LMP_TEMPRAND_LEN = 17, + LMP_TEMPKEY_LEN = 17, + LMP_ENC_MODE_REQ_LEN = 2 , + LMP_ENC_KEY_SIZE_REQ_LEN = 2 , + LMP_START_ENC_REQ_LEN = 17, + LMP_STOP_ENC_REQ_LEN = 1 , + LMP_SWITCH_REQ_LEN = 5 , + LMP_HOLD_LEN = 7 , + LMP_HOLD_REQ_LEN = 7 , + LMP_SNIFF_REQ_LEN = 10, + LMP_UNSNIFF_REQ_LEN = 1 , + LMP_PARK_REQ_LEN = 17, + LMP_INCR_PWR_REQ_LEN = 2 , + LMP_DECR_PWR_REQ_LEN = 2 , + LMP_MAX_PWR_LEN = 1 , + LMP_MIN_PWR_LEN = 1 , + LMP_AUTO_RATE_LEN = 1 , + LMP_PREF_RATE_LEN = 2 , + LMP_VER_REQ_LEN = 6 , + LMP_VER_RES_LEN = 6 , + LMP_FEATS_REQ_LEN = 9 , + LMP_FEATS_RES_LEN = 9 , + LMP_QOS_LEN = 4 , + LMP_QOS_REQ_LEN = 4 , + LMP_SCO_LINK_REQ_LEN = 7 , + LMP_RMV_SCO_LINK_REQ_LEN = 3 , + LMP_MAX_SLOT_LEN = 2 , + LMP_MAX_SLOT_REQ_LEN = 2 , + LMP_TIMING_ACCU_REQ_LEN = 1 , + LMP_TIMING_ACCU_RES_LEN = 3 , + LMP_SETUP_CMP_LEN = 1 , + LMP_USE_SEMI_PERM_KEY_LEN = 1 , + LMP_HOST_CON_REQ_LEN = 1 , + LMP_SLOT_OFF_LEN = 9 , + LMP_PAGE_MODE_REQ_LEN = 3 , + LMP_PAGE_SCAN_MODE_REQ_LEN = 3 , + LMP_SUPV_TO_LEN = 3 , + LMP_TEST_ACTIVATE_LEN = 1 , + LMP_TEST_CTRL_LEN = 10, + LMP_ENC_KEY_SIZE_MASK_REQ_LEN = 1 , + LMP_ENC_KEY_SIZE_MASK_RES_LEN = 3 , + LMP_SET_AFH_LEN = 16, + LMP_ENCAPS_HDR_LEN = 4 , + LMP_ENCAPS_PAYL_LEN = 17, + LMP_SP_CFM_LEN = 17, + LMP_SP_NB_LEN = 17, + LMP_DHKEY_CHK_LEN = 17, + LMP_PAUSE_ENC_AES_REQ_LEN = 17, +}; + +/// LMP Escape 4 Extended PDU length (including opcode and ext opcode) +enum co_lmp_ext_pdu_length +{ + LMP_ACCEPTED_EXT_LEN = 4 , + LMP_NOT_ACCEPTED_EXT_LEN = 5 , + LMP_FEATS_REQ_EXT_LEN = 12, + LMP_FEATS_RES_EXT_LEN = 12, + LMP_CLK_ADJ_LEN = 15, + LMP_CLK_ADJ_ACK_LEN = 3 , + LMP_CLK_ADJ_REQ_LEN = 6 , + LMP_PKT_TYPE_TBL_REQ_LEN = 3 , + LMP_ESCO_LINK_REQ_LEN = 16, + LMP_RMV_ESCO_LINK_REQ_LEN = 4 , + LMP_CH_CLASS_REQ_LEN = 7 , + LMP_CH_CLASS_LEN = 12, + LMP_SSR_REQ_LEN = 9 , + LMP_SSR_RES_LEN = 9 , + LMP_PAUSE_ENC_REQ_LEN = 2 , + LMP_RESUME_ENC_REQ_LEN = 2 , + LMP_IO_CAP_REQ_LEN = 5 , + LMP_IO_CAP_RES_LEN = 5 , + LMP_NUM_COMPARISON_FAIL_LEN = 2 , + LMP_PASSKEY_FAIL_LEN = 2 , + LMP_OOB_FAIL_LEN = 2 , + LMP_KEYPRESS_NOTIF_LEN = 3 , + LMP_PWR_CTRL_REQ_LEN = 3 , + LMP_PWR_CTRL_RES_LEN = 3 , + LMP_PING_REQ_LEN = 2 , + LMP_PING_RES_LEN = 2 , + LMP_SAM_SET_TYPE0_LEN = 17, + LMP_SAM_DEFINE_MAP_LEN = 17, + LMP_SAN_SWITCH_LEN = 9, +}; + +/// Maximum LMP PDU size (including opcode and ext opcode) +#define LMP_MAX_PDU_SIZE DM1_PACKET_SIZE + +/// Position of transaction ID in 1st byte +#define LMP_TR_ID_POS 0 +#define LMP_TR_ID_MASK 0x01 +/// Position of opcode in 1st byte +#define LMP_OPCODE_POS 1 +#define LMP_OPCODE_MASK 0xFE + +#define LMP_OPCODE(opcode, tr_id) (((opcode << LMP_OPCODE_POS) & LMP_OPCODE_MASK) | ((tr_id << LMP_TR_ID_POS) & LMP_TR_ID_MASK)) +/* + * MESSAGES + **************************************************************************************** + */ + +///LMP_name_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_name_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Offset + uint8_t offset; +}; + +///LMP_name_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_name_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Offset + uint8_t offset; + ///Name Length + uint8_t length; + ///Name Fragment + struct name_vect name_frag; +}; + +///LMP_accepted PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_accepted +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Opcode of the original LMP + uint8_t orig_opcode; +}; + +///LMP_not_accepted PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_not_accepted +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Opcode of the original LMP + uint8_t orig_opcode; + ///Reason for not accepting the PDU (error code) + uint8_t reason; +}; + +///LMP_clkoffset_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_clk_off_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_clkoffset_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_clk_off_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Clock Offset value + uint16_t clk_offset ; +}; + +///LMP_detach PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_detach +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Reason to detach + uint8_t reason; +}; + +///LMP_in_rand PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_inrand +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Random number + struct ltk random; +}; + +///LMP_comb_key PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_combkey +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Random number + struct ltk random; +}; + +///LMP_unit_key PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_unitkey +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Key + struct ltk key; +}; + +///LMP_au_rand PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_aurand +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Random number + struct ltk random; +}; + +///LMP_sres PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_sres +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Authentication Response + struct sres_nb Sres; +}; + +///LMP_temp_rand PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_temprand +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Random number + struct ltk random; +}; + +///LMP_temp_key PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_tempkey +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Key + struct ltk key; +}; + +///LMP_encryption_mode_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_enc_mode_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Encryption Mode + uint8_t enc_mode; +}; + +///LMP_encryption_key_size_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_enc_key_size_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Key Size + uint8_t key_size; +}; + +///LMP_start_encryption_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_start_enc_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Random number + struct ltk random; +}; + +///LMP_stop_encryption_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_stop_enc_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_switch_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_switch_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Switch Instant + uint32_t switch_inst; +}; + +///LMP_sniff_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_sniff_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + /// Timing Control Flags (bit 1: initialization method 1 or 2) + uint8_t flags; + /// Offset (in slots) + uint16_t d_sniff; + /// Interval (in slots) + uint16_t t_sniff; + /// Attempts (number of receive slots) (in slots) + uint16_t sniff_attempt; + /// Timeout (number of receive slots) (in slots) + uint16_t sniff_to; +}; + +///LMP_unsniff_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_unsniff_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_incr_power_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_incr_pwr_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///For future use + uint8_t reserved; +}; + +///LMP_decr_power_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_decr_pwr_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///For future use + uint8_t reserved; +}; + +///LMP_max_power PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_max_pwr +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_min_power PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_min_pwr +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_auto_rate PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_auto_rate +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_preferred_rate PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_pref_rate +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Data Rate + uint8_t rate; +}; + +///LMP_version_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_ver_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Version number + uint8_t ver; + ///Company ID + uint16_t co_id; + ///Subversion number + uint16_t subver; +}; + +///LMP_version_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_ver_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Version number + uint8_t ver; + ///Company ID + uint16_t co_id; + ///Subversion number + uint16_t subver; +}; + +///LMP_features_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_feats_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Features + struct features feats; +}; + +///LMP_features_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_feats_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Features + struct features feats; +}; + +///LMP_quality_of_service PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_qos +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Poll interval + uint16_t poll_intv; + ///Nbc + uint8_t nbc; +}; + + +///LMP_quality_of_service_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_qos_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Poll interval + uint16_t poll_intv; + ///Nbc + uint8_t nbc; +}; + +///LMP_SCO_link_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_sco_link_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///SCO handle + uint8_t sco_hdl; + ///timing control flags + uint8_t flags; + ///Dsco + uint8_t d_sco; + ///Tsco + uint8_t t_sco; + ///SCO packet + uint8_t sco_pkt; + ///Air mode + uint8_t air_mode; +}; + +///LMP_remove_SCO_link_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_rmv_sco_link_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///SCO handle + uint8_t sco_hdl; + ///Reason for its removal(error code) + uint8_t reason; +}; + +///LMP_max_slot PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_max_slot +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Max slots + uint8_t max_slots; +}; + + +///LMP_max_slot_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_max_slot_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Max slots + uint8_t max_slots; +}; + +///LMP_timing_accuracy_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_timing_accu_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_timing_accuracy_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_timing_accu_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Drift + uint8_t drift; + ///Jitter + uint8_t jitter; +}; + +///LMP_setup_complete PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_setup_cmp +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_use_semi_permanent_key PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_use_semi_perm_key +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_host_connection_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_host_con_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_slot_offset PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_slot_off +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Slot Offset + uint16_t slot_off; + ///BD Address + struct bd_addr addr; +}; + +///LMP_page_mode_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_page_mode_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Paging scheme + uint8_t page_scheme; + ///Paging scheme settings + uint8_t page_stg; +}; + +///LMP_page_scan_mode_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_page_scan_mode_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Paging scheme + uint8_t page_scheme; + ///Paging scheme settings + uint8_t page_stg; +}; + +///LMP_supervision_timeout PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_supv_to +{ + ///Opcode (including transaction ID) + uint8_t opcode; + /// Supervision Timeout (in slots, 0 means infinite timeout) + uint16_t supv_to; +}; + +///LMP_test_activate PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_test_activate +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_test_control PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_test_ctrl +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Test Scenario + uint8_t scenario; + ///Hopping Mode + uint8_t hop; + ///Tx frequency + uint8_t tx_freq; + ///Rx Frequency + uint8_t rx_freq; + ///Power Control Mode + uint8_t pwr_ctrl; + ///Poll period + uint8_t poll_period; + ///Packet type + uint8_t pkt_type; + ///length of test data + uint16_t data_len; +}; + +///LMP_encryption_key_size_mask_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_enc_key_size_mask_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; +}; + +///LMP_encryption_key_size_mask_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_enc_key_size_mask_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Encryption Key Size Mask + uint16_t mask; +}; + +///LMP_set_AFH PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_set_afh +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///AFH Instant + uint32_t instant; + ///AFH Mode + uint8_t mode; + ///AFH channel map + struct chnl_map map; +}; + +///LMP_encapsulated_header PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_encaps_hdr +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Encapsulated major type + uint8_t maj_type; + ///Encapsulated minor type + uint8_t min_type; + ///Encapsulated Payload Length + uint8_t payl_len; +}; + +///LMP_encapsulated_payload PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_encaps_payl +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Encapsulated data + struct byte16 data; +}; + +///LMP_Simple_Pairing_Confirm PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_sp_cfm +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Commitment Value + struct byte16 commitment_val ; +}; + +///LMP_Simple_Pairing_Number PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_sp_nb +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///nonce Value + struct byte16 nonce; +}; + +///LMP_DHkey_check PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_dhkey_chk +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Confirmation Value + struct ltk cfm_val; +}; + +///LMP_pause_encryption_aes_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_pause_enc_aes_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + /// Random Number + struct ltk rand; +}; + +/* + * Extended PDUs parameter structures - Escape 4 + ****************************************************************************************/ + +///LMP_accepted_ext PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_accepted_ext +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Escape opcode of the original LMP + uint8_t orig_esc_opcode; + ///Extended opcode of the original LMP + uint8_t orig_ext_opcode; +}; + +///LMP_not_accepted_ext PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_not_accepted_ext +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Escape opcode of the original LMP + uint8_t orig_esc_opcode; + ///Extended opcode of the original LMP + uint8_t orig_ext_opcode; + ///Reason + uint8_t reason; +}; + +///LMP_features_req_ext PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_feats_req_ext +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Features page + uint8_t page; + ///Max supported page + uint8_t max_page; + ///Extended features + struct features ext_feats; +}; + +///LMP_features_res_ext PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_feats_res_ext +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Features page + uint8_t page; + ///Max supported page + uint8_t max_page; + ///Extended features + struct features ext_feats; +}; + +///LMP_clk_adj PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_clk_adj +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Coarse clock adjustment Event ID + uint8_t clk_adj_id; + ///Coarse clock adjustment instant + uint32_t clk_adj_instant; + ///Coarse clock adjustment intraslot alignment offset + int16_t clk_adj_us; + ///Coarse clock adjustment slot offset + uint8_t clk_adj_slots; + ///Coarse clock adjustment mode (before/after instant) + uint8_t clk_adj_mode; + ///Coarse clock adjustment PDU CLK instant + uint32_t clk_adj_clk; +}; + +///LMP_clk_adj_ack PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_clk_adj_ack +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Coarse clock adjustment Event ID + uint8_t clk_adj_id; +}; + +///LMP_clk_adj_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_clk_adj_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Coarse clock adjustment intraslot alignment offset + int16_t clk_adj_us; + ///Coarse clock adjustment slot offset + uint8_t clk_adj_slots; + ///Corase clock adjustment period + uint8_t clk_adj_period; +}; + +///LMP_packet_type_table_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_pkt_type_tbl_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Packet Type table + uint8_t pkt_type_tbl; +}; + +///LMP_SAM_define_map PDU structure +struct lmp_sam_define_map +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///SAM Index + uint8_t index; + ///Tsam-sm + uint8_t t_sam_sm; + ///Nsam-sm + uint8_t n_sam_sm; + ///SAM Submaps + struct sam_submaps submaps; +}; + +///LMP_SAM_set_type0 PDU structure +struct lmp_sam_set_type0 +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Update mode + uint8_t update_mode; + ///SAM Type0 submap + struct sam_type0_submap submap; +}; + +///LMP_SAM_switch PDU structure +struct lmp_sam_switch +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///SAM Index + uint8_t index; + ///timing control flags + uint8_t flags; + ///Dsam + uint8_t d_sam; + ///SAM instant + uint32_t instant; +}; + +///LMP_eSCO_link_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_esco_link_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///eSCO handle + uint8_t esco_hdl; + ///eSCo LT Address + uint8_t esco_lt_addr; + ///timing control flags + uint8_t flags; + ///Desco + uint8_t d_esco; + ///t_esco + uint8_t t_esco; + ///Wesco + uint8_t w_esco; + ///eSCO packet type M2S + uint8_t m2s_pkt_type; + ///eSCO packet type S2M + uint8_t s2m_pkt_type; + ///Packet Length M2S + uint16_t m2s_pkt_len; + ///Packet Length S2m + uint16_t s2m_pkt_len; + ///Air Mode + uint8_t air_mode; + ///Negotiation state + uint8_t negt_st; +}; + +///LMP_remove_eSCO_link_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_rmv_esco_link_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///eSCO handle + uint8_t esco_hdl; + ///Reason + uint8_t reason; +}; + +///LMP_channel_classification_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_ch_class_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///AFH reporting mode + uint8_t rep_mode; + ///AFH min interval + uint16_t min_intv; + ///AFH max interval + uint16_t max_intv; +}; + +///LMP_channel_classification PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_ch_class +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///AFh channel classification + struct chnl_map ch_class; +}; + +///LMP_sniff_subrating_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_ssr_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + /// Maximum sniff sub-rate (in number of sniff events) + uint8_t max_subrate; + /// Minimum sniff mode timeout (in slots) + uint16_t min_to; + /// Sniff sub-rating instant (in slots, master clock value) + uint32_t instant; +}; + +///LMP_sniff_subrating_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_ssr_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + /// Maximum sniff sub-rate (in number of sniff events) + uint8_t max_subrate; + /// Minimum sniff mode timeout (in slots) + uint16_t min_to; + /// Sniff sub-rating instant (in slots, master clock value) + uint32_t instant; +}; + +///LMP_pause_encryption_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_pause_enc_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; +}; + +///LMP_resume_encryption_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_resume_enc_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; +}; + +///LMP_IO_capability_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_io_cap_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///IO Capabilities + uint8_t io_cap; + /// OOB Authentication data + uint8_t oob_auth_data; + ///Authentication requirements + uint8_t auth_req; +}; + + +///LMP_IO_capability_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_io_cap_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///IO Capabilities + uint8_t io_cap; + /// OOB Authentication data + uint8_t oob_auth_data; + ///Authentication requirements + uint8_t auth_req; +}; + +///LMP_numeric_comparison_failed PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_num_comparison_fail +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; +}; + +///LMP_passkey_failed PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_passkey_fail +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; +}; + +///LMP_oob_failed PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_oob_fail +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; +}; + +///LMP_keypress_notification PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_keypress_notif +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Notification Type + uint8_t type; +}; + +///LMP_power_control_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_pwr_ctrl_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Power adjustment request + uint8_t pwr_adj; + +}; + +///LMP_power_control_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_pwr_ctrl_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; + ///Power adjustment response + uint8_t pwr_adj; +}; + +/// LMP_ping_req PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_ping_req +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; +}; + +/// LMP_ping_res PDU structure +/*@TRACE + * @NO_PAD +*/ +struct lmp_ping_res +{ + ///Opcode (including transaction ID) + uint8_t opcode; + ///Extended opcode + uint8_t ext_opcode; +}; + +/// Union of all the LMP message structures +union lmp_pdu +{ + struct lmp_name_req name_req ; + struct lmp_name_res name_res ; + struct lmp_accepted accepted ; + struct lmp_not_accepted not_accepted ; + struct lmp_clk_off_req clk_off_req ; + struct lmp_clk_off_res clk_off_res ; + struct lmp_detach detach ; + struct lmp_inrand inrand ; + struct lmp_combkey combkey ; + struct lmp_unitkey unitkey ; + struct lmp_aurand aurand ; + struct lmp_sres sres ; + struct lmp_temprand temprand ; + struct lmp_tempkey tempkey ; + struct lmp_enc_mode_req enc_mode_req ; + struct lmp_enc_key_size_req enc_key_size_req ; + struct lmp_start_enc_req start_enc_req ; + struct lmp_stop_enc_req stop_enc_req ; + struct lmp_switch_req switch_req ; + struct lmp_sniff_req sniff_req ; + struct lmp_unsniff_req unsniff_req ; + struct lmp_incr_pwr_req incr_pwr_req ; + struct lmp_decr_pwr_req decr_pwr_req ; + struct lmp_max_pwr max_pwr ; + struct lmp_min_pwr min_pwr ; + struct lmp_auto_rate auto_rate ; + struct lmp_pref_rate pref_rate ; + struct lmp_ver_req ver_req ; + struct lmp_ver_res ver_res ; + struct lmp_feats_req feats_req ; + struct lmp_feats_res feats_res ; + struct lmp_clk_adj clk_adj ; + struct lmp_clk_adj_ack clk_adj_ack ; + struct lmp_clk_adj_req clk_adj_req ; + struct lmp_qos qos ; + struct lmp_qos_req qos_req ; + struct lmp_sco_link_req sco_link_req ; + struct lmp_rmv_sco_link_req rmv_sco_link_req ; + struct lmp_max_slot max_slot ; + struct lmp_max_slot_req max_slot_req ; + struct lmp_timing_accu_req timing_accu_req ; + struct lmp_timing_accu_res timing_accu_res ; + struct lmp_setup_cmp setup_cmp ; + struct lmp_use_semi_perm_key use_semi_perm_key ; + struct lmp_host_con_req host_con_req ; + struct lmp_slot_off slot_off ; + struct lmp_page_mode_req page_mode_req ; + struct lmp_page_scan_mode_req page_scan_mode_req ; + struct lmp_supv_to supv_to ; + struct lmp_test_activate test_activate ; + struct lmp_test_ctrl test_ctrl ; + struct lmp_enc_key_size_mask_req enc_key_size_mask_req ; + struct lmp_enc_key_size_mask_res enc_key_size_mask_res ; + struct lmp_set_afh set_afh ; + struct lmp_encaps_hdr encaps_hdr ; + struct lmp_encaps_payl encaps_payl ; + struct lmp_sp_cfm sp_cfm ; + struct lmp_sp_nb sp_nb ; + struct lmp_dhkey_chk dhkey_chk ; + struct lmp_accepted_ext accepted_ext ; + struct lmp_not_accepted_ext not_accepted_ext ; + struct lmp_feats_req_ext feats_req_ext ; + struct lmp_feats_res_ext feats_res_ext ; + struct lmp_pkt_type_tbl_req pkt_type_tbl_req ; + struct lmp_sam_define_map sam_define_map ; + struct lmp_sam_set_type0 sam_set_type0 ; + struct lmp_sam_switch sam_switch ; + struct lmp_esco_link_req esco_link_req ; + struct lmp_rmv_esco_link_req rmv_esco_link_req ; + struct lmp_ch_class_req ch_class_req ; + struct lmp_ch_class ch_class ; + struct lmp_ssr_req ssr_req ; + struct lmp_ssr_res ssr_res ; + struct lmp_pause_enc_req pause_enc_req ; + struct lmp_resume_enc_req resume_enc_req ; + struct lmp_io_cap_req io_cap_req ; + struct lmp_io_cap_res io_cap_res ; + struct lmp_num_comparison_fail num_comparison_fail ; + struct lmp_passkey_fail passkey_fail ; + struct lmp_oob_fail oob_fail ; + struct lmp_keypress_notif keypress_notif ; + struct lmp_pwr_ctrl_req pwr_ctrl_req ; + struct lmp_pwr_ctrl_res pwr_ctrl_res ; + struct lmp_ping_req ping_req ; + struct lmp_ping_res ping_res ; +}; + + +/// @} CO_BT +#endif // CO_LMP_H_ |