REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
ctrlblock.h
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#pragma once
7
8#include "block/base.h"
9#include "chips/SR74HCT595.h"
10
11namespace functions {
12
13class SyncFunction : public DataFunction {
14public:
17};
18
19} // namespace functions
20
21namespace blocks {
22
24public:
25 enum class ADCBus : uint8_t {
26 // Underlying values correspond to cluster indices
27 CL0_GAIN = 0,
28 CL1_GAIN = 1,
29 CL2_GAIN = 2,
30 ADC = 3
31 };
32
33 virtual bool write_adc_bus_muxers(ADCBus channel) = 0;
34
35 virtual bool write_sync_id(uint8_t id) = 0;
36};
37
39protected:
40 static const SPISettings F_SYNC_SPI_SETTINGS;
41
46
47public:
48 CTRLBlockHAL_V_1_0_2(bus::addr_t block_address);
49
50 bool write_adc_bus_muxers(ADCBus adc_bus) override;
51
52 bool write_sync_id(uint8_t id) override;
53
54 metadata::eui_t get_entity_eui() const override { return f_meta.read_eui(); }
55
56 // private:
57 // float read_temperature() override;
58};
59
60class CTRLBlock : public FunctionBlock {
61public:
63
64public:
66 static constexpr uint8_t TYPE = 1;
67
68 static CTRLBlock *from_entity_classifier(entities::EntityClassifier classifier, bus::addr_t block_address);
69
70protected:
71 ADCBus adc_bus = ADCBus::ADC;
73
74public:
76
77 metadata::eui_t get_entity_eui() const override;
78
79 bool init() override;
80
81 void reset(entities::ResetAction action) override;
82
83 [[nodiscard]] utils::status write_to_hardware() override;
84
85 ADCBus get_adc_bus() const;
86 void set_adc_bus(ADCBus adc_bus_);
87 void reset_adc_bus();
88 bool set_adc_bus_to_cluster_gain(uint8_t cluster_idx);
89
90protected:
91 utils::status config_self_from_json(JsonObjectConst cfg) override;
92};
93
94} // namespace blocks
virtual bool write_adc_bus_muxers(ADCBus channel)=0
virtual bool write_sync_id(uint8_t id)=0
const functions::SR74HCT595 f_adc_mux
Definition ctrlblock.h:43
metadata::eui_t get_entity_eui() const override
Definition ctrlblock.h:54
const functions::SyncFunction f_sync
Definition ctrlblock.h:45
bool write_adc_bus_muxers(ADCBus adc_bus) override
Definition ctrlblock.cpp:15
const metadata::MetadataEditor f_meta
Definition ctrlblock.h:42
const functions::TriggerFunction f_adc_mux_latch
Definition ctrlblock.h:44
static const SPISettings F_SYNC_SPI_SETTINGS
Definition ctrlblock.h:8
CTRLBlockHAL_V_1_0_2(bus::addr_t block_address)
Definition ctrlblock.cpp:10
bool write_sync_id(uint8_t id) override
Definition ctrlblock.cpp:24
utils::status config_self_from_json(JsonObjectConst cfg) override
Deserialize a new configuration for this entity from a JsonObject.
Definition ctrlblock.cpp:62
bool set_adc_bus_to_cluster_gain(uint8_t cluster_idx)
Definition ctrlblock.cpp:82
bool init() override
returns true in case of success
Definition ctrlblock.cpp:70
CTRLBlock(CTRLBlockHALBase *hardware)
Definition ctrlblock.cpp:36
ADCBus get_adc_bus() const
Definition ctrlblock.cpp:76
metadata::eui_t get_entity_eui() const override
Definition ctrlblock.cpp:56
utils::status write_to_hardware() override
returns true in case of success
Definition ctrlblock.cpp:66
void reset(entities::ResetAction action) override
Definition ctrlblock.cpp:89
static constexpr uint8_t TYPE
Definition ctrlblock.h:66
static CTRLBlock * from_entity_classifier(entities::EntityClassifier classifier, bus::addr_t block_address)
Definition ctrlblock.cpp:40
CTRLBlockHALBase * hardware
Definition ctrlblock.h:72
void set_adc_bus(ADCBus adc_bus_)
Definition ctrlblock.cpp:78
static constexpr auto CLASS_
Definition ctrlblock.h:65
A function block represents one module in a cluster, such as an M-Block, C-Block, I-Block or U-Block.
Definition base.h:29
EntityClassifier classifier
Definition base.h:217
A DataFunction class wraps SPI communication over the digital bus.
Definition functions.h:47
uint16_t transfer16(uint16_t data_in) const
Definition functions.cpp:54
DataFunction(bus::addr_t address, const SPISettings &spiSettings)
Definition functions.cpp:16
The SR74HCT595 is an 8-Bit Shift Register with 3-State Output Registers.
Definition SR74HCT595.h:16
A trigger function exploits the fact that setting an address on the bus triggers an action (TODO: Is ...
Definition functions.h:33
eui_t read_eui() const
Definition entity.h:42
A recoverable error, inspired from https://abseil.io/docs/cpp/guides/status and https://github....
Definition error.h:35
Definition base.h:10
uint16_t addr_t
Definition bus.h:27
The AD8402 is a two channel, 8 bit digital potentiometer.
Definition functions.h:12
std::array< uint8_t, 8 > eui_t
Definition base.h:20