87 lines
2.0 KiB
C
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
|