blob: 6bad34febdba1f2661e6e7f804620cbc403a7a36 [file] [log] [blame]
// Copyright 2018 The Fuchsia 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 GARNET_DRIVERS_BLUETOOTH_HOST_FIDL_GATT_REMOTE_SERVICE_SERVER_H_
#define GARNET_DRIVERS_BLUETOOTH_HOST_FIDL_GATT_REMOTE_SERVICE_SERVER_H_
#include <unordered_map>
#include <fuchsia/bluetooth/gatt/cpp/fidl.h>
#include "lib/fidl/cpp/binding.h"
#include "lib/fxl/macros.h"
#include "lib/fxl/memory/weak_ptr.h"
#include "garnet/drivers/bluetooth/host/fidl/server_base.h"
#include "garnet/drivers/bluetooth/lib/gatt/gatt.h"
namespace bthost {
// Implements the gatt::RemoteService FIDL interface.
class GattRemoteServiceServer
: public GattServerBase<fuchsia::bluetooth::gatt::RemoteService> {
public:
GattRemoteServiceServer(
fbl::RefPtr<btlib::gatt::RemoteService> service,
fbl::RefPtr<btlib::gatt::GATT> gatt,
fidl::InterfaceRequest<fuchsia::bluetooth::gatt::RemoteService> request);
~GattRemoteServiceServer() override;
private:
// fuchsia::bluetooth::gatt::RemoteService overrides:
void DiscoverCharacteristics(
DiscoverCharacteristicsCallback callback) override;
void ReadCharacteristic(uint64_t id,
ReadCharacteristicCallback callback) override;
void ReadLongCharacteristic(uint64_t id, uint16_t offset, uint16_t max_bytes,
ReadLongCharacteristicCallback callback) override;
void WriteCharacteristic(uint64_t id, uint16_t offset,
::std::vector<uint8_t> value,
WriteCharacteristicCallback callback) override;
void WriteCharacteristicWithoutResponse(
uint64_t id, ::std::vector<uint8_t> value) override;
void ReadDescriptor(uint64_t id, ReadDescriptorCallback callback) override;
void ReadLongDescriptor(uint64_t id, uint16_t offset, uint16_t max_bytes,
ReadLongDescriptorCallback callback) override;
void WriteDescriptor(uint64_t _id, ::std::vector<uint8_t> value,
WriteDescriptorCallback callback) override;
void NotifyCharacteristic(uint64_t id, bool enable,
NotifyCharacteristicCallback callback) override;
// The remote GATT service that backs this service.
fbl::RefPtr<btlib::gatt::RemoteService> service_;
// Maps characteristic IDs to notification handler IDs.
std::unordered_map<btlib::gatt::IdType, btlib::gatt::IdType> notify_handlers_;
fxl::WeakPtrFactory<GattRemoteServiceServer> weak_ptr_factory_;
FXL_DISALLOW_COPY_AND_ASSIGN(GattRemoteServiceServer);
};
} // namespace bthost
#endif // GARNET_DRIVERS_BLUETOOTH_HOST_FIDL_GATT_REMOTE_SERVICE_SERVER_H_