source: BAORadio/libindi/libindi/drivers/telescope/BAO.h @ 606

Last change on this file since 606 was 504, checked in by frichard, 13 years ago

-Version 0.8 de libini
-Formule de Marc
-Nouvelles fonctionnalités (goto nom-de l'objet etc...)

File size: 7.2 KB
RevLine 
[490]1/*
[504]2 Pilote Indi BAORadio
3 franckrichard033@gmail.com
4 Juin 2011
5*/
[490]6
[504]7#ifndef BAO_H
8#define BAO_H
[490]9
[504]10#include <stdio.h>
11#include <stdlib.h>
12#include <string.h>
13#include <stdarg.h>
14#include <math.h>
15#include <unistd.h>
16#include <time.h>
17#include <memory>
18#include <pthread.h>
19#include <iostream>
20#include <time.h>
21#include <unistd.h>
22#include <sys/time.h>
[490]23
[504]24#include <config.h>
[490]25
[504]26#include "indicom.h"
[490]27
[504]28#include "Socket.h"
[490]29#include "indidevapi.h"
30#include "indicom.h"
31#include "ServerSocket.h"
32#include "SocketException.h"
33#include "astro.h"
34
[504]35
[490]36#define MAXCARACTERES 1024
37
[504]38#define MAXATTENTE 80                // Si une commande ne recoit pas d'acknowledge. Alors refaire 80 tentatives en renvoyant la commande
39#define MAXANOMALIES 2               // Si pas de réponse au bout de 80 tentatives -> erreur critique -> socket perdu ?
[498]40#define MAXANOMALIESGOTO 1500
[490]41
[504]42#define NBREPASCODEURSAZ  4000
43   
44
45using namespace std;
46
[490]47struct Position
48{
[504]49    long int x;
50    long int y;
[490]51};
52
53struct DefSocket
54{
[504]55    ServerSocket new_sock;           // socket permettant de gérer la connexion avec une antennes
56
57    string IP;                       // IP de l'antenne
58
59    bool Connected;                  // le micro-contrÃŽleur est-il connecté ?
60    bool PosValides;                 // le micro-contrÃŽleur a-t-il donné une position des moteurs valide ?
61    char status;                     // status='B' pour busy  'R' pour READY
62    int sendalertes;                 // une requête 'send' a généré une erreur sur le réseau
63    int AttenteExecution;            // L'antenne parvient-elle à executer un cycle de commandes ?
64    int AnomaliesExecution;          // Erreur critique. L'antenne ne répond plus !
65
66    Position Pos;                    // derniÚre position retournée par le microcontrÃŽleur
67    int etape;                       //étape dans le cycle de commandes/réponses entre PC et microcontroleurs
68
69    bool ack_status;                 // Etat des acknowledges ?
70    bool ack_pos;                    // le PC a reçu une confirmation du microcont aprÚs un ordre POSITION
71    bool ack_park;                   // le PC a reçu une confirmation du microcont aprÚs un ordre PARK
72    bool ack_abort;                  // le PC a reçu une confirmation du microcont aprÚs un ordre ABORT
73    bool ack_goto;                   // le PC a reçu une confirmation du microcont aprÚs un ordre GOTO
74    bool GotoOk;                     // Est-ce que le dernier goto est OK ?
[490]75};
76
77
[504]78ServerSocket server( 8000 );         // Le PC et les antennes communiquent par le biais du port 8000 sur le réseau tcp
79
[490]80class BAO : public Astro
81{
82public:
83    BAO();
84    ~BAO();
[504]85
[490]86    void ISGetProperties (const char *dev);
87    void ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n);
88    void ISNewText (const char *dev, const char *name, char *texts[], char *names[], int n);
89    void ISNewSwitch (const char *dev, const char *name, ISState *states, char *names[], int n);
90    void ISPoll ();
[504]91
92    void *pThreadSocket ();
93    void *pThreadExit ();
94
[490]95    bool COMMANDE(int numsocket, char* Commande, char* Params);
[504]96    bool ExtractPosition(string str, Position *result);
97
[490]98    void connection_lost();
99    void connection_resumed();
[504]100
[490]101    bool STATUS(int numsocket);
102    bool POSITION(int numsocket);
103    bool ABORT(int numsocket);
104    bool PARK(int numsocket);
105    bool GOTO(int numsocket, int deltaAz, int deltaAlt);
106    void ADDEC2Motor(double newRA, double newDEC);
107    int  AntennesConnectees();
[504]108    void DeconnecterSocket(int num);
[490]109    void InitAntennes();
[504]110
111    /*******************************************************/
112    /* Connection Routines
113    ********************************************************/
114    void init_properties();
115    void get_initial_data();
116    void connect_telescope();
117    bool is_connected(void);
118
119    /*******************************************************/
120    /* Misc routines
121    ********************************************************/
122    bool process_coords();
123    int get_switch_index(ISwitchVectorProperty *sp);
124
125    /*******************************************************/
126    /* Simulation Routines
127    ********************************************************/
128    void enable_simulation(bool enable);
129
130    /*******************************************************/
131    /* Error handling routines
132    ********************************************************/
133    void slew_error(int slewCode);
134    void reset_all_properties();
135    void handle_error(INumberVectorProperty *nvp, int err, const char *msg);
136    void correct_fault();
137
138
139
[490]140private:
141
[492]142    enum BAO_STATUS { BAO_TRANSIT, BAO_TRACKING, BAO_PARK };
[490]143
144    /* Switches */
145    ISwitch ConnectS[2];
146    ISwitch OnCoordSetS[2];
147    ISwitch AbortSlewS[1];
148    ISwitch ParkS[1];
149
150    /* Texts */
151    IText PortT[1];
152    IText ObjectT[1];
153
154    /* Numbers */
155    //INumber EquatorialCoordsRN[2];
156    INumber EquatorialCoordsWN[2];
157    INumber GeographicCoordsWN[2];
[495]158    INumber ActualisationN1[1];
159    INumber ActualisationN2[1];
[504]160
[495]161    //INumber SlewAccuracyN[2];
162    //INumber TrackAccuracyN[2];
[490]163
164    /* Switch Vectors */
165    ISwitchVectorProperty ConnectSP;
166    ISwitchVectorProperty OnCoordSetSP;
167    ISwitchVectorProperty AbortSlewSP;
168    ISwitchVectorProperty ParkSP;
169
170    /* Number Vectors */
[492]171    //INumberVectorProperty EquatorialCoordsRNP;
[490]172    INumberVectorProperty EquatorialCoordsWNP;
173    INumberVectorProperty GeographicCoordsWNP;
[495]174    //INumberVectorProperty SlewAccuracyNP;
175    //INumberVectorProperty TrackAccuracyNP;
176    INumberVectorProperty ActualisationNP1;
177    INumberVectorProperty ActualisationNP2;
[490]178
[504]179
[490]180    /* Text Vectors */
181    ITextVectorProperty PortTP;
182    ITextVectorProperty ObjectTP;
183
184
185
186protected:
[504]187    int SocketsNumber;                   // nbre de sockets utilisés pour connecter les antennes
188    bool InitThreadOK;                   // Le thread est bien actif
189    DefSocket Sockets[MAXHOSTNAME + 1];  // Etat de chaque socket. Un socket permet la communication avec une antenne
190    pthread_t th1;                       // le pointeur du thread
[490]191
[504]192    double JD;                           // Jour julien
193    double lastRA;                       // Sauvegarde de la derniÚre position avant actualisation
[490]194    double lastDEC;
[504]195    double JJAnc;                        // Sauvegarde du jour julien lors de la derniÚre actualisation de la position (fct Goto)
196    double ActualisationTM1;             // Délais entre deux actualisations dans les modes transit et tracking
[495]197    double ActualisationTM2;
[504]198    double Longitude;                    // Longitude et latitude du lieu d'observation
199    double Latitude;
200    bool   ActualisationPosition;        // Permet de faire les étapes nécessaires pour réaliser un mouvement
201    bool   Abort;                        // Annulation du mouvement en cours
202    bool   Park;                         // On place les antennes dans une position de repos
203    bool   Suivi;                        // Suivi d'un objet en cours...
204    bool   UpdateGoto;                   // On peut exécuter un Goto
205    bool   Exit;                         // On ferme le driver
206
207    int    currentSet;                   // Variable interne de l'interface indi
208    int    lastSet;                      // Variable interne de l'interface indi
209    int    TrackingMode;                 //1 : Transit           2: Tracking
210
211    Position TargetPosition;             //Position à atteindre en coordonnées équatoriales
[490]212};
213
214#endif
Note: See TracBrowser for help on using the repository browser.