31#define SMP_MODEL_ENC_ONLY 0
32#define SMP_MODEL_PASSKEY 1
33#define SMP_MODEL_OOB 2
34#define SMP_MODEL_KEY_NOTIF 3
35#define SMP_MODEL_MAX 4
36typedef UINT8 tSMP_ASSO_MODEL;
40 #define SMP_MAX_CONN 2
43#define SMP_WAIT_FOR_RSP_TOUT 30
44#define SMP_WAIT_FOR_REL_DELAY_TOUT 5
46#define SMP_OPCODE_PAIRING_REQ 0x01
47#define SMP_OPCODE_PAIRING_RSP 0x02
48#define SMP_OPCODE_CONFIRM 0x03
49#define SMP_OPCODE_INIT 0x04
50#define SMP_OPCODE_PAIRING_FAILED 0x05
51#define SMP_OPCODE_ENCRYPT_INFO 0x06
52#define SMP_OPCODE_MASTER_ID 0x07
53#define SMP_OPCODE_IDENTITY_INFO 0x08
54#define SMP_OPCODE_ID_ADDR 0x09
55#define SMP_OPCODE_SIGN_INFO 0x0A
56#define SMP_OPCODE_SEC_REQ 0x0B
57#define SMP_OPCODE_MAX (SMP_OPCODE_SEC_REQ + 1)
60#define SMP_PAIRING_REQ_EVT SMP_OPCODE_PAIRING_REQ
61#define SMP_PAIRING_RSP_EVT SMP_OPCODE_PAIRING_RSP
62#define SMP_CONFIRM_EVT SMP_OPCODE_CONFIRM
63#define SMP_RAND_EVT SMP_OPCODE_INIT
64#define SMP_PAIRING_FAILED_EVT SMP_OPCODE_PAIRING_FAILED
65#define SMP_ENCRPTION_INFO_EVT SMP_OPCODE_ENCRYPT_INFO
66#define SMP_MASTER_ID_EVT SMP_OPCODE_MASTER_ID
67#define SMP_ID_INFO_EVT SMP_OPCODE_IDENTITY_INFO
68#define SMP_ID_ADDR_EVT SMP_OPCODE_ID_ADDR
69#define SMP_SIGN_INFO_EVT SMP_OPCODE_SIGN_INFO
70#define SMP_SECURITY_REQ_EVT SMP_OPCODE_SEC_REQ
72#define SMP_SELF_DEF_EVT SMP_SECURITY_REQ_EVT
73#define SMP_KEY_READY_EVT (SMP_SELF_DEF_EVT + 1)
74#define SMP_ENCRYPTED_EVT (SMP_SELF_DEF_EVT + 2)
75#define SMP_L2CAP_CONN_EVT (SMP_SELF_DEF_EVT + 3)
76#define SMP_L2CAP_DISCONN_EVT (SMP_SELF_DEF_EVT + 4)
77#define SMP_IO_RSP_EVT (SMP_SELF_DEF_EVT + 5)
78#define SMP_API_SEC_GRANT_EVT (SMP_SELF_DEF_EVT + 6)
79#define SMP_TK_REQ_EVT (SMP_SELF_DEF_EVT + 7)
80#define SMP_AUTH_CMPL_EVT (SMP_SELF_DEF_EVT + 8)
81#define SMP_ENC_REQ_EVT (SMP_SELF_DEF_EVT + 9)
82#define SMP_BOND_REQ_EVT (SMP_SELF_DEF_EVT + 10)
83#define SMP_DISCARD_SEC_REQ_EVT (SMP_SELF_DEF_EVT + 11)
84#define SMP_RELEASE_DELAY_EVT (SMP_SELF_DEF_EVT + 12)
85#define SMP_RELEASE_DELAY_TOUT_EVT (SMP_SELF_DEF_EVT + 13)
86typedef UINT8 tSMP_EVENT;
87#define SMP_MAX_EVT SMP_RELEASE_DELAY_TOUT_EVT + 1
90#define SMP_SEC_KEY_MASK 0x00ff
97 SMP_ST_SEC_REQ_PENDING,
104 SMP_ST_RELEASE_DELAY,
107typedef UINT8 tSMP_STATE;
120 SMP_GEN_SRAND_MRAND_CONT
145#define SMP_PAIR_FLAGS_WE_STARTED_DD (1)
146#define SMP_PAIR_FLAGS_PEER_STARTED_DD (1 << 1)
147#define SMP_PAIR_FLAGS_CMD_CONFIRM (1 << SMP_OPCODE_CONFIRM)
148#define SMP_PAIR_FLAG_ENC_AFTER_PAIR (1 << 4)
151#define SMP_NO_MITM_REQUIRED(x) (((x) & SMP_AUTH_YN_BIT) == 0)
153#define SMP_ENCRYT_KEY_SIZE 16
154#define SMP_ENCRYT_DATA_SIZE 16
155#define SMP_ECNCRPYT_STATUS HCI_SUCCESS
160 tSMP_CALLBACK *p_callback;
161 TIMER_LIST_ENT rsp_timer_ent;
173 tSMP_SEC_LEVEL sec_level;
174 BOOLEAN connect_initialized;
179 tSMP_IO_CAP peer_io_caps;
180 tSMP_IO_CAP loc_io_caps;
181 tSMP_OOB_FLAG peer_oob_flag;
182 tSMP_OOB_FLAG loc_oob_flag;
183 tSMP_AUTH_REQ peer_auth_req;
184 tSMP_AUTH_REQ loc_auth_req;
202 BOOLEAN is_pair_cancel;
203 BOOLEAN discard_sec_req;
204#if SMP_CONFORMANCE_TESTING == TRUE
205 BOOLEAN enable_test_confirm_val;
206 BT_OCTET16 test_confirm;
207 BOOLEAN enable_test_rand_val;
208 BT_OCTET16 test_rand;
209 BOOLEAN enable_test_pair_fail;
210 UINT8 pair_fail_status;
211 BOOLEAN remove_fixed_channel_disable;
225#if SMP_DYNAMIC_MEMORY == FALSE
228 SMP_API
extern tSMP_CB *smp_cb_ptr;
229#define smp_cb (*smp_cb_ptr)
237SMP_API
extern void smp_init (
void);
239#if SMP_CONFORMANCE_TESTING == TRUE
241SMP_API
extern void smp_set_test_confirm_value (BOOLEAN enable, UINT8 *p_c_value);
242SMP_API
extern void smp_set_test_rand_value (BOOLEAN enable, UINT8 *p_c_value);
243SMP_API
extern void smp_set_test_pair_fail_status (BOOLEAN enable, UINT8 status);
244SMP_API
extern void smp_remove_fixed_channel_disable (BOOLEAN disable);
247extern void smp_sm_event(
tSMP_CB *p_cb, tSMP_EVENT event,
void *p_data);
288extern void smp_l2cap_if_init (
void);
291extern BOOLEAN smp_send_cmd(UINT8 cmd_code,
tSMP_CB *p_cb);
292extern void smp_cb_cleanup(
tSMP_CB *p_cb);
293extern void smp_reset_control_value(
tSMP_CB *p_cb);
294extern void smp_proc_pairing_cmpl(
tSMP_CB *p_cb);
295extern void smp_convert_string_to_tk(BT_OCTET16 tk, UINT32 passkey);
296extern void smp_mask_enc_key(UINT8 loc_enc_size, UINT8 * p_data);
297extern void smp_rsp_timeout(TIMER_LIST_ENT *p_tle);
298extern void smp_xor_128(BT_OCTET16 a, BT_OCTET16 b);
299extern BOOLEAN smp_encrypt_data (UINT8 *key, UINT8 key_len,
300 UINT8 *plain_text, UINT8 pt_len,
311extern void smp_set_state(tSMP_STATE state);
312extern tSMP_STATE smp_get_state(
void);