16#include "core/hf-core-drivers/internal/hf-internal-interface-wrap/inc/base/BaseTemperature.h"
17#include "core/hf-core-drivers/internal/hf-internal-interface-wrap/inc/base/BaseAdc.h"
18#include "core/hf-core-drivers/external/hf-ntc-thermistor-driver/inc/ntc_thermistor.hpp"
20#include "core/hf-core-utils/hf-utils-rtos-wrap/include/PeriodicTimer.h"
45 explicit NtcAdcAdapter(BaseAdc* adc,
float ref_voltage = 3.3f, uint8_t res_bits = 12) noexcept
51 return adc_ !=
nullptr &&
adc_->IsChannelAvailable(
static_cast<hf_channel_id_t
>(channel));
54 if (
adc_ ==
nullptr || count ==
nullptr)
return ntc::AdcError::ReadFailed;
56 auto err =
adc_->ReadChannelCount(
static_cast<hf_channel_id_t
>(channel), raw);
57 if (err != hf_adc_err_t::ADC_SUCCESS)
return ntc::AdcError::ReadFailed;
59 return ntc::AdcError::Success;
62 if (
adc_ ==
nullptr || voltage_v ==
nullptr)
return ntc::AdcError::ReadFailed;
64 auto err =
adc_->ReadChannelV(
static_cast<hf_channel_id_t
>(channel), v);
65 if (err != hf_adc_err_t::ADC_SUCCESS)
return ntc::AdcError::ReadFailed;
67 return ntc::AdcError::Success;
115#define NTC_TEMP_HANDLER_CONFIG_DEFAULT() { \
116 .ntc_type = NtcType::NtcG163Jft103Ft1S, \
118 .voltage_divider_series_resistance = 10000.0f, \
119 .voltage_divider_parallel_resistance = 0.0f, \
120 .reference_voltage = 3.3f, \
121 .calibration_offset = 0.0f, \
122 .beta_value = 0.0f, \
123 .conversion_method = NtcConversionMethod::Auto, \
125 .sample_delay_ms = 0, \
126 .min_temperature = -40.0f, \
127 .max_temperature = 125.0f, \
128 .enable_filtering = false, \
129 .filter_alpha = 0.1f, \
130 .enable_threshold_monitoring = false, \
131 .low_threshold_celsius = -40.0f, \
132 .high_threshold_celsius = 125.0f, \
133 .threshold_callback = nullptr, \
134 .threshold_user_data = nullptr, \
135 .sensor_name = "NTC_Temperature_Sensor", \
136 .sensor_description = "NTC Thermistor Temperature Sensor" \
180 NtcTemperatureHandler(NtcType ntc_type, BaseAdc* adc_interface,
const char* sensor_name =
nullptr)
noexcept;
219 hf_temp_err_t
GetSensorInfo(hf_temp_sensor_info_t* info) const noexcept override;
223 hf_temp_err_t
SetRange(
float min_celsius,
float max_celsius) noexcept override;
224 hf_temp_err_t
GetRange(
float* min_celsius,
float* max_celsius) const noexcept override;
225 hf_temp_err_t
GetResolution(
float* resolution_celsius) const noexcept override;
226 hf_temp_err_t
SetThresholds(
float low_threshold_celsius,
float high_threshold_celsius) noexcept override;
227 hf_temp_err_t
GetThresholds(
float* low_threshold_celsius,
float* high_threshold_celsius) const noexcept override;
230 hf_temp_err_t
StartContinuousMonitoring(hf_u32_t sample_rate_hz, hf_temp_reading_callback_t callback,
void* user_data) noexcept override;
239 hf_temp_err_t
SelfTest() noexcept override;
241 hf_temp_err_t
GetStatistics(hf_temp_statistics_t& statistics) noexcept override;
242 hf_temp_err_t
GetDiagnostics(hf_temp_diagnostics_t& diagnostics) noexcept override;
297 NtcError
GetVoltage(
float* voltage_volts) noexcept;
311 hf_temp_err_t
Calibrate(
float reference_temperature_celsius) noexcept;
362 NtcError
SetFiltering(
bool enable,
float alpha = 0.1f) noexcept;
440 void UpdateStatistics(
bool operation_successful, hf_u32_t operation_time_us) noexcept;
NtcThermistor< NtcAdcAdapter > NtcThermistorConcrete
Convenience alias for the concrete NtcThermistor type used by this handler.
Definition NtcTemperatureHandler.h:79
Adapter that bridges BaseAdc to the ntc::AdcInterface CRTP interface required by the NtcThermistor te...
Definition NtcTemperatureHandler.h:37
bool EnsureInitialized()
Definition NtcTemperatureHandler.h:49
uint8_t GetResolutionBits() const
Definition NtcTemperatureHandler.h:70
bool IsChannelAvailable(uint8_t channel) const
Definition NtcTemperatureHandler.h:50
float GetReferenceVoltage() const
Definition NtcTemperatureHandler.h:69
bool IsInitialized() const
Definition NtcTemperatureHandler.h:48
float reference_voltage_
Definition NtcTemperatureHandler.h:74
ntc::AdcError ReadChannelCount(uint8_t channel, uint32_t *count)
Definition NtcTemperatureHandler.h:53
BaseAdc * adc_
Definition NtcTemperatureHandler.h:73
NtcAdcAdapter(BaseAdc *adc, float ref_voltage=3.3f, uint8_t res_bits=12) noexcept
Construct adapter wrapping a BaseAdc pointer.
Definition NtcTemperatureHandler.h:45
ntc::AdcError ReadChannelV(uint8_t channel, float *voltage_v)
Definition NtcTemperatureHandler.h:61
uint8_t resolution_bits_
Definition NtcTemperatureHandler.h:75
NTC temperature sensor handler implementing BaseTemperature interface.
Definition NtcTemperatureHandler.h:168
float calibration_offset_
Current calibration offset.
Definition NtcTemperatureHandler.h:414
NtcError SetFiltering(bool enable, float alpha=0.1f) noexcept
Enable/disable filtering.
Definition NtcTemperatureHandler.cpp:837
NtcTemperatureHandler(NtcType ntc_type, BaseAdc *adc_interface, const char *sensor_name=nullptr) noexcept
Constructor with NTC type and ADC interface.
Definition NtcTemperatureHandler.cpp:81
NtcTemperatureHandler & operator=(NtcTemperatureHandler &&)=delete
Non-movable.
std::unique_ptr< NtcAdcAdapter > ntc_adc_adapter_
ADC adapter (BaseAdc→ntc::AdcInterface)
Definition NtcTemperatureHandler.h:393
hf_temp_err_t EnterSleepMode() noexcept override
Definition NtcTemperatureHandler.cpp:680
NtcTemperatureHandler(const NtcTemperatureHandler &)=delete
Copy constructor is deleted.
static void UnregisterMonitoringContext(hf_u32_t context_id) noexcept
Definition NtcTemperatureHandler.cpp:1008
bool InitializeNtcThermistor() noexcept
Initialize NTC thermistor with current configuration.
RtosMutex mutex_
Thread safety mutex (hardware-agnostic)
Definition NtcTemperatureHandler.h:392
NtcError GetNtcConfiguration(ntc_config_t *config) const noexcept
Get NTC configuration.
Definition NtcTemperatureHandler.cpp:610
float high_threshold_celsius_
High temperature threshold.
Definition NtcTemperatureHandler.h:404
ntc_temp_handler_config_t config_
Handler configuration.
Definition NtcTemperatureHandler.h:396
hf_temp_err_t ResetStatistics() noexcept override
Definition NtcTemperatureHandler.cpp:570
hf_temp_err_t SetThresholds(float low_threshold_celsius, float high_threshold_celsius) noexcept override
Definition NtcTemperatureHandler.cpp:349
static NtcTemperatureHandler * ResolveMonitoringContext(hf_u32_t context_id) noexcept
Definition NtcTemperatureHandler.cpp:1021
NtcTemperatureHandler(NtcTemperatureHandler &&)=delete
Non-movable (holds mutex, unique_ptrs, raw pointers, and timer resources).
void UpdateStatistics(bool operation_successful, hf_u32_t operation_time_us) noexcept
Update operation statistics.
Definition NtcTemperatureHandler.cpp:880
const char * GetSensorName() const noexcept
Get sensor name.
Definition NtcTemperatureHandler.cpp:847
hf_temp_err_t GetStatistics(hf_temp_statistics_t &statistics) noexcept override
Definition NtcTemperatureHandler.cpp:558
hf_u32_t monitoring_context_id_
Timer callback context ID (0 = unassigned)
Definition NtcTemperatureHandler.h:413
hf_temp_err_t DisableThresholdMonitoring() noexcept override
Definition NtcTemperatureHandler.cpp:398
hf_temp_err_t ExitSleepMode() noexcept override
Definition NtcTemperatureHandler.cpp:691
hf_temp_statistics_t statistics_
BaseTemperature statistics.
Definition NtcTemperatureHandler.h:417
NtcTemperatureHandler & operator=(const NtcTemperatureHandler &)=delete
Assignment operator is deleted.
float low_threshold_celsius_
Low temperature threshold.
Definition NtcTemperatureHandler.h:403
hf_u32_t sample_rate_hz_
Sample rate for continuous monitoring.
Definition NtcTemperatureHandler.h:409
hf_temp_err_t ValidateConfiguration(const ntc_temp_handler_config_t &config) const noexcept
Validate configuration.
NtcError GetVoltage(float *voltage_volts) noexcept
Get voltage across thermistor.
Definition NtcTemperatureHandler.cpp:763
bool IsSleeping() const noexcept override
Definition NtcTemperatureHandler.cpp:701
hf_temp_err_t SetRange(float min_celsius, float max_celsius) noexcept override
Definition NtcTemperatureHandler.cpp:642
NtcThermistorConcrete * GetDriver() noexcept
Get the underlying NtcThermistor driver for advanced operations.
Definition NtcTemperatureHandler.cpp:855
NtcError SetBetaValue(float beta_value) noexcept
Set beta value.
Definition NtcTemperatureHandler.cpp:809
bool initialized_
Initialization status.
Definition NtcTemperatureHandler.h:421
hf_temp_err_t GetDiagnostics(hf_temp_diagnostics_t &diagnostics) noexcept override
Definition NtcTemperatureHandler.cpp:564
NtcError SetConversionMethod(NtcConversionMethod method) noexcept
Set conversion method.
Definition NtcTemperatureHandler.cpp:785
void SetLastError(hf_temp_err_t error) noexcept
Set last error in diagnostics.
Definition NtcTemperatureHandler.cpp:870
hf_temp_config_t base_config_
Base configuration.
Definition NtcTemperatureHandler.h:400
void * GetNtcThermistor() noexcept
Get NTC thermistor instance.
Definition NtcTemperatureHandler.cpp:598
hf_temp_err_t ReadTemperatureCelsiusImpl(float *temperature_celsius) noexcept override
Definition NtcTemperatureHandler.cpp:279
BaseAdc * adc_interface_
ADC interface pointer.
Definition NtcTemperatureHandler.h:395
hf_temp_diagnostics_t diagnostics_
BaseTemperature diagnostics.
Definition NtcTemperatureHandler.h:418
NtcError SetVoltageDivider(float series_resistance) noexcept
Set voltage divider parameters.
Definition NtcTemperatureHandler.cpp:793
NtcError SetNtcConfiguration(const ntc_config_t &config) noexcept
Set NTC configuration.
Definition NtcTemperatureHandler.cpp:744
static RtosMutex callback_registry_mutex_
Definition NtcTemperatureHandler.h:20
hf_temp_state_t current_state_
Current state.
Definition NtcTemperatureHandler.h:399
hf_temp_err_t StopContinuousMonitoring() noexcept override
Definition NtcTemperatureHandler.cpp:460
void * continuous_user_data_
Continuous monitoring callback user data.
Definition NtcTemperatureHandler.h:411
NtcError GetNtcReading(ntc_reading_t *reading) noexcept
Get NTC reading.
Definition NtcTemperatureHandler.cpp:622
bool Deinitialize() noexcept override
Definition NtcTemperatureHandler.cpp:242
hf_temp_err_t GetSensorInfo(hf_temp_sensor_info_t *info) const noexcept override
Definition NtcTemperatureHandler.cpp:314
const char * GetSensorDescription() const noexcept
Get sensor description.
Definition NtcTemperatureHandler.cpp:851
hf_u32_t GetCapabilities() const noexcept override
Definition NtcTemperatureHandler.cpp:342
bool Initialize() noexcept override
Definition NtcTemperatureHandler.cpp:160
static std::array< NtcTemperatureHandler *, kMonitoringContextSlots > callback_registry_
Definition NtcTemperatureHandler.h:22
hf_temp_err_t CheckHealth() noexcept override
Definition NtcTemperatureHandler.cpp:726
bool threshold_monitoring_enabled_
Threshold monitoring status.
Definition NtcTemperatureHandler.h:422
bool IsMonitoringActive() const noexcept override
Definition NtcTemperatureHandler.cpp:482
NtcError GetRawAdcValue(uint32_t *adc_value) noexcept
Get raw ADC value.
Definition NtcTemperatureHandler.cpp:774
NtcError SetAdcChannel(uint8_t adc_channel) noexcept
Set ADC channel.
Definition NtcTemperatureHandler.cpp:817
NtcError SetSamplingParameters(uint32_t sample_count, uint32_t sample_delay_ms) noexcept
Set sampling parameters.
Definition NtcTemperatureHandler.cpp:826
static void ContinuousMonitoringCallback(uint32_t arg)
Static callback for continuous monitoring timer.
Definition NtcTemperatureHandler.cpp:972
virtual ~NtcTemperatureHandler() noexcept
Virtual destructor - cleans up timer and thermistor resources.
Definition NtcTemperatureHandler.cpp:142
hf_temp_err_t GetResolution(float *resolution_celsius) const noexcept override
Definition NtcTemperatureHandler.cpp:668
PeriodicTimer monitoring_timer_
Hardware-agnostic periodic timer.
Definition NtcTemperatureHandler.h:412
void UpdateDiagnostics(hf_temp_err_t error) noexcept
Update diagnostics with error code.
Definition NtcTemperatureHandler.cpp:909
hf_temp_err_t GetThresholds(float *low_threshold_celsius, float *high_threshold_celsius) const noexcept override
Definition NtcTemperatureHandler.cpp:367
hf_temp_err_t Calibrate(float reference_temperature_celsius) noexcept
Calibrate the thermistor.
Definition NtcTemperatureHandler.cpp:487
hf_temp_threshold_callback_t threshold_callback_
Threshold callback.
Definition NtcTemperatureHandler.h:405
std::unique_ptr< NtcThermistorConcrete > ntc_thermistor_
NTC thermistor driver instance.
Definition NtcTemperatureHandler.h:394
void CheckThresholds(float temperature_celsius) noexcept
Check thresholds and trigger callback if needed.
Definition NtcTemperatureHandler.cpp:918
hf_temp_err_t ResetDiagnostics() noexcept override
Definition NtcTemperatureHandler.cpp:582
hf_temp_err_t SelfTest() noexcept override
Definition NtcTemperatureHandler.cpp:705
void UpdateBaseDiagnostics(hf_temp_err_t error) noexcept
Update BaseTemperature diagnostics.
static hf_u64_t GetCurrentTimeUs() noexcept
Get current timestamp in microseconds.
NtcError SetReferenceVoltage(float reference_voltage) noexcept
Set reference voltage.
Definition NtcTemperatureHandler.cpp:801
static hf_u32_t RegisterMonitoringContext(NtcTemperatureHandler *handler) noexcept
Register/unregister callback context IDs for timer callbacks.
Definition NtcTemperatureHandler.cpp:989
static constexpr hf_u32_t kMonitoringContextSlots
Definition NtcTemperatureHandler.h:480
hf_temp_err_t EnableThresholdMonitoring(hf_temp_threshold_callback_t callback, void *user_data) noexcept override
Definition NtcTemperatureHandler.cpp:383
hf_temp_err_t GetRange(float *min_celsius, float *max_celsius) const noexcept override
Definition NtcTemperatureHandler.cpp:655
hf_temp_err_t StartContinuousMonitoring(hf_u32_t sample_rate_hz, hf_temp_reading_callback_t callback, void *user_data) noexcept override
Definition NtcTemperatureHandler.cpp:409
void * threshold_user_data_
Threshold callback user data.
Definition NtcTemperatureHandler.h:406
NtcError GetResistance(float *resistance_ohms) noexcept
Get thermistor resistance.
Definition NtcTemperatureHandler.cpp:752
hf_temp_reading_callback_t continuous_callback_
Continuous monitoring callback.
Definition NtcTemperatureHandler.h:410
bool monitoring_active_
Continuous monitoring status.
Definition NtcTemperatureHandler.h:423
hf_temp_err_t SetCalibrationOffset(float offset_celsius) noexcept override
Definition NtcTemperatureHandler.cpp:514
hf_temp_err_t GetCalibrationOffset(float *offset_celsius) const noexcept override
Definition NtcTemperatureHandler.cpp:529
hf_temp_err_t ConvertNtcError(NtcError ntc_error) const noexcept
Convert NTC error to BaseTemperature error.
Definition NtcTemperatureHandler.cpp:932
hf_temp_err_t ResetCalibration() noexcept override
Definition NtcTemperatureHandler.cpp:543
NTC temperature handler configuration structure.
Definition NtcTemperatureHandler.h:88
float voltage_divider_series_resistance
Series resistance in voltage divider (ohms)
Definition NtcTemperatureHandler.h:91
bool enable_filtering
Enable temperature filtering.
Definition NtcTemperatureHandler.h:101
float low_threshold_celsius
Low temperature threshold (°C)
Definition NtcTemperatureHandler.h:104
const char * sensor_description
Sensor description.
Definition NtcTemperatureHandler.h:109
uint32_t sample_count
Number of samples to average.
Definition NtcTemperatureHandler.h:97
float calibration_offset
Calibration offset (°C)
Definition NtcTemperatureHandler.h:94
NtcType ntc_type
NTC thermistor type (driver enum)
Definition NtcTemperatureHandler.h:89
float min_temperature
Minimum temperature (°C)
Definition NtcTemperatureHandler.h:99
float high_threshold_celsius
High temperature threshold (°C)
Definition NtcTemperatureHandler.h:105
float max_temperature
Maximum temperature (°C)
Definition NtcTemperatureHandler.h:100
float reference_voltage
Reference voltage (V)
Definition NtcTemperatureHandler.h:93
float beta_value
Beta value override (0 = use default)
Definition NtcTemperatureHandler.h:95
uint32_t sample_delay_ms
Delay between samples (ms)
Definition NtcTemperatureHandler.h:98
float filter_alpha
Filter alpha value (0.0-1.0)
Definition NtcTemperatureHandler.h:102
uint8_t adc_channel
ADC channel for voltage measurement.
Definition NtcTemperatureHandler.h:90
NtcConversionMethod conversion_method
Temperature conversion method (driver enum)
Definition NtcTemperatureHandler.h:96
hf_temp_threshold_callback_t threshold_callback
Threshold callback (optional)
Definition NtcTemperatureHandler.h:106
void * threshold_user_data
Threshold callback user data.
Definition NtcTemperatureHandler.h:107
float voltage_divider_parallel_resistance
Parallel resistance (ohms, 0 if none)
Definition NtcTemperatureHandler.h:92
const char * sensor_name
Sensor name/identifier.
Definition NtcTemperatureHandler.h:108
bool enable_threshold_monitoring
Enable threshold monitoring at init.
Definition NtcTemperatureHandler.h:103