-
Notifications
You must be signed in to change notification settings - Fork 79
Expand file tree
/
Copy pathMeadeCommandProcessor.hpp
More file actions
174 lines (155 loc) · 7.38 KB
/
MeadeCommandProcessor.hpp
File metadata and controls
174 lines (155 loc) · 7.38 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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#pragma once
#include "core/meade/MeadeParser.hpp"
// Forward declarations
class Mount;
class LcdMenu;
class MeadeCommandProcessor : private oat::core::meade::IMeadeHandlers
{
public:
static MeadeCommandProcessor *createProcessor(Mount *mount, LcdMenu *lcdMenu);
static MeadeCommandProcessor *instance();
const char *processCommand(String inCmd);
private:
MeadeCommandProcessor(Mount *mount, LcdMenu *lcdMenu);
// Persist a freshly-built response across the handler return.
// The returned pointer is valid until the next call to `store`.
const char *store(oat::core::meade::MeadeResponse &response);
// IMeadeGetHandlers overrides. Each method returns a typed domain value;
// the parser layer handles all Meade wire formatting.
const char *onFirmwareVersion() override;
const char *onProductName() override;
oat::core::meade::RaCoordinate onCurrentRa() override;
oat::core::meade::RaCoordinate onTargetRa() override;
oat::core::meade::DecCoordinate onCurrentDec() override;
oat::core::meade::DecCoordinate onTargetDec() override;
const char *onMountStatus() override;
bool onIsSlewing() override;
bool onIsTracking() override;
bool onIsGuiding() override;
oat::core::meade::MeadeLatitude onSiteLatitude() override;
oat::core::meade::MeadeLongitude onSiteLongitude() override;
int onUtcOffset() override;
oat::core::meade::MeadeLocalTime onLocalTime() override;
oat::core::meade::MeadeLocalDate onLocalDate() override;
oat::core::meade::MeadeClockFormat onClockFormat() override;
oat::core::meade::MeadeTrackingRate onTrackingRate() override;
const char *onSiteName(uint8_t index) override;
// IMeadeSetHandlers overrides. Each method receives a parser-validated
// typed value and returns whether the mount accepted it.
bool onSetTargetDec(oat::core::meade::DecCoordinate dec) override;
bool onSetTargetRa(oat::core::meade::RaCoordinate ra) override;
bool onSetLocalSiderealTime(oat::core::meade::MeadeLocalTime lst) override;
bool onSetHomePoint() override;
bool onSetHourAngle(uint8_t hours, uint8_t minutes) override;
bool onSyncCoordinates(oat::core::meade::DecCoordinate dec, oat::core::meade::RaCoordinate ra) override;
bool onSetSiteLatitude(oat::core::meade::MeadeLatitude lat) override;
bool onSetSiteLongitude(oat::core::meade::MeadeLongitude lon) override;
bool onSetUtcOffset(int hours) override;
bool onSetLocalTime(oat::core::meade::MeadeLocalTime t) override;
bool onSetLocalDate(oat::core::meade::MeadeLocalDate d) override;
// IMeadeQuitHandlers overrides. All callbacks are side-effect only; the
// dispatcher emits an empty wire response regardless.
void onStopAll() override;
void onStopDirectionalAll() override;
void onStopEast() override;
void onStopWest() override;
void onStopNorth() override;
void onStopSouth() override;
void onQuitControlMode() override;
// IMeadeDistanceHandlers overrides.
bool onIsSlewingRaOrDec() override;
// IMeadeInitHandlers overrides.
void onEnterSerialControl() override;
// IMeadeSyncControlHandlers overrides.
void onSyncToTarget() override;
// IMeadeHomeHandlers overrides.
void onPark() override;
void onSlewToHome() override;
void onUnpark() override;
void onSetAzAltHome() override;
// IMeadeSlewRateHandlers overrides.
void onSetSlewRate(uint8_t rate) override;
// IMeadeGpsHandlers overrides.
bool onStartGpsAcquisition(const char *timeoutPayload) override;
// IMeadeFocusHandlers overrides.
void onFocusContinuousIn() override;
void onFocusContinuousOut() override;
void onFocusMoveBy(long steps) override;
void onFocusSetSpeedByRate(int rate) override;
void onFocusStop() override;
long onFocusGetPosition() override;
bool onFocusIsAvailable() override;
void onFocusSetPosition(long steps) override;
bool onFocusGetState() override;
// IMeadeMovementHandlers overrides.
void onStartSlewToTarget() override;
void onTrackingOn() override;
void onTrackingOff() override;
void onGuidePulse(oat::core::meade::MoveDirection dir, int durationMs) override;
void onMoveAzAltHome() override;
void onMoveAzimuth(float arcMinutes) override;
void onMoveAltitude(float arcMinutes) override;
void onSlewEast() override;
void onSlewWest() override;
void onSlewNorth() override;
void onSlewSouth() override;
void onMoveStepper(oat::core::meade::MovementAxis axis, long steps) override;
bool onHomeRa(int direction, const char *distancePayload) override;
bool onHomeDec(int direction, const char *distancePayload) override;
// IMeadeExtraHandlers overrides.
void onFactoryReset() override;
void onDriftAlignment(int duration) override;
float onGetRaStepsPerDegree() override;
float onGetDecStepsPerDegree() override;
float onGetAltStepsPerDegree() override;
float onGetAzStepsPerDegree() override;
oat::core::meade::ExtraDecLimits onGetDecLimits() override;
float onGetTrackingSpeedCalibration() override;
float onGetRemainingSafeTime() override;
float onGetTrackingSpeed() override;
int onGetBacklashSteps() override;
const char *onGetAutoHomingStates() override;
oat::core::meade::ExtraAzAltPositions onGetAzAltPositions() override;
oat::core::meade::ExtraStepperCoords onGetTargetCoordinatePositions(float raCoord, float decCoord) override;
const char *onGetStepperInfo() override;
const char *onGetMountHardwareInfo() override;
const char *onGetLogBuffer() override;
long onGetRaHomingOffset() override;
long onGetDecHomingOffset() override;
bool onGetHemisphere() override;
oat::core::meade::ExtraHms onGetHourAngle() override;
oat::core::meade::ExtraHms onGetLocalSiderealTime() override;
const char *onGetNetworkStatus() override;
void onSetRaStepsPerDegree(float v) override;
void onSetDecStepsPerDegree(float v) override;
void onSetAzStepsPerDegree(float v) override;
void onSetAltStepsPerDegree(float v) override;
void onSetDecLimitLower(bool havePayload, float value) override;
void onSetDecLimitUpper(bool havePayload, float value) override;
void onClearDecLimitLower() override;
void onClearDecLimitUpper() override;
void onSetTrackingSpeedCalibration(float v) override;
void onSetTrackingStepperPosition(long v) override;
void onSetManualSlewMode(bool enable) override;
void onSetRaManualSpeed(float v) override;
void onSetDecManualSpeed(float v) override;
void onSetBacklashCorrection(int v) override;
void onSetRaHomingOffset(long v) override;
void onSetDecHomingOffset(long v) override;
bool onLevelIsAvailable() override;
oat::core::meade::ExtraPitchRoll onLevelGetReferenceAngles() override;
oat::core::meade::ExtraPitchRoll onLevelGetCurrentAngles() override;
float onLevelGetTemperature() override;
void onLevelSetReferencePitch(float v) override;
void onLevelSetReferenceRoll(float v) override;
void onLevelStartup() override;
void onLevelShutdown() override;
Mount *_mount;
LcdMenu *_lcdMenu;
static MeadeCommandProcessor *_instance;
oat::core::meade::MeadeResponse _response;
// Storage backing the pointer-returning Get callbacks (firmware/product
// names use string literals; mount status / site name use these buffers).
String _mountStatusScratch;
char _siteNameScratch[8];
};