blob: 2eac20621502aa9f8cfbc9771a0c6c78b7bbef19 [file] [log] [blame]
/**
****************************************************************************************
*
* @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_