blob: f1b54d27bd8be0f2210092bb09c34b9c70891c46 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DEVICE_BLUETOOTH_DBUS_BLUETOOTH_GATT_ATTRIBUTE_VALUE_DELEGATE_H_
#define DEVICE_BLUETOOTH_DBUS_BLUETOOTH_GATT_ATTRIBUTE_VALUE_DELEGATE_H_
#include <cstdint>
#include <vector>
#include "base/callback_forward.h"
#include "device/bluetooth/bluetooth_gatt_characteristic.h"
#include "device/bluetooth/bluetooth_local_gatt_service.h"
namespace dbus {
class ObjectPath;
}
namespace device {
class BluetoothDevice;
}
namespace bluez {
class BluetoothLocalGattServiceBlueZ;
// A simpler interface for reacting to GATT attribute value requests by the
// DBus attribute service providers.
class BluetoothGattAttributeValueDelegate {
public:
explicit BluetoothGattAttributeValueDelegate(
BluetoothLocalGattServiceBlueZ* service);
virtual ~BluetoothGattAttributeValueDelegate();
// This method will be called when a remote device requests to read the
// value of the exported GATT attribute. Invoke |callback| with a value
// to return that value to the requester. Invoke |error_callback| to report
// a failure to read the value. This can happen, for example, if the
// attribute has no read permission set. Either callback should be
// invoked after a reasonable amount of time, since the request will time
// out if left pending for too long causing a disconnection.
virtual void GetValue(
const dbus::ObjectPath& device_path,
const device::BluetoothLocalGattService::Delegate::ValueCallback&
callback,
const device::BluetoothLocalGattService::Delegate::ErrorCallback&
error_callback) = 0;
// This method will be called, when a remote device requests to write the
// value of the exported GATT attribute. Invoke |callback| to report
// that the value was successfully written. Invoke |error_callback| to
// report a failure to write the value. This can happen, for example, if the
// attribute has no write permission set. Either callback should be
// invoked after a reasonable amount of time, since the request will time
// out if left pending for too long causing a disconnection.
virtual void SetValue(
const dbus::ObjectPath& device_path,
const std::vector<uint8_t>& value,
const base::Closure& callback,
const device::BluetoothLocalGattService::Delegate::ErrorCallback&
error_callback) = 0;
// This method will be called, when a remote device requests to start sending
// notifications for this characteristic. This will never be called for
// descriptors.
virtual void StartNotifications(
const dbus::ObjectPath& device_path,
device::BluetoothGattCharacteristic::NotificationType
notification_type) = 0;
// This method will be called, when a remote device requests to stop sending
// notifications for this characteristic. This will never be called for
// descriptors.
virtual void StopNotifications(const dbus::ObjectPath& device_path) = 0;
// This method will be called, when a remote device requests to prepare
// write the value of the exported GATT characteristic. Invoke |callback| to
// report that the request was successful. Invoke |error_callback| to report
// a failure. This will never be called for descriptors.
virtual void PrepareSetValue(
const dbus::ObjectPath& device_path,
const std::vector<uint8_t>& value,
int offset,
bool has_subsequent_request,
const base::Closure& callback,
const device::BluetoothLocalGattService::Delegate::ErrorCallback&
error_callback) {}
protected:
// Gets the Bluetooth device object on the current service's adapter with
// the given object path.
device::BluetoothDevice* GetDeviceWithPath(
const dbus::ObjectPath& object_path);
const BluetoothLocalGattServiceBlueZ* service() { return service_; }
private:
const BluetoothLocalGattServiceBlueZ* service_;
DISALLOW_COPY_AND_ASSIGN(BluetoothGattAttributeValueDelegate);
};
} // namespace bluez
#endif // DEVICE_BLUETOOTH_DBUS_BLUETOOTH_GATT_ATTRIBUTE_VALUE_DELEGATE_H_