REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
shblock.cpp
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#include <block/shblock.h>
7#include <entity/meta.h>
8
9#include "teensy/shblock.h"
10
11
12blocks::SHBlock *blocks::SHBlock::from_entity_classifier(entities::EntityClassifier classifier,
13 bus::addr_t block_address) {
14 if (!classifier or classifier.class_enum != CLASS_)
15 return nullptr;
16
17 // Currently, there are no different variants
18 if (classifier.variant != entities::EntityClassifier::DEFAULT_)
19 return nullptr;
20
21 if (classifier.version < entities::Version(0, 1)) {
22 return nullptr;
23 }
24 if (classifier.version < entities::Version(0, 2)) {
25 auto *new_block = new SHBlock(new SHBlockHAL_V_0_1_X(block_address));
26 new_block->classifier = classifier;
27 return new_block;
28 }
29 if (classifier.version < entities::Version(1, 2)) {
30 return nullptr;
31 }
32 if (classifier.version < entities::Version(1, 3)) {
33 auto *new_block = new SHBlock(new SHBlockHAL_V_1_2_X(block_address));
34 new_block->classifier = classifier;
35 return new_block;
36 }
37 return nullptr;
38}
39
41 : SHBlockHAL_Parent(block_address, 8), set_track(bus::replace_function_idx(block_address, 2)),
42 set_track_at_ic(bus::replace_function_idx(block_address, 3)),
43 set_gain(bus::replace_function_idx(block_address, 4)),
44 set_gain_channels_zero_to_seven(bus::replace_function_idx(block_address, 5)),
45 set_gain_channels_eight_to_fifteen(bus::replace_function_idx(block_address, 6)),
46 set_inject(bus::replace_function_idx(block_address, 7)) {}
47
48utils::status blocks::SHBlockHAL_V_0_1_X::set_state(SHState state) {
49 switch (state) {
50 case SHState::TRACK:
51 set_track.trigger();
52 break;
53 case SHState::TRACK_AT_IC:
54 set_track_at_ic.trigger();
55 break;
56 case SHState::INJECT:
57 set_inject.trigger();
58 break;
59 case SHState::GAIN_ZERO_TO_SEVEN:
60 set_gain.trigger();
62 break;
63 case SHState::GAIN_EIGHT_TO_FIFTEEN:
64 set_gain.trigger();
66 break;
67 default:
68 return utils::status("Requested SH State is not available on this hardware version");
69 }
70
71 return utils::status::success();
72}
73
75 : SHBlockHAL_Parent(block_address, 0xff), set_track(bus::replace_function_idx(block_address, 2)),
76 set_disconnect(bus::replace_function_idx(block_address, 3)),
77 set_gain(bus::replace_function_idx(block_address, 4)),
78 set_gain_channels_zero_to_seven(bus::replace_function_idx(block_address, 5)),
79 set_gain_channels_eight_to_fifteen(bus::replace_function_idx(block_address, 6)),
80 set_inject(bus::replace_function_idx(block_address, 7)) {}
81
82utils::status blocks::SHBlockHAL_V_1_2_X::set_state(SHState state) {
83 switch (state) {
84 case SHState::TRACK:
85 set_track.trigger();
86 break;
87 case SHState::PASSTHROUGH:
88 set_disconnect.trigger();
89 break;
90 case SHState::INJECT:
91 set_inject.trigger();
92 break;
93 case SHState::GAIN_ZERO_TO_SEVEN:
94 if (prev_state == SHState::PASSTHROUGH)
95 set_inject.trigger();
97 set_gain.trigger();
98 break;
99 case SHState::GAIN_EIGHT_TO_FIFTEEN:
100 if (prev_state == SHState::PASSTHROUGH)
101 set_inject.trigger();
103 set_gain.trigger();
104 break;
105 default:
106 return utils::status("Requested SH State is not available on this hardware version");
107 }
108
109 prev_state = state;
110 return utils::status::success();
111}
const functions::TriggerFunction set_track
Definition shblock.h:22
const functions::TriggerFunction set_gain_channels_eight_to_fifteen
Definition shblock.h:26
const functions::TriggerFunction set_inject
Definition shblock.h:27
const functions::TriggerFunction set_gain
Definition shblock.h:24
SHBlockHAL_V_0_1_X(bus::addr_t block_address)
Definition shblock.cpp:40
const functions::TriggerFunction set_track_at_ic
Definition shblock.h:23
const functions::TriggerFunction set_gain_channels_zero_to_seven
Definition shblock.h:25
utils::status set_state(SHState state)
Definition shblock.cpp:48
const functions::TriggerFunction set_track
Definition shblock.h:38
const functions::TriggerFunction set_disconnect
Definition shblock.h:39
const functions::TriggerFunction set_gain
Definition shblock.h:40
utils::status set_state(SHState state)
Definition shblock.cpp:82
const functions::TriggerFunction set_gain_channels_zero_to_seven
Definition shblock.h:41
const functions::TriggerFunction set_gain_channels_eight_to_fifteen
Definition shblock.h:42
const functions::TriggerFunction set_inject
Definition shblock.h:43
SHBlockHAL_V_1_2_X(bus::addr_t block_address)
Definition shblock.cpp:74
entities::EntitySharedHardware< SHBlockHAL > SHBlockHAL_Parent
Definition shblock.h:12
Definition bus.h:21