REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
functions.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#pragma once
6
7#include <array>
8#include <cstdint>
9
10#include "teensy/bus.h"
11
12namespace functions {
13
21class Function {
22public:
23 const bus::addr_t address;
24
25 // explicit keyword shall most certainly avoid accidental downcasting
26 explicit Function(bus::addr_t address);
27};
28
33class TriggerFunction : public Function {
34public:
35 void trigger() const;
36
38};
39
47class DataFunction : public Function {
48protected:
49 static SPIClass &get_raw_spi();
50
51public:
52 const SPISettings &spi_settings;
53
54 /*
55 * Constructor for a new DataFunction.
56 * CARE: In my goal to optimize resource usage,
57 * I did not want each instance of DataFunction to hold onto its own SPISettings object,
58 * as e.g. all N ~= 100 coefficients use the same.
59 * Instead, a reference to e.g. a static member variable of the subclass should be passed.
60 * If the constructor is called like DataFunction(address, SPISettings(...)),
61 * the reference to the cleaned-up SPISettings object will be invalid and things will break.
62 */
63 DataFunction(bus::addr_t address, const SPISettings &spiSettings);
64
65 void begin_communication() const;
66 void end_communication() const;
67
68protected:
69 void transfer(const void *mosi_buf, void *miso_buf, size_t count) const;
70 uint8_t transfer8(uint8_t data_in) const;
71 uint16_t transfer16(uint16_t data_in) const;
72 uint32_t transfer32(uint32_t data_in) const;
73};
74
75class SyncFunction : public DataFunction {
76public:
79};
80
81} // namespace functions
A DataFunction class wraps SPI communication over the digital bus.
Definition functions.h:47
void end_communication() const
static SPIClass & get_raw_spi()
uint16_t transfer16(uint16_t data_in) const
const SPISettings & spi_settings
Definition functions.h:52
uint8_t transfer8(uint8_t data_in) const
void begin_communication() const
Definition functions.cpp:19
DataFunction(bus::addr_t address, const SPISettings &spiSettings)
Definition functions.cpp:16
void transfer(const void *mosi_buf, void *miso_buf, size_t count) const
uint32_t transfer32(uint32_t data_in) const
Function classes encapsulate digital bus calls.
Definition functions.h:21
Function(bus::addr_t address)
Definition functions.cpp:7
const bus::addr_t address
Definition functions.h:23
A trigger function exploits the fact that setting an address on the bus triggers an action (TODO: Is ...
Definition functions.h:33
uint32_t
Definition flasher.cpp:195
namespace for internal helpers
Definition icmd.h:6