HardFOC Core
API reference
Loading...
Searching...
No Matches
Mcp9700TemperatureHandler.h
Go to the documentation of this file.
1
6#pragma once
7
8#include "core/hf-core-drivers/external/hf-mcp9700-driver/inc/mcp9700_thermistor.hpp"
9#include "core/hf-core-drivers/internal/hf-internal-interface-wrap/inc/base/BaseAdc.h"
10#include "core/hf-core-drivers/internal/hf-internal-interface-wrap/inc/base/BaseTemperature.h"
11#include "RtosMutex.h"
12
13#include <cstdint>
14#include <memory>
15
20public:
22 explicit Mcp9700AdcAdapter(BaseAdc* adc) noexcept : adc_(adc) {}
23
24 [[nodiscard]] bool EnsureInitialized() noexcept {
25 return adc_ != nullptr && adc_->EnsureInitialized();
26 }
27
34 int ReadChannelV(uint8_t channel, float* voltage_v) noexcept {
35 if (adc_ == nullptr || voltage_v == nullptr) {
36 return static_cast<int>(hf_adc_err_t::ADC_ERR_NULL_POINTER);
37 }
38 const hf_adc_err_t err =
39 adc_->ReadChannelV(static_cast<hf_channel_id_t>(channel), *voltage_v);
40 return (err == hf_adc_err_t::ADC_SUCCESS) ? 0 : static_cast<int>(err);
41 }
42
43private:
44 BaseAdc* adc_;
45};
46
47using Mcp9700ThermistorConcrete = hf::mcp9700::Mcp9700Thermistor<Mcp9700AdcAdapter>;
48
56class Mcp9700TemperatureHandler : public BaseTemperature {
57public:
58 Mcp9700TemperatureHandler(BaseAdc* adc_interface, uint8_t adc_channel,
59 const char* sensor_name = "MCP9700") noexcept;
60
63
64 ~Mcp9700TemperatureHandler() noexcept override = default;
65
67 [[nodiscard]] const char* GetSensorName() const noexcept { return sensor_name_; }
68
69protected:
70 bool Initialize() noexcept override;
71 bool Deinitialize() noexcept override;
72 hf_temp_err_t ReadTemperatureCelsiusImpl(float* temperature_celsius) noexcept override;
73 hf_temp_err_t GetSensorInfo(hf_temp_sensor_info_t* info) const noexcept override;
74 [[nodiscard]] hf_u32_t GetCapabilities() const noexcept override;
75
76private:
77 mutable RtosMutex mutex_;
79 uint8_t adc_channel_;
80 const char* sensor_name_;
83};
hf::mcp9700::Mcp9700Thermistor< Mcp9700AdcAdapter > Mcp9700ThermistorConcrete
Definition Mcp9700TemperatureHandler.h:47
Thin adapter: BaseAdc channel read in the shape expected by Mcp9700Thermistor<>.
Definition Mcp9700TemperatureHandler.h:19
BaseAdc * adc_
Definition Mcp9700TemperatureHandler.h:44
Mcp9700AdcAdapter(BaseAdc *adc) noexcept
Definition Mcp9700TemperatureHandler.h:22
bool EnsureInitialized() noexcept
Definition Mcp9700TemperatureHandler.h:24
int ReadChannelV(uint8_t channel, float *voltage_v) noexcept
Read one ADC channel as volts for the thermistor conversion.
Definition Mcp9700TemperatureHandler.h:34
BaseTemperature implementation for an MCP9700 on a multiplexed ADC channel.
Definition Mcp9700TemperatureHandler.h:56
std::unique_ptr< Mcp9700ThermistorConcrete > thermistor_
Definition Mcp9700TemperatureHandler.h:82
BaseAdc * adc_interface_
Definition Mcp9700TemperatureHandler.h:78
const char * sensor_name_
Definition Mcp9700TemperatureHandler.h:80
hf_u32_t GetCapabilities() const noexcept override
Definition Mcp9700TemperatureHandler.cpp:85
bool Deinitialize() noexcept override
Definition Mcp9700TemperatureHandler.cpp:39
bool Initialize() noexcept override
Definition Mcp9700TemperatureHandler.cpp:17
hf_temp_err_t GetSensorInfo(hf_temp_sensor_info_t *info) const noexcept override
Definition Mcp9700TemperatureHandler.cpp:68
std::unique_ptr< Mcp9700AdcAdapter > adc_adapter_
Definition Mcp9700TemperatureHandler.h:81
Mcp9700TemperatureHandler & operator=(const Mcp9700TemperatureHandler &)=delete
const char * GetSensorName() const noexcept
Instance label given at construction ("MCP9700" by default).
Definition Mcp9700TemperatureHandler.h:67
uint8_t adc_channel_
Definition Mcp9700TemperatureHandler.h:79
RtosMutex mutex_
Definition Mcp9700TemperatureHandler.h:77
hf_temp_err_t ReadTemperatureCelsiusImpl(float *temperature_celsius) noexcept override
Definition Mcp9700TemperatureHandler.cpp:49
~Mcp9700TemperatureHandler() noexcept override=default
Mcp9700TemperatureHandler(const Mcp9700TemperatureHandler &)=delete