/*
    MAGELLAN Generic
    Copyright (C) 2011 Onno Hommes  (ohommes@alumni.cmu.edu)

    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

*/

#pragma once

#include "indicom.h"
#include "indidevapi.h"

/*
   The device name below even though we have a Magellan I
   should remain set to a KStars registered telescope so
   It allows the service to be stopped
*/
#define mydev "Magellan I" /* The device name */

class Magellan1
{
    public:
        Magellan1();
        virtual ~Magellan1();

        virtual void ISGetProperties(const char *dev);
        virtual void ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n);
        virtual void ISNewText(const char *dev, const char *name, char *texts[], char *names[], int n);
        virtual void ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n);
        virtual void ISSnoopDevice(XMLEle *root);
        virtual void ISPoll();
        virtual void getBasicData();

        void handleError(ISwitchVectorProperty *svp, int err, const char *msg);
        void handleError(INumberVectorProperty *nvp, int err, const char *msg);
        void handleError(ITextVectorProperty *tvp, int err, const char *msg);
        bool isTelescopeOn();
        void connectTelescope();
        void setCurrentDeviceName(const char *devName);
        void correctFault();

        int fd;

    protected:
        int timeFormat;
        int currentSiteNum;
        int trackingMode;

        double JD;
        double lastRA;
        double lastDEC;
        bool fault;
        bool simulation;
        char thisDevice[64];
        int currentSet;
        int lastSet;
        double targetRA, targetDEC;
};
