REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
ublock.cpp
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#include <algorithm>
6
7#include <block/ublock.h>
8#include <entity/meta.h>
9#include <utils/logging.h>
10
11#include "teensy/ublock.h"
12#include <chips/SR74HCT595.h>
13
14const SPISettings functions::UMatrixFunction::DEFAULT_SPI_SETTINGS{4'000'000, MSBFIRST, SPI_MODE2};
15
17 : functions::DataFunction(address, DEFAULT_SPI_SETTINGS) {}
18
19FLASHMEM blocks::UBlockHAL_Common::UBlockHAL_Common(bus::addr_t block_address, const uint8_t f_umatrix_cs,
20 const uint8_t f_umatrix_sync_cs,
21 const uint8_t f_transmission_mode_register_cs,
22 const uint8_t f_transmission_mode_sync_cs,
23 const uint8_t f_transmission_mode_reset_cs)
24 : f_meta(block_address), f_umatrix(bus::replace_function_idx(block_address, f_umatrix_cs)),
25 f_umatrix_sync(bus::replace_function_idx(block_address, f_umatrix_sync_cs)),
26 f_transmission_mode_register(bus::replace_function_idx(block_address, f_transmission_mode_register_cs),
27 true),
28 f_transmission_mode_sync(bus::replace_function_idx(block_address, f_transmission_mode_sync_cs)),
29 f_transmission_mode_reset(bus::replace_function_idx(block_address, f_transmission_mode_reset_cs)) {}
30
31FLASHMEM bool blocks::UBlockHAL_Common::write_outputs(std::array<int8_t, 32> outputs) {
32 if (!f_umatrix.transfer(outputs))
33 return false;
34 f_umatrix_sync.trigger();
35 return true;
36}
37
39 std::pair<Transmission_Mode, Transmission_Mode> modes, Reference_Magnitude ref) {
40 // Reference magnitude is defined by lowest bit
41 // Group "A" mode is defined by the next two bits
42 // Group "B" mode is defined by the next two bits
43 // Remaining bits are not used
44 uint8_t data = 0b000'00'00'0;
45 data |= static_cast<uint8_t>(ref);
46 data |= (static_cast<uint8_t>(modes.first) << 1);
47 data |= (static_cast<uint8_t>(modes.second) << 3);
48
49 if (!f_transmission_mode_register.transfer8(data))
50 return false;
51 f_transmission_mode_sync.trigger();
52 return true;
53}
54
56 f_transmission_mode_reset.trigger();
57}
bool write_outputs(std::array< int8_t, 32 > outputs) override
Definition ublock.cpp:31
void reset_transmission_modes_and_ref() override
Definition ublock.cpp:55
bool write_transmission_modes_and_ref(std::pair< Transmission_Mode, Transmission_Mode > modes, Reference_Magnitude ref) override
Definition ublock.cpp:38
UBlockHAL_Common(bus::addr_t block_address, uint8_t f_umatrix_cs, uint8_t f_umatrix_sync_cs, uint8_t f_transmission_mode_register_cs, uint8_t f_transmission_mode_sync_cs, uint8_t f_transmission_mode_reset_cs)
Definition ublock.cpp:19
A DataFunction class wraps SPI communication over the digital bus.
Definition functions.h:47
UMatrixFunction(bus::addr_t address)
Definition ublock.cpp:16
static const SPISettings DEFAULT_SPI_SETTINGS
Definition ublock.h:14
Definition bus.h:21
namespace for internal helpers
Definition ctrlblock.h:12