5#include "block/mblock.h"
6#include "block/mblock_int.h"
7#include "block/mblock_mul.h"
8#include "utils/logging.h"
10#include "carrier/cluster.h"
26 else if (abs(in) <= min)
32FLASHMEM blocks::MBlock::MBlock(SLOT slot, MBlockHAL *hardware)
33 :
blocks::FunctionBlock{slot == SLOT::M0 ?
"M0" :
"M1", hardware}, slot(slot), hardware(hardware) {
34 classifier.class_enum = CLASS_;
37FLASHMEM uint8_t blocks::MBlock::slot_to_global_io_index(uint8_t local)
const {
49blocks::MBlock *blocks::MBlock::from_entity_classifier(entities::EntityClassifier classifier,
50 const bus::addr_t block_address) {
51 if (!classifier or classifier.class_enum != entities::EntityClass::M_BLOCK)
54 auto type = classifier.type_as<TYPES>();
59 case TYPES::M_MUL4_BLOCK:
60 return MMulBlock::from_entity_classifier(classifier, block_address);
61 case TYPES::M_INT8_BLOCK:
62 return MIntBlock::from_entity_classifier(classifier, block_address);
69FLASHMEM utils::status blocks::EmptyMBlock::write_to_hardware() {
return utils::status::success(); }
71FLASHMEM utils::status blocks::EmptyMBlock::config_self_from_json(JsonObjectConst cfg) {
72 return utils::status::success();
75FLASHMEM
bool blocks::MBlockHAL::init() {
76 if (!entities::EntityHAL::init())
78 reset_overload_flags();
82FLASHMEM
void blocks::MBlock::overload_flags_to_json(JsonArray msg_out)
const {
86 auto flags = hardware->read_overload_flags();
87 for (
size_t i = 0; i < flags.size(); i++) {
88 msg_out.add((
bool)flags[i]);
int abs_clamp(float in, int min, int max)