5#include <proto/main.pb.h>
7#include "block/mblock.h"
8#include "block/mblock_int.h"
9#include "block/mblock_mdr.h"
10#include "block/mblock_mul.h"
11#include "utils/logging.h"
13#include "carrier/cluster.h"
14#include "entity/visitor.h"
30 else if (abs(in) <= min)
36blocks::MBlock::MBlock(SLOT slot, MBlockHAL *hardware)
37 :
blocks::FunctionBlock{slot == SLOT::M0 ?
"M0" :
"M1", hardware}, slot(slot), hardware(hardware) {
38 classifier.class_enum = CLASS_;
41uint8_t blocks::MBlock::slot_to_global_io_index(uint8_t local)
const {
53blocks::MBlock *blocks::MBlock::from_entity_classifier(entities::EntityClassifier classifier,
54 const bus::addr_t block_address) {
55 if (!classifier or classifier.class_enum != entities::EntityClass::M_BLOCK)
58 auto type = classifier.type_as<TYPES>();
63 case TYPES::M_MUL4_BLOCK:
64 return MMulBlock::from_entity_classifier(classifier, block_address);
65 case TYPES::M_MDR4_BLOCK:
66 return MMDRBlock::from_entity_classifier(classifier, block_address);
67 case TYPES::M_INT8_BLOCK:
68 return MIntBlock::from_entity_classifier(classifier, block_address);
75utils::status blocks::EmptyMBlock::write_to_hardware() {
return utils::status::success(); }
77bool blocks::MBlockHAL::init() {
78 if (!entities::EntityHAL::init())
80 reset_overload_flags();
84void blocks::MBlock::collect_overloads(entities::OverloadVisitor& visitor)
const {
87 auto flags = hardware->read_overload_flags();
88 for (
size_t idx = 0; idx < flags.size(); idx++) {
89 auto elem = visitor.create();
int abs_clamp(float in, int min, int max)