-
Notifications
You must be signed in to change notification settings - Fork 0
/
WiThrottle.h
116 lines (89 loc) · 4.38 KB
/
WiThrottle.h
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
/*
* Declaration of a JMRI WiThrottle
*/
#ifndef _WI_THROTTLE_H_
#define _WI_THROTTLE_H_
#include "CrossFunc.h"
#include "VirtualLoco.h"
#include <Arduino.h>
#include <WiFi.h>
// LED
#define LED_DELAY 100 // Delay for flashing LED, e. g. in case of an error
// Track power of DCC system
#define POWER_ON 1 // Track power of DCC system is on
#define POWER_OFF 0 // Track power of DCC system is off
#define POWER_UNKNOWN 2 // Track power of DCC system is in unknown state
// Locos
#define LOCO_MAX 2 // Maximum number of locos to be handled by WiThrottle
// Structures
// Lists supplied to WiThrottle by WiThrottle server
typedef struct {
String roster = ""; // Roster list
String turnout = ""; // Turnout list --> not used by now
String route = ""; // Route list --> not used by now
String consist = ""; // Consist list --> not used by now
} jmriLists;
// Fastclock
typedef struct {
unsigned long timeStamp = 0; // Start time of fast clock as Unix Timestamp supplied by WiThrottle server
double ratio; // Fast time ratio
unsigned long timeStampMillis = 0; // Millis since <timeStamp> has been updated
} fastClockConfig;
class WiThrottle {
private:
// This WiThrottle
char* name; // Name of throttle
// WiFi communication
wiFiConfig wiFiSettings; // WiFi settings
byte macAddress[6]; // MAC address
// WiThrottle server communication
hostConfig hostSettings; // WiThrottle server settings
const String cmdPrefix = "M0"; // Prefix to be sent for Multithrottle commands
// Layout control
byte trackPower = POWER_UNKNOWN; // Track power of DCC system
fastClockConfig fastClockSettings; // Fast clock settings
// Fast clock
unsigned long timeStampFC; // Last timestamp for fast clock
public:
// Constructor
WiThrottle(char* name);
// Display initialization
void initDisplay();
// EEPROM initialization
void initEeprom();
// WiFi connection
void connectToWiFi(wiFiConfig &wiFiSettings);
// Connect to WiFi
void disconnectFromWiFi(); // Disconnect from WiFi
void checkConnectionToWiFi(); // Check if WiFi connection is still alive
// WiThrottle server connection
void connectToJMRI(hostConfig &host); // Connect to WiThrottle server
void disconnectFromJMRI(); // Disconnect from WiThrottle server
void checkConnectionToJMRI(); // Check if WiThrottle server connection is still alive
void listenToServer(); // Listen to WiThrottle server
jmriLists lists; // Lists supplied to WiThrottle by WiThrottle server
// WiThrottle control
void shutdown(); // Put WiThrottle into sleep mode
// Loco control
void assignLoco(VirtualLoco loco); // Assign loco to WiThrottle
void retractLoco(); // Retract loco from WiThrottle
bool checkActiveLoco(); // Check if a loco is selected
VirtualLoco loco[LOCO_MAX]; // Locos to be controlled by WiThrottle; maximum is 3 locos
unsigned int getLastAddress(); // Read last active DCC address from EEPROM
void setLastAddress(unsigned int address);
// Write last active DCC address to EEPROM
unsigned int getAddressByMenu(); // Get a DCC address by menu
unsigned int getAddressBySerial(); // Get a DCC address by serial monitor
// Layout control
void switchDCCPowerOn(); // Switch track power of DCC system on
void switchDCCPowerOff(); // Switch track power of DCC system off
// Fast clock
void fastClockUpdate(); // Updates fast clock
// Heartbeat
void sendHeartbeat(); // Send heartbeat to WiThrottle server
void turnHeartbeatMonitoringOn(); // Turn heartbeat monitoring on
void turnHeartbeatMonitoringOff(); // Turn heartbeat monitoring off
// Error handling
void errorHandling(String errorMsg);
};
#endif