Vehicle Control Unit 0.01
This is the c library for controlling the car.
Loading...
Searching...
No Matches
App.c
Go to the documentation of this file.
1#include "../../../Inc/Sensors/AnalogSensors/App.h"
2#include "../../../Inc/Utils/MessageFormat.h"
3
4#include <stdio.h>
5
6void initApp(App* app, int hz, int channel, char* name) {
7 initAnalogSensor(&app->base, name, hz, channel, app);
8 app->position = 0;
10
11 // Register telemetry signal
12 app->telem_raw = registerTelemetrySignal(name, TELEMETRY_SENSOR, UNIT_VOLTS, 1000/hz, 0.4f, 4.7f);
13 app->telem_position = registerTelemetrySignal(name, TELEMETRY_SENSOR, UNIT_PERCENT, 1000/hz, 0.0f, 100.0f);
14
15}
16
17float getAppPosition(App* app) {
18 return app->position;
19}
20
21void updateApp(App* app) {
22 // FIXME: Implement APP connection with stm
23 float rawData = getAnalogSensorData(&app->base);
24 // Send Telemetry float
25 sendTelemetryValue(app->telem_raw, rawData);
26 app->position = transferFunctionApp(rawData);
27
28 // Send diagnostic info to the debugger
29 if (app->position == -1) {
31 "APP reading below sensor minimum (%.3f V)", rawData);
32 } else if (app->position == -2) {
34 "APP reading above sensor maximum (%.3f V)", rawData);
35 }
36
37 sendTelemetryValue(app->telem_position, app->position * 100); // Convert from 1-scale to percentage
38
39}
40
41float transferFunctionApp(float rawVal) {
42 // This is a +-45 degree sensor
43 if (rawVal < 0.5) {
44 return -1;
45 }
46 else if (rawVal > 4.5) {
47 return -2;
48 }
49 return (rawVal - 0.5)/4.0;
50}
float getAnalogSensorData(AnalogSensor *sensor)
Retrieves analog sensor data for a specific channel.
Definition: AnalogSensor.c:89
void initAnalogSensor(AnalogSensor *analogSensor, const char *name, int hz, int channel, void *child)
Initializes an analog sensor and configures the corresponding GPIO pin.
Definition: AnalogSensor.c:42
float getAppPosition(App *app)
Gets the current position of the APP.
Definition: App.c:17
void updateApp(App *app)
Updates the APP data.
Definition: App.c:21
float transferFunctionApp(float rawVal)
Converts raw APP data to a meaningful position value.
Definition: App.c:41
void initApp(App *app, int hz, int channel, char *name)
Initializes the APP with the given frequency and channel.
Definition: App.c:6
@ MSG_WARNING
Definition: MessageFormat.h:12
void sendMessage(const char *sender, MessageType type, const char *format,...)
Definition: MessageFormat.c:5
@ TELEMETRY_SENSOR
Definition: Telemetry.h:9
void sendTelemetryValue(TelemetrySignal *signal, float value)
Definition: Telemetry.c:59
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
@ UNIT_PERCENT
Definition: Units.h:55
@ UNIT_VOLTS
Definition: Units.h:45
Sensor sensor
Definition: AnalogSensor.h:23
Definition: App.h:7
TelemetrySignal * telem_raw
Definition: App.h:10
AnalogSensor base
Definition: App.h:8
float position
Definition: App.h:9
TelemetrySignal * telem_position
Definition: App.h:11
Updateable updateable
Definition: Sensor.h:15
int(* update)(struct Updateable *self)
Definition: Updateable.h:27
char name[MAX_NAME_LENGTH]
Definition: Updateable.h:24