Telescope Control Library

Dependents:   PushToGo-F429

Committer:
caoyuan9642
Date:
Sun Aug 19 05:21:20 2018 +0000
Revision:
0:6cb2eaf8b133
Child:
10:e356188d208e
v0.1

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