Telescope Control Library

Dependents:   PushToGo-F429

Committer:
caoyu@caoyuan9642-desktop.MIT.EDU
Date:
Fri Sep 14 01:30:55 2018 -0400
Revision:
10:e356188d208e
Parent:
0:6cb2eaf8b133
Resolved circular dependency. Slewing rate now only applies to indefinite slews. GOTO use goto_slew_speed in the configuration.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caoyuan9642 0:6cb2eaf8b133 1 /*
caoyuan9642 0:6cb2eaf8b133 2 * TelescopeConfiguration.h
caoyuan9642 0:6cb2eaf8b133 3 *
caoyuan9642 0:6cb2eaf8b133 4 * Created on: 2018Äê3ÔÂ1ÈÕ
caoyuan9642 0:6cb2eaf8b133 5 * Author: caoyuan9642
caoyuan9642 0:6cb2eaf8b133 6 */
caoyuan9642 0:6cb2eaf8b133 7
caoyuan9642 0:6cb2eaf8b133 8 #ifndef PUSHTOGO_TELESCOPECONFIGURATION_H_
caoyuan9642 0:6cb2eaf8b133 9 #define PUSHTOGO_TELESCOPECONFIGURATION_H_
caoyuan9642 0:6cb2eaf8b133 10
caoyuan9642 0:6cb2eaf8b133 11 #include <stdio.h>
caoyuan9642 0:6cb2eaf8b133 12 #include <string.h>
caoyuan9642 0:6cb2eaf8b133 13 #include "CelestialMath.h"
caoyuan9642 0:6cb2eaf8b133 14 #include "EqMountServer.h"
caoyuan9642 0:6cb2eaf8b133 15
caoyuan9642 0:6cb2eaf8b133 16 typedef enum
caoyuan9642 0:6cb2eaf8b133 17 {
caoyuan9642 0:6cb2eaf8b133 18 DATATYPE_INT, DATATYPE_DOUBLE, DATATYPE_STRING, DATATYPE_BOOL
caoyuan9642 0:6cb2eaf8b133 19 } DataType;
caoyuan9642 0:6cb2eaf8b133 20
caoyuan9642 0:6cb2eaf8b133 21 typedef union
caoyuan9642 0:6cb2eaf8b133 22 {
caoyuan9642 0:6cb2eaf8b133 23 int idata;
caoyuan9642 0:6cb2eaf8b133 24 double ddata;bool bdata;
caoyuan9642 0:6cb2eaf8b133 25 char strdata[32];
caoyuan9642 0:6cb2eaf8b133 26 } DataValue;
caoyuan9642 0:6cb2eaf8b133 27
caoyuan9642 0:6cb2eaf8b133 28 struct ConfigItem
caoyuan9642 0:6cb2eaf8b133 29 {
caoyuan9642 0:6cb2eaf8b133 30 char *config;
caoyuan9642 0:6cb2eaf8b133 31 char *name;
caoyuan9642 0:6cb2eaf8b133 32 const char *help;
caoyuan9642 0:6cb2eaf8b133 33 DataType type;
caoyuan9642 0:6cb2eaf8b133 34 DataValue value;
caoyuan9642 0:6cb2eaf8b133 35 DataValue min;
caoyuan9642 0:6cb2eaf8b133 36 DataValue max;bool extra;
caoyuan9642 0:6cb2eaf8b133 37 };
caoyuan9642 0:6cb2eaf8b133 38
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 39 class EqMountServer;
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 40
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 41 /**
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 42 * Global telescope configuration storage class
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 43 */
caoyuan9642 0:6cb2eaf8b133 44 class TelescopeConfiguration
caoyuan9642 0:6cb2eaf8b133 45 {
caoyuan9642 0:6cb2eaf8b133 46 public:
caoyuan9642 0:6cb2eaf8b133 47 static void readFromFile(FILE *fp);
caoyuan9642 0:6cb2eaf8b133 48 static void writeToFile(FILE *fp);
caoyuan9642 0:6cb2eaf8b133 49
caoyuan9642 0:6cb2eaf8b133 50 static int getInt(const char *name)
caoyuan9642 0:6cb2eaf8b133 51 {
caoyuan9642 0:6cb2eaf8b133 52 return getIntFromConfig(getInstance().getConfigItemCheck(name));
caoyuan9642 0:6cb2eaf8b133 53 }
caoyuan9642 0:6cb2eaf8b133 54 static double getDouble(const char *name)
caoyuan9642 0:6cb2eaf8b133 55 {
caoyuan9642 0:6cb2eaf8b133 56 return getDoubleFromConfig(getInstance().getConfigItemCheck(name));
caoyuan9642 0:6cb2eaf8b133 57 }
caoyuan9642 0:6cb2eaf8b133 58 static bool getBool(const char *name)
caoyuan9642 0:6cb2eaf8b133 59 {
caoyuan9642 0:6cb2eaf8b133 60 return getBoolFromConfig(getInstance().getConfigItemCheck(name));
caoyuan9642 0:6cb2eaf8b133 61 }
caoyuan9642 0:6cb2eaf8b133 62 static char *getString(const char *name, char buf[], int len)
caoyuan9642 0:6cb2eaf8b133 63 {
caoyuan9642 0:6cb2eaf8b133 64 return getStringFromConfig(getInstance().getConfigItemCheck(name), buf,
caoyuan9642 0:6cb2eaf8b133 65 len);
caoyuan9642 0:6cb2eaf8b133 66 }
caoyuan9642 0:6cb2eaf8b133 67
caoyuan9642 0:6cb2eaf8b133 68 private:
caoyuan9642 0:6cb2eaf8b133 69 TelescopeConfiguration();
caoyuan9642 0:6cb2eaf8b133 70 ~TelescopeConfiguration();
caoyuan9642 0:6cb2eaf8b133 71
caoyuan9642 0:6cb2eaf8b133 72 static TelescopeConfiguration instance;
caoyuan9642 0:6cb2eaf8b133 73
caoyuan9642 0:6cb2eaf8b133 74 struct ConfigNode
caoyuan9642 0:6cb2eaf8b133 75 {
caoyuan9642 0:6cb2eaf8b133 76 ConfigItem *config;
caoyuan9642 0:6cb2eaf8b133 77 const ConfigItem *default_config;
caoyuan9642 0:6cb2eaf8b133 78 ConfigNode *next;
caoyuan9642 0:6cb2eaf8b133 79 }*head;
caoyuan9642 0:6cb2eaf8b133 80
caoyuan9642 0:6cb2eaf8b133 81 static TelescopeConfiguration &getInstance()
caoyuan9642 0:6cb2eaf8b133 82 {
caoyuan9642 0:6cb2eaf8b133 83 return instance;
caoyuan9642 0:6cb2eaf8b133 84 }
caoyuan9642 0:6cb2eaf8b133 85
caoyuan9642 0:6cb2eaf8b133 86 ConfigItem *getConfigItem(const char *name);
caoyuan9642 0:6cb2eaf8b133 87 ConfigItem *getConfigItemCheck(const char *name);
caoyuan9642 0:6cb2eaf8b133 88
caoyuan9642 0:6cb2eaf8b133 89 void setConfig(const char *name, char *value);
caoyuan9642 0:6cb2eaf8b133 90
caoyuan9642 0:6cb2eaf8b133 91 static int getIntFromConfig(ConfigItem *);
caoyuan9642 0:6cb2eaf8b133 92 static double getDoubleFromConfig(ConfigItem *);
caoyuan9642 0:6cb2eaf8b133 93 static bool getBoolFromConfig(ConfigItem *);
caoyuan9642 0:6cb2eaf8b133 94 static char *getStringFromConfig(ConfigItem *, char buf[], int len);
caoyuan9642 0:6cb2eaf8b133 95
caoyuan9642 0:6cb2eaf8b133 96 static bool setIntToConfig(ConfigItem *, int value);
caoyuan9642 0:6cb2eaf8b133 97 static bool setDoubleToConfig(ConfigItem *, double value);
caoyuan9642 0:6cb2eaf8b133 98 static bool setBoolToConfig(ConfigItem *, bool value);
caoyuan9642 0:6cb2eaf8b133 99 static bool setStringToConfig(ConfigItem *, char *value);
caoyuan9642 0:6cb2eaf8b133 100
caoyuan9642 0:6cb2eaf8b133 101 static int eqmount_config(EqMountServer *server, const char *cmd, int argn,
caoyuan9642 0:6cb2eaf8b133 102 char *argv[]);
caoyuan9642 0:6cb2eaf8b133 103 };
caoyuan9642 0:6cb2eaf8b133 104
caoyuan9642 0:6cb2eaf8b133 105 #endif /* PUSHTOGO_TELESCOPECONFIGURATION_H_ */
caoyuan9642 0:6cb2eaf8b133 106