REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
shblock.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 "base.h"
9#include "bus/functions.h"
10#include "ublock.h"
11
12namespace blocks {
13
15
17public:
18 explicit SHBlockHAL(bus::addr_t block_address);
19
20 metadata::eui_t get_entity_eui() const override { return f_meta.read_eui(); }
21
22 void compensate_hardware_offsets(uint32_t track_time, uint32_t inject_time);
23 void set_state(SHState state) const;
24
25private:
26 // Default state after reset is inject with a potentially random inject current
27 const metadata::MetadataEditor f_meta;
28 const functions::TriggerFunction set_track;
29 const functions::TriggerFunction set_track_at_ic;
30 const functions::TriggerFunction set_gain;
31 const functions::TriggerFunction set_gain_channels_zero_to_seven;
32 const functions::TriggerFunction set_gain_channels_eight_to_fifteen;
33 const functions::TriggerFunction set_inject;
34};
35
37public:
38 // Entity hardware identifier information.
39 static constexpr auto CLASS_ = entities::EntityClass::SH_BLOCK;
40 static constexpr uint8_t BLOCK_IDX = bus::SH_BLOCK_IDX;
41
43 explicit SHBlock(SHBlockHAL *hardware);
44
45 metadata::eui_t get_entity_eui() const override;
46
49 void set_state(SHState state_);
50 SHState get_state() const;
51
53 void reset(entities::ResetAction action) override;
54
56 [[nodiscard]] utils::status write_to_hardware() override;
57
58 // Automatically does an track and inject sequence. This directly writes to hardware. Delays for track time
59 // and inject time can be set optionally in microseconds. Block will be left in inject mode afterwards
60 void compensate_hardware_offsets(uint32_t track_time = 10000, uint32_t inject_time = 5000);
61
62 static SHBlock *from_entity_classifier(entities::EntityClassifier classifier, bus::addr_t block_address);
63
64protected:
66
67 utils::status config_self_from_json(JsonObjectConst cfg) override;
68
70};
71
72} // namespace blocks
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
void compensate_hardware_offsets(uint32_t track_time, uint32_t inject_time)
Definition shblock.cpp:22
metadata::eui_t get_entity_eui() const override
Definition shblock.h:20
void set_state(SHState state) const
Definition shblock.cpp:29
SHBlockHAL(bus::addr_t block_address)
Definition shblock.cpp:8
static constexpr auto CLASS_
Definition shblock.h:39
SHState get_state() const
Definition shblock.cpp:57
metadata::eui_t get_entity_eui() const override
Definition shblock.cpp:16
void reset(entities::ResetAction action) override
Resets all internal states. Block is left in inject mode afterwards. Requires write_to_hardware()
Definition shblock.cpp:59
static SHBlock * from_entity_classifier(entities::EntityClassifier classifier, bus::addr_t block_address)
Definition shblock.cpp:96
utils::status config_self_from_json(JsonObjectConst cfg) override
Deserialize a new configuration for this entity from a JsonObject.
Definition shblock.cpp:74
SHBlockHAL * hardware
Definition shblock.h:69
SHState state
Definition shblock.h:65
static constexpr uint8_t BLOCK_IDX
Definition shblock.h:40
utils::status write_to_hardware() override
Applies current class state to actually hardware.
Definition shblock.cpp:64
void set_state(SHState state_)
Sets the state the SHBlock currently is in.
Definition shblock.cpp:55
void compensate_hardware_offsets(uint32_t track_time=10000, uint32_t inject_time=5000)
Definition shblock.cpp:69
EntityClassifier classifier
Definition base.h:217
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
uint32_t
Definition flasher.cpp:195
Definition base.h:10
SHState
Definition shblock.h:14
constexpr uint8_t SH_BLOCK_IDX
Definition bus.h:59
uint16_t addr_t
Definition bus.h:27
std::array< uint8_t, 8 > eui_t
Definition base.h:20