#include "Enuns.h" #ifndef ICOMPONENTECAN_H #define ICOMPONENTECAN_H class ComponenteCAN { public: int ID_Num = 0; bool Iniciado = false; virtual void RequisitarDados() = 0; virtual std::vector MontarMensagemCAN(CanMessagePosicaoDados posicao) = 0; template static void ProcessarComponentesCAN( const std::vector& listaComponentes, std::vector posicoes, bool todosIDs, int id_num, bool enviarStatus, bool todosDados, CanMessagePosicaoDados posicao, std::function&)> enviarDadosFunc ) { for (auto* componente : listaComponentes) { if (componente != nullptr && (todosIDs || componente->ID_Num == id_num)) { componente->RequisitarDados(); if (enviarStatus) { enviarDadosFunc(componente->MontarMensagemCAN(CanMessagePosicaoDados::Status)); } if (componente->Iniciado) { if (todosDados) { for (auto p : posicoes) { if (p == CanMessagePosicaoDados::Status) continue; // Evita enviar status duas vezes enviarDadosFunc(componente->MontarMensagemCAN(p)); } } else { enviarDadosFunc(componente->MontarMensagemCAN(posicao)); } } } } } }; #endif