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

Last change on this file since 682 was 682, checked in by frichard, 12 years ago
File size: 8.8 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 <stdarg.h>
26
27#include <termios.h>
28#include <unistd.h>
29
30#include <config.h>
31#include "indicom.h"
32#include "indidevapi.h"
33#include "indicom.h"
34#include "../communs/const.h"
35#include "../communs/Socket.h"
36#include "../communs/ServerSocket.h"
37#include "../communs/SocketException.h"
38#include "../communs/astro.h"
39#include "../communs/alignement.h"
40
41
42using namespace std;
43
44
45struct Position
46{
47    long int x;
48    long int y;
49};
50
51
52struct DefSocket
53{
54    ServerSocket new_sock;                  // socket permettant de gérer la connexion avec une antennes
55
56    string IP;                              // IP de l'antenne
57
58    char status;                            // status='B' pour bus,  'R' pour READY
59
60    int sendalertes;                        // une requête 'send' a généré une erreur sur le réseau
61    int AttenteExecution;                   // L'antenne parvient-elle à exécuter un cycle de commandes ?
62    int AnomaliesExecution;                 // Erreur critique. L'antenne ne répond plus !
63    int etape;                              // étape dans le cycle de commandes/réponses entre PC et micro-contrÃŽleurs
64
65    bool Connected;                         // le micro-contrÃŽleur est-il connecté ?
66    bool PosValides;                        // le micro-contrÃŽleur a-t-il donné une position des moteurs valide ?
67    bool ack_status;                        // Etat des acknowledges ?
68    bool ack_pos;                           // le PC a-t-il reçu une confirmation du micro-contrÃŽleurs aprÚs un ordre POSITION ?
69    bool ack_park;                          // le PC a-t-il reçu une confirmation du micro-contrÃŽleurs aprÚs un ordre PARK ?
70    bool ack_abort;                         // le PC a-t-il reçu une confirmation du micro-contrÃŽleurs aprÚs un ordre ABORT ?
71    bool ack_goto;                          // le PC a-t-il reçu une confirmation du micro-contrÃŽleurs aprÚs un ordre GOTO ?
72    bool GotoOk;                            // Est-ce que le dernier goto est OK ?
73
74    Position TargetPosition;                // Position à atteindre
75    Position Pos;                           // derniÚre position retournée par le micro-contrÃŽleur
76   
77    Alignement *AlignementAntenne;          // Contient les paramÚtres d'alignement de l'antenne 
78}; 
79
80
81// Le PC et les antennes communiquent par le biais du port 8000 sur le réseau Ethernet
82
83ServerSocket server( BAO_PORT );         
84
85class BAO : public Astro
86{
87public:
88    BAO();
89    ~BAO();
90
91    /*******************************************************/
92    /* Gestion de l'interface intégrée dans KStars
93    ********************************************************/
94
95    void ISGetProperties (const char *dev);
96    void ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n);
97    void ISNewText (const char *dev, const char *name, char *texts[], char *names[], int n);
98    void ISNewSwitch (const char *dev, const char *name, ISState *states, char *names[], int n);
99    void ISPoll ();
100
101    /*******************************************************/
102    /* Gestion des threads
103    ********************************************************/
104
105    void *pThreadSocket ();
106    void *pThreadExit ();
107
108    /*******************************************************/
109    /* Les commandes
110    ********************************************************/
111
112    bool COMMANDE(int numsocket, char* Commande, char* Params);
113    bool ExtractPosition(string str, Position *result);
114    bool STATUS(int numsocket);
115    bool POSITION(int numsocket);
116    bool ABORT(int numsocket);
117    bool PARK(int numsocket);
118    bool GOTO(int numsocket, int deltaAz, int deltaAlt);
119
120
121    /*******************************************************/
122    /* Connection Routines
123    ********************************************************/
124    void init_properties();
125    void connect_telescope();
126    bool is_connected(void);
127    int  AntennesConnectees();
128    void DeconnecterSocket(int num);
129    void InitAntennes();
130
131
132    /*******************************************************/
133    /* Misc routines
134    ********************************************************/
135    bool process_coords();
136    int  get_switch_index(ISwitchVectorProperty *sp);
137    void ADDEC2Motor(double newRA, double newDEC);
138   
139 
140    /*******************************************************/
141    /* Simulation Routines
142    ********************************************************/
143    void enable_simulation(bool enable);
144
145    /*******************************************************/
146    /* Error handling routines
147    ********************************************************/
148    void reset_all_properties();
149    void handle_error(INumberVectorProperty *nvp, int err, const char *msg);
150    void correct_fault();
151    void connection_lost();
152    void connection_resumed();
153   
154    void AfficherLog(const char* Message,...);
155   
156   
157 
158   
159
160
161private:
162
163    enum BAO_STATUS { BAO_TRANSIT, BAO_TRACKING, BAO_PARK };
164
165    // ParamÚtres par défaut d'un pilote indi
166
167    /* Switches */
168    ISwitch ConnectS[2];
169    ISwitch OnCoordSetS[2];
170    ISwitch AlignmentS[3];
171    ISwitch AlignementAltp[1];
172    ISwitch AlignementAz[2];
173    ISwitch AlignementAltn[1]; 
174    ISwitch AlignementOk[2];
175    ISwitch RaquetteN[2];
176    ISwitch AlignementReset[1];
177    ISwitch AbortSlewS[1];
178    ISwitch ParkS[1];
179
180    /* Texts */
181    IText PortT[1];
182    IText ObjectT[1];
183    IText CommandT[1];
184    IText AlignementIP[1];
185
186    /* Numbers */
187    INumber EquatorialCoordsWN[2];
188    INumber GeographicCoordsWN[2];
189    INumber PressionTempWN[2];
190    INumber ActualisationN1[1];
191    INumber ActualisationN2[1];
192   
193
194    /* Switch Vectors */
195    ISwitchVectorProperty ConnectSP;
196    ISwitchVectorProperty OnCoordSetSP;
197    ISwitchVectorProperty AlignmentSP;
198    ISwitchVectorProperty AlignementAltpP;
199    ISwitchVectorProperty AlignementAzP;
200    ISwitchVectorProperty AlignementAltnP; 
201    ISwitchVectorProperty AlignementOkP;
202    ISwitchVectorProperty AlignementResetP;
203    ISwitchVectorProperty RaquetteNP;
204    ISwitchVectorProperty AbortSlewSP;
205    ISwitchVectorProperty ParkSP;
206
207    /* Number Vectors */
208    INumberVectorProperty EquatorialCoordsWNP;
209    INumberVectorProperty GeographicCoordsWNP;
210    INumberVectorProperty PressionTempWNP;
211    INumberVectorProperty ActualisationNP1;
212    INumberVectorProperty ActualisationNP2;
213   
214    /* Text Vectors */
215    ITextVectorProperty PortTP;
216    ITextVectorProperty ObjectTP;
217    ITextVectorProperty CommandTP;
218    ITextVectorProperty AlignementIPP;
219
220
221
222protected:
223
224    int SocketsNumber;                   // nbre de sockets utilisés pour connecter les antennes
225    bool InitThreadOK;                   // Le thread est-t-il  actif ?
226    DefSocket Sockets[MAXHOSTNAME + 1];  // Définit chaque socket. Un socket permet la communication avec une antenne
227    pthread_t th1;                       // le pointeur du thread
228
229    double JD;                           // Jour julien
230    double lastRA;                       // Sauvegarde de la derniÚre position avant actualisation, ici l'AD...
231    double lastDEC;                      // ...et la déclinaison
232    double JJAnc;                        // Sauvegarde du jour julien lors de la derniÚre actualisation de la position (fct Goto)
233    double ActualisationTMTransit;       // Délai entre deux actualisations dans les modes transit (en sec)
234    double ActualisationTMTracking;      //  "                 "                     "     tracking (en sec)
235    double Longitude;                    // Longitude et latitude du lieu d'observation
236    double Latitude;
237    double Pression;                     // Pression et température sur le lieu d'observation
238    double Temp;   
239    bool   RealisationGoto;              // Permet de réaliser les différentes étapes nécessaires à la réalisation d'un goto
240                                         // tant qu'un goto n'est pas terminé, ActualisationPosition = true
241    bool   Abort;                        // Annulation du mouvement en cours
242    bool   Park;                         // On place les antennes dans une position de repos
243    bool   Suivi;                        // Est-ce que les antennes suivent actuellement un objet ?
244    bool   UpdatedGoto;                  // On peut exécuter un Goto
245    bool   Exit;                         // On ferme le driver
246
247    int    currentSet;                   // mode de suivi actuel - tracking ou transit
248    int    MethodeAlignement;            // Méthode d'alignement
249    BAO_STATUS  TrackingMode;            // Mode de suivi actuellement activé
250   
251    long int azmincodeur;
252    long int azmaxcodeur; 
253   
254    int    targetAlignmentIP;
255   
256    long int VitesseRaquette;
257    long int delta_az;
258    long int delta_ha;
259   
260   
261};
262
263#endif
Note: See TracBrowser for help on using the repository browser.