2025-07-23 15:14:50 +00:00
|
|
|
#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<uint8_t> MontarMensagemCAN(CanMessagePosicaoDados posicao) = 0;
|
|
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
|
static void ProcessarComponentesCAN(
|
|
|
|
|
const std::vector<T*>& listaComponentes,
|
|
|
|
|
std::vector<CanMessagePosicaoDados> posicoes,
|
|
|
|
|
bool todosIDs,
|
|
|
|
|
int id_num,
|
|
|
|
|
bool enviarStatus,
|
|
|
|
|
bool todosDados,
|
|
|
|
|
CanMessagePosicaoDados posicao,
|
|
|
|
|
std::function<void(const std::vector<uint8_t>&)> 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));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-20 20:08:23 +00:00
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
|
static void ProcessarComponenteCAN(
|
|
|
|
|
T& componente,
|
|
|
|
|
const std::vector<CanMessagePosicaoDados>& posicoes,
|
|
|
|
|
bool todosIDs,
|
|
|
|
|
int id_num,
|
|
|
|
|
bool enviarStatus,
|
|
|
|
|
bool todosDados,
|
|
|
|
|
CanMessagePosicaoDados posicao,
|
|
|
|
|
std::function<void(const std::vector<uint8_t>&)> enviarDadosFunc
|
|
|
|
|
) {
|
|
|
|
|
if (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;
|
|
|
|
|
enviarDadosFunc(componente.MontarMensagemCAN(p));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (posicao != CanMessagePosicaoDados::Status || !enviarStatus) {
|
|
|
|
|
enviarDadosFunc(componente.MontarMensagemCAN(posicao));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-07-23 15:14:50 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|