38#ifndef COMPONENT_HANDLER_FDO2_HANDLER_H_
39#define COMPONENT_HANDLER_FDO2_HANDLER_H_
47#include "base/BaseUart.h"
49#include "core/hf-core-drivers/external/hf-fdo2-driver/inc/fdo2.hpp"
75 void write(
const std::uint8_t* data, std::size_t length)
noexcept;
76 std::size_t
read(std::uint8_t* out, std::size_t max,
77 std::uint32_t timeout_ms)
noexcept;
133 RtosMutex* bus_mutex =
nullptr)
noexcept;
153 [[nodiscard]]
const fdo2::VersionInfo&
Identity() const noexcept {
162 fdo2::DriverResult<fdo2::MoxyReading>
MeasureMoxy() noexcept;
168 fdo2::DriverResult<fdo2::MrawReading>
MeasureMraw() noexcept;
171 fdo2::DriverResult<fdo2::VersionInfo>
ReadVersion() noexcept;
174 fdo2::DriverResult<std::uint64_t>
ReadUniqueId() noexcept;
HAL handler wrapping one FDO2-G2 oxygen probe on a BaseUart.
Definition Fdo2Handler.h:117
RtosMutex * bus_mutex_
Definition Fdo2Handler.h:188
fdo2::Driver< HalUartFdo2Comm > DriverType
Definition Fdo2Handler.h:119
bool EnsureInitialized() noexcept
Wait the FDO2-G2 power-up settle (kFdo2G2PowerUpSettleMs) and probe the device with #VERS....
Definition Fdo2Handler.cpp:90
Fdo2Handler & operator=(Fdo2Handler &&)=delete
Fdo2Handler & operator=(const Fdo2Handler &)=delete
std::unique_ptr< DriverType > driver_
Definition Fdo2Handler.h:181
std::atomic< bool > initialized_
Definition Fdo2Handler.h:185
HalUartFdo2Comm comm_
Definition Fdo2Handler.h:180
const fdo2::VersionInfo & Identity() const noexcept
Cached identity (zeroed until probe succeeds).
Definition Fdo2Handler.h:153
bool EnsureInitializedLocked() noexcept
Definition Fdo2Handler.cpp:96
fdo2::DriverResult< fdo2::MrawReading > MeasureMraw() noexcept
Definition Fdo2Handler.cpp:128
fdo2::DriverResult< fdo2::MoxyReading > MeasureMoxy() noexcept
One #MOXY round-trip — partial-pressure O2 + temperature + status.
Definition Fdo2Handler.cpp:119
fdo2::DriverResult< std::uint64_t > ReadUniqueId() noexcept
Read the device's 64-bit unique serial via #IDNR.
Definition Fdo2Handler.cpp:150
fdo2::VersionInfo identity_
Definition Fdo2Handler.h:183
Fdo2Handler(const Fdo2Handler &)=delete
Fdo2HandlerConfig config_
Definition Fdo2Handler.h:179
fdo2::DriverResult< fdo2::VersionInfo > ReadVersion() noexcept
Re-read #VERS (refreshes the cached Identity).
Definition Fdo2Handler.cpp:137
Fdo2Handler(Fdo2Handler &&)=delete
RtosMutex private_mutex_
Definition Fdo2Handler.h:187
bool IsPresent() const noexcept
True once EnsureInitialized() has succeeded.
Definition Fdo2Handler.h:148
CRTP adapter that turns a BaseUart& into a transport the templated fdo2::Driver<UartT> can drive.
Definition Fdo2Handler.h:71
HalUartFdo2Comm(BaseUart &uart) noexcept
Definition Fdo2Handler.h:73
std::size_t line_len_
Definition Fdo2Handler.h:85
void delay_ms_impl(std::uint32_t ms) noexcept
Definition Fdo2Handler.cpp:70
BaseUart & uart_
Definition Fdo2Handler.h:82
void write(const std::uint8_t *data, std::size_t length) noexcept
Definition Fdo2Handler.cpp:28
void flush_rx() noexcept
Definition Fdo2Handler.cpp:65
std::uint8_t line_[128]
Reply being assembled; 128 bytes holds the longest reply (#MRAW with CRC, < 120).
Definition Fdo2Handler.h:84
std::size_t read(std::uint8_t *out, std::size_t max, std::uint32_t timeout_ms) noexcept
Definition Fdo2Handler.cpp:34
Construction-time configuration for one FDO2-G2 instance.
Definition Fdo2Handler.h:93
std::uint8_t device_index
Definition Fdo2Handler.h:103
std::uint32_t measure_timeout_ms
Definition Fdo2Handler.h:100
std::uint32_t line_timeout_ms
Definition Fdo2Handler.h:96