REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
ctrlblock.cpp
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#include "teensy/ctrlblock.h"
7#include <block/ctrlblock.h>
8#include <chips/SR74HCT595.h>
9
10FLASHMEM blocks::CTRLBlock *blocks::CTRLBlock::from_entity_classifier(entities::EntityClassifier classifier,
11 bus::addr_t block_address) {
12 if (!classifier or classifier.class_enum != CLASS_ or classifier.type != TYPE)
13 return nullptr;
14
15 // Currently, there are no variants.
16 // TODO: After adapting classifier to (major, minor, patch) version,
17 // fail on v1.0.1, which has missing hardware components and should not be used.
18 return new CTRLBlock(new CTRLBlockHAL_V_1_0_2(block_address));
19}
20
21const SPISettings blocks::CTRLBlockHAL_V_1_0_2::F_SYNC_SPI_SETTINGS{1'000'000, MSBFIRST, SPI_MODE0};
22
23FLASHMEM blocks::CTRLBlockHAL_V_1_0_2::CTRLBlockHAL_V_1_0_2(bus::addr_t block_address)
24 : CTRLBlockHAL_Parent(block_address),
25 f_adc_mux(bus::address_from_tuple(1, 2), true),
26 f_adc_mux_latch(bus::address_from_tuple(1, 3)),
27 f_sync(bus::address_from_tuple(1, 4), F_SYNC_SPI_SETTINGS) {}
28
30 if (!f_adc_mux.transfer8(static_cast<uint8_t>(adc_bus)))
31 return false;
32 f_adc_mux_latch.trigger();
33 return true;
34}
35
36// float blocks::CTRLBlockHAL_V_1_0_2::read_temperature() { return 0; }
37
39 // The very naive encoding proposed in
40 // https://lab.analogparadigm.com/lucidac/firmware/hybrid-controller/-/issues/2
41 // uses only 6 bits of the 16 bits to ensure a "unique stream".
42 // IDs is thus limited to 0-63 currently
43 if (id > 0b00'111111)
44 return false;
45 f_sync.transfer16((id << 1) | 0b1000'0001);
46 return true;
47}
bool write_adc_bus_muxers(ADCBus adc_bus) override
Definition ctrlblock.cpp:29
static const SPISettings F_SYNC_SPI_SETTINGS
Definition ctrlblock.h:21
CTRLBlockHAL_V_1_0_2(bus::addr_t block_address)
Definition ctrlblock.cpp:23
bool write_sync_id(uint8_t id) override
Definition ctrlblock.cpp:38
Definition bus.h:21