REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
lucidac.h
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#pragma once
7
8#include <block/teensy/icmd.h>
9#include <chips/SR74HCT595.h>
10#include <chips/TMP127Q1.h>
11#include <lucidac/lucidac.h>
12#include <utils/mac.h>
13#include <entity/hardware.h>
14
15namespace platform {
17class Teensy_LUCIDAC_HAL : public LUCIDAC_HAL {
18public:
19 // Module addresses
20 static constexpr uint8_t CARRIER_MADDR = 5;
21 // Function addresses
22 static constexpr uint8_t METADATA_FADDR = bus::METADATA_FUNC_IDX;
23 static constexpr uint8_t TEMPERATURE_FADDR = 1;
24 static constexpr uint8_t ADC_PRG_FADDR = 2;
25 static constexpr uint8_t ADC_RESET_8816_FADDR = 3;
26 static constexpr uint8_t ADC_RESET_SR_FADDR = 4;
27 static constexpr uint8_t ADC_STROBE_FADDR = 5;
28 static constexpr uint8_t ACL_PRG_FADDR = 6;
29 static constexpr uint8_t ACL_UPD_FADDR = 7;
30 static constexpr uint8_t ACL_CRL_FADDR = 8;
31
32protected:
33 // Functions to configure ACL signal muxer
37 // Functions to configure ADC signal switching matrix
38 // TODO: Replace by separate function or abstraction that does not allow connecting two inputs to one output
39 // SPI settings are unfortunately different from IBlock
40 static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS;
46 // note: Carrier has temperature sensor but not EEPROM.
47
48public:
50
52 bool write_acl(std::array<ACL, 8> acl) override;
53
54 void reset_acl() override;
55
58 bool write_adc_bus_mux(std::array<int8_t, 8> channels) override;
59
60 void reset_adc_bus_mux() override;
61
62 float read_temperature() const override { return f_temperature.read_temperature(); }
63};
64
65} // namespace platform
DataFunction to transfer 32bit of data to the I-Block matrix command registry.
Definition icmd.h:19
The SR74HCT595 is an 8-Bit Shift Register with 3-State Output Registers.
Definition SR74HCT595.h:15
float read_temperature() const
Definition TMP127Q1.cpp:10
A trigger function exploits the fact that setting an address on the bus triggers an action (TODO: Is ...
Definition functions.h:33
const functions::TriggerFunction f_adc_switcher_sr_reset
Definition lucidac.h:43
static constexpr uint8_t ACL_UPD_FADDR
Definition lucidac.h:29
static constexpr uint8_t METADATA_FADDR
Definition lucidac.h:22
void reset_adc_bus_mux() override
Definition lucidac.cpp:66
static constexpr uint8_t TEMPERATURE_FADDR
Definition lucidac.h:23
void reset_acl() override
Definition lucidac.cpp:43
const functions::SR74HCT595 f_acl_prg
Definition lucidac.h:34
const functions::TriggerFunction f_adc_switcher_matrix_reset
Definition lucidac.h:44
const functions::TMP127Q1 f_temperature
Definition lucidac.h:45
const functions::ICommandRegisterFunction f_adc_switcher_prg
Definition lucidac.h:41
static constexpr uint8_t ADC_STROBE_FADDR
Definition lucidac.h:27
static constexpr uint8_t ACL_CRL_FADDR
Definition lucidac.h:30
static constexpr uint8_t CARRIER_MADDR
Definition lucidac.h:20
static constexpr uint8_t ACL_PRG_FADDR
Definition lucidac.h:28
const functions::TriggerFunction f_acl_upd
Definition lucidac.h:35
static const SPISettings F_ADC_SWITCHER_PRG_SPI_SETTINGS
Definition lucidac.h:16
const functions::TriggerFunction f_acl_clr
Definition lucidac.h:36
const functions::TriggerFunction f_adc_switcher_sync
Definition lucidac.h:42
static constexpr uint8_t ADC_RESET_SR_FADDR
Definition lucidac.h:26
static constexpr uint8_t ADC_PRG_FADDR
Definition lucidac.h:24
bool write_acl(std::array< ACL, 8 > acl) override
Write bits to ACL shift register, from I-block input 24 (first element) to 31 (last element)
Definition lucidac.cpp:30
float read_temperature() const override
Definition lucidac.h:62
static constexpr uint8_t ADC_RESET_8816_FADDR
Definition lucidac.h:25
bool write_adc_bus_mux(std::array< int8_t, 8 > channels) override
Write channel selection to ADC bus muxer.
Definition lucidac.cpp:48
Definition leds.h:7