Instrument Neutral Distributed Interface INDI 2.2.5
device.h
Go to the documentation of this file.
1/*
2 Gemini Power Box Hub Advanced v3 INDI Driver
3
4 Copyright (C) 2026 Dieter R Kedrowitsch <[email protected]>
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 General Public License along with
17 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18 Place - Suite 330, Boston, MA 02111-1307, USA.
19
20 The full GNU General Public License is included in this distribution in the
21 file called LICENSE.
22*/
23
24#pragma once
25
26#include <cstddef>
27#include <cstdint>
28#include <functional>
29#include <memory>
30#include <string>
31
36
37namespace geminipbh
38{
39
40struct StatusFrame;
41
50
51class Device
52{
53 public:
54 using TelemetryCallback = std::function<void(const TelemetrySnapshot &)>;
55 using TelemetryCallbackHandle = std::uint64_t;
56 using ConnectionCallback = std::function<void(ConnectionEvent)>;
57 using ConnectionCallbackHandle = std::uint64_t;
60
61 Device();
63
64 Device(const Device &) = delete;
65 Device &operator=(const Device &) = delete;
66 Device(Device &&) = delete;
67 Device &operator=(Device &&) = delete;
68
69 Result connect(const std::string &port, int settleMs = 0);
73
75 bool isConnected() const;
76 bool hasCommunicationFailure() const;
77
82
88
89 void setCancelFunction(std::function<bool()> callback);
90
91 Result setDcOutput(std::size_t channel, bool enabled);
92 ValueResult<bool> dcOutputState(std::size_t channel) const;
93
94 Result setUsbOutput(std::size_t channel, bool enabled);
95 ValueResult<bool> usbOutputState(std::size_t channel) const;
96
97 Result setHeaterEnabled(std::size_t channel, bool enabled);
98 ValueResult<bool> heaterEnabled(std::size_t channel) const;
99
100 Result setHeaterMode(std::size_t channel, HeaterMode mode);
101 ValueResult<HeaterMode> heaterMode(std::size_t channel) const;
102
103 Result setHeaterManualPower(std::size_t channel, unsigned percent);
104 ValueResult<unsigned> heaterManualPower(std::size_t channel) const;
105 ValueResult<double> heaterCurrentOutput(std::size_t channel) const;
106
111
115
117
118#ifdef GEMINI_TESTING
119 void injectStatusForTesting(const StatusFrame &status);
120 void emitConnectionEventForTesting(ConnectionEvent event);
121 void setConnectedForTesting(bool connected);
122 std::size_t queuedCommandCountForTesting() const;
123#endif
124
125 private:
126 struct Impl;
127 std::unique_ptr<Impl> impl_;
128};
129
130} // namespace geminipbh
instrumentation::Dispatcher::ListenerHandle InstrumentationListenerHandle
Definition device.h:59
void setInstrumentationLevel(instrumentation::Level level)
Definition device.cpp:313
bool removeTelemetryCallback(TelemetryCallbackHandle handle)
Definition device.cpp:298
TelemetryCallbackHandle registerTelemetryCallback(TelemetryCallback callback)
Definition device.cpp:293
std::function< void(ConnectionEvent)> ConnectionCallback
Definition device.h:56
ValueResult< bool > heaterEnabled(std::size_t channel) const
Definition device.cpp:390
ConnectionCallbackHandle registerConnectionCallback(ConnectionCallback callback)
Definition device.cpp:303
Result recoverTelemetryStream()
Definition device.cpp:268
ConnectionState connectionState() const
Definition device.cpp:278
bool removeInstrumentationListener(InstrumentationListenerHandle handle)
Definition device.cpp:333
ValueResult< bool > usbOutputState(std::size_t channel) const
Definition device.cpp:372
ValueResult< std::string > firmwareVersion() const
Definition device.cpp:503
std::uint64_t TelemetryCallbackHandle
Definition device.h:55
Result reconnect()
Definition device.cpp:229
bool hasCommunicationFailure() const
Definition device.cpp:288
std::uint64_t ConnectionCallbackHandle
Definition device.h:57
instrumentation::Level instrumentationLevel() const
Definition device.cpp:318
ValueResult< HeaterMode > heaterMode(std::size_t channel) const
Definition device.cpp:410
ValueResult< double > inputCurrent() const
Definition device.cpp:489
Result setHeaterEnabled(std::size_t channel, bool enabled)
Definition device.cpp:380
Device(const Device &)=delete
Result setHeaterManualPower(std::size_t channel, unsigned percent)
Definition device.cpp:418
InstrumentationListenerHandle registerInstrumentationListener(InstrumentationListener listener)
Definition device.cpp:328
Result disconnect()
Definition device.cpp:252
ValueResult< double > heaterCurrentOutput(std::size_t channel) const
Definition device.cpp:446
ValueResult< double > dewPoint() const
Definition device.cpp:475
Device & operator=(const Device &)=delete
Device & operator=(Device &&)=delete
ValueResult< unsigned > heaterManualPower(std::size_t channel) const
Definition device.cpp:438
ValueResult< double > airTemperature() const
Definition device.cpp:461
Result setHeaterMode(std::size_t channel, HeaterMode mode)
Definition device.cpp:398
instrumentation::Dispatcher::Listener InstrumentationListener
Definition device.h:58
ValueResult< double > deviceSurfaceTemperature() const
Definition device.cpp:454
Device(Device &&)=delete
ValueResult< double > inputVoltage() const
Definition device.cpp:482
void setCancelFunction(std::function< bool()> callback)
Definition device.cpp:338
ValueResult< double > humidity() const
Definition device.cpp:468
bool removeConnectionCallback(ConnectionCallbackHandle handle)
Definition device.cpp:308
Result setUsbOutput(std::size_t channel, bool enabled)
Definition device.cpp:362
Result connect(const std::string &port, int settleMs=0)
Definition device.cpp:209
ValueResult< double > inputPower() const
Definition device.cpp:496
std::function< void(const TelemetrySnapshot &)> TelemetryCallback
Definition device.h:54
bool isConnected() const
Definition device.cpp:283
ValueResult< bool > dcOutputState(std::size_t channel) const
Definition device.cpp:354
Result setDcOutput(std::size_t channel, bool enabled)
Definition device.cpp:344
bool instrumentationEnabled(instrumentation::Level level) const
Definition device.cpp:323
std::function< void(const Event &)> Listener
ConnectionState
Definition device.h:43