| // Copyright 2020 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 "thermistor-channel.h" |
| |
| #include <ddktl/fidl.h> |
| |
| namespace thermal { |
| |
| void ThermistorChannel::GetTemperatureCelsius(GetTemperatureCelsiusCompleter::Sync& completer) { |
| uint32_t sample; |
| zx_status_t status = adc_->GetSample(adc_channel_, &sample); |
| if (status != ZX_OK) { |
| completer.Reply(status, 0.0f); |
| } else { |
| float norm = static_cast<float>(sample) / static_cast<float>(((1 << adc_->Resolution()) - 1)); |
| float temperature; |
| status = ntc_.GetTemperatureCelsius(norm, &temperature); |
| completer.Reply(status, temperature); |
| } |
| } |
| |
| zx_status_t ThermistorChannel::DdkMessage(fidl_incoming_msg_t* msg, fidl_txn_t* txn) { |
| DdkTransaction transaction(txn); |
| fidl::WireDispatch<FidlTemperature::Device>(this, msg, &transaction); |
| return transaction.Status(); |
| } |
| |
| zx_status_t RawChannel::DdkMessage(fidl_incoming_msg_t* msg, fidl_txn_t* txn) { |
| DdkTransaction transaction(txn); |
| fidl::WireDispatch<FidlAdc::Device>(this, msg, &transaction); |
| return transaction.Status(); |
| } |
| |
| void RawChannel::GetSample(GetSampleCompleter::Sync& completer) { |
| uint32_t sample; |
| zx_status_t status = adc_->GetSample(adc_channel_, &sample); |
| if (status == ZX_OK) { |
| completer.ReplySuccess(sample); |
| } else { |
| completer.ReplyError(status); |
| } |
| } |
| |
| void RawChannel::GetNormalizedSample(GetNormalizedSampleCompleter::Sync& completer) { |
| uint32_t sample; |
| zx_status_t status = adc_->GetSample(adc_channel_, &sample); |
| if (status == ZX_OK) { |
| completer.ReplySuccess(static_cast<float>(sample) / |
| static_cast<float>(((1 << adc_->Resolution()) - 1))); |
| |
| } else { |
| completer.ReplyError(status); |
| } |
| } |
| |
| void RawChannel::GetResolution(GetResolutionCompleter::Sync& completer) { |
| completer.ReplySuccess(adc_->Resolution()); |
| } |
| } // namespace thermal |