1 //
2 //  Copyright (C) 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 #include <binder/IBinder.h>
21 #include <binder/IInterface.h>
22 
23 #include <bluetooth/advertise_data.h>
24 #include <bluetooth/advertise_settings.h>
25 #include <bluetooth/scan_result.h>
26 
27 namespace ipc {
28 namespace binder {
29 
30 // This class defines the Binder IPC interface for receiving callbacks related
31 // to Bluetooth Low Energy operations.
32 // TODO(armansito): This class was written based on a new design doc proposal.
33 // We need to add an AIDL for this to the framework code.
34 //
35 // NOTE: KEEP THIS FILE UP-TO-DATE with the corresponding AIDL, otherwise this
36 // won't be compatible with the Android framework.
37 /* oneway */ class IBluetoothLowEnergyCallback : public android::IInterface {
38  public:
39   DECLARE_META_INTERFACE(BluetoothLowEnergyCallback);
40 
41   static const char kServiceName[];
42 
43   // Transaction codes for interface methods.
44   enum {
45     ON_CLIENT_REGISTERED_TRANSACTION = android::IBinder::FIRST_CALL_TRANSACTION,
46     ON_CONNECTION_STATE_TRANSACTION,
47     ON_MTU_CHANGED_TRANSACTION,
48     ON_SCAN_RESULT_TRANSACTION,
49     ON_BATCH_SCAN_RESULTS_TRANSACTION,
50     ON_READ_REMOTE_RSSI_TRANSACTION,
51     ON_MULTI_ADVERTISE_CALLBACK_TRANSACTION,
52     ON_SCAN_MANAGER_ERROR_CALLBACK_TRANSACTION,
53     ON_CONFIGURE_ATT_MTU_TRANSACTION,
54     ON_ATT_MTU_CHANGED_TRANSACTION,
55     ON_FOUND_OR_LOST_TRANSACTION,
56   };
57 
58   virtual void OnClientRegistered(int status, int client_if) = 0;
59   virtual void OnConnectionState(int status, int client_id, const char* address,
60                                  bool connected) = 0;
61   virtual void OnMtuChanged(int status, const char* address, int mtu) = 0;
62   virtual void OnScanResult(const bluetooth::ScanResult& scan_result) = 0;
63   virtual void OnMultiAdvertiseCallback(
64       int status, bool is_start,
65       const bluetooth::AdvertiseSettings& settings) = 0;
66 
67   // TODO(armansito): Complete the API definition.
68 
69  private:
70   DISALLOW_COPY_AND_ASSIGN(IBluetoothLowEnergyCallback);
71 };
72 
73 // The Binder server interface to allback. A class that
74 // implements IBluetoothLowEnergyCallback must inherit from this class.
75 class BnBluetoothLowEnergyCallback
76     : public android::BnInterface<IBluetoothLowEnergyCallback> {
77  public:
78   BnBluetoothLowEnergyCallback() = default;
79   virtual ~BnBluetoothLowEnergyCallback() = default;
80 
81  private:
82   virtual android::status_t onTransact(
83       uint32_t code,
84       const android::Parcel& data,
85       android::Parcel* reply,
86       uint32_t flags = 0);
87 
88   DISALLOW_COPY_AND_ASSIGN(BnBluetoothLowEnergyCallback);
89 };
90 
91 // The Binder client interface to IBluetoothLowEnergyCallback.
92 class BpBluetoothLowEnergyCallback
93     : public android::BpInterface<IBluetoothLowEnergyCallback> {
94  public:
95   BpBluetoothLowEnergyCallback(const android::sp<android::IBinder>& impl);
96   virtual ~BpBluetoothLowEnergyCallback() = default;
97 
98   // IBluetoothLowEnergyCallback overrides:
99   void OnClientRegistered(int status, int client_if) override;
100   void OnConnectionState(int status, int client_id, const char* address,
101                          bool connected) override;
102   void OnMtuChanged(int status, const char* address, int mtu) override;
103   void OnScanResult(const bluetooth::ScanResult& scan_result) override;
104   void OnMultiAdvertiseCallback(
105       int status, bool is_start,
106       const bluetooth::AdvertiseSettings& settings) override;
107 
108  private:
109   DISALLOW_COPY_AND_ASSIGN(BpBluetoothLowEnergyCallback);
110 };
111 
112 }  // namespace binder
113 }  // namespace ipc
114