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

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