6#include <ace/bluetooth_ble_api.h>
7#include <ace/bluetooth_ble_gatt_client_api.h>
8#include <ace/bluetooth_common_api.h>
9#include <ace/bluetooth_session_api.h>
13#include <kindlebt/compat_ace.h>
16#include "kindlebt_callbacks.c"
23 .adapter_state_cb = adapterStateCallback,
24 .bond_state_cb = bondStateCallback,
26 .ble_registered_cb = bleRegCallback,
27 .connection_state_change_cb = bleConnStateChangedCallback,
28 .on_ble_mtu_updated_cb = bleMtuUpdatedCallback,
33 .on_ble_gattc_service_discovered_cb = bleGattcServiceDiscoveredCallbackWrapper,
34 .on_ble_gattc_get_gatt_db_cb = bleGattcGetDbCallbackWrapper,
35 .notify_characteristics_cb = bleGattcNotifyCharsCallbackWrapper,
36 .on_ble_gattc_read_characteristics_cb = bleGattcReadCharsCallbackWrapper,
37 .on_ble_gattc_write_characteristics_cb = bleGattcWriteCharsCallbackWrapper,
49 return aceBT_openSession(session_type, NULL, session_handle);
56 log_warn(
"BLE is already registered\n");
60 status_t ble_status = aceBT_bleRegister(session_handle, &ble_callbacks);
61 if (ble_status != ACE_STATUS_OK)
return ble_status;
63 return waitForCondition(
64 &callback_vars_lock, &callback_vars_cond, &
callback_vars.ble_registered
69 status_t ble_status = aceBT_bleDeRegister(session_handle);
70 if (ble_status != ACE_STATUS_OK)
return ble_status;
73 &callback_vars_lock, &callback_vars_cond, &
callback_vars.ble_registered,
false
82 if (callbacks != NULL) {
83 application_gatt_client_callbacks = *callbacks;
86 return shim_bleRegisterGattClient(
87 session_handle, &gatt_client_callbacks, ACE_BT_BLE_APPID_GADGETS
92 return shim_bleDeregisterGattClient(session_handle);
96 status_t services_status = shim_bleDiscoverAllServices(session_handle, conn_handle);
97 if (services_status != ACE_STATUS_OK)
return services_status;
100 waitForCondition(&callback_vars_lock, &callback_vars_cond, &
callback_vars.gattc_discovered);
106 status_t db_status = shim_bleGetDatabase(conn_handle);
107 if (db_status != ACE_STATUS_OK)
return db_status;
110 waitForCondition(&callback_vars_lock, &callback_vars_cond, &
callback_vars.got_gatt_db);
112 if (cond_status == ACE_STATUS_OK) p_gatt_service =
pGgatt_service;
120 return aceBT_bleCloneGattService(dst_gatt_service, src_gatt_service, no_svc);
128 aceBt_bleConnect(session_handle, p_device, conn_param, conn_role,
false, conn_priority);
129 if (conn_status != ACE_STATUS_OK)
return conn_status;
132 waitForCondition(&callback_vars_lock, &callback_vars_cond, &
callback_vars.gattc_connected);
145 return shim_bleReadCharacteristic(session_handle, conn_handle, chars_value);
152 return shim_bleWriteCharacteristic(session_handle, conn_handle, chars_value, request_type);
159 return shim_bleWriteDescriptor(session_handle, conn_handle, chars_value, request_type);
166 return shim_bleSetNotification(session_handle, conn_handle, chars_value, enable);
aceBt_bleConnParam_t bleConnParam_t
BLE connection parameters.
aceBT_bleGattClientCallbacks_t bleGattClientCallbacks_t
Callback struct of GATT Client Bluetooth operations.
aceBT_state_t state_t
Bluetooth radio state.
aceBT_responseType_t responseType_t
Type of write operation for a BLE characteristic.
aceBT_bleCallbacks_t bleCallbacks_t
Callback struct of LE Bluetooth operations.
aceBT_bdAddr_t bdAddr_t
Bluetooth address.
ace_status_t status_t
Bluetooth API status codes.
aceBT_bleConnRole_t bleConnRole_t
BLE connection role.
aceBT_bleGattsService_t bleGattsService_t
Structure for a GATT Server service.
aceBT_bleConnHandle bleConnHandle
Connection handle for the lifetime of a Bluetooth connection.
aceBt_bleConnPriority_t bleConnPriority_t
BLE connection priority.
aceBT_commonCallbacks_t commonCallbacks_t
Callback struct of common Classic/LE Bluetooth operations.
aceBT_sessionHandle sessionHandle
Session handle for the lifetime of the Bluetooth application.
aceBT_bleGattCharacteristicsValue_t bleGattCharacteristicsValue_t
BLE GATT Characteristic.
aceBT_sessionType_t sessionType_t
Bluetooth session type (Classic, Low Energy, Dual)
status_t enableRadio(sessionHandle session_handle)
Turn on the Bluetooth radio.
status_t bleWriteDescriptor(sessionHandle session_handle, bleConnHandle conn_handle, bleGattCharacteristicsValue_t *chars_value, responseType_t request_type)
Write a Characteristic Descriptor from a BLE device.
status_t disableRadio(sessionHandle session_handle)
Turn off the Bluetooth radio.
status_t bleWriteCharacteristic(sessionHandle session_handle, bleConnHandle conn_handle, bleGattCharacteristicsValue_t *chars_value, responseType_t request_type)
Write a Characteristic from a BLE device.
status_t getRadioState(state_t *p_out_state)
Get current radio status.
status_t bleGetDatabase(bleConnHandle conn_handle, bleGattsService_t *p_gatt_service)
Retrieve all services of a remote GATT Server.
status_t openSession(sessionType_t session_type, sessionHandle *session_handle)
Open a Bluetooth session.
status_t bleRegisterGattClient(sessionHandle session_handle, bleGattClientCallbacks_t *callbacks)
Register as a BLE GATT Client.
status_t bleRegister(sessionHandle session_handle)
Register as BLE client.
status_t bleSetNotification(sessionHandle session_handle, bleConnHandle conn_handle, bleGattCharacteristicsValue_t chars_value, bool enable)
Set notifications on a Characteristic from a BLE device.
status_t closeSession(sessionHandle session_handle)
Close a Bluetooth session.
status_t bleDeregister(sessionHandle session_handle)
Deregister as BLE client.
bool isBLESupported(void)
Is BLE supported by the hardware Bluetooth adapter.
status_t bleReadCharacteristic(sessionHandle session_handle, bleConnHandle conn_handle, bleGattCharacteristicsValue_t chars_value)
Read a Characteristic from a BLE device.
status_t bleDiscoverAllServices(sessionHandle session_handle, bleConnHandle conn_handle)
Discover all services of a remote GATT Server.
status_t bleConnect(sessionHandle session_handle, bleConnHandle *conn_handle, bdAddr_t *p_device, bleConnParam_t conn_param, bleConnRole_t conn_role, bleConnPriority_t conn_priority)
Connect to a BLE device.
status_t bleDisconnect(bleConnHandle conn_handle)
Disconnect from a BLE device.
status_t bleDeregisterGattClient(sessionHandle session_handle)
Deregister as a BLE GATT Client.
sessionType_t getSupportedSession(void)
Gets the supported Bluetooth session type (Classic, BLE, Dual).
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.