Files
canFD_esp32_glm-oh-my-open-/signal_manager.h
2026-02-20 17:50:40 +00:00

87 lines
2.0 KiB
C

// signal_manager.h - Signal Manager for CAN Signal Definitions
#ifndef SIGNAL_MANAGER_H
#define SIGNAL_MANAGER_H
#include <Arduino.h>
#include "dbc_parser.h"
#include "types.h"
// Maximum manual signals
#define MAX_MANUAL_SIGNALS 50
// Signal definition types
enum SignalSource {
SIGNAL_SOURCE_NONE,
SIGNAL_SOURCE_DBC,
SIGNAL_SOURCE_MANUAL
};
// Signal definition (for manual and DBC signals)
struct SignalDefinition {
char name[32];
uint32_t canId;
uint32_t startBit;
uint32_t length;
bool isLittleEndian;
bool isSigned;
float factor;
float offset;
SignalSource source;
bool enabled;
uint32_t dbcSignalIndex;
};
// Signal value (for real-time data)
struct SignalValue {
char name[32];
float value;
uint32_t timestamp;
bool valid;
};
// Signal manager
extern SignalDefinition signalDefs[MAX_MANUAL_SIGNALS];
extern uint16_t signalDefCount;
extern SignalValue signalValues[MAX_MANUAL_SIGNALS];
// Initialize signal manager
void initSignalManager();
// Add manual signal definition
bool addManualSignal(const char* name, uint32_t canId, uint32_t startBit,
uint32_t length, bool isLittleEndian, bool isSigned,
float factor, float offset);
// Remove signal definition
bool removeSignal(const char* name);
// Enable/disable signal for graphing
bool enableSignal(const char* name, bool enable);
// Get signal definition by name
SignalDefinition* getSignalDef(const char* name);
// Get signal value by name
SignalValue* getSignalValue(const char* name);
// Update signal value from CAN frame
void updateSignalFromCAN(const CanFrame* frame);
// Update all signal values from current CAN data
void updateAllSignals(const CanFrame* frame);
// Get enabled signals for WebSocket
uint16_t getEnabledSignals(SignalValue* values, uint16_t maxCount);
// Load signals from SD
bool loadSignalsFromSD();
// Save signals to SD
bool saveSignalsToSD();
// Get signals JSON for web
void getSignalsJSON(char* buffer, size_t bufferSize);
#endif // SIGNAL_MANAGER_H