//
// Copyright (C) 2015 Google, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#pragma once
#include <string>
#include <vector>
#include <base/macros.h>
#include <binder/IBinder.h>
#include <binder/IInterface.h>
#include <bluetooth/binder/IBluetoothCallback.h>
#include <bluetooth/binder/IBluetoothGattClient.h>
#include <bluetooth/binder/IBluetoothGattServer.h>
#include <bluetooth/binder/IBluetoothLowEnergy.h>
#include <bluetooth/uuid.h>
namespace ipc {
namespace binder {
// This class defines the Binder IPC interface for accessing the Bluetooth
// service. This class was written based on the corresponding AIDL file at
// /frameworks/base/core/java/android/bluetooth/IBluetooth.aidl.
//
// NOTE: KEEP THIS FILE UP-TO-DATE with the corresponding AIDL, otherwise this
// won't be compatible with the Android framework.
class IBluetooth : public android::IInterface {
public:
DECLARE_META_INTERFACE(Bluetooth);
static const char kServiceName[];
// Transaction codes for interface methods.
enum {
IS_ENABLED_TRANSACTION = android::IBinder::FIRST_CALL_TRANSACTION,
GET_STATE_TRANSACTION,
ENABLE_TRANSACTION,
ENABLE_NO_AUTO_CONNECT_TRANSACTION,
DISABLE_TRANSACTION,
GET_ADDRESS_TRANSACTION,
GET_UUIDS_TRANSACTION, // TODO(armansito): Support this
SET_NAME_TRANSACTION,
GET_NAME_TRANSACTION,
// TODO(armansito): Support the functions below.
GET_SCAN_MODE_TRANSACTION,
SET_SCAN_MODE_TRANSACTION,
GET_DISCOVERABLE_TIMEOUT_TRANSACTION,
SET_DISCOVERABLE_TIMEOUT_TRANSACTION,
START_DISCOVERY_TRANSACTION,
CANCEL_DISCOVERY_TRANSACTION,
IS_DISCOVERING_TRANSACTION,
GET_ADAPTER_CONNECTION_STATE_TRANSACTION,
GET_PROFILE_CONNECTION_STATE_TRANSACTION,
GET_BONDED_DEVICES_TRANSACTION,
CREATE_BOND_TRANSACTION,
CANCEL_BOND_PROCESS_TRANSACTION,
REMOVE_BOND_TRANSACTION,
GET_BOND_STATE_TRANSACTION,
GET_CONNECTION_STATE_TRANSACTION,
GET_REMOTE_NAME_TRANSACTION,
GET_REMOTE_TYPE_TRANSACTION,
GET_REMOTE_ALIAS_TRANSACTION,
SET_REMOTE_ALIAS_TRANSACTION,
GET_REMOTE_CLASS_TRANSACTION,
GET_REMOTE_UUIDS_TRANSACTION,
FETCH_REMOTE_UUIDS_TRANSACTION,
SDP_SEARCH_TRANSACTION,
SET_PIN_TRANSACTION,
SET_PASSKEY_TRANSACTION,
SET_PAIRING_CONFIRMATION_TRANSACTION,
GET_PHONEBOOK_ACCESS_PERMISSION_TRANSACTION,
SET_PHONEBOOK_ACCESS_PERMISSION_TRANSACTION,
GET_MESSAGE_ACCESS_PERMISSION_TRANSACTION,
SET_MESSAGE_ACCESS_PERMISSION_TRANSACTION,
GET_SIM_ACCESS_PERMISSION_TRANSACTION,
SET_SIM_ACCESS_PERMISSION_TRANSACTION,
SEND_CONNECTION_STATE_CHANGE_TRANSACTION,
REGISTER_CALLBACK_TRANSACTION,
UNREGISTER_CALLBACK_TRANSACTION,
CONNECT_SOCKET_TRANSACTION,
CREATE_SOCKET_CHANNEL_TRANSACTION,
CONFIG_HCI_SNOOP_LOG,
FACTORY_RESET_TRANSACTION,
IS_MULTI_ADVERTISEMENT_SUPPORTED_TRANSACTION,
IS_PERIPHERAL_MODE_SUPPORTED_TRANSACTION,
IS_OFFLOADED_FILTERING_SUPPORTED_TRANSACTION,
IS_OFFLOADED_SCAN_BATCHING_SUPPORTED_TRANSACTION,
IS_ACTIVITY_AND_ENERGY_REPORTING_SUPPORTED_TRANSACTION,
GET_ACTIVITY_ENERGY_INFO_FROM_CONTROLLER_TRANSACTION,
REPORT_ACTIVITY_INFO_TRANSACTION,
ON_LE_SERVICE_UP_TRANSACTION,
ON_BR_EDR_DOWN_TRANSACTION,
GET_LOW_ENERGY_INTERFACE_TRANSACTION,
GET_GATT_CLIENT_INTERFACE_TRANSACTION,
GET_GATT_SERVER_INTERFACE_TRANSACTION,
};
// Returns a handle to the IBluetooth Binder from the Android ServiceManager.
// Binder client code can use this to make calls to the service.
static android::sp<IBluetooth> getClientInterface();
// Methods declared in IBluetooth.aidl.
virtual bool IsEnabled() = 0;
virtual int GetState() = 0;
virtual bool Enable(bool start_restricted) = 0;
virtual bool EnableNoAutoConnect() = 0;
virtual bool Disable() = 0;
virtual std::string GetAddress() = 0;
virtual std::vector<bluetooth::UUID> GetUUIDs() = 0;
virtual bool SetName(const std::string& name) = 0;
virtual std::string GetName() = 0;
virtual void RegisterCallback(
const android::sp<IBluetoothCallback>& callback) = 0;
virtual void UnregisterCallback(
const android::sp<IBluetoothCallback>& callback) = 0;
virtual bool IsMultiAdvertisementSupported() = 0;
virtual android::sp<IBluetoothLowEnergy> GetLowEnergyInterface() = 0;
virtual android::sp<IBluetoothGattClient> GetGattClientInterface() = 0;
virtual android::sp<IBluetoothGattServer> GetGattServerInterface() = 0;
private:
DISALLOW_COPY_AND_ASSIGN(IBluetooth);
};
// The Binder server interface to IBluetooth. A class that implements IBluetooth
// must inherit from this class.
class BnBluetooth : public android::BnInterface<IBluetooth> {
public:
BnBluetooth() = default;
virtual ~BnBluetooth() = default;
private:
virtual android::status_t onTransact(
uint32_t code,
const android::Parcel& data,
android::Parcel* reply,
uint32_t flags = 0);
DISALLOW_COPY_AND_ASSIGN(BnBluetooth);
};
// The Binder client interface to IBluetooth.
class BpBluetooth : public android::BpInterface<IBluetooth> {
public:
explicit BpBluetooth(const android::sp<android::IBinder>& impl);
virtual ~BpBluetooth() = default;
// IBluetooth overrides:
bool IsEnabled() override;
int GetState() override;
bool Enable(bool start_restricted) override;
bool EnableNoAutoConnect() override;
bool Disable() override;
std::string GetAddress() override;
std::vector<bluetooth::UUID> GetUUIDs() override;
bool SetName(const std::string& name) override;
std::string GetName() override;
void RegisterCallback(
const android::sp<IBluetoothCallback>& callback) override;
void UnregisterCallback(
const android::sp<IBluetoothCallback>& callback) override;
bool IsMultiAdvertisementSupported() override;
android::sp<IBluetoothLowEnergy> GetLowEnergyInterface() override;
android::sp<IBluetoothGattClient> GetGattClientInterface() override;
android::sp<IBluetoothGattServer> GetGattServerInterface() override;
private:
DISALLOW_COPY_AND_ASSIGN(BpBluetooth);
};
} // namespace binder
} // namespace ipc