1 #include "prf_defs.h"
2 /*
3  * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 
9 #if (BUT_PROFILE_CFG)
10 #include "common/bt_target.h"
11 #include "stack/gatt_api.h"
12 #include "stack/gattdefs.h"
13 #include "esp_gatt_api.h"
14 
15 #define KEY_SUCCESS             GATT_SUCCESS
16 #define KEY_ILLEGAL_PARAM       GATT_ILLEGAL_PARAMETER
17 #define KEY_NO_RESOURCES        GATT_NO_RESOURCES
18 
19 //define the key serivce uuid
20 #define ATT_SVC_BUTTON  0xFFFF
21 //define the key Char uuid
22 #define ATT_CHAR_BUTTON_WIT 0xFF01
23 #define ATT_CHAR_BUTTON_NTF 0xFF02
24 
25 #define BUTTON_PRESS_NTF_CFG    0x01
26 
27 #define BUTTON_VAL_MAX_LEN  (10)
28 
29 #define BUTT_MAX_APPS                  GATT_CL_MAX_LCB
30 
31 #define BUT_MAX_STRING_DATA     7
32 
33 typedef void (*but_prf_cb_t)(uint8_t app_id, uint8_t event, uint16_t len, uint8_t *value);
34 
35 #ifndef BUT_MAX_INT_NUM
36 #define BUT_MAX_INT_NUM     4
37 #endif
38 
39 enum {
40     RECEIVE_NET_PASSWD_EVT,
41     RECEIVE_NET_SSD_EVT,
42     RECEIVE_EVT_MAX
43 };
44 
45 /// button Service Attributes Indexes
46 enum {
47     KEY_IDX_SVC,
48     KEY_IDX_BUTTON_WIT_CHAR,
49     KEY_IDX_BUTTON_WIT_VAL,
50     KEY_IDX_BUTTON_NTF_CHAR,
51     KEY_IDX_BUTTON_NTF_VAL,
52     KEY_IDX_BUTTON_NTF_CFG,
53 
54     KEY_IDX_NB,
55 };
56 
57 typedef struct {
58     BD_ADDR     remote_bda;
59     BOOLEAN     need_rsp;
60     uint16_t    clt_cfg;
61 } but_write_data_t;
62 
63 typedef struct {
64     BOOLEAN         in_use;
65     BOOLEAN         congest;
66     uint16_t        conn_id;
67     BOOLEAN         connected;
68     BD_ADDR         remote_bda;
69     uint32_t        trans_id;
70     uint8_t         cur_srvc_id;
71 
72 } but_clcb_t;
73 
74 
75 typedef struct {
76     uint8_t           app_id;
77     uint16_t          but_wirt_hdl;
78     uint16_t          but_ntf_hdl;
79     uint16_t          but_cfg_hdl;
80 
81     but_prf_cb_t    p_cback;
82 
83 } but_inst_t;
84 
85 
86 /* service engine control block */
87 typedef struct {
88     but_clcb_t              clcb;           /* connection link*/
89     esp_gatt_if_t           gatt_if;
90     BOOLEAN                 enabled;
91     BOOLEAN                 is_primery;
92     but_inst_t              button_inst;
93     uint8_t                 inst_id;
94 } button_env_cb_t;
95 
96 void Button_CreateService(void);
97 
98 but_clcb_t *button_env_clcb_alloc(uint16_t conn_id, BD_ADDR bda);
99 
100 uint16_t button_env_find_conn_id_by_bd_adddr(BD_ADDR bda);
101 
102 BOOLEAN button_env_clcb_dealloc(uint16_t conn_id);
103 
104 esp_gatt_status_t button_init(but_prf_cb_t call_back);
105 
106 void button_disable(uint16_t connid);
107 
108 void button_msg_notify(uint16_t len, uint8_t *button_msg);
109 
110 extern button_env_cb_t button_cb_env;
111 
112 #endif ///BUT_PROFILE_CFG
113