34#ifdef _USE_SYSTEM_JSONLIB
35#include <nlohmann/json.hpp>
43 : m_Device(
device), m_DeviceNumber(deviceNumber)
46 device.getDeviceName(), deviceNumber);
71 if (method ==
"connected")
73 else if (method ==
"name")
75 else if (method ==
"description")
77 else if (method ==
"driverinfo")
79 else if (method ==
"driverversion")
81 else if (method ==
"interfaceversion")
84 else if (method ==
"alignmentmode")
85 handleAlignmentMode(req, res);
86 else if (method ==
"altitude")
87 handleAltitude(req, res);
88 else if (method ==
"azimuth")
89 handleAzimuth(req, res);
90 else if (method ==
"canpark")
91 handleCanPark(req, res);
92 else if (method ==
"canpulseguide")
93 handleCanPulseGuide(req, res);
94 else if (method ==
"cansettracking")
95 handleCanSetTracking(req, res);
96 else if (method ==
"cansetrightascensionrate")
97 handleCanSetRightAscensionRate(req, res);
98 else if (method ==
"cansetdeclinationrate")
99 handleCanSetDeclinationRate(req, res);
100 else if (method ==
"canslew")
101 handleCanSlew(req, res);
102 else if (method ==
"canmoveaxis")
103 handleCanMoveAxis(req, res);
104 else if (method ==
"canslewasync")
105 handleCanSlewAsync(req, res);
106 else if (method ==
"canslewaltazasync")
107 handleCanSlewAltAzAsync(req, res);
108 else if (method ==
"cansync")
109 handleCanSync(req, res);
110 else if (method ==
"declination")
111 handleDeclination(req, res);
112 else if (method ==
"declinationrate")
113 handleDeclinationRate(req, res);
114 else if (method ==
"rightascension")
115 handleRightAscension(req, res);
116 else if (method ==
"rightascensionrate")
117 handleRightAscensionRate(req, res);
118 else if (method ==
"sideofpier")
119 handleSideOfPier(req, res);
120 else if (method ==
"slewing")
121 handleSlewing(req, res);
122 else if (method ==
"tracking")
123 handleTracking(req, res);
124 else if (method ==
"atpark")
125 handleAtPark(req, res);
127 else if (method ==
"abortslew")
128 handleAbortSlew(req, res);
129 else if (method ==
"park")
130 handlePark(req, res);
131 else if (method ==
"unpark")
132 handleUnpark(req, res);
133 else if (method ==
"slewtocoordinates")
134 handleSlewToCoordinates(req, res);
135 else if (method ==
"slewtocoordinatesasync")
136 handleSlewToCoordinatesAsync(req, res);
137 else if (method ==
"synctocoordinates")
138 handleSyncToCoordinates(req, res);
139 else if (method ==
"pulseguide")
140 handlePulseGuide(req, res);
141 else if (method ==
"moveaxis")
142 handleMoveAxis(req, res);
143 else if (method ==
"axisrates")
144 handleAxisRates(req, res);
145 else if (method ==
"settracking")
146 handleSetTracking(req, res);
147 else if (method ==
"setrightascensionrate")
148 handleSetRightAscensionRate(req, res);
149 else if (method ==
"setdeclinationrate")
150 handleSetDeclinationRate(req, res);
151 else if (method ==
"equatorialsystem")
152 handleEquatorialSystem(req, res);
153 else if (method ==
"sitelatitude")
154 handleSiteLatitude(req, res);
155 else if (method ==
"sitelongitude")
156 handleSiteLongitude(req, res);
157 else if (method ==
"siteelevation")
158 handleSiteElevation(req, res);
164 {
"ErrorNumber", 1025},
165 {
"ErrorMessage",
"Method not implemented: " + method}
174 std::lock_guard<std::mutex> lock(m_Mutex);
176 const char *propName =
property.getName();
184 for (
auto &num : numberProperty)
186 if (num.isNameMatch(
"RA"))
187 m_CurrentRA = num.getValue();
188 else if (num.isNameMatch(
"DEC"))
189 m_CurrentDEC = num.getValue();
197 for (
auto &num : numberProperty)
199 if (num.isNameMatch(
"AZ"))
200 m_CurrentAZ = num.getValue();
201 else if (num.isNameMatch(
"ALT"))
202 m_CurrentALT = num.getValue();
206 else if (property.
isNameMatch(
"TELESCOPE_TRACK_STATE"))
219 m_IsParked ?
"PARKED" :
"UNPARKED");
221 else if (property.
isNameMatch(
"TELESCOPE_MOTION_NS") ||
property.isNameMatch(
"TELESCOPE_MOTION_WE"))
233 auto weSp = m_Device.
getSwitch(
"TELESCOPE_MOTION_WE");
244 auto nsSp = m_Device.
getSwitch(
"TELESCOPE_MOTION_NS");
255 m_IsSlewing ?
"SLEWING" :
"NOT SLEWING");
257 else if (property.
isNameMatch(
"TELESCOPE_PIER_SIDE"))
261 if (switchProperty[0].getState() ==
ISS_ON)
263 else if (switchProperty[1].getState() ==
ISS_ON)
269 else if (property.
isNameMatch(
"TELESCOPE_TRACK_RATE"))
273 for (
auto &num : numberProperty)
275 if (num.isNameMatch(
"TRACK_RATE_RA"))
276 m_RightAscensionRate = num.getValue();
277 else if (num.isNameMatch(
"TRACK_RATE_DE"))
278 m_DeclinationRate = num.getValue();
281 m_RightAscensionRate, m_DeclinationRate);
306void TelescopeBridge::sendResponse(
httplib::Response &res,
bool success,
const std::string &errorMessage)
314 {
"ClientTransactionID", clientID},
315 {
"ServerTransactionID", serverID},
316 {
"ErrorNumber", success ? 0 : 1},
317 {
"ErrorMessage", success ?
"" : errorMessage}
324void TelescopeBridge::sendResponse(
httplib::Response &res,
const T &value,
bool success,
325 const std::string &errorMessage,
int clientID,
int serverID)
330 {
"ClientTransactionID", clientID},
331 {
"ServerTransactionID", serverID},
332 {
"ErrorNumber", success ? 0 : 1},
333 {
"ErrorMessage", success ?
"" : errorMessage}
340 bool success,
const std::string &errorMessage)
342 sendResponse(res, value, success, errorMessage, 0, 0);
347 const std::string &errorMessage)
351 {
"ErrorNumber", success ? 0 : 1},
352 {
"ErrorMessage", success ?
"" : errorMessage}
358template void TelescopeBridge::sendResponse<std::string>(
httplib::Response &res,
const std::string &value,
bool success,
359 const std::string &errorMessage,
int clientID,
int serverID);
360template void TelescopeBridge::sendResponse<double>(
httplib::Response &res,
const double &value,
bool success,
361 const std::string &errorMessage,
int clientID,
int serverID);
362template void TelescopeBridge::sendResponse<int>(
httplib::Response &res,
const int &value,
bool success,
363 const std::string &errorMessage,
int clientID,
int serverID);
364template void TelescopeBridge::sendResponse<bool>(
httplib::Response &res,
const bool &value,
bool success,
365 const std::string &errorMessage,
int clientID,
int serverID);
366template void TelescopeBridge::sendResponse<json>(
httplib::Response &res,
const json &value,
bool success,
367 const std::string &errorMessage,
int clientID,
int serverID);
370 const std::string &value,
bool success,
const std::string &errorMessage);
372 const double &value,
bool success,
const std::string &errorMessage);
374 const int &value,
bool success,
const std::string &errorMessage);
376 const bool &value,
bool success,
const std::string &errorMessage);
378 const json &value,
bool success,
const std::string &errorMessage);
void sendNewSwitch(const INDI::PropertySwitch &switchProperty)
static DeviceManager * getInstance()
void sendNewNumber(const INDI::PropertyNumber &numberProperty)
Class to provide basic INDI device functionality.
const char * getDeviceName() const
INDI::PropertySwitch getSwitch(const char *name) const
const char * getName() const
Provides generic container for INDI properties.
bool isNameMatch(const char *otherName) const
void handleConnected(const httplib::Request &req, httplib::Response &res) override
void handleInterfaceVersion(const httplib::Request &req, httplib::Response &res) override
void handleDriverVersion(const httplib::Request &req, httplib::Response &res) override
void handleName(const httplib::Request &req, httplib::Response &res) override
std::string getDeviceName() const override
void handleDescription(const httplib::Request &req, httplib::Response &res) override
TelescopeBridge(INDI::BaseDevice device, int deviceNumber)
void handleDriverInfo(const httplib::Request &req, httplib::Response &res) override
void handleRequest(const std::string &method, const httplib::Request &req, httplib::Response &res) override
void updateProperty(INDI::Property property) override
std::string getUniqueID() const override
a class to store JSON values
string_t dump(const int indent=-1, const char indent_char=' ', const bool ensure_ascii=false, const error_handler_t error_handler=error_handler_t::strict) const
serialization
#define DEBUGFDEVICE(device, priority, msg,...)
basic_json<> json
default specialization
void set_content(const char *s, size_t n, const std::string &content_type)