Progress towards a better application FSM, testing

This commit is contained in:
2021-09-06 23:18:43 -04:00
parent 983cd1423e
commit 7e59cd49e8
18 changed files with 462 additions and 17 deletions

View File

@@ -0,0 +1,23 @@
#include "ArduinoGpio.h"
#ifdef ARDUINO
#include "Arduino.h"
ArduinoGpioInput::ArduinoGpioInput(uint8_t pin) :
pin(pin)
{}
bool ArduinoGpioInput::read() {
return digitalRead(pin);
}
ArduinoGpioOutput::ArduinoGpioOutput(uint8_t pin) :
pin(pin)
{}
void ArduinoGpioOutput::write(bool value) {
digitalWrite(pin, value);
}
#endif

View File

@@ -0,0 +1,13 @@
#include "ArduinoClock.h"
#ifdef ARDUINO
#include "Arduino.h"
ArduinoClock::ArduinoClock() {}
uint32_t ArduinoClock::getMillis() {
return getMillis();
}
#endif

View File

@@ -0,0 +1,12 @@
#pragma once
#include "Clock.h"
#ifdef ARDUINO
class ArduinoClock : public Clock {
public:
ArduinoClock();
uint32_t getMillis() override;
};
#endif

View File

@@ -0,0 +1,23 @@
#include "ArduinoGpio.h"
#ifdef ARDUINO
#include "Arduino.h"
ArduinoGpioInput::ArduinoGpioInput(uint8_t pin) :
pin(pin)
{}
bool ArduinoGpioInput::read() {
return digitalRead(pin);
}
ArduinoGpioOutput::ArduinoGpioOutput(uint8_t pin) :
pin(pin)
{}
void ArduinoGpioOutput::write(bool value) {
digitalWrite(pin, value);
}
#endif

View File

@@ -0,0 +1,24 @@
#pragma once
#include "Gpio.h"
#include <stdint.h>
#ifdef ARDUINO
class ArduinoGpioInput : public GpioInput {
public:
ArduinoGpioInput(uint8_t pin_number);
virtual bool read() override;
private:
const uint8_t pin;
};
class ArduinoGpioOutput : public GpioOutput {
public:
ArduinoGpioOutput(uint8_t pin_number);
virtual void write(bool value) override;
private:
const uint8_t pin;
};
#endif

View File

@@ -0,0 +1,8 @@
#pragma once
#include <stdint.h>
class Clock {
public:
virtual uint32_t getMillis() = 0;
};

View File

@@ -0,0 +1,15 @@
#include "Fsm.h"
Fsm::Fsm(State &initialState) :
current_state(&initialState)
{}
void Fsm::transition(State &state) {
current_state->onExit();
current_state = &state;
current_state->onEntry();
}
void Fsm::step() {
current_state->step();
}

View File

@@ -0,0 +1,28 @@
#pragma once
class State {
public:
virtual void step() {};
virtual void onEntry() {};
virtual void onExit() {};
};
class Transition {
public:
Transition(State &toState) {}
virtual bool evalutate() = 0;
};
class Fsm {
protected:
Fsm(State &initialState);
void transition(State &state);
public:
void step();
private:
State *current_state;
};

View File

@@ -0,0 +1,11 @@
#pragma once
class GpioInput {
public:
virtual bool read() = 0;
};
class GpioOutput {
public:
virtual void write(bool value) = 0;
};

View File

@@ -0,0 +1,25 @@
#pragma once
#include "Clock.h"
class Timer {
public:
Timer(Clock &clock)
: clock(clock)
, start_time(0)
{}
void start() {
start_time = clock.getMillis();
}
uint32_t getRuntime() {
return start_time - clock.getMillis();
}
private:
Clock &clock;
uint32_t start_time;
};