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"
21#include "core/hf-core-utils/hf-utils-rtos-wrap/include/PeriodicTimer.h"
46 explicit NtcAdcAdapter(BaseAdc* adc,
float ref_voltage = 3.3f, uint8_t res_bits = 12) noexcept
52 return adc_ !=
nullptr &&
adc_->IsChannelAvailable(
static_cast<hf_channel_id_t
>(channel));
55 if (
adc_ ==
nullptr || count ==
nullptr)
return ntc::AdcError::ReadFailed;
57 auto err =
adc_->ReadChannelCount(
static_cast<hf_channel_id_t
>(channel), raw);
58 if (err != hf_adc_err_t::ADC_SUCCESS)
return ntc::AdcError::ReadFailed;
60 return ntc::AdcError::Success;
63 if (
adc_ ==
nullptr || voltage_v ==
nullptr)
return ntc::AdcError::ReadFailed;
65 auto err =
adc_->ReadChannelV(
static_cast<hf_channel_id_t
>(channel), v);
66 if (err != hf_adc_err_t::ADC_SUCCESS)
return ntc::AdcError::ReadFailed;
68 return ntc::AdcError::Success;
119#define NTC_TEMP_HANDLER_CONFIG_DEFAULT() { \
120 .ntc_type = NtcType::NtcG163Jft103Ft1S, \
122 .voltage_divider_series_resistance = 10000.0f, \
123 .voltage_divider_parallel_resistance = 0.0f, \
124 .reference_voltage = 3.3f, \
125 .calibration_offset = 0.0f, \
126 .beta_value = 0.0f, \
127 .conversion_method = NtcConversionMethod::Auto, \
129 .sample_delay_ms = 0, \
130 .min_temperature = -40.0f, \
131 .max_temperature = 125.0f, \
132 .enable_filtering = false, \
133 .filter_alpha = 0.1f, \
134 .enable_threshold_monitoring = false, \
135 .low_threshold_celsius = -40.0f, \
136 .high_threshold_celsius = 125.0f, \
137 .threshold_callback = nullptr, \
138 .threshold_user_data = nullptr, \
139 .sensor_name = "NTC_Temperature_Sensor", \
140 .sensor_description = "NTC Thermistor Temperature Sensor" \
184 NtcTemperatureHandler(NtcType ntc_type, BaseAdc* adc_interface,
const char* sensor_name =
nullptr)
noexcept;
223 hf_temp_err_t
GetSensorInfo(hf_temp_sensor_info_t* info) const noexcept override;
227 hf_temp_err_t
SetRange(
float min_celsius,
float max_celsius) noexcept override;
228 hf_temp_err_t
GetRange(
float* min_celsius,
float* max_celsius) const noexcept override;
229 hf_temp_err_t
GetResolution(
float* resolution_celsius) const noexcept override;
230 hf_temp_err_t
SetThresholds(
float low_threshold_celsius,
float high_threshold_celsius) noexcept override;
231 hf_temp_err_t
GetThresholds(
float* low_threshold_celsius,
float* high_threshold_celsius) const noexcept override;
234 hf_temp_err_t
StartContinuousMonitoring(hf_u32_t sample_rate_hz, hf_temp_reading_callback_t callback,
void* user_data) noexcept override;
243 hf_temp_err_t
SelfTest() noexcept override;
245 hf_temp_err_t
GetStatistics(hf_temp_statistics_t& statistics) noexcept override;
246 hf_temp_err_t
GetDiagnostics(hf_temp_diagnostics_t& diagnostics) noexcept override;
301 NtcError
GetVoltage(
float* voltage_volts) noexcept;
315 hf_temp_err_t
Calibrate(
float reference_temperature_celsius) noexcept override;
366 NtcError
SetFiltering(
bool enable,
float alpha = 0.1f) noexcept;
444 void UpdateStatistics(
bool operation_successful, hf_u32_t operation_time_us) noexcept;
Shared utility functions for handler CRTP communication adapters.
NtcThermistor< NtcAdcAdapter > NtcThermistorConcrete
Convenience alias for the concrete NtcThermistor type used by this handler.
Definition NtcTemperatureHandler.h:83
Adapter that bridges BaseAdc to the ntc::AdcInterface CRTP interface required by the NtcThermistor te...
Definition NtcTemperatureHandler.h:38
bool EnsureInitialized()
Definition NtcTemperatureHandler.h:50
uint8_t GetResolutionBits() const
Definition NtcTemperatureHandler.h:71
bool IsChannelAvailable(uint8_t channel) const
Definition NtcTemperatureHandler.h:51
float GetReferenceVoltage() const
Definition NtcTemperatureHandler.h:70
bool IsInitialized() const
Definition NtcTemperatureHandler.h:49
float reference_voltage_
Definition NtcTemperatureHandler.h:78
ntc::AdcError ReadChannelCount(uint8_t channel, uint32_t *count)
Definition NtcTemperatureHandler.h:54
BaseAdc * adc_
Definition NtcTemperatureHandler.h:77
NtcAdcAdapter(BaseAdc *adc, float ref_voltage=3.3f, uint8_t res_bits=12) noexcept
Construct adapter wrapping a BaseAdc pointer.
Definition NtcTemperatureHandler.h:46
void DelayMs(uint32_t ms)
Definition NtcTemperatureHandler.h:74
ntc::AdcError ReadChannelV(uint8_t channel, float *voltage_v)
Definition NtcTemperatureHandler.h:62
uint8_t resolution_bits_
Definition NtcTemperatureHandler.h:79
NTC temperature sensor handler implementing BaseTemperature interface.
Definition NtcTemperatureHandler.h:172
float calibration_offset_
Current calibration offset.
Definition NtcTemperatureHandler.h:418
NtcError SetFiltering(bool enable, float alpha=0.1f) noexcept
Enable/disable filtering.
Definition NtcTemperatureHandler.cpp:859
NtcTemperatureHandler & operator=(NtcTemperatureHandler &&)=delete
Non-movable.
std::unique_ptr< NtcAdcAdapter > ntc_adc_adapter_
ADC adapter (BaseAdc→ntc::AdcInterface)
Definition NtcTemperatureHandler.h:397
hf_temp_err_t EnterSleepMode() noexcept override
Definition NtcTemperatureHandler.cpp:702
NtcTemperatureHandler(const NtcTemperatureHandler &)=delete
Copy constructor is deleted.
static void UnregisterMonitoringContext(hf_u32_t context_id) noexcept
Definition NtcTemperatureHandler.cpp:1030
bool InitializeNtcThermistor() noexcept
Initialize NTC thermistor with current configuration.
RtosMutex mutex_
Thread safety mutex (hardware-agnostic)
Definition NtcTemperatureHandler.h:396
NtcError GetNtcConfiguration(ntc_config_t *config) const noexcept
Get NTC configuration.
Definition NtcTemperatureHandler.cpp:632
float high_threshold_celsius_
High temperature threshold.
Definition NtcTemperatureHandler.h:408
ntc_temp_handler_config_t config_
Handler configuration.
Definition NtcTemperatureHandler.h:400
hf_temp_err_t ResetStatistics() noexcept override
Definition NtcTemperatureHandler.cpp:592
hf_temp_err_t SetThresholds(float low_threshold_celsius, float high_threshold_celsius) noexcept override
Definition NtcTemperatureHandler.cpp:371
static NtcTemperatureHandler * ResolveMonitoringContext(hf_u32_t context_id) noexcept
Definition NtcTemperatureHandler.cpp:1043
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:902
const char * GetSensorName() const noexcept
Get sensor name.
Definition NtcTemperatureHandler.cpp:869
hf_temp_err_t GetStatistics(hf_temp_statistics_t &statistics) noexcept override
Definition NtcTemperatureHandler.cpp:580
hf_u32_t monitoring_context_id_
Timer callback context ID (0 = unassigned)
Definition NtcTemperatureHandler.h:417
hf_temp_err_t DisableThresholdMonitoring() noexcept override
Definition NtcTemperatureHandler.cpp:420
hf_temp_err_t ExitSleepMode() noexcept override
Definition NtcTemperatureHandler.cpp:713
hf_temp_statistics_t statistics_
BaseTemperature statistics.
Definition NtcTemperatureHandler.h:421
NtcTemperatureHandler & operator=(const NtcTemperatureHandler &)=delete
Assignment operator is deleted.
float low_threshold_celsius_
Low temperature threshold.
Definition NtcTemperatureHandler.h:407
hf_u32_t sample_rate_hz_
Sample rate for continuous monitoring.
Definition NtcTemperatureHandler.h:413
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:785
bool IsSleeping() const noexcept override
Definition NtcTemperatureHandler.cpp:723
hf_temp_err_t SetRange(float min_celsius, float max_celsius) noexcept override
Definition NtcTemperatureHandler.cpp:664
NtcThermistorConcrete * GetDriver() noexcept
Get the underlying NtcThermistor driver for advanced operations.
Definition NtcTemperatureHandler.cpp:877
NtcError SetBetaValue(float beta_value) noexcept
Set beta value.
Definition NtcTemperatureHandler.cpp:831
bool initialized_
Initialization status.
Definition NtcTemperatureHandler.h:425
hf_temp_err_t GetDiagnostics(hf_temp_diagnostics_t &diagnostics) noexcept override
Definition NtcTemperatureHandler.cpp:586
NtcError SetConversionMethod(NtcConversionMethod method) noexcept
Set conversion method.
Definition NtcTemperatureHandler.cpp:807
void SetLastError(hf_temp_err_t error) noexcept
Set last error in diagnostics.
Definition NtcTemperatureHandler.cpp:892
hf_temp_config_t base_config_
Base configuration.
Definition NtcTemperatureHandler.h:404
void * GetNtcThermistor() noexcept
Get NTC thermistor instance.
Definition NtcTemperatureHandler.cpp:620
hf_temp_err_t ReadTemperatureCelsiusImpl(float *temperature_celsius) noexcept override
Definition NtcTemperatureHandler.cpp:301
BaseAdc * adc_interface_
ADC interface pointer.
Definition NtcTemperatureHandler.h:399
hf_temp_diagnostics_t diagnostics_
BaseTemperature diagnostics.
Definition NtcTemperatureHandler.h:422
NtcError SetVoltageDivider(float series_resistance) noexcept
Set voltage divider parameters.
Definition NtcTemperatureHandler.cpp:815
NtcError SetNtcConfiguration(const ntc_config_t &config) noexcept
Set NTC configuration.
Definition NtcTemperatureHandler.cpp:766
static RtosMutex callback_registry_mutex_
Definition NtcTemperatureHandler.h:20
hf_temp_state_t current_state_
Current state.
Definition NtcTemperatureHandler.h:403
hf_temp_err_t StopContinuousMonitoring() noexcept override
Definition NtcTemperatureHandler.cpp:482
void * continuous_user_data_
Continuous monitoring callback user data.
Definition NtcTemperatureHandler.h:415
NtcError GetNtcReading(ntc_reading_t *reading) noexcept
Get NTC reading.
Definition NtcTemperatureHandler.cpp:644
bool Deinitialize() noexcept override
Definition NtcTemperatureHandler.cpp:264
hf_temp_err_t GetSensorInfo(hf_temp_sensor_info_t *info) const noexcept override
Definition NtcTemperatureHandler.cpp:336
const char * GetSensorDescription() const noexcept
Get sensor description.
Definition NtcTemperatureHandler.cpp:873
hf_u32_t GetCapabilities() const noexcept override
Definition NtcTemperatureHandler.cpp:364
bool Initialize() noexcept override
Definition NtcTemperatureHandler.cpp:161
static std::array< NtcTemperatureHandler *, kMonitoringContextSlots > callback_registry_
Definition NtcTemperatureHandler.h:22
hf_temp_err_t CheckHealth() noexcept override
Definition NtcTemperatureHandler.cpp:748
bool threshold_monitoring_enabled_
Threshold monitoring status.
Definition NtcTemperatureHandler.h:426
bool IsMonitoringActive() const noexcept override
Definition NtcTemperatureHandler.cpp:504
NtcError GetRawAdcValue(uint32_t *adc_value) noexcept
Get raw ADC value.
Definition NtcTemperatureHandler.cpp:796
NtcError SetAdcChannel(uint8_t adc_channel) noexcept
Set ADC channel.
Definition NtcTemperatureHandler.cpp:839
NtcError SetSamplingParameters(uint32_t sample_count, uint32_t sample_delay_ms) noexcept
Set sampling parameters.
Definition NtcTemperatureHandler.cpp:848
static void ContinuousMonitoringCallback(uint32_t arg)
Static callback for continuous monitoring timer.
Definition NtcTemperatureHandler.cpp:994
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:690
PeriodicTimer monitoring_timer_
Hardware-agnostic periodic timer.
Definition NtcTemperatureHandler.h:416
void UpdateDiagnostics(hf_temp_err_t error) noexcept
Update diagnostics with error code.
Definition NtcTemperatureHandler.cpp:931
hf_temp_err_t GetThresholds(float *low_threshold_celsius, float *high_threshold_celsius) const noexcept override
Definition NtcTemperatureHandler.cpp:389
hf_temp_threshold_callback_t threshold_callback_
Threshold callback.
Definition NtcTemperatureHandler.h:409
std::unique_ptr< NtcThermistorConcrete > ntc_thermistor_
NTC thermistor driver instance.
Definition NtcTemperatureHandler.h:398
void CheckThresholds(float temperature_celsius) noexcept
Check thresholds and trigger callback if needed.
Definition NtcTemperatureHandler.cpp:940
hf_temp_err_t ResetDiagnostics() noexcept override
Definition NtcTemperatureHandler.cpp:604
hf_temp_err_t SelfTest() noexcept override
Definition NtcTemperatureHandler.cpp:727
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:823
static hf_u32_t RegisterMonitoringContext(NtcTemperatureHandler *handler) noexcept
Register/unregister callback context IDs for timer callbacks.
Definition NtcTemperatureHandler.cpp:1011
static constexpr hf_u32_t kMonitoringContextSlots
Definition NtcTemperatureHandler.h:484
hf_temp_err_t EnableThresholdMonitoring(hf_temp_threshold_callback_t callback, void *user_data) noexcept override
Definition NtcTemperatureHandler.cpp:405
hf_temp_err_t GetRange(float *min_celsius, float *max_celsius) const noexcept override
Definition NtcTemperatureHandler.cpp:677
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:431
void * threshold_user_data_
Threshold callback user data.
Definition NtcTemperatureHandler.h:410
NtcError GetResistance(float *resistance_ohms) noexcept
Get thermistor resistance.
Definition NtcTemperatureHandler.cpp:774
hf_temp_reading_callback_t continuous_callback_
Continuous monitoring callback.
Definition NtcTemperatureHandler.h:414
bool monitoring_active_
Continuous monitoring status.
Definition NtcTemperatureHandler.h:427
hf_temp_err_t Calibrate(float reference_temperature_celsius) noexcept override
Calibrate the thermistor.
Definition NtcTemperatureHandler.cpp:509
hf_temp_err_t SetCalibrationOffset(float offset_celsius) noexcept override
Definition NtcTemperatureHandler.cpp:536
hf_temp_err_t GetCalibrationOffset(float *offset_celsius) const noexcept override
Definition NtcTemperatureHandler.cpp:551
hf_temp_err_t ConvertNtcError(NtcError ntc_error) const noexcept
Convert NTC error to BaseTemperature error.
Definition NtcTemperatureHandler.cpp:954
hf_temp_err_t ResetCalibration() noexcept override
Definition NtcTemperatureHandler.cpp:565
void DelayMs(uint32_t ms) noexcept
RTOS-aware millisecond delay.
Definition HandlerCommon.h:77
NTC temperature handler configuration structure.
Definition NtcTemperatureHandler.h:92
float voltage_divider_series_resistance
Series resistance in voltage divider (ohms)
Definition NtcTemperatureHandler.h:95
bool enable_filtering
Enable temperature filtering.
Definition NtcTemperatureHandler.h:105
float low_threshold_celsius
Low temperature threshold (°C)
Definition NtcTemperatureHandler.h:108
const char * sensor_description
Sensor description.
Definition NtcTemperatureHandler.h:113
uint32_t sample_count
Number of samples to average.
Definition NtcTemperatureHandler.h:101
float calibration_offset
Calibration offset (°C)
Definition NtcTemperatureHandler.h:98
NtcType ntc_type
NTC thermistor type (driver enum)
Definition NtcTemperatureHandler.h:93
float min_temperature
Minimum temperature (°C)
Definition NtcTemperatureHandler.h:103
float high_threshold_celsius
High temperature threshold (°C)
Definition NtcTemperatureHandler.h:109
float max_temperature
Maximum temperature (°C)
Definition NtcTemperatureHandler.h:104
float reference_voltage
Reference voltage (V)
Definition NtcTemperatureHandler.h:97
float beta_value
Beta value override (0 = use default)
Definition NtcTemperatureHandler.h:99
uint32_t sample_delay_ms
Delay between samples (ms)
Definition NtcTemperatureHandler.h:102
float filter_alpha
Filter alpha value (0.0-1.0)
Definition NtcTemperatureHandler.h:106
uint8_t adc_channel
ADC channel for voltage measurement.
Definition NtcTemperatureHandler.h:94
NtcConversionMethod conversion_method
Temperature conversion method (driver enum)
Definition NtcTemperatureHandler.h:100
hf_temp_threshold_callback_t threshold_callback
Threshold callback (optional)
Definition NtcTemperatureHandler.h:110
void * threshold_user_data
Threshold callback user data.
Definition NtcTemperatureHandler.h:111
float voltage_divider_parallel_resistance
Parallel resistance (ohms, 0 if none)
Definition NtcTemperatureHandler.h:96
const char * sensor_name
Sensor name/identifier.
Definition NtcTemperatureHandler.h:112
bool enable_threshold_monitoring
Enable threshold monitoring at init.
Definition NtcTemperatureHandler.h:107