Instrument Neutral Distributed Interface INDI  0.9.9
indiguiderinterface.cpp
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 #include <indiapi.h>
23 
24 #include <string.h>
25 
26 INDI::GuiderInterface::GuiderInterface()
27 {
28 
29 }
30 
31 INDI::GuiderInterface::~GuiderInterface()
32 {
33 
34 }
35 
36 void INDI::GuiderInterface::initGuiderProperties(const char *deviceName, const char* groupName)
37 {
38 
39  IUFillNumber(&GuideNSN[0],"TIMED_GUIDE_N","North (msec)","%g",0,60000,10,0);
40  IUFillNumber(&GuideNSN[1],"TIMED_GUIDE_S","South (msec)","%g",0,60000,10,0);
41  IUFillNumberVector(&GuideNSNP,GuideNSN,2,deviceName,"TELESCOPE_TIMED_GUIDE_NS","Guide North/South",groupName,IP_RW,60,IPS_IDLE);
42 
43  IUFillNumber(&GuideWEN[0],"TIMED_GUIDE_E","East (msec)","%g",0,60000,10,0);
44  IUFillNumber(&GuideWEN[1],"TIMED_GUIDE_W","West (msec)","%g",0,60000,10,0);
45  IUFillNumberVector(&GuideWENP,GuideWEN,2,deviceName,"TELESCOPE_TIMED_GUIDE_WE","Guide East/West",groupName,IP_RW,60,IPS_IDLE);
46 }
47 
48 void INDI::GuiderInterface::processGuiderProperties(const char *name, double values[], char *names[], int n)
49 {
50  if(strcmp(name,GuideNSNP.name)==0)
51  {
52  // We are being asked to send a guide pulse north/south on the st4 port
53  IUUpdateNumber(&GuideNSNP,values,names,n);
54  bool rc= false;
55 
56  if(GuideNSN[0].value != 0)
57  {
58  GuideNSN[1].value = 0;
59  rc = GuideNorth(GuideNSN[0].value);
60  }
61  else if(GuideNSN[1].value != 0)
62  {
63  rc = GuideSouth(GuideNSN[1].value);
64  }
65 
66  GuideNSNP.s= rc ? IPS_OK : IPS_ALERT;
67  IDSetNumber(&GuideNSNP,NULL);
68  return;
69  }
70 
71  if(strcmp(name,GuideWENP.name)==0)
72  {
73  // We are being asked to send a guide pulse north/south on the st4 port
74  IUUpdateNumber(&GuideWENP,values,names,n);
75  bool rc=false;
76 
77  if(GuideWEN[0].value != 0)
78  {
79  GuideWEN[1].value = 0;
80  rc = GuideEast(GuideWEN[0].value);
81  }
82  else if(GuideWEN[1].value != 0)
83  rc = GuideWest(GuideWEN[1].value);
84 
85  GuideWENP.s= rc ? IPS_OK : IPS_ALERT;
86  IDSetNumber(&GuideWENP,NULL);
87  return;
88  }
89 }
90 
91 
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: indidriver.c:502
int IUUpdateNumber(INumberVectorProperty *nvp, double values[], char *names[], int n)
Update all numbers in a number vector property.
Definition: indidriver.c:263
Definition: indiapi.h:140
void IDSetNumber(const INumberVectorProperty *n, const char *msg,...)
Tell client to update an existing number vector property.
Definition: indidriver.c:1723
void initGuiderProperties(const char *deviceName, const char *groupName)
Initilize guider properties. It is recommended to call this function within initProperties() of your ...
Constants and Data structure definitions for the interface to the reference INDI C API implementation...
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: indidriver.c:398
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...