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
11FLASHMEM
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 if (classifier.version < entities::Version(0, 2)) {
24 auto *new_block = new SHBlock(new SHBlockHAL_V_0_1_X(block_address));
25 new_block->classifier = classifier;
26 return new_block;
27 }
28 return nullptr;
29}
30
32 : SHBlockHAL_Parent(block_address),
33 set_track(bus::replace_function_idx(block_address, 2)),
34 set_track_at_ic(bus::replace_function_idx(block_address, 3)),
35 set_gain(bus::replace_function_idx(block_address, 4)),
36 set_gain_channels_zero_to_seven(bus::replace_function_idx(block_address, 5)),
37 set_gain_channels_eight_to_fifteen(bus::replace_function_idx(block_address, 6)),
38 set_inject(bus::replace_function_idx(block_address, 7)) {}
39
41 uint32_t inject_time) {
42 set_track.trigger();
43 delayMicroseconds(track_time);
44 set_inject.trigger();
45 delayMicroseconds(inject_time);
46}
47
48FLASHMEM void blocks::SHBlockHAL_V_0_1_X::set_state(SHState state) const {
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();
61 set_gain_channels_zero_to_seven.trigger();
62 break;
63 case SHState::GAIN_EIGHT_TO_FIFTEEN:
64 set_gain.trigger();
65 set_gain_channels_eight_to_fifteen.trigger();
66 break;
67 }
68}
void compensate_hardware_offsets(uint32_t track_time, uint32_t inject_time)
Definition shblock.cpp:40
SHBlockHAL_V_0_1_X(bus::addr_t block_address)
Definition shblock.cpp:31
void set_state(SHState state) const
Definition shblock.cpp:48
uint32_t
Definition flasher.cpp:195
Definition bus.h:21