1 /*
2  * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef __BTC_DM_H__
8 #define __BTC_DM_H__
9 
10 #include "btc/btc_task.h"
11 #include "esp_bt_defs.h"
12 #include "bta/bta_api.h"
13 
14 typedef enum {
15     BTC_DM_SEC_ACT
16 } btc_dm_sec_act_t;
17 
18 /* btc_dm_args_t */
19 typedef union {
20     //BTC_DM_SEC_ACT
21     tBTA_DM_SEC sec;
22 } btc_dm_sec_args_t;
23 
24 typedef struct
25 {
26     bool                   is_penc_key_rcvd;
27     tBTM_LE_PENC_KEYS         penc_key;       /* received peer encryption key */
28     bool                   is_pcsrk_key_rcvd;
29     tBTM_LE_PCSRK_KEYS        pcsrk_key;       /* received peer device SRK */
30     bool                   is_pid_key_rcvd;
31     tBTM_LE_PID_KEYS          pid_key;        /* peer device ID key */
32     bool                   is_lenc_key_rcvd;
33     tBTM_LE_LENC_KEYS         lenc_key;       /* local encryption reproduction keys LTK = = d1(ER,DIV,0)*/
34     bool                   is_lcsrk_key_rcvd;
35     tBTM_LE_LCSRK_KEYS        lcsrk_key;      /* local device CSRK = d1(ER,DIV,1)*/
36     bool                   is_lidk_key_rcvd;   /* local identity key received */
37 } btc_dm_ble_cb_t;
38 
39 typedef struct
40 {
41     bt_bdaddr_t            static_bdaddr;
42     BD_ADDR                bd_addr;
43     btc_dm_ble_cb_t        ble;
44 } btc_dm_pairing_cb_t;
45 
46 typedef struct
47 {
48     uint8_t                ir[BT_OCTET16_LEN];
49     uint8_t                irk[BT_OCTET16_LEN];
50     uint8_t                dhk[BT_OCTET16_LEN];
51 } btc_dm_local_key_id_t;
52 
53 typedef struct
54 {
55     bool                 is_er_rcvd;
56     uint8_t              er[BT_OCTET16_LEN];
57     bool                 is_id_keys_rcvd;
58     btc_dm_local_key_id_t  id_keys;  /* ID kyes */
59 } btc_dm_local_key_cb_t;
60 
61 typedef struct
62 {
63     tBTA_SERVICE_MASK btc_enabled_services;
64 #if (SMP_INCLUDED == TRUE)
65     btc_dm_pairing_cb_t pairing_cb;
66     btc_dm_local_key_cb_t ble_local_key_cb;
67 #endif
68 } btc_dm_cb_t;
69 
70 #if BTC_DYNAMIC_MEMORY == FALSE
71 extern btc_dm_cb_t btc_dm_cb;
72 #else
73 extern btc_dm_cb_t *btc_dm_cb_ptr;
74 #define btc_dm_cb (*btc_dm_cb_ptr)
75 #endif
76 
77 // void btc_dm_call_handler(btc_msg_t *msg);
78 void btc_dm_sec_evt(tBTA_DM_SEC_EVT event, tBTA_DM_SEC *data);
79 void btc_dm_sec_cb_handler(btc_msg_t *msg);
80 void btc_dm_sec_arg_deep_copy(btc_msg_t *msg, void *dst, void *src);
81 
82 bt_status_t btc_dm_enable_service(tBTA_SERVICE_ID service_id);
83 bt_status_t btc_dm_disable_service(tBTA_SERVICE_ID service_id);
84 
85 #if (SMP_INCLUDED == TRUE)
86 void btc_dm_load_ble_local_keys(void);
87 
88 void btc_dm_get_ble_local_keys(tBTA_DM_BLE_LOCAL_KEY_MASK *p_key_mask, BT_OCTET16 er,
89                                                             tBTA_BLE_LOCAL_ID_KEYS *p_id_keys);
90 #endif
91 
92 #endif /* __BTC_DM_H__ */
93