Instrument Neutral Distributed Interface INDI  2.0.2
pmc8.h
Go to the documentation of this file.
1 /*
2  INDI Explore Scientific PMC8 driver
3 
4  Copyright (C) 2017 Michael Fulbright
5  Additional contributors:
6  Thomas Olson, Copyright (C) 2019
7  Karl Rees, Copyright (C) 2019-2023
8  Martin Ruiz, Copyright (C) 2023
9 
10  Based on IEQPro driver.
11 
12  This library is free software; you can redistribute it and/or
13  modify it under the terms of the GNU Lesser General Public
14  License as published by the Free Software Foundation; either
15  version 2.1 of the License, or (at your option) any later version.
16 
17  This library is distributed in the hope that it will be useful,
18  but WITHOUT ANY WARRANTY; without even the implied warranty of
19  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20  Lesser General Public License for more details.
21 
22  You should have received a copy of the GNU Lesser General Public
23  License along with this library; if not, write to the Free Software
24  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 */
26 
27 #pragma once
28 
29 #include "pmc8driver.h"
30 #include "indiguiderinterface.h"
31 #include "inditelescope.h"
32 
35 
36 typedef struct PMC8MoveInfo
37 {
39  uint8_t moveDir = 0;
40  int targetRate = 0;
41  int rampIteration = 0;
42  int rampLastStep = 0;
44  int timer;
46 
47 
49 {
50  public:
51 
52  PMC8();
53  ~PMC8() override;
54 
55  virtual bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override;
56  virtual bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override;
57 
58  virtual void ISGetProperties(const char *dev) override;
59 
60  protected:
61 
62  virtual const char *getDefaultName() override;
63 
64  virtual bool Handshake() override;
65 
66  virtual bool initProperties() override;
67 
68  virtual bool updateProperties() override;
69 
70  virtual bool ReadScopeStatus() override;
71 
72  virtual bool MoveNS(INDI_DIR_NS dir, TelescopeMotionCommand command) override;
73  virtual bool MoveWE(INDI_DIR_WE dir, TelescopeMotionCommand command) override;
74 
75  virtual bool saveConfigItems(FILE *fp) override;
76 
77  virtual bool Park() override;
78  virtual bool UnPark() override;
79 
80  virtual bool Sync(double ra, double dec) override;
81  virtual bool Goto(double, double) override;
82  virtual bool Abort() override;
83  static void AbortGotoTimeoutHelper(void *p);
84 
85  virtual bool updateTime(ln_date *utc, double utc_offset) override;
86  virtual bool updateLocation(double latitude, double longitude, double elevation) override;
87 
88  virtual void debugTriggered(bool enable) override;
89  virtual void simulationTriggered(bool enable) override;
90 
91  // Parking
92  virtual bool SetCurrentPark() override;
93  virtual bool SetDefaultPark() override;
94 
95  // Track Mode
96  virtual bool SetTrackMode(uint8_t mode) override;
97 
98  // Track Rate
99  virtual bool SetTrackRate(double raRate, double deRate) override;
100 
101  // Track On/Off
102  virtual bool SetTrackEnabled(bool enabled) override;
103 
104  // Slew Rate
105  virtual bool SetSlewRate(int index) override;
106 
107  // Sim
108  void mountSim();
109 
110  // Guide
111  virtual IPState GuideNorth(uint32_t ms) override;
112  virtual IPState GuideSouth(uint32_t ms) override;
113  virtual IPState GuideEast(uint32_t ms) override;
114  virtual IPState GuideWest(uint32_t ms) override;
115 
116  // Pulse Guide
117  static void guideTimeoutHelperN(void *p);
118  static void guideTimeoutHelperS(void *p);
119  static void guideTimeoutHelperE(void *p);
120  static void guideTimeoutHelperW(void *p);
121  void guideTimeout(PMC8_DIRECTION calldir);
122 
123  //GUIDE variables.
126 
127  // Move
128  static void rampTimeoutHelperN(void *p);
129  static void rampTimeoutHelperS(void *p);
130  static void rampTimeoutHelperE(void *p);
131  static void rampTimeoutHelperW(void *p);
132  bool ramp_movement(PMC8_DIRECTION calldir);
133 
134  int getSlewRate();
135 
136  private:
140  void getStartupData();
141 
142  uint8_t convertToPMC8TrackMode(uint8_t mode);
143  uint8_t convertFromPMC8TrackMode(uint8_t mode);
144 
145  /* Firmware */
146  IText FirmwareT[1] {};
147  ITextVectorProperty FirmwareTP;
148 
149  /* Mount Types */
150  ISwitch MountTypeS[3];
151  ISwitchVectorProperty MountTypeSP;
152 
153  /* SRF Guide Rates */
154  INumber GuideRateN[2];
155  INumberVectorProperty GuideRateNP;
156  INumber LegacyGuideRateN[1];
157  INumberVectorProperty LegacyGuideRateNP;
158 
159  /* Move Ramp Settings */
160  INumber RampN[3];
161  INumberVectorProperty RampNP;
162 
163  // Serial Cable Type
164  ISwitch SerialCableTypeS[3];
165  ISwitchVectorProperty SerialCableTypeSP;
166 
167  // Post-Goto Behavior
168  ISwitch PostGotoS[3];
169  ISwitchVectorProperty PostGotoSP;
170 
171  unsigned int DBG_SCOPE;
172  double currentRA, currentDEC;
173  double targetRA, targetDEC;
174 
175  int trackingPollCounter = 0;
176 
177  bool isPulsingNS = false;
178  bool isPulsingWE = false;
179 
180  PMC8MoveInfo moveInfoRA, moveInfoDEC;
181 
182  //PMC8Info scopeInfo;
183  FirmwareInfo firmwareInfo;
184 };
185 
186 
Definition: pmc8.h:49
virtual bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override
Process the client newNumber command.
Definition: pmc8.cpp:349
static void guideTimeoutHelperE(void *p)
Definition: pmc8.cpp:1349
virtual void simulationTriggered(bool enable) override
Inform driver that the simulation option was triggered. This function is called after setSimulation i...
Definition: pmc8.cpp:893
virtual bool SetSlewRate(int index) override
SetSlewRate Set desired slew rate index.
Definition: pmc8.cpp:1354
bool ramp_movement(PMC8_DIRECTION calldir)
Definition: pmc8.cpp:906
virtual bool Handshake() override
perform handshake with device to check communication
Definition: pmc8.cpp:827
virtual bool SetDefaultPark() override
SetDefaultPark Set default coordinates/encoders value as the desired parking position.
Definition: pmc8.cpp:1502
PMC8()
Definition: pmc8.cpp:58
virtual bool saveConfigItems(FILE *fp) override
saveConfigItems Save specific properties in the provide config file handler. Child class usually over...
Definition: pmc8.cpp:1365
virtual bool MoveNS(INDI_DIR_NS dir, TelescopeMotionCommand command) override
Start or Stop the telescope motion in the direction dir.
Definition: pmc8.cpp:1003
virtual bool updateProperties() override
Called when connected state changes, to add/remove properties.
Definition: pmc8.cpp:170
static void rampTimeoutHelperN(void *p)
Definition: pmc8.cpp:977
virtual bool Sync(double ra, double dec) override
Set the telescope current RA and DEC coordinates to the supplied RA and DEC coordinates.
Definition: pmc8.cpp:688
virtual void ISGetProperties(const char *dev) override
define the driver's properties to the client. Usually, only a minimum set of properties are defined t...
Definition: pmc8.cpp:408
~PMC8() override
Definition: pmc8.cpp:76
virtual bool updateTime(ln_date *utc, double utc_offset) override
Update telescope time, date, and UTC offset.
Definition: pmc8.cpp:851
static void AbortGotoTimeoutHelper(void *p)
Definition: pmc8.cpp:715
virtual const char * getDefaultName() override
Definition: pmc8.cpp:80
virtual bool SetTrackEnabled(bool enabled) override
SetTrackEnabled Engages or disengages mount tracking. If there are no tracking modes available,...
Definition: pmc8.cpp:1602
static void rampTimeoutHelperS(void *p)
Definition: pmc8.cpp:983
virtual IPState GuideNorth(uint32_t ms) override
Guide north for ms milliseconds. North is defined as DEC+.
Definition: pmc8.cpp:1144
virtual bool ReadScopeStatus() override
Read telescope status.
Definition: pmc8.cpp:463
int GuideNSTID
Definition: pmc8.h:124
virtual bool MoveWE(INDI_DIR_WE dir, TelescopeMotionCommand command) override
Move the telescope in the direction dir.
Definition: pmc8.cpp:1074
static void rampTimeoutHelperE(void *p)
Definition: pmc8.cpp:995
virtual bool Park() override
Park the telescope to its home position.
Definition: pmc8.cpp:782
virtual bool SetCurrentPark() override
SetCurrentPark Set current coordinates/encoders value as the desired parking position.
Definition: pmc8.cpp:1496
virtual void debugTriggered(bool enable) override
Inform driver that the debug option was triggered. This function is called after setDebug is triggere...
Definition: pmc8.cpp:888
virtual bool SetTrackRate(double raRate, double deRate) override
SetTrackRate Set custom tracking rates.
Definition: pmc8.cpp:1578
virtual IPState GuideWest(uint32_t ms) override
Guide west for ms milliseconds. West is defined as RA-.
Definition: pmc8.cpp:1268
virtual bool updateLocation(double latitude, double longitude, double elevation) override
Update telescope location settings.
Definition: pmc8.cpp:862
void mountSim()
Definition: pmc8.cpp:1378
static void guideTimeoutHelperS(void *p)
Definition: pmc8.cpp:1341
static void guideTimeoutHelperW(void *p)
Definition: pmc8.cpp:1345
virtual bool initProperties() override
Called to initialize basic properties required all the time.
Definition: pmc8.cpp:85
virtual bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override
Process the client newSwitch command.
Definition: pmc8.cpp:426
virtual IPState GuideEast(uint32_t ms) override
Guide east for ms milliseconds. East is defined as RA+.
Definition: pmc8.cpp:1226
static void guideTimeoutHelperN(void *p)
Definition: pmc8.cpp:1337
virtual bool Abort() override
Abort any telescope motion including tracking if possible.
Definition: pmc8.cpp:721
void guideTimeout(PMC8_DIRECTION calldir)
Definition: pmc8.cpp:1309
virtual bool Goto(double, double) override
Move the scope to the supplied RA and DEC coordinates.
Definition: pmc8.cpp:634
virtual bool UnPark() override
Unpark the telescope if already parked.
Definition: pmc8.cpp:813
static void rampTimeoutHelperW(void *p)
Definition: pmc8.cpp:989
virtual IPState GuideSouth(uint32_t ms) override
Guide south for ms milliseconds. South is defined as DEC-.
Definition: pmc8.cpp:1185
int GuideWETID
Definition: pmc8.h:125
virtual bool SetTrackMode(uint8_t mode) override
SetTrackMode Set active tracking mode. Do not change track state.
Definition: pmc8.cpp:1548
int getSlewRate()
Definition: pmc8.cpp:898
double ra
double dec
ISState
Switch state.
Definition: indiapi.h:150
IPState
Property state.
Definition: indiapi.h:160
INDI_DIR_WE
Definition: indibasetypes.h:55
INDI_DIR_NS
Definition: indibasetypes.h:48
PMC8_MOVE_STATE
Definition: pmc8.h:33
@ PMC8_MOVE_INACTIVE
Definition: pmc8.h:33
@ PMC8_MOVE_RAMPING
Definition: pmc8.h:33
@ PMC8_MOVE_ACTIVE
Definition: pmc8.h:33
struct PMC8MoveInfo PMC8MoveInfo
PMC8_RAMP_DIRECTION
Definition: pmc8.h:34
@ PMC8_RAMP_UP
Definition: pmc8.h:34
@ PMC8_RAMP_DOWN
Definition: pmc8.h:34
PMC8_DIRECTION
Definition: pmc8driver.h:60
One number descriptor.
One switch descriptor.
One text descriptor.
PMC8_RAMP_DIRECTION rampDir
Definition: pmc8.h:43
int targetRate
Definition: pmc8.h:40
int rampLastStep
Definition: pmc8.h:42
int timer
Definition: pmc8.h:44
PMC8_MOVE_STATE state
Definition: pmc8.h:38
uint8_t moveDir
Definition: pmc8.h:39
int rampIteration
Definition: pmc8.h:41
Number vector property descriptor.
Definition: indiapi.h:319
Switch vector property descriptor.
Definition: indiapi.h:367
Text vector property descriptor.
Definition: indiapi.h:246