diff options
Diffstat (limited to 'kstars/kstars/indi/skycommander.c')
-rw-r--r-- | kstars/kstars/indi/skycommander.c | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/kstars/kstars/indi/skycommander.c b/kstars/kstars/indi/skycommander.c new file mode 100644 index 00000000..261b6808 --- /dev/null +++ b/kstars/kstars/indi/skycommander.c @@ -0,0 +1,185 @@ +#if 0 + Sky Commander INDI driver + Copyright (C) 2005 Jasem Mutlaq (mutlaqja@ikarustech.com) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +#endif + +#include "config.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdarg.h> +#include <math.h> +#include <unistd.h> +#include <time.h> + +#include "indidevapi.h" +#include "indicom.h" +#include "lx200driver.h" + +#define mydev "Sky Commander" +#define BASIC_GROUP "Main Control" +#define POLLMS 1000 +#define currentRA eq[0].value +#define currentDEC eq[1].value + +static void ISPoll(void *); +static void ISInit(void); +static void connectTelescope(void); + +static ISwitch PowerS[] = {{"CONNECT" , "Connect" , ISS_OFF, 0, 0},{"DISCONNECT", "Disconnect", ISS_ON, 0, 0}}; +ISwitchVectorProperty PowerSP = { mydev, "CONNECTION" , "Connection", BASIC_GROUP, IP_RW, ISR_1OFMANY, 0, IPS_IDLE, PowerS, NARRAY(PowerS), "", 0}; + +static IText PortT[] = {{"PORT", "Port", 0, 0, 0, 0}}; +static ITextVectorProperty PortTP = { mydev, "DEVICE_PORT", "Ports", BASIC_GROUP, IP_RW, 0, IPS_IDLE, PortT, NARRAY(PortT), "", 0}; + +/* equatorial position */ +INumber eq[] = { + {"RA", "RA H:M:S", "%10.6m", 0., 24., 0., 0., 0, 0, 0}, + {"DEC", "Dec D:M:S", "%10.6m", -90., 90., 0., 0., 0, 0, 0}, +}; +INumberVectorProperty eqNum = { + mydev, "EQUATORIAL_EOD_COORD", "Equatorial JNow", BASIC_GROUP, IP_RO, 0, IPS_IDLE, + eq, NARRAY(eq), "", 0}; + + +void ISInit(void) +{ + static int isInit=0; + + if (isInit) return; + + isInit = 1; + + IEAddTimer (POLLMS, ISPoll, NULL); + +} + +void ISGetProperties (const char *dev) +{ + + ISInit(); + + dev=dev; + + IDDefSwitch(&PowerSP, NULL); + IDDefText(&PortTP, NULL); + IDDefNumber(&eqNum, NULL); +} + +void ISNewSwitch (const char *dev, const char *name, ISState *states, char *names[], int n) +{ + ISInit(); + + dev = dev; + + if (!strcmp(name, PowerSP.name)) + { + IUResetSwitches(&PowerSP); + IUUpdateSwitches(&PowerSP, states, names, n); + connectTelescope(); + return; + } +} + +void ISNewText (const char *dev, const char *name, char *texts[], char *names[], int n) +{ + + ISInit(); + + dev=dev; names=names; n=n; + + if (!strcmp(name, PortTP.name)) + { + IUSaveText(&PortT[0], texts[0]); + PortTP.s = IPS_OK; + IDSetText(&PortTP, NULL); + return; + } + +} +void ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n) +{ + dev=dev;name=name;values=values;names=names;n=n; +} + +void ISNewBLOB (const char *dev, const char *name, int sizes[], char *blobs[], char *formats[], char *names[], int n) +{ + dev=dev;name=name;sizes=sizes;blobs=blobs;formats=formats;names=names;n=n; +} + +void ISPoll (void *p) +{ + p=p; + + if (PowerS[0].s == ISS_ON) + { + switch (eqNum.s) + { + case IPS_IDLE: + case IPS_OK: + case IPS_BUSY: + if (updateSkyCommanderCoord(¤tRA, ¤tDEC) < 0) + { + eqNum.s = IPS_ALERT; + IDSetNumber(&eqNum, "Unknown error while reading telescope coordinates"); + IDLog("Unknown error while reading telescope coordinates\n"); + break; + } + + IDSetNumber(&eqNum, NULL); + break; + + case IPS_ALERT: + break; + } + } + + IEAddTimer(POLLMS, ISPoll, NULL); +} + +void connectTelescope(void) +{ + + switch (PowerS[0].s) + { + case ISS_ON: + if (Connect(PortT[0].text) < 0) + { + PowerSP.s = IPS_ALERT; + IUResetSwitches(&PowerSP); + IDSetSwitch(&PowerSP, "Error connecting to port %s", PortT[0].text); + return; + } + + PowerSP.s = IPS_OK; + IDSetSwitch(&PowerSP, "Sky Commander is online."); + break; + + case ISS_OFF: + Disconnect(); + IUResetSwitches(&PowerSP); + eqNum.s = PortTP.s = PowerSP.s = IPS_IDLE; + IDSetSwitch(&PowerSP, "Sky Commander is offline."); + IDSetText(&PortTP, NULL); + IDSetNumber(&eqNum, NULL); + break; + } + +} + |