-
Notifications
You must be signed in to change notification settings - Fork 0
/
bluezx.h
executable file
·210 lines (167 loc) · 8.8 KB
/
bluezx.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
/***************************************************************************
* Copyright (C) 2022, Lanka Hsu, <lankahsu@gmail.com>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
***************************************************************************/
#ifndef __BLUEZX_H__
#define __BLUEZX_H__
//******************************************************************************
//** include **
//******************************************************************************
#include "bluetoothctl_api.h"
#include "src/shared/shell.h"
#include "gatt.h"
//******************************************************************************
//** feature **
//******************************************************************************
#define UUID16_LANKAHSU520_SERVICE_F999 0xF999
#define UUID16_LANKAHSU520_CHRC_F900 0xF900
#define UUID16_LANKAHSU520_CHRC_F901 0xF901
#define VENDOR_DEFINED_UUID16_TABLE \
{ UUID16_LANKAHSU520_SERVICE_F999, "LankaHsu520 service" }, \
{ UUID16_LANKAHSU520_CHRC_F900, "LankaHsu520 F900" }, \
{ UUID16_LANKAHSU520_CHRC_F901, "LankaHsu520 F901" }, \
//******************************************************************************
//** define **
//******************************************************************************
#define MAX_OF_CHRC_QBUF MAX_OF_QBUF_2MB
#define MAX_OF_EXEC_ARGC LEN_OF_BUF2048
#ifndef DBG_COLOR
#define DBG_COLOR(color, format, args...) printf(color"[%02ld/%u] %s:%d - "format""COLORX_NONE, (long) getpid(), (unsigned int)gettidv1_ex(), __FUNCTION__, __LINE__, ## args)
#define DBG_COLOR_0(color, format, args...) printf(color""format""COLORX_NONE, ## args)
#define DBG_R(format,args...) DBG_COLOR(COLORX_RED, format, ## args)
#define DBG_R_0(format,args...) DBG_COLOR_0(COLORX_RED, format, ## args)
#define DBG_P(format,args...) DBG_COLOR(COLORX_PURPLE, format, ## args)
#define DBG_P_0(format,args...) DBG_COLOR_0(COLORX_PURPLE, format, ## args)
#define DBG_Y(format,args...) DBG_COLOR(COLORX_YELLOW, format, ## args)
#define DBG_Y_0(format,args...) DBG_COLOR_0(COLORX_YELLOW, format, ## args)
#define DBG_ER(format,args...) if (dbg_more>=DBG_LVL_ERROR) DBG_R(format, ## args)
#define DBG_ER_0(format,args...) if (dbg_more>=DBG_LVL_ERROR) DBG_R_0(format, ## args)
#define DBG_WN(format,args...) if (dbg_more>=DBG_LVL_WARN) DBG_P(format, ## args)
#define DBG_WN_0(format,args...) if (dbg_more>=DBG_LVL_WARN) DBG_P_0(format, ## args)
#define DBG_IF(format,args...) if (dbg_more>=DBG_LVL_INFO) DBG_Y(format, ## args)
#define DBG_IF_0(format,args...) if (dbg_more>=DBG_LVL_INFO) DBG_Y_0(format, ## args)
#define DBG_DB(format,args...) if (dbg_more>=DBG_LVL_DEBUG) DBG_W(format, ## args)
#define DBG_DB_0(format,args...) if (dbg_more>=DBG_LVL_DEBUG) DBG_W_0(format, ## args)
#define DBG_TR(format,args...) if (dbg_more>=DBG_LVL_TRACE) DBG_LGR(format, ## args)
#define DBG_TR_0(format,args...) if (dbg_more>=DBG_LVL_TRACE) DBG_LGR_0(format, ## args)
#define ARGC_AND_ARGV_DUMP_COLOR(color,s1,s2) \
{ int k =0; \
DBG_COLOR(color,"(argc: %d", s1); \
for (k = 0; k < s1; k++) \
{ \
DBG_COLOR_0(color,", [%s]", s2[k]); \
} \
DBG_COLOR_0(color,")\n"); \
}
#define ARGC_AND_ARGV_ER_DUMP(s1,s2) if (dbg_more>=DBG_LVL_ERROR) ARGC_AND_ARGV_DUMP_COLOR(COLORX_RED,s1,s2)
#define ARGC_AND_ARGV_WN_DUMP(s1,s2) if (dbg_more>=DBG_LVL_WARN) ARGC_AND_ARGV_DUMP_COLOR(COLORX_PURPLE,s1,s2)
#define ARGC_AND_ARGV_IF_DUMP(s1,s2) if (dbg_more>=DBG_LVL_INFO) ARGC_AND_ARGV_DUMP_COLOR(COLORX_YELLOW,s1,s2)
#define ARGC_AND_ARGV_DB_DUMP(s1,s2) if (dbg_more>=DBG_LVL_DEBUG) ARGC_AND_ARGV_DUMP_COLOR(COLORX_WHITE,s1,s2)
#define ARGC_AND_ARGV_TR_DUMP(s1,s2) if (dbg_more>=DBG_LVL_TRACE) ARGC_AND_ARGV_DUMP_COLOR(COLORX_LIGHT_GRAY,s1,s2)
#endif
//#define BT_SHELL_DBG(format, args...) bt_shell_printf("%s:%d - "format"", __FUNCTION__, __LINE__, ## args)
//#define BT_SHELL_DBG(format, args...) ({ DBG_IF(format, ## args); })
#define BT_SHELL_DBG(format, args...) ({ DBG_DB(format, ## args); })
//#define BT_SHELL_DBG_0(format, args...) bt_shell_printf("%s:%d - "format"", __FUNCTION__, __LINE__, ## args)
//#define BT_SHELL_DBG_0(format, args...) ({ DBG_IF_0(format, ## args)}; })
#define BT_SHELL_DBG_0(format, args...) ({ DBG_DB_0(format, ## args)}; })
#define ARGC_AND_ARGV_DUMP(s1,s2) ARGC_AND_ARGV_DB_DUMP(s1,s2)
typedef struct CHRC_Struct
{
void* next;
struct chrc *chrc;
} CHRC_t;
typedef void gatt_chrc_write_value_fn(void *user_data, struct chrc *chrc, char *device, char *link);
typedef void gatt_application_registered_fn(void *user_data);
typedef void gatt_register_service_fn(void *user_data, struct service *service);
typedef void gatt_register_chrc_fn(void *user_data, struct chrc *chrc);
typedef void advertising_registered_fn(void *user_data);
typedef void advertising_unregistered_fn(void *user_data);
typedef void advertising_released_fn(void *user_data);
typedef void client_ready_fn(GDBusClient *client, void *user_data);
typedef void proxy_added_fn(GDBusProxy *proxy, void *user_data);
typedef void proxy_removed_fn(GDBusProxy *proxy, void *user_data);
typedef void property_changed_fn(GDBusProxy *proxy, const char *name, DBusMessageIter *iter, void *user_data);
typedef void connect_handler_fn(DBusConnection *connection, void *user_data);
typedef void disconnect_handler_fn(DBusConnection *connection, void *user_data);
typedef void message_handler_fn(DBusConnection *connection, DBusMessage *message, void *user_data);
typedef struct CTRL_Struct
{
char name[LEN_OF_NAME64];
char address[LEN_OF_MAC];
int pairable;
} CTRL_t;
typedef struct BlueZX_Struct
{
char name[LEN_OF_NAME32];
ThreadX_t tidx;
int isfree;
int isinit;
int isready;
char save_path[LEN_OF_DIRNAME];
CLIST_STRUCT(chrc_list);
int isadvertising;
int isagent;
gatt_chrc_write_value_fn *gatt_chrc_write_value_cb;
gatt_application_registered_fn *gatt_application_registered_cb;
gatt_register_service_fn *gatt_register_service_cb;
gatt_register_chrc_fn *gatt_register_chrc_cb;
advertising_registered_fn *advertising_registered_cb;
advertising_unregistered_fn *advertising_unregistered_cb;
advertising_released_fn *advertising_released_cb;
client_ready_fn *client_ready_cb;
proxy_added_fn *proxy_added_cb;
proxy_removed_fn *proxy_removed_cb;
property_changed_fn *property_changed_cb;
connect_handler_fn *connect_handler_cb;
disconnect_handler_fn *disconnect_handler_cb;
message_handler_fn *message_handler_cb;
CTRL_t ctrl;
void *data;
} BlueZX_t;
//******************************************************************************
//** function **
//******************************************************************************
int bluezx_ctrl_pairable_set(char *str);
void bluezx_ctrl_pairable_cb(char *str);
void bluezx_ctrl_name_cb(char *name);
void bluezx_ctrl_address_and_name_cb(char *address, char *name);
void bluezx_gatt_chrc_write_value_cb(struct chrc *chrc, char *device, char *link);
void bluezx_gatt_application_registered_cb(void);
void bluezx_gatt_register_service_cb(struct service *service);
void bluezx_gatt_register_chrc_cb(struct chrc *chrc);
void bluezx_advertising_set(BlueZX_t *bluezx_req, int isadvertising);
int bluezx_advertising(BlueZX_t *bluezx_req);
void bluezx_advertising_registered_cb(void);
void bluezx_advertising_unregistered_cb(void);
void bluezx_advertising_released_cb(void);
void bluezx_agnet_set(BlueZX_t *bluezx_req, int isagent);
int bluezx_agent(BlueZX_t *bluezx_req);
void bluezx_agent_register_reply_cb(DBusMessage *message, void *user_data);
void bluezx_agent_release_cb(void);
void bluezx_client_ready_set(BlueZX_t *bluezx_req, READY_ID ready);
READY_ID bluezx_client_ready(BlueZX_t *bluezx_req);
void bluezx_client_ready_cb(GDBusClient *client, void *user_data);
void bluezx_proxy_added_cb(GDBusProxy *proxy, void *user_data);
void bluezx_proxy_removed_cb(GDBusProxy *proxy, void *user_data);
void bluezx_property_changed_cb(GDBusProxy *proxy, const char *name, DBusMessageIter *iter, void *user_data);
void bluezx_connect_handler_cb(DBusConnection *connection, void *user_data);
void bluezx_disconnect_handler_cb(DBusConnection *connection, void *user_data);
void bluezx_message_handler_cb(DBusConnection *connection, DBusMessage *message, void *user_data);
int bluezx_exec_helper(exec_fn cb, void *user_data, char *action, ...);
void bluezx_ready_set(BlueZX_t *bluezx_req, READY_ID ready);
READY_ID bluezx_ready(BlueZX_t *bluezx_req);
int bluezx_thread_init(BlueZX_t *bluezx_req, char *save_path);
void bluezx_thread_stop(BlueZX_t *bluezx_req);
void bluezx_thread_close(BlueZX_t *bluezx_req);
#endif