REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
redac.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/blocks.h"
9#include "carrier/carrier.h"
10#include "tblock.h"
11#include "back_panel.h"
12#include "utils/singleton.h"
13
14namespace platform {
15
17public:
18 REDAC_HAL();
19
20 bool write_adc_bus_mux(const std::array<int8_t, 8> &channels) override;
21
22 void reset_adc_bus_mux() override;
23
24 // Module addresses
25 static constexpr uint8_t CARRIER_MADDR = 5;
26 // Function addresses
27 static constexpr uint8_t METADATA_FADDR = bus::METADATA_FUNC_IDX;
28 static constexpr uint8_t TEMPERATURE_FADDR = 1;
29 static constexpr uint8_t ADC_PRG_FADDR = 0;
30 static constexpr uint8_t ADC_RESET_FADDR = 1;
31 static constexpr uint8_t ADC_STROBE_FADDR = 2;
32
33protected:
34 // Functions to configure ADC signal switching matrices
35 static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS;
39
43
45};
46
47class REDAC : public carrier::Carrier, public utils::HeapSingleton<REDAC> {
48protected:
49 // Entity names. The carrier T block is just named "T"
50 constexpr static const char* STACK_T0_NAME = "ST0";
51 constexpr static const char* STACK_T1_NAME = "ST1";
52 constexpr static const char* STACK_TAUX_NAME = "ST2";
53
55 blocks::TBlock* init_backpanel_tblock(uint8_t baddr, const char* name);
56
57public:
58 explicit REDAC(REDAC_HAL *hardware);
59 REDAC();
60
61 bool init() override;
62 void reset(entities::ResetAction action) override;
63
64 status write_to_hardware() override;
65
66public: // should be protected
68
70 *carrier_t_block = nullptr,
71 *stack_t0_block = nullptr,
72 *stack_t1_block = nullptr,
73 *stack_taux_block = nullptr;
74
76
77 std::vector<blocks::TBlock*> get_all_tblocks() const { return {carrier_t_block, stack_t0_block, stack_t1_block, stack_taux_block }; }
78
80
81 std::vector<Entity *> get_child_entities() override;
82
83 Entity *get_child_entity(const std::string &child_id) override;
84
85 //utils::status config_self_from_json(JsonObjectConst cfg) override;
86 //void config_self_to_json(JsonObject &cfg) override;
87};
88
89} // namespace platform
Top-level hierarchy controlled by a single microcontroller.
Definition carrier.h:38
Entity()=default
DataFunction to transfer 32bit of data to the I-Block matrix command registry.
Definition iblock.h:30
A trigger function exploits the fact that setting an address on the bus triggers an action (TODO: Is ...
Definition functions.h:33
void reset_adc_bus_mux() override
Definition redac.cpp:51
bool write_adc_bus_mux(const std::array< int8_t, 8 > &channels) override
Definition redac.cpp:25
const functions::TriggerFunction f_adc1_switcher_reset
Definition redac.h:41
const functions::TriggerFunction f_adc1_switcher_sync
Definition redac.h:42
const functions::TriggerFunction f_adc0_switcher_reset
Definition redac.h:37
const functions::TriggerFunction f_adc0_switcher_sync
Definition redac.h:38
const functions::ICommandRegisterFunction f_adc0_switcher_prg
Definition redac.h:36
static constexpr uint8_t ADC_RESET_FADDR
Definition redac.h:30
static constexpr uint8_t CARRIER_MADDR
Definition redac.h:25
const functions::ICommandRegisterFunction f_adc1_switcher_prg
Definition redac.h:40
static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS
Definition redac.h:10
static constexpr uint8_t ADC_PRG_FADDR
Definition redac.h:29
static constexpr uint8_t ADC_STROBE_FADDR
Definition redac.h:31
static constexpr uint8_t TEMPERATURE_FADDR
Definition redac.h:28
const functions::TMP127Q1 f_temperature
Definition redac.h:44
static constexpr uint8_t METADATA_FADDR
Definition redac.h:27
blocks::TBlock * carrier_t_block
Definition redac.h:70
REDACBackPanel * back_panel
Definition redac.h:67
static constexpr const char * STACK_TAUX_NAME
Definition redac.h:52
blocks::TBlock * init_backpanel_tblock(uint8_t baddr, const char *name)
Definition redac.cpp:56
Entity * get_child_entity(const std::string &child_id) override
Definition redac.cpp:190
status write_to_hardware() override
returns true in case of success
Definition redac.cpp:163
blocks::Router f_routing
Definition redac.h:75
void reset(entities::ResetAction action) override
Definition redac.cpp:153
blocks::TBlock * stack_t0_block
Definition redac.h:71
static constexpr const char * STACK_T0_NAME
Definition redac.h:50
bool init() override
returns true in case of success
Definition redac.cpp:81
BackPanelIdentifier get_backpanel_identifier() const
Definition redac.cpp:173
REDAC_HAL * hardware
Definition redac.h:54
blocks::TBlock * stack_taux_block
Definition redac.h:73
static constexpr const char * STACK_T1_NAME
Definition redac.h:51
blocks::TBlock * stack_t1_block
Definition redac.h:72
std::vector< blocks::TBlock * > get_all_tblocks() const
Definition redac.h:77
std::vector< Entity * > get_child_entities() override
Definition redac.cpp:179
Define singletons which are not static-space allocated (and thus consume valuable ICTM space).
Definition singleton.h:46
A recoverable error, inspired from https://abseil.io/docs/cpp/guides/status and https://github....
Definition error.h:35
constexpr uint8_t METADATA_FUNC_IDX
Definition bus.h:77
This concept of Backpanel / Backplane refers to the address decoder and periphery reachable by every ...
Definition cblock.h:15