blob: d267c679c28d3d8b4a8d18e89dafe14e572b392f [file] [log] [blame]
// Copyright 2023 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.
#include "pcf8563-server.h"
#include <fidl/fuchsia.hardware.rtc/cpp/fidl.h>
#include <lib/driver/logging/cpp/logger.h>
#include <lib/fdf/cpp/dispatcher.h>
#include <lib/fit/result.h>
#include <functional>
#include <memory>
#include <utility>
namespace pcf8563 {
namespace frtc = fuchsia_hardware_rtc;
frtc::Service::InstanceHandler RtcServer::GetInstanceHandler() {
auto dispatcher = fdf::Dispatcher::GetCurrent();
return frtc::Service::InstanceHandler({
.device = bindings_.CreateHandler(this, dispatcher->async_dispatcher(),
fidl::kIgnoreBindingClosure),
});
}
void RtcServer::Get(GetCompleter::Sync& completer) {
if (auto result{device_->Read()}; result.is_error()) {
completer.Reply(fit::error(result.status_value()));
} else {
completer.Reply(fit::ok(result.value()));
}
}
void RtcServer::Set(SetRequest& req, SetCompleter::Sync& completer) {
auto result{device_->Write(req.rtc())};
completer.Reply(result.status_value());
}
void RtcServer::OnUnbound(fidl::UnbindInfo info, fidl::ServerEnd<frtc::Device> server_end) {
if (info.is_peer_closed()) {
FDF_LOG(DEBUG, "client disconnected");
} else if (!info.is_user_initiated()) {
FDF_LOG(ERROR, "client unbound: %s", info.status_string());
}
}
} // namespace pcf8563