#pragma once

#include <stm32f4xx_hal.h>
#include <stm32_hal_legacy.h>

#include <array>
using namespace std;

enum StateNames
{
	SMNotRunning = 0,
	recovery,
	findNeutral,
	descend,
	park,
	anchor,
	deanchor,
	surfaceOps,
	quit,
	numStates
};

void initPlatform();
void initLEDs();

class StateBase
{
public:
	StateBase(string id, int32_t timeout)
	{
		stateID = id;
		stateTimeout = timeout;
	}
	virtual void doStateEntryActions()
	{}
	virtual void doStateActions()
	{
		
	}
	virtual StateNames checkEvents()
	{
		return (recovery);
	}
	virtual void doStateExit(bool timeout)
	{}
	
protected:
	string stateID;
	uint32_t stateTimeout;

private:

};

struct RecoveryStateConfig
{
	float RecoveryBP;
	float BPBand;
};

