Instrument Neutral Distributed Interface INDI 2.2.5
telescope_bridge.h
Go to the documentation of this file.
1/*******************************************************************************
2 Copyright(c) 2025 Jasem Mutlaq. All rights reserved.
3
4 INDI Alpaca Telescope Bridge
5
6 This program is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2 of the License, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA.
20
21 The full GNU General Public License is included in this distribution in the
22 file called LICENSE.
23*******************************************************************************/
24
25#pragma once
26
27#include "device_bridge.h"
28#include "basedevice.h"
29#include "indiproperty.h"
30#include <string>
31#include <mutex>
32
34{
35 public:
36 TelescopeBridge(INDI::BaseDevice device, int deviceNumber);
38
39 // IDeviceBridge implementation
40 std::string getDeviceType() const override
41 {
42 return "telescope";
43 }
44 std::string getDeviceName() const override;
45 int getDeviceNumber() const override
46 {
47 return m_DeviceNumber;
48 }
49 std::string getUniqueID() const override;
50
51 void handleRequest(const std::string &method,
52 const httplib::Request &req,
53 httplib::Response &res) override;
54
55 void updateProperty(INDI::Property property) override;
56
57 // Common Alpaca API methods
58 void handleConnected(const httplib::Request &req, httplib::Response &res) override;
59 void handleName(const httplib::Request &req, httplib::Response &res) override;
60 void handleDescription(const httplib::Request &req, httplib::Response &res) override;
61 void handleDriverInfo(const httplib::Request &req, httplib::Response &res) override;
62 void handleDriverVersion(const httplib::Request &req, httplib::Response &res) override;
63 void handleInterfaceVersion(const httplib::Request &req, httplib::Response &res) override;
64
65 private:
66 // Telescope-specific Alpaca API methods
67 void handleAlignmentMode(const httplib::Request &req, httplib::Response &res);
68 void handleAltitude(const httplib::Request &req, httplib::Response &res);
69 void handleApertureArea(const httplib::Request &req, httplib::Response &res);
70 void handleApertureDiameter(const httplib::Request &req, httplib::Response &res);
71 void handleAtHome(const httplib::Request &req, httplib::Response &res);
72 void handleAtPark(const httplib::Request &req, httplib::Response &res);
73 void handleAzimuth(const httplib::Request &req, httplib::Response &res);
74 void handleCanFindHome(const httplib::Request &req, httplib::Response &res);
75 void handleCanPark(const httplib::Request &req, httplib::Response &res);
76 void handleCanPulseGuide(const httplib::Request &req, httplib::Response &res);
77 void handleCanSetDeclinationRate(const httplib::Request &req, httplib::Response &res);
78 void handleCanSetGuideRates(const httplib::Request &req, httplib::Response &res);
79 void handleCanSetPark(const httplib::Request &req, httplib::Response &res);
80 void handleCanSetPierSide(const httplib::Request &req, httplib::Response &res);
81 void handleCanSetRightAscensionRate(const httplib::Request &req, httplib::Response &res);
82 void handleCanSetTracking(const httplib::Request &req, httplib::Response &res);
83 void handleCanSlew(const httplib::Request &req, httplib::Response &res);
84 void handleCanSlewAltAz(const httplib::Request &req, httplib::Response &res);
85 void handleCanSlewAltAzAsync(const httplib::Request &req, httplib::Response &res);
86 void handleCanSlewAsync(const httplib::Request &req, httplib::Response &res);
87 void handleCanSync(const httplib::Request &req, httplib::Response &res);
88 void handleCanSyncAltAz(const httplib::Request &req, httplib::Response &res);
89 void handleCanUnpark(const httplib::Request &req, httplib::Response &res);
90 void handleDeclination(const httplib::Request &req, httplib::Response &res);
91 void handleDeclinationRate(const httplib::Request &req, httplib::Response &res);
92 void handleDestinationSideOfPier(const httplib::Request &req, httplib::Response &res);
93 void handleDoesRefraction(const httplib::Request &req, httplib::Response &res);
94 void handleEquatorialSystem(const httplib::Request &req, httplib::Response &res);
95 void handleFocalLength(const httplib::Request &req, httplib::Response &res);
96 void handleGuideRateDeclination(const httplib::Request &req, httplib::Response &res);
97 void handleGuideRateRightAscension(const httplib::Request &req, httplib::Response &res);
98 void handleIsPulseGuiding(const httplib::Request &req, httplib::Response &res);
99 void handleRightAscension(const httplib::Request &req, httplib::Response &res);
100 void handleRightAscensionRate(const httplib::Request &req, httplib::Response &res);
101 void handleSideOfPier(const httplib::Request &req, httplib::Response &res);
102 void handleSiderealTime(const httplib::Request &req, httplib::Response &res);
103 void handleSiteElevation(const httplib::Request &req, httplib::Response &res);
104 void handleSiteLatitude(const httplib::Request &req, httplib::Response &res);
105 void handleSiteLongitude(const httplib::Request &req, httplib::Response &res);
106 void handleSlewing(const httplib::Request &req, httplib::Response &res);
107 void handleSlewSettleTime(const httplib::Request &req, httplib::Response &res);
108 void handleTargetDeclination(const httplib::Request &req, httplib::Response &res);
109 void handleTargetRightAscension(const httplib::Request &req, httplib::Response &res);
110 void handleTracking(const httplib::Request &req, httplib::Response &res);
111 void handleTrackingRate(const httplib::Request &req, httplib::Response &res);
112 void handleTrackingRates(const httplib::Request &req, httplib::Response &res);
113 void handleUTCDate(const httplib::Request &req, httplib::Response &res);
114
115 // Telescope-specific Alpaca API actions
116 void handleAbortSlew(const httplib::Request &req, httplib::Response &res);
117 void handleAxisRates(const httplib::Request &req, httplib::Response &res);
118 void handleCanMoveAxis(const httplib::Request &req, httplib::Response &res);
119 void handleFindHome(const httplib::Request &req, httplib::Response &res);
120 void handleMoveAxis(const httplib::Request &req, httplib::Response &res);
121 void handlePark(const httplib::Request &req, httplib::Response &res);
122 void handlePulseGuide(const httplib::Request &req, httplib::Response &res);
123 void handleSetDeclinationRate(const httplib::Request &req, httplib::Response &res);
124 void handleSetGuideRates(const httplib::Request &req, httplib::Response &res);
125 void handleSetPark(const httplib::Request &req, httplib::Response &res);
126 void handleSetRightAscensionRate(const httplib::Request &req, httplib::Response &res);
127 void handleSetTracking(const httplib::Request &req, httplib::Response &res);
128 void handleSlewToAltAz(const httplib::Request &req, httplib::Response &res);
129 void handleSlewToAltAzAsync(const httplib::Request &req, httplib::Response &res);
130 void handleSlewToCoordinates(const httplib::Request &req, httplib::Response &res);
131 void handleSlewToCoordinatesAsync(const httplib::Request &req, httplib::Response &res);
132 void handleSlewToTarget(const httplib::Request &req, httplib::Response &res);
133 void handleSlewToTargetAsync(const httplib::Request &req, httplib::Response &res);
134 void handleSyncToAltAz(const httplib::Request &req, httplib::Response &res);
135 void handleSyncToCoordinates(const httplib::Request &req, httplib::Response &res);
136 void handleSyncToTarget(const httplib::Request &req, httplib::Response &res);
137 void handleUnpark(const httplib::Request &req, httplib::Response &res);
138
139 // Helper methods
140 // These methods should be implemented by the AlpacaClient
141 void requestNewNumber(const INDI::PropertyNumber &numberProperty);
142 void requestNewSwitch(const INDI::PropertySwitch &switchProperty);
143
144 // Helper methods for sending standard JSON responses
145 void sendResponse(httplib::Response &res, bool success, const std::string &errorMessage);
146
147 // Generic method for sending a response with a value of any type
148 template <typename T>
149 void sendResponse(httplib::Response &res, const T &value, bool success = true,
150 const std::string &errorMessage = "", int clientID = 0, int serverID = 0);
151
152 // Simplified response methods without transaction IDs (added by DeviceManager)
153 template <typename T>
154 void sendResponseValue(httplib::Response &res, const T &value,
155 bool success = true, const std::string &errorMessage = "");
156
157 void sendResponseStatus(httplib::Response &res, bool success,
158 const std::string &errorMessage = "");
159
160
161 // Note: Implementation is split between telescope_bridge_base.cpp and telescope_bridge_handlers.cpp
162
163 // Device state
164 INDI::BaseDevice m_Device;
165 int m_DeviceNumber;
166
167 // Current state tracking
168 double m_CurrentRA {0}, m_CurrentDEC {0};
169 double m_CurrentAZ {0}, m_CurrentALT {0};
170 double m_TargetRA {0}, m_TargetDEC {0};
171 double m_RightAscensionRate {0}, m_DeclinationRate {0};
172 bool m_IsTracking {false};
173 bool m_IsParked {false};
174 bool m_IsSlewing {false};
175 int m_PierSide {0};
176
177 // Thread safety
178 std::mutex m_Mutex;
179};
hid_device * device
Class to provide basic INDI device functionality.
Definition basedevice.h:52
Provides generic container for INDI properties.
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
int getDeviceNumber() const override
void handleDescription(const httplib::Request &req, httplib::Response &res) override
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 getDeviceType() const override
std::string getUniqueID() const override