1#include <kindlebt/compat_ace_handler.h>
5#include <kindlebt/compat_ace_internals.h>
6#include <kindlebt/compat_ace_shims.h>
7#include <kindlebt/compat_ace_utils.h>
10 log_debug(
"Called into pre 5.17 %s", __func__);
13 log_info(
"[%s()]: Server handler callback: data is null", __func__);
17 printf(
"Dumping aceAipc_parameter_t memory:\n");
19 dump_aceAipc_parameter_t(task);
25 getBTClientData(session_handle, CALLBACK_INDEX_BLE_GATT_CLIENT);
26 if (session_handle == NULL || p_client_callbacks == NULL) {
28 "[%s()]: Error invalid handle, session %p callback %p", __func__, session_handle,
35 switch ((ipc_evt_enum_t)task->function_id) {
36 case ACE_BT_CALLBACK_GATTC_SERVICE_REGISTERED: {
37 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_SERVICE_REGISTERED");
38 log_debug(
"Not actually implemented at all in acebt, so ignore this log");
40 case ACE_BT_CALLBACK_GATTC_SERVICE_DISCOVERED: {
41 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_SERVICE_DISCOVERED");
42 if (p_client_callbacks->on_ble_gattc_service_discovered_cb == NULL) {
43 log_error(
"[%s()]: on_ble_gattc_service_discovered_cb not implemented", __func__);
47 dis_req_t* data = (dis_req_t*)task->buffer;
48 p_client_callbacks->on_ble_gattc_service_discovered_cb(
52 case ACE_BT_CALLBACK_GATTC_CHARS_READ_RSP: {
53 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_CHARS_READ_RSP");
54 if (p_client_callbacks->on_ble_gattc_read_characteristics_cb == NULL) {
55 log_error(
"[%s()]: on_ble_gattc_read_characteristics_cb not implemented", __func__);
59 gattc_read_chars_data_t* data = (gattc_read_chars_data_t*)task->buffer;
63 data->value.blobValue.data = data->data;
64 uint32_t len32 = data->data_len;
65 if (len32 > UINT16_MAX) {
67 "[%s() ACE_BT_CALLBACK_GATTC_CHARS_READ_RSP]: data_len too big: %d", __func__,
72 data->value.blobValue.size = (uint16_t)len32;
73 data->value.blobValue.offset = 0;
76 p_client_callbacks->on_ble_gattc_read_characteristics_cb(
80 case ACE_BT_CALLBACK_GATTC_CHARS_WRITE_RSP: {
81 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_CHARS_WRITE_RSP");
82 if (p_client_callbacks->on_ble_gattc_write_characteristics_cb == NULL) {
83 log_error(
"[%s()]: on_ble_gattc_write_characteristics_cb not implemented", __func__);
87 gattc_write_chars_data_t* data = (gattc_write_chars_data_t*)task->buffer;
90 data->value.blobValue.data = data->data;
91 uint32_t len32 = data->data_len;
92 if (len32 > UINT16_MAX) {
94 "[%s() ACE_BT_CALLBACK_GATTC_CHARS_WRITE_RSP]: data_len too big: %d", __func__,
99 data->value.blobValue.size = (uint16_t)len32;
100 data->value.blobValue.offset = 0;
103 p_client_callbacks->on_ble_gattc_write_characteristics_cb(
107 case ACE_BT_CALLBACK_GATTC_EXEC_WRITE_RSP: {
108 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_EXEC_WRITE_RSP");
110 case ACE_BT_CALLBACK_GATTC_NOTIFY_CHARS_CHANGED: {
111 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_NOTIFY_CHARS_CHANGED");
112 if (p_client_callbacks->notify_characteristics_cb == NULL) {
113 log_error(
"[%s()]: notify_characteristics_cb not implemented", __func__);
117 notify_data_t* data = (notify_data_t*)task->buffer;
120 data->value.blobValue.data = data->data;
121 uint32_t len32 = data->data_len;
122 if (len32 > UINT16_MAX) {
124 "[%s() ACE_BT_CALLBACK_GATTC_NOTIFY_CHARS_CHANGED]: data_len too big: %d", __func__,
129 data->value.blobValue.size = (uint16_t)len32;
130 data->value.blobValue.offset = 0;
133 p_client_callbacks->notify_characteristics_cb(
137 case ACE_BT_CALLBACK_GATTC_DESC_WRITE_RSP: {
138 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_DESC_WRITE_RSP");
139 if (p_client_callbacks->on_ble_gattc_write_descriptor_cb == NULL) {
140 log_error(
"[%s()]: on_ble_gattc_write_descriptor_cb not implemented", __func__);
144 gattc_write_desc_data_t* data = (gattc_write_desc_data_t*)task->buffer;
147 data->desc.blobValue.data = data->data;
148 uint32_t len32 = data->data_len;
149 if (len32 > UINT16_MAX) {
151 "[%s() ACE_BT_CALLBACK_GATTC_DESC_WRITE_RSP]: data_len too big: %d", __func__,
156 data->desc.blobValue.size = (uint16_t)len32;
157 data->desc.blobValue.offset = 0;
162 charac.gattDescriptor = data->desc;
164 p_client_callbacks->on_ble_gattc_write_descriptor_cb(
168 case ACE_BT_CALLBACK_GATTC_DESC_READ_RSP: {
169 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_DESC_READ_RSP");
171 case ACE_BT_CALLBACK_GATTC_GET_DB_RSP: {
172 log_debug(
"BLE GATTC callback handler, case ACE_BT_CALLBACK_GATTC_GET_DB_RSP");
173 if (p_client_callbacks->on_ble_gattc_get_gatt_db_cb == NULL) {
174 log_error(
"[%s()]: on_ble_gattc_get_gatt_db_callback not implemented", __func__);
180 register_cback_gatts_list_t* data = (register_cback_gatts_list_t*)task->buffer;
182 deserealize_all_gatts_register_data(data, &gatt_service, &no_svc);
183 p_client_callbacks->on_ble_gattc_get_gatt_db_cb(
186 cleanup_all_service(gatt_service, no_svc);
189 log_error(
"[%s()]: Unknown GATT Client callback type %d", __func__, task->function_id);
aceBT_bleGattClientCallbacks_t bleGattClientCallbacks_t
Callback struct of GATT Client Bluetooth operations.
aceBT_bleGattsService_t bleGattsService_t
Structure for a GATT Server service.
aceBT_bleConnHandle bleConnHandle
Connection handle for the lifetime of a Bluetooth connection.
#define BLE_FORMAT_BLOB
BLOB format.
aceBT_sessionHandle sessionHandle
Session handle for the lifetime of the Bluetooth application.
aceBT_bleGattCharacteristicsValue_t bleGattCharacteristicsValue_t
BLE GATT Characteristic.