116 using DriverType = alicat_basis2::Driver<HalUartAlicatBasis2Comm>;
126 RtosMutex* bus_mutex =
nullptr) noexcept;
132 bool EnsureInitialized() noexcept;
133 bool IsInitialized() const noexcept {
return initialized_.load(std::memory_order_acquire); }
135 std::uint8_t
Address() const noexcept {
return config_.modbus_address; }
136 std::uint8_t
DeviceIndex() const noexcept {
return config_.device_index; }
139 const alicat_basis2::InstrumentIdentity&
Identity() const noexcept {
return identity_; }
146 alicat_basis2::DriverResult<alicat_basis2::InstantaneousData>
147 ReadInstantaneous() noexcept;
149 alicat_basis2::DriverResult<alicat_basis2::InstrumentIdentity>
150 RereadIdentity() noexcept;
152 alicat_basis2::DriverResult<
void> Tare() noexcept;
153 alicat_basis2::DriverResult<
void> SetGas(alicat_basis2::Gas g) noexcept;
154 alicat_basis2::DriverResult<
void> SetSetpoint(
float user_units) noexcept;
155 alicat_basis2::DriverResult<
void> SetSetpointSource(alicat_basis2::SetpointSource s) noexcept;
156 alicat_basis2::DriverResult<
void> SetCommWatchdogMs(std::uint16_t ms) noexcept;
157 alicat_basis2::DriverResult<
void> SetMaxSetpointRamp(std::uint32_t pct_per_ms_x_10e7) noexcept;
158 alicat_basis2::DriverResult<
void> SetAutotareEnabled(
bool enabled) noexcept;
159 alicat_basis2::DriverResult<
void> ResetTotalizer() noexcept;
160 alicat_basis2::DriverResult<
void> SetTotalizerLimitMode(alicat_basis2::TotalizerLimitMode m) noexcept;
161 alicat_basis2::DriverResult<
void> SetTotalizerBatch(std::uint32_t value_scaled) noexcept;
162 alicat_basis2::DriverResult<
void> SetFlowAveragingMs(std::uint16_t ms) noexcept;
163 alicat_basis2::DriverResult<
void> SetReferenceTemperatureC(
float c) noexcept;
164 alicat_basis2::DriverResult<
void> ConfigureMeasurementTrigger(std::uint16_t bits) noexcept;
165 alicat_basis2::DriverResult<
void> StartMeasurementSamples(std::uint16_t n) noexcept;
166 alicat_basis2::DriverResult<alicat_basis2::MeasurementData> ReadMeasurement() noexcept;
167 alicat_basis2::DriverResult<
void> SetModbusAddress(std::uint8_t addr) noexcept;
168 alicat_basis2::DriverResult<
void> SetAsciiUnitId(
char id) noexcept;
169 alicat_basis2::DriverResult<
void> SetBaudRate(alicat_basis2::BaudRate br) noexcept;
170 alicat_basis2::DriverResult<
void> FactoryRestore() noexcept;
184 alicat_basis2::DriverResult<std::uint8_t>
185 Discover(std::uint8_t* present_bitmap, std::
size_t bitmap_bytes,
186 std::uint16_t probe_timeout_ms = 30) noexcept;
196 std::uint8_t address{0};
197 std::uint32_t baud_bps{0};
249 alicat_basis2::DriverResult<std::size_t>
251 std::size_t max_devices,
253 std::uint16_t probe_timeout_ms = 30,
254 std::uint32_t settle_ms = 25,
255 const std::uint32_t* baud_list_bps =
nullptr,
256 std::size_t baud_list_count = 0) noexcept;
287 alicat_basis2::DriverResult<std::
size_t>
288 NormalizeBusBaud(std::uint32_t target_bps,
290 std::
size_t device_count,
292 std::uint8_t* failed_addresses_bitmap =
nullptr,
293 std::
size_t failed_bitmap_bytes = 0,
294 std::uint16_t verify_timeout_ms = 100) noexcept;
303 alicat_basis2::InstrumentIdentity identity_{};
304 std::uint8_t flow_decimals_{3};
306 std::atomic<bool> initialized_{
false};
309 RtosMutex* bus_mutex_{&private_mutex_};
311 bool EnsureInitializedLocked() noexcept;