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 <block/ctrlblock.h>
7
8// bus::address_from_tuple(1, 0)
9FLASHMEM blocks::CTRLBlock::CTRLBlock(CTRLBlockHALBase *hardware) : FunctionBlock("CTRL", hardware), hardware(hardware) {
10 classifier.class_enum = CLASS_;
11}
12
13FLASHMEM metadata::eui_t blocks::CTRLBlock::get_entity_eui() const {
14 if (hardware)
15 return hardware->get_entity_eui();
16 return {};
17}
18
19FLASHMEM utils::status blocks::CTRLBlock::config_self_from_json(JsonObjectConst cfg) {
20 return utils::status::success();
21}
22
23FLASHMEM utils::status blocks::CTRLBlock::write_to_hardware() {
24 return utils::status(hardware->write_adc_bus_muxers(adc_bus));
25}
26
27FLASHMEM bool blocks::CTRLBlock::init() {
28 // Hardware defaults are not very good, e.g. adc bus is by default on CL0_GAIN.
29 // That's why we write more sane defaults on init.
30 return utils::status(FunctionBlock::init() and write_to_hardware());
31}
32
33FLASHMEM blocks::CTRLBlock::ADCBus blocks::CTRLBlock::get_adc_bus() const { return adc_bus; }
34
35FLASHMEM void blocks::CTRLBlock::set_adc_bus(blocks::CTRLBlock::ADCBus adc_bus_) { adc_bus = adc_bus_; }
36
37FLASHMEM void blocks::CTRLBlock::reset_adc_bus() { adc_bus = ADCBus::ADC; }
38
39FLASHMEM bool 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
46FLASHMEM void blocks::CTRLBlock::reset(entities::ResetAction action) {
47 FunctionBlock::reset(action);
48
49 if (action.has(entities::ResetAction::CIRCUIT_RESET))
50 reset_adc_bus();
51}