REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
lucidac.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"
11#include "utils/singleton.h"
12
13namespace platform {
14
16public:
17 // Module addresses
18 static constexpr uint8_t CARRIER_MADDR = 5;
19 // Function addresses
20 static constexpr uint8_t METADATA_FADDR = bus::METADATA_FUNC_IDX;
21 static constexpr uint8_t TEMPERATURE_FADDR = 1;
22 static constexpr uint8_t ADC_PRG_FADDR = 2;
23 static constexpr uint8_t ADC_RESET_8816_FADDR = 3;
24 static constexpr uint8_t ADC_RESET_SR_FADDR = 4;
25 static constexpr uint8_t ADC_STROBE_FADDR = 5;
26 static constexpr uint8_t ACL_PRG_FADDR = 6;
27 static constexpr uint8_t ACL_UPD_FADDR = 7;
28 static constexpr uint8_t ACL_CRL_FADDR = 8;
29
30protected:
31 // Functions to configure ACL signal muxer
35 // Functions to configure ADC signal switching matrix
36 // TODO: Replace by separate function or abstraction that does not allow connecting two inputs to one output
37 // SPI settings are unfortunately different from IBlock
38 static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS;
43 // Temperature function
45
46public:
48
49 enum class ACL { INTERNAL_ = 0, EXTERNAL_ = 1 };
50
52 bool write_acl(std::array<ACL, 8> acl);
53
54 void reset_acl();
55
58 bool write_adc_bus_mux(const std::array<int8_t, 8> &channels) override;
59
60 void reset_adc_bus_mux() override;
61};
62
63class LUCIDAC : public carrier::Carrier, public utils::HeapSingleton<LUCIDAC> {
64public:
66
67protected:
69
70 std::array<ACL, 8> acl_select{ACL::INTERNAL_, ACL::INTERNAL_, ACL::INTERNAL_, ACL::INTERNAL_,
71 ACL::INTERNAL_, ACL::INTERNAL_, ACL::INTERNAL_, ACL::INTERNAL_};
72
73 bool _config_acl_from_json(const JsonVariantConst &cfg);
74
75public:
77
78 explicit LUCIDAC(LUCIDAC_HAL *hardware);
79 LUCIDAC();
80
81 bool init() override;
82
83 void reset(entities::ResetAction action) override;
84
85 std::vector<Entity *> get_child_entities() override;
86
87 Entity *get_child_entity(const std::string &child_id) override;
88
89 utils::status config_self_from_json(JsonObjectConst cfg) override;
90 void config_self_to_json(JsonObject &cfg) override;
91
92 [[nodiscard]] utils::status write_to_hardware() override;
93
94 [[nodiscard]] const std::array<ACL, 8> &get_acl_select() const;
95 void set_acl_select(const std::array<ACL, 8> &acl_select_);
96 [[nodiscard]] bool set_acl_select(uint8_t idx, ACL acl);
97 void reset_acl_select();
98
99 bool calibrate_routes() override;
100};
101
102} // 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
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
The Lucidac Front Panel is represented by this class.
Definition front_panel.h:26
const functions::TriggerFunction f_adc_switcher_matrix_reset
Definition lucidac.h:42
static constexpr uint8_t ADC_RESET_8816_FADDR
Definition lucidac.h:23
static constexpr uint8_t ACL_CRL_FADDR
Definition lucidac.h:28
const functions::ICommandRegisterFunction f_adc_switcher_prg
Definition lucidac.h:39
static constexpr uint8_t ACL_PRG_FADDR
Definition lucidac.h:26
static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS
Definition lucidac.h:9
const functions::TriggerFunction f_adc_switcher_sr_reset
Definition lucidac.h:41
void reset_adc_bus_mux() override
Definition lucidac.cpp:63
static constexpr uint8_t ADC_RESET_SR_FADDR
Definition lucidac.h:24
static constexpr uint8_t CARRIER_MADDR
Definition lucidac.h:18
static constexpr uint8_t ADC_PRG_FADDR
Definition lucidac.h:22
static constexpr uint8_t METADATA_FADDR
Definition lucidac.h:20
static constexpr uint8_t ADC_STROBE_FADDR
Definition lucidac.h:25
const functions::TMP127Q1 f_temperature
Definition lucidac.h:44
const functions::SR74HCT595 f_acl_prg
Definition lucidac.h:32
bool write_adc_bus_mux(const std::array< int8_t, 8 > &channels) override
Write channel selection to ADC bus muxer.
Definition lucidac.cpp:45
static constexpr uint8_t ACL_UPD_FADDR
Definition lucidac.h:27
static constexpr uint8_t TEMPERATURE_FADDR
Definition lucidac.h:21
const functions::TriggerFunction f_adc_switcher_sync
Definition lucidac.h:40
const functions::TriggerFunction f_acl_clr
Definition lucidac.h:34
bool write_acl(std::array< ACL, 8 > acl)
Write bits to ACL shift register, from I-block input 24 (first element) to 31 (last element)
Definition lucidac.cpp:27
const functions::TriggerFunction f_acl_upd
Definition lucidac.h:33
Entity * get_child_entity(const std::string &child_id) override
Definition lucidac.cpp:103
LUCIDACFrontPanel * front_panel
Definition lucidac.h:76
const std::array< ACL, 8 > & get_acl_select() const
Definition lucidac.cpp:118
utils::status write_to_hardware() override
returns true in case of success
Definition lucidac.cpp:109
LUCIDAC_HAL * hardware
Definition lucidac.h:68
bool init() override
returns true in case of success
Definition lucidac.cpp:65
bool calibrate_routes() override
Definition lucidac.cpp:131
void config_self_to_json(JsonObject &cfg) override
Serialize the configuration of this entity to a JsonObject.
Definition lucidac.cpp:182
std::vector< Entity * > get_child_entities() override
Definition lucidac.cpp:96
void reset_acl_select()
Definition lucidac.cpp:129
std::array< ACL, 8 > acl_select
Definition lucidac.h:70
bool _config_acl_from_json(const JsonVariantConst &cfg)
Definition lucidac.cpp:163
void reset(entities::ResetAction action) override
Definition lucidac.cpp:85
utils::status config_self_from_json(JsonObjectConst cfg) override
Deserialize a new configuration for this entity from a JsonObject.
Definition lucidac.cpp:144
void set_acl_select(const std::array< ACL, 8 > &acl_select_)
Definition lucidac.cpp:120
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