• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 //  Copyright 2015 Google, Inc.
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 #pragma once
18 
19 #include <base/macros.h>
20 
21 #include <android/bluetooth/BnBluetoothGattServer.h>
22 #include <android/bluetooth/IBluetoothGattServerCallback.h>
23 
24 #include "service/gatt_server.h"
25 #include "service/ipc/binder/interface_with_instances_base.h"
26 
27 using android::bluetooth::BnBluetoothGattServer;
28 using android::bluetooth::IBluetoothGattServerCallback;
29 
30 using ::android::binder::Status;
31 
32 namespace bluetooth {
33 class Adapter;
34 }  // namespace bluetooth
35 
36 namespace ipc {
37 namespace binder {
38 
39 // Implements the server side of the IBluetoothGattServer interface.
40 class BluetoothGattServerBinderServer : public BnBluetoothGattServer,
41                                         public InterfaceWithInstancesBase,
42                                         public bluetooth::GattServer::Delegate {
43  public:
44   explicit BluetoothGattServerBinderServer(bluetooth::Adapter* adapter);
45   ~BluetoothGattServerBinderServer() override = default;
46 
47   // IBluetoothGattServer overrides:
48   Status RegisterServer(
49       const ::android::sp<::android::bluetooth::IBluetoothGattServerCallback>&
50           callback,
51       bool* _aidl_return) override;
52   Status UnregisterServer(int32_t server_id) override;
53   Status UnregisterAll() override;
54   Status AddService(int32_t server_id,
55                     const ::android::bluetooth::BluetoothGattService& service,
56                     bool* _aidl_return) override;
57   Status SendResponse(int32_t server_id,
58                       const ::android::String16& device_address,
59                       int32_t request_id, int32_t status, int32_t offset,
60                       const ::std::vector<uint8_t>& value,
61                       bool* _aidl_return) override;
62   Status SendNotification(int32_t server_id,
63                           const ::android::String16& device_address, int handle,
64                           bool confirm, const ::std::vector<uint8_t>& value,
65                           bool* _aidl_return) override;
66 
67   // bluetooth::GattServer::Delegate overrides:
68   void OnCharacteristicReadRequest(bluetooth::GattServer* gatt_server,
69                                    const std::string& device_address,
70                                    int request_id, int offset, bool is_long,
71                                    uint16_t handle) override;
72   void OnDescriptorReadRequest(bluetooth::GattServer* gatt_server,
73                                const std::string& device_address,
74                                int request_id, int offset, bool is_long,
75                                uint16_t handle) override;
76   void OnCharacteristicWriteRequest(bluetooth::GattServer* gatt_server,
77                                     const std::string& device_address,
78                                     int request_id, int offset,
79                                     bool is_prepare_write, bool need_response,
80                                     const std::vector<uint8_t>& value,
81                                     uint16_t handle) override;
82   void OnDescriptorWriteRequest(bluetooth::GattServer* gatt_server,
83                                 const std::string& device_address,
84                                 int request_id, int offset,
85                                 bool is_prepare_write, bool need_response,
86                                 const std::vector<uint8_t>& value,
87                                 uint16_t handle) override;
88   void OnExecuteWriteRequest(bluetooth::GattServer* gatt_server,
89                              const std::string& device_address, int request_id,
90                              bool is_execute) override;
91   void OnConnectionStateChanged(bluetooth::GattServer* gatt_server,
92                                 const std::string& device_addres,
93                                 bool connected) override;
94 
95  private:
96   // Returns a pointer to the IBluetoothGattServerCallback instance
97   // associated with |server_id|. Returns NULL if such a callback cannot be
98   // found.
99   android::sp<IBluetoothGattServerCallback> GetGattServerCallback(
100       int server_id);
101 
102   // Returns a pointer to the GattServer instance associated with |server_id|.
103   // Returns NULL if such an instance cannot be found.
104   std::shared_ptr<bluetooth::GattServer> GetGattServer(int server_id);
105 
106   // InterfaceWithInstancesBase override:
107   void OnRegisterInstanceImpl(bluetooth::BLEStatus status,
108                               android::sp<IInterface> callback,
109                               bluetooth::BluetoothInstance* instance) override;
110 
111   bluetooth::Adapter* adapter_;  // weak
112 
113   DISALLOW_COPY_AND_ASSIGN(BluetoothGattServerBinderServer);
114 };
115 
116 }  // namespace binder
117 }  // namespace ipc
118