// signal_manager.h - Signal Manager for CAN Signal Definitions #ifndef SIGNAL_MANAGER_H #define SIGNAL_MANAGER_H #include #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