REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
carrier.h
Go to the documentation of this file.
1// Copyright (c) 2024 anabrid GmbH
2// Contact: https://www.anabrid.com/licensing/
3// SPDX-License-Identifier: MIT OR GPL-2.0-or-later
4
5#pragma once
6
7#include <Arduino.h>
8#include <ArduinoJson.h>
9#include <array>
10#include <string>
11
12#include "block/ctrlblock.h"
13#include "chips/TMP127Q1.h"
14#include "cluster.h"
15#include "daq/base.h"
16#include "entity/entity.h"
17#include "utils/error.h"
18
19using namespace platform;
20
21namespace carrier {
22
24public:
25 virtual bool write_adc_bus_mux(const std::array<int8_t, 8> &channels) = 0;
26 virtual void reset_adc_bus_mux() = 0;
27};
28
38class Carrier : public entities::Entity {
39public:
40 static constexpr int8_t ADC_CHANNEL_DISABLED = -1;
41 static constexpr auto CLASS_ = entities::EntityClass::CARRIER;
42
43 // Hint: Carrier lacks EEPROM, so we cannot do this:
44 // enum class TYPES : uint8_t { UNKNOWN = 0, LUCIDAC = 1, mREDAC = 2 };
45 // static Carrier *from_entity_classifier(entities::EntityClassifier classifier, bus::addr_t block_address);
46 // bool is_entity_type(TYPES type_) { return entities::Entity::is_entity_type(static_cast<uint8_t>(type_)); }
47
48protected:
50
54
55public:
56 std::vector<Cluster> clusters;
58
59 explicit Carrier(std::vector<Cluster> clusters, Carrier_HAL *hardware);
60
61 metadata::eui_t get_entity_eui() const final;
62
63 virtual bool init();
64
65 virtual bool calibrate_offset();
66 virtual bool calibrate_routes_in_cluster(Cluster &cluster);
67 virtual bool calibrate_routes();
68 virtual bool calibrate_mblock(Cluster &cluster, blocks::MBlock &mblock);
69 virtual bool calibrate_m_blocks();
70
71 virtual void reset(entities::ResetAction action);
72
73 std::vector<Entity *> get_child_entities() override;
74
75 Entity *get_child_entity(const std::string &child_id) override;
76
77 utils::status config_self_from_json(JsonObjectConst cfg) override;
78 void config_self_to_json(JsonObject& cfg) override;
79
80 [[nodiscard]] utils::status write_to_hardware() override;
81
82 [[nodiscard]] const std::array<int8_t, 8> &get_adc_channels() const;
83 [[nodiscard]] bool set_adc_channels(const std::array<int8_t, 8> &channels);
84 [[nodiscard]] bool set_adc_channel(uint8_t adc_channel, int8_t src_idx);
85 void reset_adc_channels();
86
89 utils::status user_set_extended_config(JsonObjectConst msg_in, JsonObject &msg_out);
90 utils::status user_get_overload_status(JsonObjectConst msg_in, JsonObject &msg_out);
92
93public:
94 // Module addresses
95 static constexpr uint8_t CARRIER_MADDR = 5;
96};
97
98} // namespace carrier
virtual bool write_adc_bus_mux(const std::array< int8_t, 8 > &channels)=0
virtual void reset_adc_bus_mux()=0
Top-level hierarchy controlled by a single microcontroller.
Definition carrier.h:38
std::array< int8_t, 8 > adc_channels
Definition carrier.h:51
const std::array< int8_t, 8 > & get_adc_channels() const
Definition carrier.cpp:219
blocks::CTRLBlock * ctrl_block
Definition carrier.h:57
virtual bool calibrate_m_blocks()
Definition carrier.cpp:199
static constexpr uint8_t CARRIER_MADDR
Definition carrier.h:95
Carrier(std::vector< Cluster > clusters, Carrier_HAL *hardware)
Definition carrier.cpp:13
static constexpr auto CLASS_
Definition carrier.h:41
bool set_adc_channels(const std::array< int8_t, 8 > &channels)
Definition carrier.cpp:221
utils::status write_to_hardware() override
returns true in case of success
Definition carrier.cpp:102
virtual bool calibrate_routes()
Definition carrier.cpp:151
Carrier_HAL * hardware
Definition carrier.h:49
static constexpr int8_t ADC_CHANNEL_DISABLED
Definition carrier.h:40
std::vector< Cluster > clusters
Definition carrier.h:56
virtual bool calibrate_mblock(Cluster &cluster, blocks::MBlock &mblock)
Definition carrier.cpp:159
virtual void reset(entities::ResetAction action)
Definition carrier.cpp:210
Entity * get_child_entity(const std::string &child_id) override
Definition carrier.cpp:55
metadata::eui_t get_entity_eui() const final
Definition carrier.cpp:11
void config_self_to_json(JsonObject &cfg) override
Serialize the configuration of this entity to a JsonObject.
Definition carrier.cpp:89
void reset_adc_channels()
Definition carrier.cpp:261
bool set_adc_channel(uint8_t adc_channel, int8_t src_idx)
Definition carrier.cpp:244
virtual bool init()
returns true in case of success
Definition carrier.cpp:18
std::vector< Entity * > get_child_entities() override
Definition carrier.cpp:45
utils::status config_self_from_json(JsonObjectConst cfg) override
Deserialize a new configuration for this entity from a JsonObject.
Definition carrier.cpp:67
virtual bool calibrate_offset()
Definition carrier.cpp:123
virtual bool calibrate_routes_in_cluster(Cluster &cluster)
Definition carrier.cpp:130
Entity()=default
The Lucidac class represents a single cluster.
Definition cluster.h:20
A recoverable error, inspired from https://abseil.io/docs/cpp/guides/status and https://github....
Definition error.h:35
utils::status user_set_extended_config(JsonObjectConst msg_in, JsonObject &msg_out)
Definition carrier.cpp:265
utils::status user_get_overload_status(JsonObjectConst msg_in, JsonObject &msg_out)
Definition carrier.cpp:309
Definition base.h:10
std::array< uint8_t, 8 > eui_t
Definition base.h:20
This concept of Backpanel / Backplane refers to the address decoder and periphery reachable by every ...
Definition cblock.h:15
STL namespace.