summaryrefslogtreecommitdiffstats
path: root/indi-lxd650/lx200driver.h
diff options
context:
space:
mode:
Diffstat (limited to 'indi-lxd650/lx200driver.h')
-rw-r--r--indi-lxd650/lx200driver.h317
1 files changed, 317 insertions, 0 deletions
diff --git a/indi-lxd650/lx200driver.h b/indi-lxd650/lx200driver.h
new file mode 100644
index 0000000..1f0872a
--- /dev/null
+++ b/indi-lxd650/lx200driver.h
@@ -0,0 +1,317 @@
+/*
+ LX200 Driver
+ Copyright (C) 2003 Jasem Mutlaq (mutlaqja@ikarustech.com)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#pragma once
+
+/* Slew speeds */
+enum TSlew
+{
+ LX200_SLEW_MAX,
+ LX200_SLEW_FIND,
+ LX200_SLEW_CENTER,
+ LX200_SLEW_GUIDE
+};
+/* Alignment modes */
+enum TAlign
+{
+ LX200_ALIGN_POLAR,
+ LX200_ALIGN_ALTAZ,
+ LX200_ALIGN_LAND
+};
+/* Directions */
+enum TDirection
+{
+ LX200_NORTH,
+ LX200_WEST,
+ LX200_EAST,
+ LX200_SOUTH,
+ LX200_ALL
+};
+/* Formats of Equatorial Right Ascension and Declination */
+enum TEquatorialFormat
+{
+ LX200_EQ_SHORT_FORMAT,
+ LX200_EQ_LONG_FORMAT,
+ LX200_EQ_LONGER_FORMAT
+};
+/* Formats of Geographic Latitude and Longitude */
+enum TGeographicFormat
+{
+ LX200_GEO_SHORT_FORMAT,
+ LX200_GEO_LONG_FORMAT,
+ LX200_GEO_LONGER_FORMAT
+};
+/* Time Format */
+enum TTimeFormat
+{
+ LX200_24,
+ LX200_AM,
+ LX200_PM
+};
+/* Focus operation */
+enum TFocusMotion
+{
+ LX200_FOCUSIN,
+ LX200_FOCUSOUT
+};
+enum TFocusSpeed
+{
+ LX200_HALTFOCUS = 0,
+ LX200_FOCUSSLOW,
+ LX200_FOCUSFAST
+};
+/* Library catalogs */
+enum TCatalog
+{
+ LX200_STAR_C,
+ LX200_DEEPSKY_C
+};
+/* Frequency mode */
+enum StarCatalog
+{
+ LX200_STAR,
+ LX200_SAO,
+ LX200_GCVS
+};
+/* Deep Sky Catalogs */
+enum DeepSkyCatalog
+{
+ LX200_NGC,
+ LX200_IC,
+ LX200_UGC,
+ LX200_CALDWELL,
+ LX200_ARP,
+ LX200_ABELL,
+ LX200_MESSIER_C
+};
+/* Mount tracking frequency, in Hz */
+enum TFreq
+{
+ LX200_TRACK_SIDEREAL,
+ LX200_TRACK_SOLAR,
+ LX200_TRACK_LUNAR,
+ LX200_TRACK_MANUAL
+};
+
+#define MaxReticleDutyCycle 15
+#define MaxFocuserSpeed 4
+
+/* GET formatted sexagisemal value from device, return as double */
+#define getLX200RA(fd, x) getCommandSexa(fd, x, ":GR#")
+#define getLX200DEC(fd, x) getCommandSexa(fd, x, ":GD#")
+#define getObjectRA(fd, x) getCommandSexa(fd, x, ":Gr#")
+#define getObjectDEC(fd, x) getCommandSexa(fd, x, ":Gd#")
+#define getLocalTime12(fd, x) getCommandSexa(fd, x, ":Ga#")
+#define getLocalTime24(fd, x) getCommandSexa(fd, x, ":GL#")
+#define getSDTime(fd, x) getCommandSexa(fd, x, ":GS#")
+#define getLX200Alt(fd, x) getCommandSexa(fd, x, ":GA#")
+#define getLX200Az(fd, x) getCommandSexa(fd, x, ":GZ#")
+
+/* GET String from device and store in supplied buffer x */
+#define getObjectInfo(fd, x) getCommandString(fd, x, ":LI#")
+#define getVersionDate(fd, x) getCommandString(fd, x, ":GVD#")
+#define getVersionTime(fd, x) getCommandString(fd, x, ":GVT#")
+#define getFullVersion(fd, x) getCommandString(fd, x, ":GVF#")
+#define getVersionNumber(fd, x) getCommandString(fd, x, ":GVN#")
+#define getProductName(fd, x) getCommandString(fd, x, ":GVP#")
+#define turnGPS_StreamOn(fd) getCommandString(fd, x, ":gps#")
+
+/* GET Int from device and store in supplied pointer to integer x */
+#define getUTCOffset(fd, x) getCommandInt(fd, x, ":GG#")
+#define getMaxElevationLimit(fd, x) getCommandInt(fd, x, ":Go#")
+#define getMinElevationLimit(fd, x) getCommandInt(fd, x, ":Gh#")
+
+/* Generic set, x is an integer */
+#define setReticleDutyFlashCycle(fd, x) setCommandInt(fd, x, ":BD")
+#define setReticleFlashRate(fd, x) setCommandInt(fd, x, ":B")
+#define setFocuserSpeed(fd, x) setCommandInt(fd, x, ":F")
+#define setSlewSpeed(fd, x) setCommandInt(fd, x, ":Sw")
+
+/* GPS Specefic */
+#define turnGPSOn(fd) write(fd, ":g+#", 4)
+#define turnGPSOff(fd) write(fd, ":g-#", 4)
+#define alignGPSScope(fd) write(fd, ":Aa#", 4)
+#define gpsSleep(fd) write(fd, ":hN#", 4)
+#define gpsWakeUp(fd) write(fd, ":hW#", 4);
+#define gpsRestart(fd) write(fd, ":I#", 3);
+#define updateGPS_System(fd) setStandardProcedure(fd, ":gT#")
+#define enableDecAltPec(fd) write(fd, ":QA+#", 4)
+#define disableDecAltPec(fd) write(fd, ":QA-#", 4)
+#define enableRaAzPec(fd) write(fd, ":QZ+#", 4)
+#define disableRaAzPec(fd) write(fd, ":QZ-#", 4)
+#define activateAltDecAntiBackSlash(fd) write(fd, ":$BAdd#", 7)
+#define activateAzRaAntiBackSlash(fd) write(fd, ":$BZdd#", 7)
+#define SelenographicSync(fd) write(fd, ":CL#", 4);
+
+#define slewToAltAz(fd) setStandardProcedure(fd, ":MA#")
+#define toggleTimeFormat(fd) write(fd, ":H#", 3)
+#define increaseReticleBrightness(fd) write(fd, ":B+#", 4)
+#define decreaseReticleBrightness(fd) write(fd, ":B-#", 4)
+#define turnFanOn(fd) write(fd, ":f+#", 4)
+#define turnFanOff(fd) write(fd, ":f-#", 4)
+#define seekHomeAndSave(fd) write(fd, ":hS#", 4)
+#define seekHomeAndSet(fd) write(fd, ":hF#", 4)
+#define turnFieldDeRotatorOn(fd) write(fd, ":r+#", 4)
+#define turnFieldDeRotatorOff(fd) write(fd, ":r-#", 4)
+#define slewToPark(fd) write(fd, ":hP#", 4)
+#define initTelescope(fd) write(fd, ":I#", 3)
+
+/**************************************************************************
+ Basic I/O - OBSELETE
+**************************************************************************/
+/*int openPort(const char *portID);
+int portRead(char *buf, int nbytes, int timeout);
+int portWrite(const char * buf);
+int LX200readOut(int timeout);
+int Connect(const char* device);
+void Disconnect();*/
+
+/**************************************************************************
+ Diagnostics
+ **************************************************************************/
+char ACK(int fd);
+/*int testTelescope();
+int testAP();*/
+int check_lx200_connection(int fd);
+
+/**************************************************************************
+ Get Commands: store data in the supplied buffer. Return 0 on success or -1 on failure
+ **************************************************************************/
+
+/* Get Double from Sexagisemal */
+int getCommandSexa(int fd, double *value, const char *cmd);
+/* Get String */
+int getCommandString(int fd, char *data, const char *cmd);
+/* Get Int */
+int getCommandInt(int fd, int *value, const char *cmd);
+/* Get tracking frequency */
+int getTrackFreq(int fd, double *value);
+/* Get site Latitude */
+int getSiteLatitude(int fd, int *dd, int *mm, double *ssf);
+/* Get site Longitude */
+int getSiteLongitude(int fd, int *ddd, int *mm, double *ssf);
+/* Get site Latitude */
+int getSiteLatitudeAlt(int fd, int *dd, int *mm, double *ssf, const char *cmd);
+/* Get site Longitude */
+int getSiteLongitudeAlt(int fd, int *ddd, int *mm, double *ssf, const char *cmd);
+/* Get Calender data */
+int getCalendarDate(int fd, char *date);
+/* Get site Name */
+int getSiteName(int fd, char *siteName, int siteNum);
+/* Get Home Search Status */
+int getHomeSearchStatus(int fd, int *status);
+/* Get OTA Temperature */
+int getOTATemp(int fd, double *value);
+/* Get time format: 12 or 24 */
+int getTimeFormat(int fd, int *format);
+/* Get RA, DEC from Sky Commander controller */
+int updateSkyCommanderCoord(int fd, double *ra, double *dec);
+/* Get RA, DEC from Intelliscope/SkyWizard controllers */
+int updateIntelliscopeCoord(int fd, double *ra, double *dec);
+
+/**************************************************************************
+ Set Commands
+ **************************************************************************/
+
+/* Set Int */
+int setCommandInt(int fd, int data, const char *cmd);
+/* Set Sexigesimal */
+int setCommandXYZ(int fd, int x, int y, int z, const char *cmd, bool addSpace = false);
+/* Common routine for Set commands */
+int setStandardProcedure(int fd, const char *writeData);
+/* Set Slew Mode */
+int setSlewMode(int fd, int slewMode);
+/* Set Alignment mode */
+int setAlignmentMode(int fd, unsigned int alignMode);
+/* Set Object RA */
+int setObjectRA(int fd, double ra, bool addSpace = false);
+/* set Object DEC */
+int setObjectDEC(int fd, double dec, bool addSpace = false);
+/* Set Calender date */
+int setCalenderDate(int fd, int dd, int mm, int yy, bool addSpace = false);
+/* Set UTC offset */
+int setUTCOffset(int fd, double hours);
+/* Set Track Freq */
+int setTrackFreq(int fd, double trackF);
+/* Replacement, for the above offering more precision, controlled by LX200_HAS_PRECISE_TRACKING_FREQ will work on OnStep (and AutoStar II) */
+int setPreciseTrackFreq(int fd, double trackF);
+/* Set current site longitude */
+int setSiteLongitude(int fd, double Long, bool addSpace = false);
+/* Set current site latitude */
+int setSiteLatitude(int fd, double Lat, bool addSpace = false);
+/* Set Object Azimuth */
+int setObjAz(int fd, double az);
+/* Set Object Altitude */
+int setObjAlt(int fd, double alt);
+/* Set site name */
+int setSiteName(int fd, char *siteName, int siteNum);
+/* Set maximum slew rate */
+int setMaxSlewRate(int fd, int slewRate);
+/* Set focuser motion */
+int setFocuserMotion(int fd, int motionType);
+/* SET GPS Focuser raneg (1 to 4) */
+int setGPSFocuserSpeed(int fd, int speed);
+/* Set focuser speed mode */
+int setFocuserSpeedMode(int fd, int speedMode);
+/* Set minimum elevation limit */
+int setMinElevationLimit(int fd, int min);
+/* Set maximum elevation limit */
+int setMaxElevationLimit(int fd, int max);
+
+/* Set X:Y:Z */
+int setLocalTime(int fd, int x, int y, int z, bool addSpace = false);
+int setSDTime(int fd, int x, int y, int z, bool addSpace = false);
+
+
+/**************************************************************************
+ Motion Commands
+ **************************************************************************/
+/* Slew to the selected coordinates */
+int Slew(int fd);
+/* Synchronize to the selected coordinates and return the matching object if any */
+int Sync(int fd, char *matchedObject);
+/* Abort slew in all axes */
+int abortSlew(int fd);
+/* Move into one direction, two valid directions can be stacked */
+int MoveTo(int fd, int direction);
+/* Halt movement in a particular direction */
+int HaltMovement(int fd, int direction);
+/* Select the tracking mode */
+int selectTrackingMode(int fd, int trackMode);
+/* Is Slew complete? 0 if complete, 1 if in progress, otherwise return an error */
+int isSlewComplete(int fd);
+/* Send Pulse-Guide command (timed guide move), two valid directions can be stacked */
+int SendPulseCmd(int fd, int direction, int duration_msec, bool wait_after_command=false, int max_wait_ms=1000);
+
+/**************************************************************************
+ Other Commands
+ **************************************************************************/
+/* Determines LX200 RA/DEC format, tries to set to long if found short */
+int checkLX200EquatorialFormat(int fd);
+/* return the controller_format enum value */
+int getLX200EquatorialFormat();
+/* Select a site from the LX200 controller */
+int selectSite(int fd, int siteNum);
+/* Select a catalog object */
+int selectCatalogObject(int fd, int catalog, int NNNN);
+/* Select a sub catalog */
+int selectSubCatalog(int fd, int catalog, int subCatalog);
+/* Set Debug */
+void setLX200Debug(const char *deviceName, unsigned int debug_level);