Vehicle Control Unit 0.01
This is the c library for controlling the car.
Loading...
Searching...
No Matches
Classes | Enumerations | Functions
Units.h File Reference
#include <stdint.h>
#include <stdbool.h>
Include dependency graph for Units.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  UnitDefinition
 

Enumerations

enum  UnitDataType {
  UNIT_TYPE_FLOAT , UNIT_TYPE_INT16 , UNIT_TYPE_INT32 , UNIT_TYPE_UINT16 ,
  UNIT_TYPE_UINT32 , UNIT_TYPE_BOOL , UNIT_TYPE_ENUM
}
 
enum  UnitCategory {
  UNIT_CATEGORY_VOLTAGE , UNIT_CATEGORY_CURRENT , UNIT_CATEGORY_PRESSURE , UNIT_CATEGORY_TEMPERATURE ,
  UNIT_CATEGORY_POSITION , UNIT_CATEGORY_SPEED , UNIT_CATEGORY_TIME , UNIT_CATEGORY_FREQUENCY ,
  UNIT_CATEGORY_DIMENSIONLESS , UNIT_CATEGORY_STATUS
}
 
enum  UnitId {
  UNIT_VOLTS = 0 , UNIT_MILLIVOLTS , UNIT_AMPERES , UNIT_MILLIAMPERES ,
  UNIT_PSI , UNIT_BAR , UNIT_PASCAL , UNIT_CELSIUS ,
  UNIT_FAHRENHEIT , UNIT_KELVIN , UNIT_PERCENT , UNIT_DEGREES ,
  UNIT_RADIANS , UNIT_RPM , UNIT_HZ , UNIT_KMH ,
  UNIT_MPH , UNIT_MS , UNIT_SECONDS , UNIT_MILLISECONDS ,
  UNIT_MICROSECONDS , UNIT_BOOLEAN , UNIT_ENUM , UNIT_PERCENTAGE ,
  UNIT_DIMENSIONLESS , UNIT_COUNT
}
 

Functions

const UnitDefinitiongetUnitDefinition (UnitId unit_id)
 
UnitId getUnitIdBySymbol (const char *symbol)
 
bool validateUnitValue (UnitId unit_id, float value)
 
float convertUnits (float value, UnitId from_unit, UnitId to_unit)
 
void initUnits (void)
 

Enumeration Type Documentation

◆ UnitCategory

Enumerator
UNIT_CATEGORY_VOLTAGE 
UNIT_CATEGORY_CURRENT 
UNIT_CATEGORY_PRESSURE 
UNIT_CATEGORY_TEMPERATURE 
UNIT_CATEGORY_POSITION 
UNIT_CATEGORY_SPEED 
UNIT_CATEGORY_TIME 
UNIT_CATEGORY_FREQUENCY 
UNIT_CATEGORY_DIMENSIONLESS 
UNIT_CATEGORY_STATUS 

Definition at line 17 of file Units.h.

