REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
ublock.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#include <algorithm>
6
7#include <block/ublock.h>
8#include <chips/SR74HCT595.h>
9#include <entity/hardware.h>
10#include <utils/logging.h>
11
12namespace functions {
13
15public:
16 static const SPISettings DEFAULT_SPI_SETTINGS;
17
19 explicit UMatrixFunction(bus::addr_t address);
20
23 template <size_t num_of_outputs>
24 [[nodiscard]] bool transfer(const std::array<int8_t, num_of_outputs> &outputs) const;
25};
26
27} // namespace functions
28
29namespace blocks {
32
34protected:
37 // Reset disables all output, but rest of logic is unchanged according to datasheet.
38 // But I don't really know what that means. Data is still shifted out after a reset
39 // and the enable-bits in the data are still set.
40 // The datasheet calls the RESET pin OUTPUT ENABLE, so it probably is simply that.
41 // Meaning it is completely useless.
42 // const functions::TriggerFunction f_umatrix_reset;
43
44 // TODO
48
49public:
50 explicit UBlockHAL_Common(bus::addr_t block_address, uint8_t f_umatrix_cs, uint8_t f_umatrix_sync_cs,
51 uint8_t f_transmission_mode_register_cs, uint8_t f_transmission_mode_sync_cs,
52 uint8_t f_transmission_mode_reset_cs);
53
54 bool write_outputs(std::array<int8_t, 32> outputs) override;
55 bool write_transmission_modes_and_ref(std::pair<Transmission_Mode, Transmission_Mode> modes,
56 Reference_Magnitude ref) override;
58
59};
60
62public:
63 explicit UBlockHAL_V_1_2_X(const bus::addr_t block_address)
64 : UBlockHAL_Common(block_address, 5, 6, 2, 3, 4){};
65};
66
67} // namespace blocks
68
69// Include template definitions
70#include "ublock.tpl.h"
bool write_outputs(std::array< int8_t, 32 > outputs) override
Definition ublock.cpp:48
const functions::SR74HCT595 f_transmission_mode_register
Definition ublock.h:45
const functions::TriggerFunction f_transmission_mode_sync
Definition ublock.h:46
void reset_transmission_modes_and_ref() override
Definition ublock.cpp:72
bool write_transmission_modes_and_ref(std::pair< Transmission_Mode, Transmission_Mode > modes, Reference_Magnitude ref) override
Definition ublock.cpp:55
const functions::TriggerFunction f_umatrix_sync
Definition ublock.h:36
const functions::UMatrixFunction f_umatrix
Definition ublock.h:35
const functions::TriggerFunction f_transmission_mode_reset
Definition ublock.h:47
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:35
UBlockHAL_V_1_2_X(const bus::addr_t block_address)
Definition ublock.h:63
A DataFunction class wraps SPI communication over the digital bus.
Definition functions.h:47
DataFunction(bus::addr_t address, const SPISettings &spiSettings)
Definition functions.cpp:16
const bus::addr_t address
Definition functions.h:23
The SR74HCT595 is an 8-Bit Shift Register with 3-State Output Registers.
Definition SR74HCT595.h:15
A trigger function exploits the fact that setting an address on the bus triggers an action (TODO: Is ...
Definition functions.h:33
bool transfer(const std::array< int8_t, num_of_outputs > &outputs) const
Convert an output array to data packets and transfer to chip.
Definition ublock.tpl.h:16
UMatrixFunction(bus::addr_t address)
Definition ublock.cpp:32
static const SPISettings DEFAULT_SPI_SETTINGS
Definition ublock.h:30
namespace for internal helpers
Definition icmd.h:6