#ifndef CO_LMP_H_ #define CO_LMP_H_ /** **************************************************************************************** * @addtogroup CO_BT * @{ **************************************************************************************** */ /* * INCLUDE FILES **************************************************************************************** */ #include "co_bt.h" /* * DEFINES **************************************************************************************** */ //LMP Opcodes #define LMP_NAME_REQ_OPCODE 1 #define LMP_NAME_RES_OPCODE 2 #define LMP_ACCEPTED_OPCODE 3 #define LMP_NOT_ACCEPTED_OPCODE 4 #define LMP_CLK_OFF_REQ_OPCODE 5 #define LMP_CLK_OFF_RES_OPCODE 6 #define LMP_DETACH_OPCODE 7 #define LMP_INRAND_OPCODE 8 #define LMP_COMBKEY_OPCODE 9 #define LMP_UNITKEY_OPCODE 10 #define LMP_AURAND_OPCODE 11 #define LMP_SRES_OPCODE 12 #define LMP_TEMPRAND_OPCODE 13 #define LMP_TEMPKEY_OPCODE 14 #define LMP_ENC_MODE_REQ_OPCODE 15 #define LMP_ENC_KEY_SIZE_REQ_OPCODE 16 #define LMP_START_ENC_REQ_OPCODE 17 #define LMP_STOP_ENC_REQ_OPCODE 18 #define LMP_SWITCH_REQ_OPCODE 19 #define LMP_HOLD_OPCODE 20 #define LMP_HOLD_REQ_OPCODE 21 #define LMP_SNIFF_REQ_OPCODE 23 #define LMP_UNSNIFF_REQ_OPCODE 24 #define LMP_PARK_REQ_OPCODE 25 #define LMP_SET_BSWIN_OPCODE 27 #define LMP_MODIF_BEACON_OPCODE 28 #define LMP_UNPARK_BD_REQ_OPCODE 29 #define LMP_UNPARK_PM_REQ_OPCODE 30 #define LMP_INCR_PWR_REQ_OPCODE 31 #define LMP_DECR_PWR_REQ_OPCODE 32 #define LMP_MAX_PWR_OPCODE 33 #define LMP_MIN_PWR_OPCODE 34 #define LMP_AUTO_RATE_OPCODE 35 #define LMP_PREF_RATE_OPCODE 36 #define LMP_VER_REQ_OPCODE 37 #define LMP_VER_RES_OPCODE 38 #define LMP_FEATS_REQ_OPCODE 39 #define LMP_FEATS_RES_OPCODE 40 #define LMP_QOS_OPCODE 41 #define LMP_QOS_REQ_OPCODE 42 #define LMP_SCO_LINK_REQ_OPCODE 43 #define LMP_RMV_SCO_LINK_REQ_OPCODE 44 #define LMP_MAX_SLOT_OPCODE 45 #define LMP_MAX_SLOT_REQ_OPCODE 46 #define LMP_TIMING_ACCU_REQ_OPCODE 47 #define LMP_TIMING_ACCU_RES_OPCODE 48 #define LMP_SETUP_CMP_OPCODE 49 #define LMP_USE_SEMI_PERM_KEY_OPCODE 50 #define LMP_HOST_CON_REQ_OPCODE 51 #define LMP_SLOT_OFF_OPCODE 52 #define LMP_PAGE_MODE_REQ_OPCODE 53 #define LMP_PAGE_SCAN_MODE_REQ_OPCODE 54 #define LMP_SUPV_TO_OPCODE 55 #define LMP_TEST_ACTIVATE_OPCODE 56 #define LMP_TEST_CTRL_OPCODE 57 #define LMP_ENC_KEY_SIZE_MASK_REQ_OPCODE 58 #define LMP_ENC_KEY_SIZE_MASK_RES_OPCODE 59 #define LMP_SET_AFH_OPCODE 60 #define LMP_ENCAPS_HDR_OPCODE 61 #define LMP_ENCAPS_PAYL_OPCODE 62 #define LMP_SP_CFM_OPCODE 63 #define LMP_SP_NB_OPCODE 64 #define LMP_DHKEY_CHK_OPCODE 65 #define LMP_PAUSE_ENC_AES_REQ_OPCODE 66 #define LMP_ESC1_OPCODE 124 #define LMP_ESC2_OPCODE 125 #define LMP_ESC3_OPCODE 126 #define LMP_ESC4_OPCODE 127 ///LMP Escape 4 Extended Opcodes #define LMP_ACCEPTED_EXT_EXTOPCODE 1 #define LMP_NOT_ACCEPTED_EXT_EXTOPCODE 2 #define LMP_FEATS_REQ_EXT_EXTOPCODE 3 #define LMP_FEATS_RES_EXT_EXTOPCODE 4 #define LMP_CLK_ADJ_EXTOPCODE 5 #define LMP_CLK_ADJ_ACK_EXTOPCODE 6 #define LMP_CLK_ADJ_REQ_EXTOPCODE 7 #define LMP_PKT_TYPE_TBL_REQ_EXTOPCODE 11 #define LMP_ESCO_LINK_REQ_EXTOPCODE 12 #define LMP_RMV_ESCO_LINK_REQ_EXTOPCODE 13 #define LMP_CH_CLASS_REQ_EXTOPCODE 16 #define LMP_CH_CLASS_EXTOPCODE 17 #define LMP_SSR_REQ_EXTOPCODE 21 #define LMP_SSR_RES_EXTOPCODE 22 #define LMP_PAUSE_ENC_REQ_EXTOPCODE 23 #define LMP_RESUME_ENC_REQ_EXTOPCODE 24 #define LMP_IO_CAP_REQ_EXTOPCODE 25 #define LMP_IO_CAP_RES_EXTOPCODE 26 #define LMP_NUM_COMPARISON_FAIL_EXTOPCODE 27 #define LMP_PASSKEY_FAIL_EXTOPCODE 28 #define LMP_OOB_FAIL_EXTOPCODE 29 #define LMP_KEYPRESS_NOTIF_EXTOPCODE 30 #define LMP_PWR_CTRL_REQ_EXTOPCODE 31 #define LMP_PWR_CTRL_RES_EXTOPCODE 32 #define LMP_PING_REQ_EXTOPCODE 33 #define LMP_PING_RES_EXTOPCODE 34 /// PDU lengths (including opcode) #define LMP_NAME_REQ_LEN 2 #define LMP_NAME_RES_LEN 17 #define LMP_ACCEPTED_LEN 2 #define LMP_NOT_ACCEPTED_LEN 3 #define LMP_CLK_OFF_REQ_LEN 1 #define LMP_CLK_OFF_RES_LEN 3 #define LMP_DETACH_LEN 2 #define LMP_INRAND_LEN 17 #define LMP_COMBKEY_LEN 17 #define LMP_UNITKEY_LEN 17 #define LMP_AURAND_LEN 17 #define LMP_SRES_LEN 5 #define LMP_TEMPRAND_LEN 17 #define LMP_TEMPKEY_LEN 17 #define LMP_ENC_MODE_REQ_LEN 2 #define LMP_ENC_KEY_SIZE_REQ_LEN 2 #define LMP_START_ENC_REQ_LEN 17 #define LMP_STOP_ENC_REQ_LEN 1 #define LMP_SWITCH_REQ_LEN 5 #define LMP_HOLD_LEN 7 #define LMP_HOLD_REQ_LEN 7 #define LMP_SNIFF_REQ_LEN 10 #define LMP_UNSNIFF_REQ_LEN 1 #define LMP_PARK_REQ_LEN 17 #define LMP_INCR_PWR_REQ_LEN 2 #define LMP_DECR_PWR_REQ_LEN 2 #define LMP_MAX_PWR_LEN 1 #define LMP_MIN_PWR_LEN 1 #define LMP_AUTO_RATE_LEN 1 #define LMP_PREF_RATE_LEN 2 #define LMP_VER_REQ_LEN 6 #define LMP_VER_RES_LEN 6 #define LMP_FEATS_REQ_LEN 9 #define LMP_FEATS_RES_LEN 9 #define LMP_QOS_LEN 4 #define LMP_QOS_REQ_LEN 4 #define LMP_SCO_LINK_REQ_LEN 7 #define LMP_RMV_SCO_LINK_REQ_LEN 3 #define LMP_MAX_SLOT_LEN 2 #define LMP_MAX_SLOT_REQ_LEN 2 #define LMP_TIMING_ACCU_REQ_LEN 1 #define LMP_TIMING_ACCU_RES_LEN 3 #define LMP_SETUP_CMP_LEN 1 #define LMP_USE_SEMI_PERM_KEY_LEN 1 #define LMP_HOST_CON_REQ_LEN 1 #define LMP_SLOT_OFF_LEN 9 #define LMP_PAGE_MODE_REQ_LEN 3 #define LMP_PAGE_SCAN_MODE_REQ_LEN 3 #define LMP_SUPV_TO_LEN 3 #define LMP_TEST_ACTIVATE_LEN 1 #define LMP_TEST_CTRL_LEN 10 #define LMP_ENC_KEY_SIZE_MASK_REQ_LEN 1 #define LMP_ENC_KEY_SIZE_MASK_RES_LEN 3 #define LMP_SET_AFH_LEN 16 #define LMP_ENCAPS_HDR_LEN 4 #define LMP_ENCAPS_PAYL_LEN 17 #define LMP_SP_CFM_LEN 17 #define LMP_SP_NB_LEN 17 #define LMP_DHKEY_CHK_LEN 17 #define LMP_PAUSE_ENC_AES_REQ_LEN 17 /// LMP Escape 4 Extended PDU length (including opcode and ext opcode) #define LMP_ACCEPTED_EXT_LEN 4 #define LMP_NOT_ACCEPTED_EXT_LEN 5 #define LMP_FEATS_REQ_EXT_LEN 12 #define LMP_FEATS_RES_EXT_LEN 12 #define LMP_CLK_ADJ_LEN 15 #define LMP_CLK_ADJ_ACK_LEN 3 #define LMP_CLK_ADJ_REQ_LEN 6 #define LMP_PKT_TYPE_TBL_REQ_LEN 3 #define LMP_ESCO_LINK_REQ_LEN 16 #define LMP_RMV_ESCO_LINK_REQ_LEN 4 #define LMP_CH_CLASS_REQ_LEN 7 #define LMP_CH_CLASS_LEN 12 #define LMP_SSR_REQ_LEN 9 #define LMP_SSR_RES_LEN 9 #define LMP_PAUSE_ENC_REQ_LEN 2 #define LMP_RESUME_ENC_REQ_LEN 2 #define LMP_IO_CAP_REQ_LEN 5 #define LMP_IO_CAP_RES_LEN 5 #define LMP_NUM_COMPARISON_FAIL_LEN 2 #define LMP_PASSKEY_FAIL_LEN 2 #define LMP_OOB_FAIL_LEN 2 #define LMP_KEYPRESS_NOTIF_LEN 3 #define LMP_PWR_CTRL_REQ_LEN 3 #define LMP_PWR_CTRL_RES_LEN 3 #define LMP_PING_REQ_LEN 2 #define LMP_PING_RES_LEN 2 /// 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 struct lmp_name_req { ///Opcode (including transaction ID) uint8_t opcode; ///Offset uint8_t offset; }; ///LMP_name_res PDU structure 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 struct lmp_accepted { ///Opcode (including transaction ID) uint8_t opcode; ///Opcode of the original LMP uint8_t orig_opcode; }; ///LMP_not_accepted PDU structure 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 struct lmp_clk_off_req { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_clkoffset_res PDU structure struct lmp_clk_off_res { ///Opcode (including transaction ID) uint8_t opcode; ///Clock Offset value uint16_t clk_offset ; }; ///LMP_detach PDU structure struct lmp_detach { ///Opcode (including transaction ID) uint8_t opcode; ///Reason to detach uint8_t reason; }; ///LMP_in_rand PDU structure struct lmp_inrand { ///Opcode (including transaction ID) uint8_t opcode; ///Random number struct ltk random; }; ///LMP_comb_key PDU structure struct lmp_combkey { ///Opcode (including transaction ID) uint8_t opcode; ///Random number struct ltk random; }; ///LMP_unit_key PDU structure struct lmp_unitkey { ///Opcode (including transaction ID) uint8_t opcode; ///Key struct ltk key; }; ///LMP_au_rand PDU structure struct lmp_aurand { ///Opcode (including transaction ID) uint8_t opcode; ///Random number struct ltk random; }; ///LMP_sres PDU structure struct lmp_sres { ///Opcode (including transaction ID) uint8_t opcode; ///Authentication Response struct sres_nb Sres; }; ///LMP_temp_rand PDU structure struct lmp_temprand { ///Opcode (including transaction ID) uint8_t opcode; ///Random number struct ltk random; }; ///LMP_temp_key PDU structure struct lmp_tempkey { ///Opcode (including transaction ID) uint8_t opcode; ///Key struct ltk key; }; ///LMP_encryption_mode_req PDU structure 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 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 struct lmp_start_enc_req { ///Opcode (including transaction ID) uint8_t opcode; ///Random number struct ltk random; }; ///LMP_stop_encryption_req PDU structure struct lmp_stop_enc_req { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_switch_req PDU structure struct lmp_switch_req { ///Opcode (including transaction ID) uint8_t opcode; ///Switch Instant uint32_t switch_inst; }; ///LMP_sniff_req PDU structure struct lmp_sniff_req { ///Opcode (including transaction ID) uint8_t opcode; ///Timing Control Flags uint8_t flags; ///Dsniff uint16_t d_sniff; ///Tsniff uint16_t t_sniff; ///Sniff attempt uint16_t sniff_attempt; ///Sniff Timeout uint16_t sniff_to; }; ///LMP_unsniff_req PDU structure struct lmp_unsniff_req { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_incr_power_req PDU structure struct lmp_incr_pwr_req { ///Opcode (including transaction ID) uint8_t opcode; ///For future use uint8_t reserved; }; ///LMP_decr_power_req PDU structure struct lmp_decr_pwr_req { ///Opcode (including transaction ID) uint8_t opcode; ///For future use uint8_t reserved; }; ///LMP_max_power PDU structure struct lmp_max_pwr { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_min_power PDU structure struct lmp_min_pwr { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_auto_rate PDU structure struct lmp_auto_rate { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_preferred_rate PDU structure struct lmp_pref_rate { ///Opcode (including transaction ID) uint8_t opcode; ///Data Rate uint8_t rate; }; ///LMP_version_req PDU structure 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 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 struct lmp_feats_req { ///Opcode (including transaction ID) uint8_t opcode; ///Features struct features feats; }; ///LMP_features_res PDU structure struct lmp_feats_res { ///Opcode (including transaction ID) uint8_t opcode; ///Features struct features feats; }; ///LMP_quality_of_service PDU structure 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 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 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 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 struct lmp_max_slot { ///Opcode (including transaction ID) uint8_t opcode; ///Max slots uint8_t max_slots; }; ///LMP_max_slot_req PDU structure struct lmp_max_slot_req { ///Opcode (including transaction ID) uint8_t opcode; ///Max slots uint8_t max_slots; }; ///LMP_timing_accuracy_req PDU structure struct lmp_timing_accu_req { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_timing_accuracy_res PDU structure 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 struct lmp_setup_cmp { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_use_semi_permanent_key PDU structure struct lmp_use_semi_perm_key { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_host_connection_req PDU structure struct lmp_host_con_req { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_slot_offset PDU structure 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 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 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 struct lmp_supv_to { ///Opcode (including transaction ID) uint8_t opcode; ///Supervision Timeout uint16_t supv_to; }; ///LMP_test_activate PDU structure struct lmp_test_activate { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_test_control PDU structure 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 struct lmp_enc_key_size_mask_req { ///Opcode (including transaction ID) uint8_t opcode; }; ///LMP_encryption_key_size_mask_res PDU structure 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 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 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 struct lmp_encaps_payl { ///Opcode (including transaction ID) uint8_t opcode; ///Encapsulated data struct byte16 data; }; ///LMP_Simple_Pairing_Confirm PDU structure struct lmp_sp_cfm { ///Opcode (including transaction ID) uint8_t opcode; ///Commitment Value struct byte16 commitment_val ; }; ///LMP_Simple_Pairing_Number PDU structure struct lmp_sp_nb { ///Opcode (including transaction ID) uint8_t opcode; ///nonce Value struct byte16 nonce; }; ///LMP_DHkey_check PDU structure struct lmp_dhkey_chk { ///Opcode (including transaction ID) uint8_t opcode; ///Confirmation Value struct ltk cfm_val; }; ///LMP_pause_encryption_aes_req PDU structure 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 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 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 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 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 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 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 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 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_eSCO_link_req PDU structure 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 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 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 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 struct lmp_ssr_req { ///Opcode (including transaction ID) uint8_t opcode; ///Extended opcode uint8_t ext_opcode; ///Maximum sniff sub-rate uint8_t max_subrate; ///Minimum sniff mode timeout uint16_t min_to; ///Sniff sub-rating instant uint32_t inst; }; ///LMP_sniff_subrating_res PDU structure struct lmp_ssr_res { ///Opcode (including transaction ID) uint8_t opcode; ///Extended opcode uint8_t ext_opcode; ///Maximum sniff sub-rate uint8_t max_subrate; ///Minimum sniff mode timeout uint16_t min_to; ///Sniff sub-rating instant uint32_t inst; }; ///LMP_pause_encryption_req PDU structure struct lmp_pause_enc_req { ///Opcode (including transaction ID) uint8_t opcode; ///Extended opcode uint8_t ext_opcode; }; ///LMP_resume_encryption_req PDU structure struct lmp_resume_enc_req { ///Opcode (including transaction ID) uint8_t opcode; ///Extended opcode uint8_t ext_opcode; }; ///LMP_IO_capability_req PDU structure 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 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 struct lmp_num_comparison_fail { ///Opcode (including transaction ID) uint8_t opcode; ///Extended opcode uint8_t ext_opcode; }; ///LMP_passkey_failed PDU structure struct lmp_passkey_fail { ///Opcode (including transaction ID) uint8_t opcode; ///Extended opcode uint8_t ext_opcode; }; ///LMP_oob_failed PDU structure struct lmp_oob_fail { ///Opcode (including transaction ID) uint8_t opcode; ///Extended opcode uint8_t ext_opcode; }; ///LMP_keypress_notification PDU structure 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 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 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 struct lmp_ping_req { ///Opcode (including transaction ID) uint8_t opcode; ///Extended opcode uint8_t ext_opcode; }; /// LMP_ping_res PDU structure 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_data { 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_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_