mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
Component/bt: add set default passkey function
This commit is contained in:
@@ -423,6 +423,12 @@ void BTM_BlePasskeyReply (BD_ADDR bd_addr, UINT8 res, UINT32 passkey)
|
||||
#endif
|
||||
}
|
||||
|
||||
void BTM_BleSetStaticPasskey(BOOLEAN add, UINT32 passkey)
|
||||
{
|
||||
#if SMP_INCLUDED == TRUE
|
||||
SMP_SetStaticPasskey(add, passkey);
|
||||
#endif
|
||||
}
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTM_BleConfirmReply
|
||||
|
@@ -1318,6 +1318,21 @@ void BTM_SecurityGrant(BD_ADDR bd_addr, UINT8 res);
|
||||
//extern
|
||||
void BTM_BlePasskeyReply (BD_ADDR bd_addr, UINT8 res, UINT32 passkey);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTM_BleSetStaticPasskey
|
||||
**
|
||||
** Description This function is called to set static passkey
|
||||
**
|
||||
**
|
||||
** Parameters: add - set static passkey when add is TRUE
|
||||
** clear static passkey when add is FALSE
|
||||
** passkey - static passkey
|
||||
**
|
||||
**
|
||||
*******************************************************************************/
|
||||
void BTM_BleSetStaticPasskey(BOOLEAN add, UINT32 passkey);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function BTM_BleConfirmReply
|
||||
|
@@ -401,6 +401,21 @@ extern void SMP_SecurityGrant(BD_ADDR bd_addr, UINT8 res);
|
||||
*******************************************************************************/
|
||||
extern void SMP_PasskeyReply (BD_ADDR bd_addr, UINT8 res, UINT32 passkey);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function SMP_SetStaticPasskey
|
||||
**
|
||||
** Description This function is called to set static passkey
|
||||
**
|
||||
**
|
||||
** Parameters: add - set static passkey when add is TRUE
|
||||
** clear static passkey when add is FALSE
|
||||
** passkey - static passkey
|
||||
**
|
||||
**
|
||||
*******************************************************************************/
|
||||
extern void SMP_SetStaticPasskey (BOOLEAN add, UINT32 passkey);
|
||||
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function SMP_ConfirmReply
|
||||
|
@@ -132,6 +132,8 @@ typedef UINT8 tSMP_EVENT;
|
||||
/* Assumption it's only using the low 8 bits, if bigger than that, need to expand it to 16 bits */
|
||||
#define SMP_SEC_KEY_MASK 0x00ff
|
||||
|
||||
#define SMP_PASSKEY_MASK 0xfff00000
|
||||
|
||||
/* SMP pairing state */
|
||||
enum {
|
||||
SMP_STATE_IDLE,
|
||||
@@ -331,6 +333,8 @@ typedef struct {
|
||||
UINT8 rcvd_cmd_len;
|
||||
UINT16 total_tx_unacked;
|
||||
BOOLEAN wait_for_authorization_complete;
|
||||
BOOLEAN use_static_passkey;
|
||||
UINT32 static_passkey;
|
||||
} tSMP_CB;
|
||||
|
||||
/* Server Action functions are of this type */
|
||||
|
@@ -328,6 +328,18 @@ void SMP_PasskeyReply (BD_ADDR bd_addr, UINT8 res, UINT32 passkey)
|
||||
return;
|
||||
}
|
||||
|
||||
void SMP_SetStaticPasskey (BOOLEAN add, UINT32 passkey)
|
||||
{
|
||||
SMP_TRACE_DEBUG("static passkey %6d", passkey);
|
||||
tSMP_CB *p_cb = & smp_cb;
|
||||
if(add) {
|
||||
p_cb->static_passkey = passkey;
|
||||
p_cb->use_static_passkey = true;
|
||||
} else {
|
||||
p_cb->static_passkey = 0;
|
||||
p_cb->use_static_passkey = false;
|
||||
}
|
||||
}
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function SMP_ConfirmReply
|
||||
|
@@ -71,8 +71,6 @@ static const tSMP_ACT smp_encrypt_action[] = {
|
||||
smp_generate_rand_cont /* SMP_GEN_SRAND_MRAND_CONT */
|
||||
};
|
||||
|
||||
#define SMP_PASSKEY_MASK 0xfff00000
|
||||
|
||||
void smp_debug_print_nbyte_little_endian(UINT8 *p, const UINT8 *key_name, UINT8 len)
|
||||
{
|
||||
#if SMP_DEBUG == TRUE
|
||||
@@ -186,6 +184,29 @@ BOOLEAN smp_encrypt_data (UINT8 *key, UINT8 key_len,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void smp_use_static_passkey(void)
|
||||
{
|
||||
tSMP_CB *p_cb = &smp_cb;
|
||||
UINT8 *tt = p_cb->tk;
|
||||
tSMP_KEY key;
|
||||
UINT32 passkey = p_cb->static_passkey;
|
||||
/* save the TK */
|
||||
memset(p_cb->tk, 0, BT_OCTET16_LEN);
|
||||
UINT32_TO_STREAM(tt, passkey);
|
||||
|
||||
key.key_type = SMP_KEY_TYPE_TK;
|
||||
key.p_data = p_cb->tk;
|
||||
|
||||
if (p_cb->p_callback) {
|
||||
(*p_cb->p_callback)(SMP_PASSKEY_NOTIF_EVT, p_cb->pairing_bda, (tSMP_EVT_DATA *)&passkey);
|
||||
}
|
||||
|
||||
if (p_cb->selected_association_model == SMP_MODEL_SEC_CONN_PASSKEY_DISP) {
|
||||
smp_sm_event(&smp_cb, SMP_KEY_READY_EVT, &passkey);
|
||||
} else {
|
||||
smp_sm_event(p_cb, SMP_KEY_READY_EVT, (tSMP_INT_DATA *)&key);
|
||||
}
|
||||
}
|
||||
/*******************************************************************************
|
||||
**
|
||||
** Function smp_generate_passkey
|
||||
@@ -199,7 +220,12 @@ void smp_generate_passkey(tSMP_CB *p_cb, tSMP_INT_DATA *p_data)
|
||||
{
|
||||
UNUSED(p_data);
|
||||
|
||||
SMP_TRACE_DEBUG ("%s", __func__);
|
||||
if(p_cb->use_static_passkey) {
|
||||
SMP_TRACE_DEBUG ("%s use static passkey %6d", __func__, p_cb->static_passkey);
|
||||
smp_use_static_passkey();
|
||||
return;
|
||||
}
|
||||
SMP_TRACE_DEBUG ("%s generate rand passkey", __func__);
|
||||
p_cb->rand_enc_proc_state = SMP_GEN_TK;
|
||||
|
||||
/* generate MRand or SRand */
|
||||
|
@@ -877,16 +877,21 @@ void smp_xor_128(BT_OCTET16 a, BT_OCTET16 b)
|
||||
** Returns void
|
||||
**
|
||||
*******************************************************************************/
|
||||
void smp_cb_cleanup(tSMP_CB *p_cb)
|
||||
void smp_cb_cleanup(tSMP_CB *p_cb)
|
||||
{
|
||||
tSMP_CALLBACK *p_callback = p_cb->p_callback;
|
||||
UINT8 trace_level = p_cb->trace_level;
|
||||
|
||||
UINT32 static_passkey = p_cb->static_passkey;
|
||||
BOOLEAN use_static_passkey = p_cb->use_static_passkey;
|
||||
SMP_TRACE_EVENT("smp_cb_cleanup\n");
|
||||
|
||||
memset(p_cb, 0, sizeof(tSMP_CB));
|
||||
p_cb->p_callback = p_callback;
|
||||
p_cb->trace_level = trace_level;
|
||||
if(use_static_passkey) {
|
||||
p_cb->use_static_passkey = use_static_passkey;
|
||||
p_cb->static_passkey = static_passkey;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
Reference in New Issue
Block a user