Skip to content

Commit 4d01681

Browse files
committed
feat: create HotFireInterface
1 parent 4bda8c7 commit 4d01681

File tree

5 files changed

+166
-9
lines changed

5 files changed

+166
-9
lines changed

projects/HotFire/config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// clang-format off
66

77
#define STATEMACHINE HotFireStateMachine
8+
#define INTERFACE HotFireInterface
89

910
#ifndef USE_SBG
1011
#define USE_SBG 0

src/init/MainLoop.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
#include "helpers/Helper.h"
77

8-
#include "IO/InterfaceImpl.h"
98
#include "chrono"
109
#include "data/UOSMData.h"
10+
#include "interface/HotFire/HotFireInterface.h"
1111
#include "spdlog/sinks/basic_file_sink.h"
1212
#include "spdlog/sinks/dup_filter_sink.h"
1313
#include "spdlog/sinks/stdout_color_sinks.h"
@@ -74,7 +74,7 @@ int main()
7474
SPDLOG_INFO("Using {}", TOSTRING(STATEMACHINE));
7575

7676
#if TESTING != 1
77-
InterfaceImpl interfaceImpl;
77+
INTERFACE interfaceImpl;
7878
#else
7979
TestingInterface interfaceImpl;
8080
#endif
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
#include "config.h"
2+
3+
#include "HotFireInterface.h"
4+
#include "common/pch.h"
5+
#include <chrono>
6+
#include <spdlog/spdlog.h>
7+
#include <string>
8+
9+
HotFireInterface::HotFireInterface()
10+
: eventQueue(), input(eventQueue), client(eventQueue), arduinoProxy(ArduinoProxy::getInstance())
11+
{
12+
logger = spdlog::default_logger();
13+
}
14+
15+
HotFireInterface::~HotFireInterface() = default;
16+
17+
void HotFireInterface::initialize()
18+
{
19+
initializeInputs();
20+
initializeOutputs();
21+
}
22+
23+
void HotFireInterface::initializeInputs()
24+
{
25+
SPDLOG_LOGGER_INFO(logger, "Initializing INPUT...");
26+
input.initialize();
27+
SPDLOG_LOGGER_INFO(logger, "Initializing SOCKET_CLIENT...");
28+
client.initialize();
29+
SPDLOG_LOGGER_INFO(logger, "Initializing SENSORS...");
30+
sensors.initialize();
31+
}
32+
33+
void HotFireInterface::initializeOutputs()
34+
{
35+
SPDLOG_LOGGER_INFO(logger, "Initializing SENSOR_LOGGER...");
36+
sensorLogger.initialize();
37+
SPDLOG_LOGGER_INFO(logger, "Initializing GPIO...");
38+
gpio.initialize();
39+
SPDLOG_LOGGER_INFO(logger, "Initializing Arduino Proxy...");
40+
arduinoProxy->initialize();
41+
}
42+
43+
bool HotFireInterface::updateInputs()
44+
{
45+
latestState = std::make_shared<StateData>();
46+
47+
latestState->timeStamp =
48+
std::chrono::duration_cast<time_point::duration>(std::chrono::steady_clock::now().time_since_epoch()).count();
49+
50+
// EventQueue
51+
latestState->eventNumber = eventQueue.pop();
52+
// Logger
53+
latestState->loggerIsInitialized = sensorLogger.isInitialized();
54+
// Socket Client
55+
latestState->clientIsInitialized = client.isInitialized();
56+
latestState->lastActiveClientTimestamp = client.getLastConnectionTimestamp();
57+
// Input
58+
latestState->inputIsInitialized = input.isInitialized();
59+
// GPIO
60+
latestState->gpioIsInitialized = gpio.isInitialized();
61+
latestState->gpioState = gpio.getCurrentState();
62+
// Arduino Proxy
63+
latestState->arduinoProxyIsInitialized = arduinoProxy->isInitialized();
64+
// Sensors
65+
latestState->sensorState = sensors.getCurrentState();
66+
67+
return true;
68+
}
69+
70+
bool HotFireInterface::updateOutputs(std::shared_ptr<StateData> data)
71+
{
72+
73+
data->gpioData = gpio.setOutputs(data->gpioData);
74+
sensorLogger.enqueueSensorData(*data);
75+
client.enqueueSensorData(*data);
76+
77+
return true;
78+
}
79+
80+
void HotFireInterface::createNewGpioOutput(std::string name, int pinNbr)
81+
{
82+
gpio.createNewGpioOutput(name, pinNbr);
83+
}
84+
85+
void HotFireInterface::createNewGpioPwmOutput(std::string name, int pinNbr, int safePosition, bool softpwm)
86+
{
87+
gpio.createNewGpioPwmOutput(name, pinNbr, safePosition, softpwm);
88+
}
89+
90+
std::shared_ptr<StateData> HotFireInterface::getLatest()
91+
{
92+
93+
latestState->loggerWorking = SensorLogger::working;
94+
95+
return latestState;
96+
}
97+
98+
time_point HotFireInterface::getCurrentTime()
99+
{
100+
return std::chrono::steady_clock::now();
101+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#pragma once
2+
3+
#include "config.h"
4+
#if TESTING != 1
5+
6+
#include "IO/ArduinoProxy.h"
7+
#include "IO/Input.h"
8+
#include "IO/Radio.h"
9+
#include "IO/SBGSensor.h"
10+
#include "IO/SensorLogger.h"
11+
#include "IO/gpio/Gpio.h"
12+
#include "IO/tcp/SocketServer.h"
13+
#include <IO/Sensors.h>
14+
#include <interface/Interface.h>
15+
#include <memory>
16+
#include <spdlog/logger.h>
17+
#include <string>
18+
19+
class HotFireInterface : public Interface
20+
{
21+
public:
22+
HotFireInterface();
23+
~HotFireInterface();
24+
25+
void initialize() override;
26+
27+
// to get the latest rocket state. return a pointer to latestState
28+
std::shared_ptr<StateData> getLatest() override;
29+
30+
// loop over each sensor and update the latestState
31+
bool updateInputs() override;
32+
bool updateOutputs(std::shared_ptr<StateData> data) override;
33+
34+
void createNewGpioOutput(std::string name, int pinNbr) override;
35+
void createNewGpioPwmOutput(std::string name, int pinNbr, int safePosition, bool softpwm) override;
36+
37+
time_point getCurrentTime() override;
38+
39+
private:
40+
void initializeInputs();
41+
void initializeOutputs();
42+
43+
std::shared_ptr<spdlog::logger> logger;
44+
45+
std::shared_ptr<StateData> latestState;
46+
EventQueue eventQueue;
47+
48+
/**
49+
* IO instances
50+
*/
51+
Input input;
52+
SocketServer client;
53+
SensorLogger sensorLogger;
54+
Gpio gpio;
55+
ArduinoProxy *arduinoProxy;
56+
Sensors sensors;
57+
};
58+
59+
#endif

src/interface/Interface.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class Interface
1111
public:
1212
virtual void initialize() = 0;
1313

14-
virtual void calibrateTelemetry() = 0;
14+
virtual void calibrateTelemetry(){};
1515

1616
// to get the latest rocket state. return a pointer to latestState
1717
virtual std::shared_ptr<StateData> getLatest() = 0;
@@ -21,13 +21,9 @@ class Interface
2121

2222
virtual bool updateOutputs(std::shared_ptr<StateData> data) = 0;
2323

24-
#if USE_GPIO == 1
24+
virtual void createNewGpioOutput(std::string name, int pinNbr){};
2525

26-
virtual void createNewGpioOutput(std::string name, int pinNbr) = 0;
27-
28-
virtual void createNewGpioPwmOutput(std::string name, int pinNbr, int safePosition, bool softpwm) = 0;
29-
30-
#endif
26+
virtual void createNewGpioPwmOutput(std::string name, int pinNbr, int safePosition, bool softpwm){};
3127

3228
virtual time_point getCurrentTime() = 0;
3329
};

0 commit comments

Comments
 (0)