10#include <kindlebt/kindlebt_log.h>
12#include "kindlebt_application.c"
13#include "kindlebt_utils.c"
15pthread_mutex_t callback_vars_lock = PTHREAD_MUTEX_INITIALIZER;
16pthread_cond_t callback_vars_cond = PTHREAD_COND_INITIALIZER;
23void adapterStateCallback(
state_t state) {
24 if (state == ACEBT_STATE_ENABLED) {
25 log_debug(
"Callback %s(): state: STATE_ENABLED", __func__);
27 &callback_vars_lock, &callback_vars_cond, &
callback_vars.bt_enabled,
true
29 }
else if (state == ACEBT_STATE_DISABLED) {
30 log_debug(
"Callback %s(): state: STATE_DISABLED", __func__);
32 &callback_vars_lock, &callback_vars_cond, &
callback_vars.bt_enabled,
false
37void bondStateCallback(
status_t status,
bdAddr_t* p_remote_addr, aceBT_bondState_t state) {
40 utilsConvertBdAddrToStr(p_remote_addr, addr);
43 case ACEBT_BOND_STATE_NONE:
44 log_debug(
"Callback %s(): status: %d addr: %s state: NONE", __func__, status, addr);
46 case ACEBT_BOND_STATE_BONDING:
47 log_debug(
"Callback %s(): status: %d addr: %s state: BONDING", __func__, status, addr);
49 case ACEBT_BOND_STATE_BONDED:
50 log_debug(
"Callback %s(): status: %d addr: %s state: BONDED", __func__, status, addr);
54 "Callback %s(): status: %d addr: %s state: UNKNOWN(%d)", __func__, status, addr, state
62 "Callback %s(): status %d, mtu %d, conn_handle %p", __func__, status, mtu, conn_handle
65 if (status == ACE_STATUS_OK)
66 setCallbackVariable(&callback_vars_lock, &callback_vars_cond, &
callback_vars.mtu_set,
true);
69void bleRegCallback(
status_t status) {
70 log_debug(
"Callback %s(): status: %d\n", __func__, status);
72 if (status == ACE_STATUS_OK)
74 &callback_vars_lock, &callback_vars_cond, &
callback_vars.ble_registered,
true
78void bleConnStateChangedCallback(
83 utilsConvertBdAddrToStr(p_addr, addr);
85 "Callback %s(): state %d, status %d, conn_handle %p addr %s", __func__, state, status,
91 if (status == ACEBT_GATT_STATUS_SUCCESS) {
92 if (state == ACEBT_BLE_STATE_CONNECTED) {
93 log_info(
"BLE device %s connected", addr);
95 &callback_vars_lock, &callback_vars_cond, &
callback_vars.gattc_connected,
true
98 &callback_vars_lock, &callback_vars_cond, &
callback_vars.gattc_disconnected,
false
100 }
else if (state == ACEBT_BLE_STATE_DISCONNECTED) {
101 log_info(
"BLE device %s disconnected", addr);
103 &callback_vars_lock, &callback_vars_cond, &
callback_vars.gattc_connected,
false
106 &callback_vars_lock, &callback_vars_cond, &
callback_vars.gattc_disconnected,
true
113 log_debug(
"Callback %s(): conn_handle %p status %d", __func__, conn_handle, status);
115 if (status == ACE_STATUS_OK) {
117 &callback_vars_lock, &callback_vars_cond, &
callback_vars.gattc_discovered,
true
122void bleGattcGetDbCallback(
125 log_debug(
"Callback %s(): conn_handle %p no_svc %" PRIu32
"", __func__, conn_handle, no_svc);
130 if (status != ACE_STATUS_OK) {
131 log_error(
"Error copying GATT Database %d\n", status);
135 size_t size = 1024, offset = 0;
136 char* log_buff = malloc(size);
137 if (!log_buff)
return;
139 for (uint32_t i = 0; i < no_svc; i++) {
140 log_buff = append_to_buffer(
141 log_buff, &size, &offset,
"GATT Database index :%" PRIu32
" %p\n", i, &
pGgatt_service[i]
143 log_buff = utilsDumpServer(&
pGgatt_service[i], log_buff, &size, &offset);
146 log_debug(
"%s", log_buff);
149 setCallbackVariable(&callback_vars_lock, &callback_vars_cond, &
callback_vars.got_gatt_db,
true);
152void bleGattcNotifyCharsCallback(
155 log_debug(
"Callback %s(): conn_handle %p", __func__, conn_handle);
158 utilsPrintUuid(buff, &chars_value.gattRecord.uuid, 256);
159 log_debug(
"%s() UUID:: %s", __func__, buff);
161 size_t size = 1024, offset = 0;
162 char* log_buff = malloc(size);
163 if (!log_buff)
return;
165 log_buff = append_to_buffer(log_buff, &size, &offset,
"%s() DATA:: ", __func__);
166 for (
int idx = 0; idx < chars_value.blobValue.size; idx++)
168 append_to_buffer(log_buff, &size, &offset,
"%x", chars_value.blobValue.data[idx]);
170 log_debug(
"%s", log_buff);
174void bleGattcReadCharsCallback(
177 log_debug(
"Callback %s(): status %d conn_handle %p", __func__, status, conn_handle);
180 utilsPrintUuid(buff, &chars_value.gattRecord.uuid, 256);
181 log_debug(
"%s() UUID:: %s", __func__, buff);
183 size_t size = 1024, offset = 0;
184 char* log_buff = malloc(size);
185 if (!log_buff)
return;
187 log_buff = append_to_buffer(log_buff, &size, &offset,
"%s() DATA:: ", __func__);
188 for (
int idx = 0; idx < chars_value.blobValue.size; idx++)
190 append_to_buffer(log_buff, &size, &offset,
"%x", chars_value.blobValue.data[idx]);
192 log_debug(
"%s", log_buff);
196void bleGattcWriteCharsCallback(
200 "Callback %s(): conn_handle %p GATT format %u", __func__, conn_handle,
201 gatt_characteristics.format
207 bleGattcServiceDiscoveredCallback(conn_handle, status);
209 if (application_gatt_client_callbacks.on_ble_gattc_service_discovered_cb != NULL) {
210 application_gatt_client_callbacks.on_ble_gattc_service_discovered_cb(conn_handle, status);
214void bleGattcGetDbCallbackWrapper(
217 bleGattcGetDbCallback(conn_handle, gatt_service, no_svc);
219 if (application_gatt_client_callbacks.on_ble_gattc_get_gatt_db_cb != NULL) {
220 application_gatt_client_callbacks.on_ble_gattc_get_gatt_db_cb(
221 conn_handle, gatt_service, no_svc
226void bleGattcNotifyCharsCallbackWrapper(
231 if (application_gatt_client_callbacks.notify_characteristics_cb != NULL) {
232 application_gatt_client_callbacks.notify_characteristics_cb(conn_handle, chars_value);
236void bleGattcReadCharsCallbackWrapper(
241 if (application_gatt_client_callbacks.on_ble_gattc_read_characteristics_cb != NULL) {
242 application_gatt_client_callbacks.on_ble_gattc_read_characteristics_cb(
243 conn_handle, chars_value, status
248void bleGattcWriteCharsCallbackWrapper(
253 if (application_gatt_client_callbacks.on_ble_gattc_write_characteristics_cb != NULL) {
254 application_gatt_client_callbacks.on_ble_gattc_write_characteristics_cb(
255 conn_handle, gatt_characteristics, status
aceBT_state_t state_t
Bluetooth radio state.
#define MAC_ADDR_STR_LEN
MAC address string representation length (XX:XX:XX:XX:XX:XX)
aceBT_bleConnState_t bleConnState_t
BLE connection state.
aceBT_bdAddr_t bdAddr_t
Bluetooth address.
ace_status_t status_t
Bluetooth API status codes.
aceBT_bleGattsService_t bleGattsService_t
Structure for a GATT Server service.
aceBT_bleConnHandle bleConnHandle
Connection handle for the lifetime of a Bluetooth connection.
aceBT_bleGattCharacteristicsValue_t bleGattCharacteristicsValue_t
BLE GATT Characteristic.
aceBT_gattStatus_t gattStatus_t
BLE GATT status.
Bluetooth library for Kindles.
status_t bleCloneGattService(bleGattsService_t **dst_gatt_service, const bleGattsService_t *src_gatt_service, int no_svc)
[Internal] Clone a GATT Service
bleConnHandle ble_conn_handle
Internal BLE connection handle.
bleGattsService_t * pGgatt_service
Internal reference to a GATT service.
bleCallbackVars_t callback_vars
Internal bleCallbackVars_t.
uint32_t gNo_svc
Internal number of GATT services, often paired with pGgatt_service.
Internal struct for certain Bluetooth conditions.