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/meta.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 {
30
31class UBlockHAL_Common : public UBlockHAL {
32protected:
36 // Reset disables all output, but rest of logic is unchanged according to datasheet.
37 // But I don't really know what that means. Data is still shifted out after a reset
38 // and the enable-bits in the data are still set.
39 // The datasheet calls the RESET pin OUTPUT ENABLE, so it probably is simply that.
40 // Meaning it is completely useless.
41 // const functions::TriggerFunction f_umatrix_reset;
42
43 // TODO
47
48public:
49 explicit UBlockHAL_Common(bus::addr_t block_address, uint8_t f_umatrix_cs, uint8_t f_umatrix_sync_cs,
50 uint8_t f_transmission_mode_register_cs, uint8_t f_transmission_mode_sync_cs,
51 uint8_t f_transmission_mode_reset_cs);
52
53 bool write_outputs(std::array<int8_t, 32> outputs) override;
54 bool write_transmission_modes_and_ref(std::pair<Transmission_Mode, Transmission_Mode> modes,
55 Reference_Magnitude ref) override;
57
58 metadata::eui_t get_entity_eui() const override { return f_meta.read_eui(); }
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:31
const functions::SR74HCT595 f_transmission_mode_register
Definition ublock.h:44
const functions::TriggerFunction f_transmission_mode_sync
Definition ublock.h:45
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
metadata::eui_t get_entity_eui() const override
Definition ublock.h:58
const metadata::MetadataEditor f_meta
Definition ublock.h:33
const functions::TriggerFunction f_umatrix_sync
Definition ublock.h:35
const functions::UMatrixFunction f_umatrix
Definition ublock.h:34
const functions::TriggerFunction f_transmission_mode_reset
Definition ublock.h:46
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
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:16
static const SPISettings DEFAULT_SPI_SETTINGS
Definition ublock.h:14
eui_t read_eui() const
Definition meta.h:26
namespace for internal helpers
Definition ctrlblock.h:12