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 <rapidjson/document.h>
20#include <service/common/bluetooth/binder/IBluetooth.h>
21#include <service/common/bluetooth/binder/IBluetoothLowEnergy.h>
22#include <tuple>
23
24// BluetoothBinderFacade provides simple wrappers to call Binder apis.
25// Each public function returns a tuple of the return type and an integer
26// representing the pass/fail value of the function. The functions check to see
27// if the API call is actually possible. If it is the function's tuple will
28// contain the actual result and an integer that indicates the value passed. If
29// the function is not possible then there will be a dummy return value in the
30// first position of the tuple and the second value in the tuple indicates the
31// value failed. Therefore it is up to the function to decide whether the
32// expected api call is actually possible before calling it.
33//
34// TODO(tturney): Instead of using an integer in the tuple to represent
35// pass/fail, create a class that properly represents the result of the
36// function.
37class BluetoothBinderFacade {
38 public:
39  BluetoothBinderFacade();
40  std::tuple<bool, int> BluetoothBinderEnable();
41  std::tuple<std::string, int> BluetoothBinderGetAddress();
42  std::tuple<std::string, int> BluetoothBinderGetName();
43  std::tuple<bool, int> BluetoothBinderInitInterface();
44  std::tuple<bool, int> BluetoothBinderRegisterBLE();
45  std::tuple<int, int> BluetoothBinderSetAdvSettings(
46    int mode, int timeout_seconds, int tx_power_level, bool is_connectable);
47  std::tuple<bool, int> BluetoothBinderSetName(std::string name);
48
49 private:
50  bool SharedValidator();
51  // Returns a handle to the IBluetooth Binder from the Android ServiceManager.
52  // Binder client code can use this to make calls to the service.
53  android::sp<ipc::binder::IBluetooth> bt_iface;
54
55  // Returns a handle to the IBluetoothLowEnergy Binder from the Android
56  // ServiceManager. Binder client code can use this to make calls to the
57  // service.
58  android::sp<ipc::binder::IBluetoothLowEnergy> ble_iface;
59  std::map<int, bluetooth::AdvertiseSettings> adv_settings_map;
60  int adv_settings_count;
61  int manu_data_count;
62};
63