Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 1 | /* |
Jakub Pawlowski | 5b790fe | 2017-09-18 09:00:20 -0700 | [diff] [blame] | 2 | * Copyright 2015, The Android Open Source Project |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | /** |
| 18 | * Binder IPC interface for receiving callbacks related to Bluetooth GATT |
| 19 | * server-role operations. |
| 20 | */ |
| 21 | oneway interface IBluetoothGattServerCallback { |
| 22 | /** |
| 23 | * Called to report the result of a call to |
| 24 | * IBluetoothGattServer.registerServer. |status| will be 0 (or |
| 25 | * BLE_STATUS_SUCCESS) if the server was successfully registered. |server_if| |
| 26 | * is the owning application's unique GATT server handle and can be used to |
| 27 | * perform further operations on the IBluetoothGattServer interface. |
| 28 | */ |
| 29 | void onServerRegistered(in int status, in int server_if); |
| 30 | |
| 31 | /** |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 32 | * Called to report the result of a call to IBluetoothGattServer.AddService. |
| 33 | * A |status| of 0 denotes success, which means that the GATT service has |
| 34 | * been published and is discoverable. In this case handles of added service, |
| 35 | * it's characteristics and descriptors are filled. |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 36 | */ |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 37 | void onServiceAdded(in int status, in BluetoothGattServer service_id); |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 38 | |
| 39 | /** |
| 40 | * Called when there is an incoming read request from the remote device with |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 41 | * address |device_address| for the characteristic with handle |handle|. |
| 42 | * |offset| is the index of the characteristic value that |
Arman Uguray | ff1469f | 2015-10-13 09:04:44 -0700 | [diff] [blame] | 43 | * the remote device wants to read from. If |is_long| is true, then this |
| 44 | * request is part of a Long Read procedure. An implementation should handle |
| 45 | * this request by calling IBluetoothGattServer.sendResponse with the given |
| 46 | * |request_id| and the appropriate characteristic value. |
| 47 | * |
| 48 | * If |offset| is invalid then sendResponse should be called with |
| 49 | * GATT_ERROR_INVALID_OFFSET. If |is_long| is true but this characteristic is |
| 50 | * not a long attribute (i.e. its value would fit within the current ATT MTU), |
| 51 | * then GATT_ERROR_ATTRIBUTE_NOT_LONG should be returned. |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 52 | */ |
| 53 | void onCharacteristicReadRequest(in String device_address, in int request_id, |
| 54 | in int offset, in boolean is_long, |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 55 | in int handle); |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 56 | |
| 57 | /** |
| 58 | * Called when there is an incoming read request from the remote device with |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 59 | * address |device_address| for the descriptor with handle |handle|. |
| 60 | * |offset| is the index of the descriptor value that |
Arman Uguray | ff1469f | 2015-10-13 09:04:44 -0700 | [diff] [blame] | 61 | * the remote device wants to read from. If |is_long| is true, then this |
| 62 | * request is part of a Long Read procedure. An implementation should handle |
| 63 | * this request by calling IBluetoothGattServer.sendResponse with the given |
| 64 | * |request_id| and the appropriate descriptor value. |
| 65 | * |
| 66 | * If |offset| is invalid then sendResponse should be called with |
| 67 | * GATT_ERROR_INVALID_OFFSET. If |is_long| is true but this descriptor is |
| 68 | * not a long attribute (i.e. its value would fit within the current ATT MTU), |
| 69 | * then GATT_ERROR_ATTRIBUTE_NOT_LONG should be returned. |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 70 | */ |
| 71 | void onDescriptorReadRequest(in String device_address, in int request_id, |
| 72 | in int offset, in boolean is_long, |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 73 | in int handle); |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 74 | |
| 75 | /** |
| 76 | * Called when there is an incoming write request from the remote device with |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 77 | * address |device_address| for the characteristic with handle |handle| |
| 78 | * with the value |value|. An implementation should handle |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 79 | * this request by calling IBluetoothGattServer.sendResponse with the given |
Arman Uguray | ff1469f | 2015-10-13 09:04:44 -0700 | [diff] [blame] | 80 | * |request_id|. |offset| is the index of the characteristic value that the |
| 81 | * remote device wants to write to, so the value should be written starting at |
| 82 | * |offset|. If |need_response| is false, then this is a "Write Without |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 83 | * Response" procedure and sendResponse should not be called. If |
| 84 | * |is_prepare_write| is true, then the implementation should not commit this |
| 85 | * write until a call to onExecuteWriteRequest is received. |
Arman Uguray | ff1469f | 2015-10-13 09:04:44 -0700 | [diff] [blame] | 86 | * |
| 87 | * If |offset| is invalid, then sendResponse should be called with |
| 88 | * GATT_ERROR_INVALID_OFFSET. |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 89 | */ |
| 90 | void onCharacteristicWriteRequest(in String device_address, in int request_id, |
| 91 | in int offset, in boolean is_prepare_write, |
| 92 | in boolean need_response, in byte[] value, |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 93 | in int handle); |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 94 | |
| 95 | /** |
| 96 | * Called when there is an incoming write request from the remote device with |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 97 | * address |device_address| for the descriptor with handle |handle| |
| 98 | * with the value |value|. An implementation should handle |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 99 | * this request by calling IBluetoothGattServer.sendResponse with the given |
Arman Uguray | ff1469f | 2015-10-13 09:04:44 -0700 | [diff] [blame] | 100 | * |request_id|. |offset| is the index of the descriptor value that the |
| 101 | * remote device wants to write to, so the value should be written starting at |
| 102 | * |offset|. If |need_response| is false, then this is a "Write Without |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 103 | * Response" procedure and sendResponse should not be called. If |
| 104 | * |is_prepare_write| is true, then the implementation should not commit this |
| 105 | * write until a call to onExecuteWriteRequest is received. |
Arman Uguray | ff1469f | 2015-10-13 09:04:44 -0700 | [diff] [blame] | 106 | * |
| 107 | * If |offset| is invalid, then sendResponse should be called with |
| 108 | * GATT_ERROR_INVALID_OFFSET. |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 109 | */ |
| 110 | void onDescriptorWriteRequest(in String device_address, in int request_id, |
| 111 | in int offset, in boolean is_prepare_write, |
| 112 | in boolean need_response, in byte[] value, |
Jakub Pawlowski | a641b6f | 2016-03-26 00:47:23 -0700 | [diff] [blame] | 113 | in int handle); |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 114 | |
| 115 | /** |
| 116 | * Called when there is an incoming execute-write request to commit or abort |
| 117 | * previously prepared writes. If |is_execute| is true, then the |
| 118 | * implementation should commit all previously prepared writes. Otherwise all |
| 119 | * prepared writes should dropped (aborted). The application should report the |
| 120 | * result of the execute write by calling IBluetoothGattServer.sendResponse |
| 121 | * with the given |request_id|. |
| 122 | */ |
| 123 | void onExecuteWriteRequest(in String device_address, in int request_id, |
| 124 | in boolean is_execute); |
| 125 | |
| 126 | /** |
| 127 | * Reports the result of a previous call to |
| 128 | * IBluetoothGattServer.sendNotification. If an indication was sent, this will |
Arman Uguray | ff1469f | 2015-10-13 09:04:44 -0700 | [diff] [blame] | 129 | * be called when the remote device sends a confirmation packet. Otherwise |
| 130 | * this will be called as soon as the notification packet is successfully sent |
| 131 | * out over the radio. |
Arman Uguray | f6fc0c4 | 2015-10-06 18:10:15 -0700 | [diff] [blame] | 132 | */ |
| 133 | void onNotificationSent(in String device_address, in int status); |
| 134 | } |