Instrument Neutral Distributed Interface INDI  2.0.2
pmc8driver.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 <string>
30 
31 #include "inditelescope.h"
32 
33 // if tracking speed is above this (arcsec / sec) then assume mount is slewing
34 // this is just less than 3x sidereal
35 // which is what we would normally see if we are tracking
36 // and start moving east at the min move rate (4x sidereal)
37 #define PMC8_MAX_TRACK_RATE 44
38 
39 // set max settable slew rate as 833x sidereal
40 #define PMC8_MAX_MOVE_RATE (833*15)
41 
42 typedef enum
43 {
50  ST_HOME
52 
53 //#endif
54 
56 
57 //typedef enum { HEMI_SOUTH, HEMI_NORTH } PMC8_HEMISPHERE;
58 
59 typedef enum { PMC8_AXIS_RA = 0, PMC8_AXIS_DEC = 1 } PMC8_AXIS;
61 
62 typedef enum { MOUNT_G11 = 0, MOUNT_EXOS2 = 1, MOUNT_iEXOS100 = 2 } PMC8_MOUNT_TYPES;
63 
65 
66 typedef struct PMC8Info
67 {
70  // PMC8_HEMISPHERE hemisphere;
72 
73 typedef struct FirmwareInfo
74 {
75  std::string Model;
76  std::string MainBoardFirmware;
80 
81 /**************************************************************************
82  Misc.
83 **************************************************************************/
84 
85 void set_pmc8_debug(bool enable);
86 void set_pmc8_simulation(bool enable);
87 void set_pmc8_device(const char *name);
88 void set_pmc8_mountParameters(int index);
89 bool get_pmc8_response(int fd, char* buf, int* nbytes_read, const char* expected);
90 bool send_pmc8_command(int fd, const char *buf, int nbytes, int *nbytes_written);
91 
92 /**************************************************************************
93  Simulation
94 **************************************************************************/
97 void set_pmc8_sim_move_rate(int value);
98 //void set_sim_hemisphere(IEQ_HEMISPHERE value);
99 void set_pmc8_sim_ra(double ra);
100 void set_pmc8_sim_dec(double dec);
101 //void set_sim_guide_rate(double rate);
102 
103 /**************************************************************************
104  Diagnostics
105 **************************************************************************/
106 bool check_pmc8_connection(int fd, PMC8_CONNECTION_TYPE isSerial);
107 bool detect_pmc8(int fd);
110 
111 /**************************************************************************
112  Get Info
113 **************************************************************************/
115 bool get_pmc8_status(int fd, PMC8Info *info);
117 bool get_pmc8_firmware(int fd, FirmwareInfo *info);
119 bool get_pmc8_coords(int fd, double &ra, double &dec);
120 bool get_pmc8_move_rate_axis(int fd, PMC8_AXIS axis, double &rate);
121 bool get_pmc8_track_rate(int fd, double &rate);
122 bool get_pmc8_tracking_data(int fd, double &rate, uint8_t &mode);
123 uint8_t get_pmc8_tracking_mode_from_rate(double rate);
124 
125 /**************************************************************************
126  Motion
127 **************************************************************************/
128 bool set_pmc8_move_rate_axis(int fd, PMC8_DIRECTION dir, int reqrate);
130 bool stop_pmc8_tracking_motion(int fd);
131 bool set_pmc8_ra_tracking(int fd, double rate);
132 bool set_pmc8_custom_ra_track_rate(int fd, double rate);
133 bool set_pmc8_custom_dec_track_rate(int fd, double rate);
134 bool set_pmc8_custom_ra_move_rate(int fd, double rate);
135 bool set_pmc8_custom_dec_move_rate(int fd, double rate);
136 bool set_pmc8_track_mode(int fd, uint8_t mode);
137 bool get_pmc8_is_scope_slewing(int fd, bool &isslew);
138 bool get_pmc8_direction_axis(int fd, PMC8_AXIS axis, int &dir);
139 bool set_pmc8_direction_axis(int fd, PMC8_AXIS axis, int dir, bool fast);
140 bool abort_pmc8(int fd);
141 bool abort_pmc8_goto(int fd);
142 bool slew_pmc8(int fd, double ra, double dec);
143 bool sync_pmc8(int fd, double ra, double dec);
144 bool set_pmc8_radec(int fd, double ra, double dec);
145 void set_pmc8_goto_resume(bool resume);
147 
148 
149 /**************************************************************************
150  Park
151 **************************************************************************/
152 bool park_pmc8(int fd);
153 bool unpark_pmc8(int fd);
154 
155 /**************************************************************************
156  Guide
157 **************************************************************************/
158 bool set_pmc8_guide_rate(int fd, PMC8_AXIS axis, double rate);
159 bool get_pmc8_guide_rate(int fd, PMC8_AXIS axis, double &rate);
160 bool start_pmc8_guide(int fd, PMC8_DIRECTION gdir, int ms, long &timetaken_us, double ratehint);
161 bool stop_pmc8_guide(int fd, PMC8_DIRECTION gdir);
162 
163 /**************************************************************************
164  Time & Location
165 **************************************************************************/
166 void set_pmc8_location(double latitude, double longitude);
168 
169 
170 
double ra
double dec
int fd
Definition: intelliscope.c:43
bool get_pmc8_guide_rate(int fd, PMC8_AXIS axis, double &rate)
PMC8_CONNECTION_TYPE
Definition: pmc8driver.h:64
@ PMC8_SERIAL_AUTO
Definition: pmc8driver.h:64
@ PMC8_ETHERNET
Definition: pmc8driver.h:64
@ PMC8_SERIAL_STANDARD
Definition: pmc8driver.h:64
@ PMC8_SERIAL_INVERTED
Definition: pmc8driver.h:64
void set_pmc8_location(double latitude, double longitude)
Definition: pmc8driver.cpp:243
bool set_pmc8_custom_ra_track_rate(int fd, double rate)
uint8_t get_pmc8_tracking_mode_from_rate(double rate)
Definition: pmc8driver.cpp:842
bool start_pmc8_guide(int fd, PMC8_DIRECTION gdir, int ms, long &timetaken_us, double ratehint)
void set_pmc8_sim_system_status(PMC8_SYSTEM_STATUS value)
Definition: pmc8driver.cpp:253
bool set_pmc8_custom_dec_track_rate(int fd, double rate)
void set_pmc8_device(const char *name)
Definition: pmc8driver.cpp:238
bool detect_pmc8(int fd)
Definition: pmc8driver.cpp:355
bool park_pmc8(int fd)
bool stop_pmc8_guide(int fd, PMC8_DIRECTION gdir)
bool get_pmc8_response(int fd, char *buf, int *nbytes_read, const char *expected)
void set_pmc8_debug(bool enable)
Definition: pmc8driver.cpp:226
bool sync_pmc8(int fd, double ra, double dec)
bool abort_pmc8_goto(int fd)
bool get_pmc8_status(int fd, PMC8Info *info)
bool slew_pmc8(int fd, double ra, double dec)
bool get_pmc8_is_scope_slewing(int fd, bool &isslew)
Definition: pmc8driver.cpp:712
bool send_pmc8_command(int fd, const char *buf, int nbytes, int *nbytes_written)
PMC8_MOUNT_TYPES
Definition: pmc8driver.h:62
@ MOUNT_G11
Definition: pmc8driver.h:62
@ MOUNT_iEXOS100
Definition: pmc8driver.h:62
@ MOUNT_EXOS2
Definition: pmc8driver.h:62
bool check_pmc8_connection(int fd, PMC8_CONNECTION_TYPE isSerial)
Definition: pmc8driver.cpp:297
PMC8_TRACK_RATE
Definition: pmc8driver.h:55
@ PMC8_TRACK_KING
Definition: pmc8driver.h:55
@ PMC8_TRACK_CUSTOM
Definition: pmc8driver.h:55
@ PMC8_TRACK_SIDEREAL
Definition: pmc8driver.h:55
@ PMC8_TRACK_LUNAR
Definition: pmc8driver.h:55
@ PMC8_TRACK_SOLAR
Definition: pmc8driver.h:55
@ PMC8_TRACK_UNDEFINED
Definition: pmc8driver.h:55
bool set_pmc8_track_mode(int fd, uint8_t mode)
Definition: pmc8driver.cpp:996
bool set_pmc8_radec(int fd, double ra, double dec)
void set_pmc8_mountParameters(int index)
Definition: pmc8driver.cpp:204
bool set_pmc8_guide_rate(int fd, PMC8_AXIS axis, double rate)
INDI::Telescope::TelescopePierSide destSideOfPier(double ra, double dec)
void set_pmc8_simulation(bool enable)
Definition: pmc8driver.cpp:231
void set_pmc8_goto_resume(bool resume)
bool get_pmc8_firmware(int fd, FirmwareInfo *info)
Definition: pmc8driver.cpp:538
struct FirmwareInfo FirmwareInfo
bool get_pmc8_coords(int fd, double &ra, double &dec)
bool abort_pmc8(int fd)
bool set_pmc8_custom_ra_move_rate(int fd, double rate)
bool get_pmc8_reconnect_flag()
bool get_pmc8_tracking_data(int fd, double &rate, uint8_t &mode)
Definition: pmc8driver.cpp:834
bool set_pmc8_custom_dec_move_rate(int fd, double rate)
bool set_pmc8_direction_axis(int fd, PMC8_AXIS axis, int dir, bool fast)
Definition: pmc8driver.cpp:665
bool unpark_pmc8(int fd)
int get_pmc8_east_dir()
void set_pmc8_sim_move_rate(int value)
Definition: pmc8driver.cpp:282
bool stop_pmc8_tracking_motion(int fd)
Definition: pmc8driver.cpp:771
void set_pmc8_sim_track_rate(PMC8_TRACK_RATE value)
Definition: pmc8driver.cpp:277
bool get_pmc8_direction_axis(int fd, PMC8_AXIS axis, int &dir)
Definition: pmc8driver.cpp:609
void set_pmc8_sim_ra(double ra)
Definition: pmc8driver.cpp:287
PMC8_SYSTEM_STATUS
Definition: pmc8driver.h:43
@ ST_STOPPED
Definition: pmc8driver.h:44
@ ST_MERIDIAN_FLIPPING
Definition: pmc8driver.h:48
@ ST_PARKED
Definition: pmc8driver.h:49
@ ST_SLEWING
Definition: pmc8driver.h:46
@ ST_TRACKING
Definition: pmc8driver.h:45
@ ST_GUIDING
Definition: pmc8driver.h:47
@ ST_HOME
Definition: pmc8driver.h:50
struct PMC8Info PMC8Info
PMC8_AXIS
Definition: pmc8driver.h:59
@ PMC8_AXIS_DEC
Definition: pmc8driver.h:59
@ PMC8_AXIS_RA
Definition: pmc8driver.h:59
void set_pmc8_reconnect_flag()
bool set_pmc8_ra_tracking(int fd, double rate)
PMC8_DIRECTION
Definition: pmc8driver.h:60
@ PMC8_N
Definition: pmc8driver.h:60
@ PMC8_W
Definition: pmc8driver.h:60
@ PMC8_S
Definition: pmc8driver.h:60
@ PMC8_E
Definition: pmc8driver.h:60
void set_pmc8_sim_dec(double dec)
Definition: pmc8driver.cpp:292
bool stop_pmc8_motion(int fd, PMC8_DIRECTION dir)
bool set_pmc8_move_rate_axis(int fd, PMC8_DIRECTION dir, int reqrate)
Definition: pmc8driver.cpp:745
bool get_pmc8_track_rate(int fd, double &rate)
Definition: pmc8driver.cpp:787
bool get_pmc8_move_rate_axis(int fd, PMC8_AXIS axis, double &rate)
Definition: pmc8driver.cpp:553
std::string Model
PMC8_MOUNT_TYPES MountType
Definition: pmc8driver.h:77
std::string MainBoardFirmware
bool IsRev2Compliant
Definition: pmc8driver.h:78
PMC8_SYSTEM_STATUS rememberSystemStatus
Definition: pmc8driver.h:69
PMC8_SYSTEM_STATUS systemStatus
Definition: pmc8driver.h:68