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
20utils::status blocks::CTRLBlock::write_to_hardware() {
21 return utils::status(hardware->write_adc_bus_muxers(adc_bus));
22}
23
24bool blocks::CTRLBlock::init() {
25 // Hardware defaults are not very good, e.g. adc bus is by default on CL0_GAIN.
26 // That's why we write more sane defaults on init.
27 return utils::status(FunctionBlock::init() and write_to_hardware());
28}
29
30blocks::CTRLBlock::ADCBus blocks::CTRLBlock::get_adc_bus() const { return adc_bus; }
31
32void blocks::CTRLBlock::set_adc_bus(blocks::CTRLBlock::ADCBus adc_bus_) { adc_bus = adc_bus_; }
33
34void blocks::CTRLBlock::reset_adc_bus() { adc_bus = ADCBus::ADC; }
35
36bool blocks::CTRLBlock::set_adc_bus_to_cluster_gain(uint8_t cluster_idx) {
37 if (cluster_idx >= 3)
38 return false;
39 set_adc_bus(static_cast<ADCBus>(cluster_idx));
40 return true;
41}
42
43void blocks::CTRLBlock::reset(entities::ResetAction action) {
44 FunctionBlock::reset(action);
45
46 if (action.has(entities::ResetAction::CIRCUIT_RESET))
47 reset_adc_bus();
48}
49
50status blocks::CTRLBlock::send_sync(uint8_t id) {
51 if (!hardware->write_sync_id(id))
52 return status(1, "Error while sending SYNC.");
53 return status::success();
54}
utils::status status
Definition daq.h:21