Vehicle Control Unit 0.01
This is the c library for controlling the car.
Loading...
Searching...
No Matches
Telemetry.h
Go to the documentation of this file.
1#ifndef RENSSELAERMOTORSPORT_TELEMETRY_H
2#define RENSSELAERMOTORSPORT_TELEMETRY_H
3
4#include <stdint.h>
5#include <stdbool.h>
6#include "Units.h"
7
8typedef enum {
9 TELEMETRY_SENSOR, // Traditional sensor readings
10 TELEMETRY_OUTPUT, // Digital/analog outputs
11 TELEMETRY_CAN_TX, // CAN messages being sent
12 TELEMETRY_CAN_RX, // CAN messages being received
13 TELEMETRY_STATUS, // System status values
14 TELEMETRY_DEBUG // Debug/diagnostic values
16
17typedef struct {
18 char name[32];
19 TelemetryType type; // NEW: What kind of data this is
20 UnitId unit_id; // Use unit ID instead of string
22 uint32_t last_update;
23 float custom_min; // Custom limits (overrides unit defaults)
25 bool use_custom_limits; // Whether to use custom or unit default limits
26 bool enabled;
27
28 // Type-specific data
29 union {
30 struct {
31 // For CAN messages
32 uint32_t can_id;
33 uint8_t dlc;
34 } can_info;
35
36 struct {
37 // For outputs
38 bool is_pwm; // true for PWM outputs, false for digital
39 uint16_t pwm_frequency;
40 } output_info;
41 };
43
44// Initialize telemetry utility
45void initTelemetry(void);
46
47// Register different types of telemetry signals
48TelemetrySignal* registerTelemetrySignal(const char* name, TelemetryType type, UnitId unit_id,
49 uint32_t expected_rate_ms,
50 float custom_min, float custom_max);
51
52// Universal telemetry send - handles all types!
53void sendTelemetryValue(TelemetrySignal* signal, float value);
54void sendCANTelemetryData(TelemetrySignal* signal, uint32_t can_id, uint8_t* data, uint8_t dlc);
55
56// Fallback send by name (avoid if possible)
57void sendTelemetryValueByName(const char* name, float value, TelemetryType type);
58
59// Send configuration and health functions
60void checkTelemetryHealth(void);
62const char* getCategoryName(UnitCategory category);
63const char* getTypeName(TelemetryType type);
64
65#endif // RENSSELAERMOTORSPORT_TELEMETRY_H
const char * getTypeName(TelemetryType type)
Definition: Telemetry.c:177
TelemetryType
Definition: Telemetry.h:8
@ TELEMETRY_DEBUG
Definition: Telemetry.h:14
@ TELEMETRY_STATUS
Definition: Telemetry.h:13
@ TELEMETRY_OUTPUT
Definition: Telemetry.h:10
@ TELEMETRY_CAN_TX
Definition: Telemetry.h:11
@ TELEMETRY_CAN_RX
Definition: Telemetry.h:12
@ TELEMETRY_SENSOR
Definition: Telemetry.h:9
void sendTelemetryValue(TelemetrySignal *signal, float value)
Definition: Telemetry.c:59
void handleTelemetryConfigRequest(void)
Definition: Telemetry.c:130
void sendCANTelemetryData(TelemetrySignal *signal, uint32_t can_id, uint8_t *data, uint8_t dlc)
Definition: Telemetry.c:190
void sendTelemetryValueByName(const char *name, float value, TelemetryType type)
void initTelemetry(void)
Definition: Telemetry.c:12
const char * getCategoryName(UnitCategory category)
Definition: Telemetry.c:161
void checkTelemetryHealth(void)
Definition: Telemetry.c:111
TelemetrySignal * registerTelemetrySignal(const char *name, TelemetryType type, UnitId unit_id, uint32_t expected_rate_ms, float custom_min, float custom_max)
Definition: Telemetry.c:23
UnitCategory
Definition: Units.h:17
UnitId
Definition: Units.h:44
uint32_t expected_rate_ms
Definition: Telemetry.h:21
float custom_max
Definition: Telemetry.h:24
uint32_t can_id
Definition: Telemetry.h:32
bool use_custom_limits
Definition: Telemetry.h:25
UnitId unit_id
Definition: Telemetry.h:20
uint8_t dlc
Definition: Telemetry.h:33
uint32_t last_update
Definition: Telemetry.h:22
uint16_t pwm_frequency
Definition: Telemetry.h:39
float custom_min
Definition: Telemetry.h:23
TelemetryType type
Definition: Telemetry.h:19