-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHalImpl.h
More file actions
118 lines (88 loc) · 2.5 KB
/
Copy pathHalImpl.h
File metadata and controls
118 lines (88 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "HardwareSerial.h"
#ifndef HAL_IMPL_H
#define HAL_IMPL_H
#define USE_ARDUINO_UART_LINK
#include <EncButton.h>
#include "src/Framework/Core/Hal.h"
#include "src/Framework/Timer.h"
#include "src/Link/ArduinoUartLink.h"
#include "src/Settings/Settings.h"
#include "Display.h"
#define NUM_PLAYERS 4
enum class HalSoundMode
{
Normal,
Disabled
};
enum class DisplayMode
{
Game,
Settings,
EightButtons
};
enum CustomDisplayInfoType
{
DisplayInfoSettings = 0,
DisplayInfoEightButtons
};
struct HalState
{
DisplayMode display_mode;
};
class HalImpl : public vgs::IHal
{
public:
HalImpl();
void init() override;
void tick() override;
//buttons
vgs::ButtonState getButtonState() override;
//leds
void correctPressSignal(int player) override;
void correctPressSignal(int player, bool useLink);
void falstartPressSignal(int player) override;
void falstartPressSignal(int player, bool useLink);
void pendingPressSignal(int player) override;
void pendingPressSignal(int player, bool useLink);
void gameStartSignal() override;
void gameStartSignal(bool useLink);
void clearSignals() override;
void clearSignals(bool useLink);
void setSignalLightEnabled(bool enabled);
//sound
void sound(vgs::HalSound soundType) override;
void sound(unsigned int frequency, unsigned int duration) override;
void setSoundMode(HalSoundMode mode);
//display
void updateDisplay(const vgs::GameDisplayInfo& info) override;
void updateDisplay(const vgs::CustomDisplayInfo& info) override;
//time
unsigned long getTimeMillis() override;
//settings
void saveSettings(const vgs::settings::Settings& settings);
void loadSettings(vgs::settings::Settings& settings);
// link
void setLinkVersion(vgs::link::UartLinkVersion);
vgs::link::Link& getLink();
private:
void blinkLed(int player);
void showTime(const vgs::GameDisplayInfo& info);
void showPressTime(const vgs::GameDisplayInfo& info);
void updateDisplay(const vgs::settings::Settings* settings);
void sendLinkCommand(bool useLink, vgs::link::Command command, unsigned int data = 0);
private:
Button m_playerButtons[NUM_PLAYERS];
Button m_startButton;
Button m_stopButton;
Button m_funcButton;
vgs::Timer m_blinkTimer;
bool m_blinkState = 0;
bool m_blinkingLeds[NUM_PLAYERS];
vgs::link::ArduinoUartLink m_link = vgs::link::ArduinoUartLink(&Serial);
HalSoundMode m_soundMode;
bool m_signalLightEnabled = true;
Display m_display;
bool m_displayForceUpdate = true;
HalState m_state;
};
#endif