REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
ctrlblock.cpp
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3//
4// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
5
6#include <proto/main.pb.h>
7#include <block/ctrlblock.h>
8
9// bus::address_from_tuple(1, 0)
10blocks::CTRLBlock::CTRLBlock(CTRLBlockHALBase *hardware) : FunctionBlock("CTRL", hardware), hardware(hardware) {
11 classifier.class_enum = CLASS_;
12}
13
14metadata::eui_t blocks::CTRLBlock::get_entity_eui() const {
15 if (hardware)
16 return hardware->get_entity_eui();
17 return {};
18}
19
20UnitResult blocks::CTRLBlock::write_to_hardware() {
21 if (!hardware->write_adc_bus_muxers(adc_bus))
22 return UnitResult::err("Writing ctrl-block adc bus muxes failed");
23 return UnitResult::ok();
24}
25
26UnitResult blocks::CTRLBlock::init() {
27 // Hardware defaults are not very good, e.g. adc bus is by default on CL0_GAIN.
28 // That's why we write more sane defaults on init.
29 TRY(FunctionBlock::init());
30 return write_to_hardware();
31}
32
33blocks::CTRLBlock::ADCBus blocks::CTRLBlock::get_adc_bus() const { return adc_bus; }
34
35void blocks::CTRLBlock::set_adc_bus(blocks::CTRLBlock::ADCBus adc_bus_) { adc_bus = adc_bus_; }
36
37void blocks::CTRLBlock::reset_adc_bus() { adc_bus = ADCBus::ADC; }
38
39bool blocks::CTRLBlock::set_adc_bus_to_cluster_gain(uint8_t cluster_idx) {
40 if (cluster_idx >= 3)
41 return false;
42 set_adc_bus(static_cast<ADCBus>(cluster_idx));
43 return true;
44}
45
46void blocks::CTRLBlock::reset(entities::ResetAction action) {
47 FunctionBlock::reset(action);
48
49 if (action.has(entities::ResetAction::CIRCUIT_RESET))
50 reset_adc_bus();
51}
52
53UnitResult blocks::CTRLBlock::send_sync(uint8_t id) {
54 if (!hardware->write_sync_id(id))
55 return UnitResult::err("Error while sending SYNC.");
56 return UnitResult::ok();
57}