Instrument Neutral Distributed Interface INDI  2.0.2
indiguiderinterface.cpp
Go to the documentation of this file.
1 /*
2  Guider Interface
3  Copyright (C) 2011 Jasem Mutlaq (mutlaqja@ikarustech.com)
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License as published by the Free Software Foundation; either
8  version 2.1 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public
16  License along with this library; if not, write to the Free Software
17  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 
19 */
20 
21 #include "indiguiderinterface.h"
22 
23 #include <cstring>
24 
25 namespace INDI
26 {
27 
29 {
30 }
31 
33 {
34 }
35 
36 void GuiderInterface::initGuiderProperties(const char *deviceName, const char *groupName)
37 {
38  IUFillNumber(&GuideNSN[DIRECTION_NORTH], "TIMED_GUIDE_N", "North (ms)", "%.f", 0, 60000, 100, 0);
39  IUFillNumber(&GuideNSN[DIRECTION_SOUTH], "TIMED_GUIDE_S", "South (ms)", "%.f", 0, 60000, 100, 0);
40  IUFillNumberVector(&GuideNSNP, GuideNSN, 2, deviceName, "TELESCOPE_TIMED_GUIDE_NS", "Guide N/S", groupName, IP_RW,
41  60, IPS_IDLE);
42 
43  IUFillNumber(&GuideWEN[DIRECTION_WEST], "TIMED_GUIDE_W", "West (ms)", "%.f", 0, 60000, 100, 0);
44  IUFillNumber(&GuideWEN[DIRECTION_EAST], "TIMED_GUIDE_E", "East (ms)", "%.f", 0, 60000, 100, 0);
45  IUFillNumberVector(&GuideWENP, GuideWEN, 2, deviceName, "TELESCOPE_TIMED_GUIDE_WE", "Guide E/W", groupName, IP_RW,
46  60, IPS_IDLE);
47 }
48 
49 void GuiderInterface::processGuiderProperties(const char *name, double values[], char *names[], int n)
50 {
51  if (strcmp(name, GuideNSNP.name) == 0)
52  {
53  // We are being asked to send a guide pulse north/south on the st4 port
54  IUUpdateNumber(&GuideNSNP, values, names, n);
55 
56  if (GuideNSN[DIRECTION_NORTH].value != 0)
57  {
58  GuideNSN[DIRECTION_SOUTH].value = 0;
60  }
61  else if (GuideNSN[DIRECTION_SOUTH].value != 0)
63 
64  IDSetNumber(&GuideNSNP, nullptr);
65  return;
66  }
67 
68  if (strcmp(name, GuideWENP.name) == 0)
69  {
70  // We are being asked to send a guide pulse north/south on the st4 port
71  IUUpdateNumber(&GuideWENP, values, names, n);
72 
73  if (GuideWEN[DIRECTION_WEST].value != 0)
74  {
75  GuideWEN[DIRECTION_EAST].value = 0;
77  }
78  else if (GuideWEN[DIRECTION_EAST].value != 0)
80 
81  IDSetNumber(&GuideWENP, nullptr);
82  return;
83  }
84 }
85 
87 {
88  switch (axis)
89  {
90  case AXIS_DE:
92  IDSetNumber(&GuideNSNP, nullptr);
93  break;
94 
95  case AXIS_RA:
97  IDSetNumber(&GuideWENP, nullptr);
98  break;
99  }
100 }
101 }
virtual void GuideComplete(INDI_EQ_AXIS axis)
Call GuideComplete once the guiding pulse is complete.
virtual IPState GuideEast(uint32_t ms)=0
Guide east for ms milliseconds. East is defined as RA+.
virtual IPState GuideWest(uint32_t ms)=0
Guide west for ms milliseconds. West is defined as RA-.
INumberVectorProperty GuideNSNP
void initGuiderProperties(const char *deviceName, const char *groupName)
Initilize guider properties. It is recommended to call this function within initProperties() of your ...
INumberVectorProperty GuideWENP
virtual IPState GuideNorth(uint32_t ms)=0
Guide north for ms milliseconds. North is defined as DEC+.
void processGuiderProperties(const char *name, double values[], char *names[], int n)
Call this function whenever client updates GuideNSNP or GuideWSP properties in the primary device....
virtual IPState GuideSouth(uint32_t ms)=0
Guide south for ms milliseconds. South is defined as DEC-.
@ IP_RW
Definition: indiapi.h:186
@ IPS_IDLE
Definition: indiapi.h:161
INDI_EQ_AXIS
Definition: indibasetypes.h:34
@ AXIS_DE
Definition: indibasetypes.h:36
@ AXIS_RA
Definition: indibasetypes.h:35
@ DIRECTION_EAST
Definition: indibasetypes.h:57
@ DIRECTION_WEST
Definition: indibasetypes.h:56
@ DIRECTION_SOUTH
Definition: indibasetypes.h:50
@ DIRECTION_NORTH
Definition: indibasetypes.h:49
void IUFillNumberVector(INumberVectorProperty *nvp, INumber *np, int nnp, const char *dev, const char *name, const char *label, const char *group, IPerm p, double timeout, IPState s)
Assign attributes for a number vector property. The vector's auxiliary elements will be set to NULL.
Definition: indidevapi.c:272
void IUFillNumber(INumber *np, const char *name, const char *label, const char *format, double min, double max, double step, double value)
Assign attributes for a number property. The number's auxiliary elements will be set to NULL.
Definition: indidevapi.c:180
void IDSetNumber(const INumberVectorProperty *nvp, const char *fmt,...)
Definition: indidriver.c:1211
int IUUpdateNumber(INumberVectorProperty *nvp, double values[], char *names[], int n)
Update all numbers in a number vector property.
Definition: indidriver.c:1362
Namespace to encapsulate INDI client, drivers, and mediator classes.
char name[MAXINDINAME]
Definition: indiapi.h:323