REDAC HybridController
Firmware for LUCIDAC/REDAC Teensy
Loading...
Searching...
No Matches
mblock_int.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#include <bitset>
7
8#include "block/mblock.h"
9
10#include <chips/AD840X.h>
11#include <chips/DAC60508.h>
12#include <chips/SR74HC16X.h>
13#include <chips/SR74HCT595.h>
14#include <entity/meta.h>
15
16namespace blocks {
17
18class MIntBlockHAL_V_1_0_X : public MIntBlockHAL {
19protected:
27
28public:
29 explicit MIntBlockHAL_V_1_0_X(bus::addr_t block_address);
30
31 bool init() override;
32
33 bool write_ic(uint8_t idx, float ic) override;
34 bool write_time_factor_switches(std::bitset<8> switches) override;
35
36 std::bitset<8> read_overload_flags() override;
37 void reset_overload_flags() override;
38
39 metadata::eui_t get_entity_eui() const override { return f_meta.read_eui(); }
40};
41
43protected:
46
47public:
48 explicit MIntBlockHAL_V_1_1_X(bus::addr_t block_address);
49
50 bool write_ic(uint8_t idx, float ic) override;
51 bool write_time_factor_switches(std::bitset<8> switches) override;
52
53 virtual bool write_limiters_enable(std::bitset<8> limiters);
54 virtual bool write_time_factor_switches_and_limiters_enable(std::bitset<8> switches,
55 std::bitset<8> limiters);
56
57 virtual bool write_time_factor_gain(uint8_t idx, uint8_t gain);
58
59 metadata::eui_t get_entity_eui() const override { return f_meta.read_eui(); }
60};
61
62class MIntBlock_V_1_1_X : public MIntBlock {
63public:
65
66 [[nodiscard]] utils::status write_to_hardware() override;
67 void reset(entities::ResetAction action) override;
68
69 [[nodiscard]] const std::array<IntegratorCalibration, NUM_INTEGRATORS> &get_calibration() const;
70 [[nodiscard]] blocks::IntegratorCalibration get_calibration(uint8_t int_idx) const;
71 utils::status write_calibration_to_hardware();
72
73 bool calibrate(platform::Cluster *cluster, carrier::Carrier *carrier) override;
74
75protected:
77
78 std::array<IntegratorCalibration, NUM_INTEGRATORS> calibration{};
79
80 bool _gain_calibration(bool use_slow_integration);
81};
82
83} // namespace blocks
std::bitset< 8 > read_overload_flags() override
const functions::TriggerFunction f_overload_flags_reset
Definition mblock_int.h:26
MIntBlockHAL_V_1_0_X(bus::addr_t block_address)
metadata::eui_t get_entity_eui() const override
Definition mblock_int.h:39
const metadata::MetadataEditor f_meta
Definition mblock_int.h:20
bool write_ic(uint8_t idx, float ic) override
const functions::SR74HCT595 f_time_factor
Definition mblock_int.h:22
const functions::DAC60508 f_ic_dac
Definition mblock_int.h:21
const functions::SR74HC16X f_overload_flags
Definition mblock_int.h:25
bool write_time_factor_switches(std::bitset< 8 > switches) override
const functions::TriggerFunction f_time_factor_sync
Definition mblock_int.h:23
const functions::TriggerFunction f_time_factor_reset
Definition mblock_int.h:24
void reset_overload_flags() override
virtual bool write_time_factor_gain(uint8_t idx, uint8_t gain)
metadata::eui_t get_entity_eui() const override
Definition mblock_int.h:59
virtual bool write_limiters_enable(std::bitset< 8 > limiters)
functions::AD8403 f_time_factor_gain_4_7
Definition mblock_int.h:45
bool write_time_factor_switches(std::bitset< 8 > switches) override
functions::AD8403 f_time_factor_gain_0_3
Definition mblock_int.h:44
MIntBlockHAL_V_1_1_X(bus::addr_t block_address)
bool write_ic(uint8_t idx, float ic) override
virtual bool write_time_factor_switches_and_limiters_enable(std::bitset< 8 > switches, std::bitset< 8 > limiters)
std::array< IntegratorCalibration, NUM_INTEGRATORS > calibration
Definition mblock_int.h:78
utils::status write_calibration_to_hardware()
void reset(entities::ResetAction action) override
MIntBlockHAL_V_1_1_X * hardware
Definition mblock_int.h:76
MIntBlock_V_1_1_X(SLOT slot, MIntBlockHAL_V_1_1_X *hardware)
bool _gain_calibration(bool use_slow_integration)
const std::array< IntegratorCalibration, NUM_INTEGRATORS > & get_calibration() const
utils::status write_to_hardware() override
bool calibrate(platform::Cluster *cluster, carrier::Carrier *carrier) override
The AD8403 is a four channel, 8 bit digital potentiometer.
Definition AD840X.h:35
The DAC60508 is the 12-Bit 8-channel DAC, used in the MInt-Block for the initial conditions.
Definition DAC60508.h:17
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
eui_t read_eui() const
Definition meta.h:26
Definition daq.h:14