17 {
UnitCategory
Definition: Units.h:17
@ UNIT_CATEGORY_STATUS
Definition: Units.h:27
@ UNIT_CATEGORY_FREQUENCY
Definition: Units.h:25
@ UNIT_CATEGORY_TIME
Definition: Units.h:24
@ UNIT_CATEGORY_TEMPERATURE
Definition: Units.h:21
@ UNIT_CATEGORY_DIMENSIONLESS
Definition: Units.h:26
@ UNIT_CATEGORY_PRESSURE
Definition: Units.h:20
@ UNIT_CATEGORY_POSITION
Definition: Units.h:22
@ UNIT_CATEGORY_SPEED
Definition: Units.h:23
@ UNIT_CATEGORY_VOLTAGE
Definition: Units.h:18
@ UNIT_CATEGORY_CURRENT
Definition: Units.h:19

◆ UnitDataType

Enumerator
UNIT_TYPE_FLOAT 
UNIT_TYPE_INT16 
UNIT_TYPE_INT32 
UNIT_TYPE_UINT16 
UNIT_TYPE_UINT32 
UNIT_TYPE_BOOL 
UNIT_TYPE_ENUM 

Definition at line 7 of file Units.h.

7 {
UnitDataType
Definition: Units.h:7
@ UNIT_TYPE_UINT16
Definition: Units.h:11
@ UNIT_TYPE_UINT32
Definition: Units.h:12
@ UNIT_TYPE_BOOL
Definition: Units.h:13
@ UNIT_TYPE_INT32
Definition: Units.h:10
@ UNIT_TYPE_ENUM
Definition: Units.h:14
@ UNIT_TYPE_INT16
Definition: Units.h:9
@ UNIT_TYPE_FLOAT
Definition: Units.h:8

◆ UnitId

enum UnitId
Enumerator
UNIT_VOLTS 
UNIT_MILLIVOLTS 
UNIT_AMPERES 
UNIT_MILLIAMPERES 
UNIT_PSI 
UNIT_BAR 
UNIT_PASCAL 
UNIT_CELSIUS 
UNIT_FAHRENHEIT 
UNIT_KELVIN 
UNIT_PERCENT 
UNIT_DEGREES 
UNIT_RADIANS 
UNIT_RPM 
UNIT_HZ 
UNIT_KMH 
UNIT_MPH 
UNIT_MS 
UNIT_SECONDS 
UNIT_MILLISECONDS 
UNIT_MICROSECONDS 
UNIT_BOOLEAN 
UNIT_ENUM 
UNIT_PERCENTAGE 
UNIT_DIMENSIONLESS 
UNIT_COUNT 

Definition at line 44 of file Units.h.

44 {
45 UNIT_VOLTS = 0,
59 UNIT_HZ,
62 UNIT_MS,
70 UNIT_COUNT // Must be last
71} UnitId;
UnitId
Definition: Units.h:44
@ UNIT_DEGREES
Definition: Units.h:56
@ UNIT_AMPERES
Definition: Units.h:47
@ UNIT_PERCENT
Definition: Units.h:55
@ UNIT_PSI
Definition: Units.h:49
@ UNIT_MILLIVOLTS
Definition: Units.h:46
@ UNIT_CELSIUS
Definition: Units.h:52
@ UNIT_MICROSECONDS
Definition: Units.h:65
@ UNIT_FAHRENHEIT
Definition: Units.h:53
@ UNIT_VOLTS
Definition: Units.h:45
@ UNIT_COUNT
Definition: Units.h:70
@ UNIT_PASCAL
Definition: Units.h:51
@ UNIT_DIMENSIONLESS
Definition: Units.h:69
@ UNIT_MILLIAMPERES
Definition: Units.h:48
@ UNIT_SECONDS
Definition: Units.h:63
@ UNIT_ENUM
Definition: Units.h:67
@ UNIT_BOOLEAN
Definition: Units.h:66
@ UNIT_RADIANS
Definition: Units.h:57
@ UNIT_HZ
Definition: Units.h:59
@ UNIT_KELVIN
Definition: Units.h:54
@ UNIT_MPH
Definition: Units.h:61
@ UNIT_MILLISECONDS
Definition: Units.h:64
@ UNIT_PERCENTAGE
Definition: Units.h:68
@ UNIT_KMH
Definition: Units.h:60
@ UNIT_BAR
Definition: Units.h:50
@ UNIT_RPM
Definition: Units.h:58
@ UNIT_MS
Definition: Units.h:62

Function Documentation

◆ convertUnits()

float convertUnits ( float  value,
UnitId  from_unit,
UnitId  to_unit 
)

Definition at line 99 of file Units.c.

99 {
100 const UnitDefinition* from_def = getUnitDefinition(from_unit);
101 const UnitDefinition* to_def = getUnitDefinition(to_unit);
102
103 // Only convert within same category
104 if (from_def->category != to_def->category) {
105 return value; // No conversion possible
106 }
107
108 // Convert to base unit, then to target unit
109 float base_value = value * from_def->scale_factor;
110 return base_value / to_def->scale_factor;
111}
const UnitDefinition * getUnitDefinition(UnitId unit_id)
Definition: Units.c:78
float scale_factor
Definition: Units.h:40
UnitCategory category
Definition: Units.h:34
Here is the call graph for this function:

◆ getUnitDefinition()

const UnitDefinition * getUnitDefinition ( UnitId  unit_id)

Definition at line 78 of file Units.c.

78 {
79 if (unit_id >= UNIT_COUNT) {
80 return &unit_definitions[UNIT_DIMENSIONLESS]; // Fallback
81 }
82 return &unit_definitions[unit_id];
83}
static const UnitDefinition unit_definitions[UNIT_COUNT]
Definition: Units.c:6
Here is the caller graph for this function:

◆ getUnitIdBySymbol()

UnitId getUnitIdBySymbol ( const char *  symbol)

Definition at line 85 of file Units.c.

85 {
86 for (UnitId i = 0; i < UNIT_COUNT; i++) {
87 if (strcmp(unit_definitions[i].symbol, symbol) == 0) {
88 return i;
89 }
90 }
91 return UNIT_DIMENSIONLESS; // Fallback
92}

◆ initUnits()

void initUnits ( void  )

Definition at line 74 of file Units.c.

74 {
75 sendMessage("Units", MSG_DEBUG, "Units system initialized with %d unit types", UNIT_COUNT);
76}
@ MSG_DEBUG
Definition: MessageFormat.h:14
void sendMessage(const char *sender, MessageType type, const char *format,...)
Definition: MessageFormat.c:5
Here is the call graph for this function:
Here is the caller graph for this function:

◆ validateUnitValue()

bool validateUnitValue ( UnitId  unit_id,
float  value 
)

Definition at line 94 of file Units.c.

94 {
95 const UnitDefinition* unit = getUnitDefinition(unit_id);
96 return (value >= unit->absolute_min && value <= unit->absolute_max);
97}
float absolute_min
Definition: Units.h:35
Here is the call graph for this function:
Here is the caller graph for this function: