Telescope Control Library

Dependents:   PushToGo-F429

Committer:
caoyu@caoyuan9642-desktop.MIT.EDU
Date:
Mon Sep 24 19:36:48 2018 -0400
Revision:
19:fd854309cb4c
Parent:
10:e356188d208e
Fix bug in nudging with small speeds mentioned in the last commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caoyuan9642 0:6cb2eaf8b133 1 /*
caoyuan9642 0:6cb2eaf8b133 2 * EqMountServer.h
caoyuan9642 0:6cb2eaf8b133 3 *
caoyuan9642 4:b8ad57bbf9e1 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 EQMOUNTSERVER_H_
caoyuan9642 0:6cb2eaf8b133 9 #define EQMOUNTSERVER_H_
caoyuan9642 0:6cb2eaf8b133 10
caoyuan9642 0:6cb2eaf8b133 11 #include "MountServer.h"
caoyuan9642 0:6cb2eaf8b133 12 #include "EquatorialMount.h"
caoyuan9642 0:6cb2eaf8b133 13
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 14 class EquatorialMount;
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 15 class EqMountServer;
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 16
caoyuan9642 4:b8ad57bbf9e1 17 /** Command structure for the mount server
caoyuan9642 4:b8ad57bbf9e1 18 */
caoyuan9642 0:6cb2eaf8b133 19 struct ServerCommand
caoyuan9642 0:6cb2eaf8b133 20 {
caoyuan9642 0:6cb2eaf8b133 21 const char *cmd; /// Name of the command
caoyuan9642 0:6cb2eaf8b133 22 const char *desc; /// Description of the command
caoyuan9642 0:6cb2eaf8b133 23 int (*fptr)(EqMountServer *, const char *, int, char **); /// Function pointer to the command
caoyuan9642 0:6cb2eaf8b133 24 ServerCommand(const char *n = "", const char *d = "",
caoyuan9642 0:6cb2eaf8b133 25 int (*fp)(EqMountServer *, const char *, int, char **) = NULL) :
caoyuan9642 0:6cb2eaf8b133 26 cmd(n), desc(d), fptr(fp)
caoyuan9642 0:6cb2eaf8b133 27 {
caoyuan9642 0:6cb2eaf8b133 28 }
caoyuan9642 0:6cb2eaf8b133 29 };
caoyuan9642 0:6cb2eaf8b133 30
caoyuan9642 0:6cb2eaf8b133 31 #define MAX_COMMAND 128
caoyuan9642 0:6cb2eaf8b133 32
caoyuan9642 0:6cb2eaf8b133 33 #define ERR_WRONG_NUM_PARAM 1
caoyuan9642 0:6cb2eaf8b133 34 #define ERR_PARAM_OUT_OF_RANGE 2
caoyuan9642 0:6cb2eaf8b133 35
caoyu@caoyuan9642-desktop.MIT.EDU 10:e356188d208e 36
caoyuan9642 4:b8ad57bbf9e1 37 /** EqMount server class. Receives commands from a stream and execute on the binded EqMount.
caoyuan9642 4:b8ad57bbf9e1 38 */
caoyuan9642 0:6cb2eaf8b133 39 class EqMountServer: public MountServer
caoyuan9642 0:6cb2eaf8b133 40 {
caoyuan9642 0:6cb2eaf8b133 41 protected:
caoyuan9642 0:6cb2eaf8b133 42
caoyuan9642 4:b8ad57bbf9e1 43 EquatorialMount *eq_mount; /// EqMount to be binded
caoyuan9642 4:b8ad57bbf9e1 44 FileHandle &stream; /// Input stream
caoyuan9642 0:6cb2eaf8b133 45 Thread thread;bool echo; /// Echo
caoyuan9642 0:6cb2eaf8b133 46
caoyuan9642 4:b8ad57bbf9e1 47 void task_thread(); /// Main task entrance
caoyuan9642 4:b8ad57bbf9e1 48 void command_execute(ServerCommand &, int argn, char *argv[], char *buffer); /// To execute a server command
caoyuan9642 0:6cb2eaf8b133 49
caoyuan9642 0:6cb2eaf8b133 50 public:
caoyuan9642 4:b8ad57bbf9e1 51 /** Creates a server with input stream and optionally echoing to the stream.
caoyuan9642 4:b8ad57bbf9e1 52 */
caoyuan9642 0:6cb2eaf8b133 53 EqMountServer(FileHandle &stream, bool echo = false);
caoyuan9642 0:6cb2eaf8b133 54 virtual ~EqMountServer();
caoyuan9642 0:6cb2eaf8b133 55
caoyuan9642 4:b8ad57bbf9e1 56 /** Bind to a EqMount. Commands will be ignored if no mount is binded.
caoyuan9642 4:b8ad57bbf9e1 57 */
caoyuan9642 0:6cb2eaf8b133 58 void bind(EquatorialMount &eq)
caoyuan9642 0:6cb2eaf8b133 59 {
caoyuan9642 0:6cb2eaf8b133 60 eq_mount = &eq;
caoyuan9642 0:6cb2eaf8b133 61 }
caoyuan9642 0:6cb2eaf8b133 62
caoyuan9642 4:b8ad57bbf9e1 63 /** @return binded EqMount
caoyuan9642 4:b8ad57bbf9e1 64 */
caoyuan9642 0:6cb2eaf8b133 65 EquatorialMount* getEqMount() const
caoyuan9642 0:6cb2eaf8b133 66 {
caoyuan9642 0:6cb2eaf8b133 67 return eq_mount;
caoyuan9642 0:6cb2eaf8b133 68 }
caoyuan9642 0:6cb2eaf8b133 69
caoyuan9642 4:b8ad57bbf9e1 70 /** @return associated stream
caoyuan9642 4:b8ad57bbf9e1 71 */
caoyuan9642 0:6cb2eaf8b133 72 FileHandle& getStream() const
caoyuan9642 0:6cb2eaf8b133 73 {
caoyuan9642 0:6cb2eaf8b133 74 return stream;
caoyuan9642 0:6cb2eaf8b133 75 }
caoyuan9642 0:6cb2eaf8b133 76
caoyuan9642 4:b8ad57bbf9e1 77 /** Add a command to the available commands. Must have unique names.
caoyuan9642 4:b8ad57bbf9e1 78 */
caoyuan9642 0:6cb2eaf8b133 79 static void addCommand(const ServerCommand &cmd);
caoyuan9642 0:6cb2eaf8b133 80 };
caoyuan9642 0:6cb2eaf8b133 81
caoyuan9642 0:6cb2eaf8b133 82 /**
caoyuan9642 0:6cb2eaf8b133 83 * Print to stream
caoyuan9642 0:6cb2eaf8b133 84 */
caoyuan9642 0:6cb2eaf8b133 85 void stprintf(FileHandle &f, const char *fmt, ...);
caoyuan9642 0:6cb2eaf8b133 86
caoyuan9642 0:6cb2eaf8b133 87 #endif /* EQMOUNTSERVER_H_ */
caoyuan9642 0:6cb2eaf8b133 88