Changeset 642 for BAORadio/libindi/libindi/drivers/telescope/BAO.h
- Timestamp:
- Feb 24, 2012, 12:37:36 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BAORadio/libindi/libindi/drivers/telescope/BAO.h
r619 r642 23 23 #include <fstream> 24 24 25 #include <termios.h> 26 #include <unistd.h> 27 25 28 #include <config.h> 26 27 29 #include "indicom.h" 28 29 #include "Socket.h"30 30 #include "indidevapi.h" 31 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 32 #include "../communs/const.h" 33 #include "../communs/Socket.h" 34 #include "../communs/ServerSocket.h" 35 #include "../communs/SocketException.h" 36 #include "../communs/astro.h" 37 #include "../communs/alignement.h" 38 45 39 46 40 using namespace std; 41 47 42 48 43 struct Position … … 52 47 }; 53 48 49 54 50 struct DefSocket 55 51 { 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 ? 52 ServerSocket new_sock; // socket permettant de gérer la connexion avec une antennes 53 54 string IP; // IP de l'antenne 55 56 char status; // status='B' pour bus, 'R' pour READY 57 58 int sendalertes; // une requête 'send' a généré une erreur sur le réseau 59 int AttenteExecution; // L'antenne parvient-elle à executer un cycle de commandes ? 60 int AnomaliesExecution; // Erreur critique. L'antenne ne répond plus ! 61 int etape; // étape dans le cycle de commandes/réponses entre PC et microcontroleurs 62 63 bool Connected; // le micro-contrÃŽleur est-il connecté ? 64 bool PosValides; // le micro-contrÃŽleur a-t-il donné une position des moteurs valide ? 65 bool ack_status; // Etat des acknowledges ? 66 bool ack_pos; // le PC a-t-il reçu une confirmation du microcontroleurs aprÚs un ordre POSITION ? 67 bool ack_park; // le PC a-t-il reçu une confirmation du microcontroleurs aprÚs un ordre PARK ? 68 bool ack_abort; // le PC a-t-il reçu une confirmation du microcontroleurs aprÚs un ordre ABORT ? 69 bool ack_goto; // le PC a-t-il reçu une confirmation du microcontroleurs aprÚs un ordre GOTO ? 70 bool GotoOk; // Est-ce que le dernier goto est OK ? 71 72 Position TargetPosition; // Position à atteindre 73 Position Pos; // derniÚre position retournée par le microcontrÃŽleur 77 74 78 79 }; 80 81 82 ServerSocket server( 8000 ); // Le PC et les antennes communiquent par le biais du port 8000 sur le réseau tcp 75 Alignement *AlignementAntenne; // Contient les paramÚtres d'alignement de l'antenne 76 }; 77 78 79 // Le PC et les antennes communiquent par le biais du port 8000 sur le réseau Ethernet 80 81 ServerSocket server( 8000 ); 83 82 84 83 class BAO : public Astro … … 88 87 ~BAO(); 89 88 89 /*******************************************************/ 90 /* Gestion de l'interface intégrée dans KStars 91 ********************************************************/ 92 90 93 void ISGetProperties (const char *dev); 91 94 void ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n); … … 94 97 void ISPoll (); 95 98 99 /*******************************************************/ 100 /* Gestion des threads 101 ********************************************************/ 102 96 103 void *pThreadSocket (); 97 104 void *pThreadExit (); 98 105 106 /*******************************************************/ 107 /* Les commandes 108 ********************************************************/ 109 99 110 bool COMMANDE(int numsocket, char* Commande, char* Params); 100 111 bool ExtractPosition(string str, Position *result); 101 102 void connection_lost();103 void connection_resumed();104 105 112 bool STATUS(int numsocket); 106 113 bool POSITION(int numsocket); … … 108 115 bool PARK(int numsocket); 109 116 bool GOTO(int numsocket, int deltaAz, int deltaAlt); 110 void ADDEC2Motor(double newRA, double newDEC); 117 118 119 /*******************************************************/ 120 /* Connection Routines 121 ********************************************************/ 122 void init_properties(); 123 void connect_telescope(); 124 bool is_connected(void); 111 125 int AntennesConnectees(); 112 126 void DeconnecterSocket(int num); 113 127 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); 128 124 129 125 130 /*******************************************************/ … … 127 132 ********************************************************/ 128 133 bool process_coords(); 129 int get_switch_index(ISwitchVectorProperty *sp); 134 int get_switch_index(ISwitchVectorProperty *sp); 135 void ADDEC2Motor(double newRA, double newDEC); 130 136 131 137 /*******************************************************/ … … 137 143 /* Error handling routines 138 144 ********************************************************/ 139 void slew_error(int slewCode);140 145 void reset_all_properties(); 141 146 void handle_error(INumberVectorProperty *nvp, int err, const char *msg); 142 147 void correct_fault(); 143 148 void connection_lost(); 149 void connection_resumed(); 144 150 145 151 … … 147 153 148 154 enum BAO_STATUS { BAO_TRANSIT, BAO_TRACKING, BAO_PARK }; 155 156 // ParamÚtres par défaut d'un pilote indi 149 157 150 158 /* Switches */ 151 159 ISwitch ConnectS[2]; 152 160 ISwitch OnCoordSetS[2]; 161 ISwitch AlignmentS[3]; 153 162 ISwitch AbortSlewS[1]; 154 163 ISwitch ParkS[1]; … … 159 168 160 169 /* Numbers */ 161 //INumber EquatorialCoordsRN[2];162 170 INumber EquatorialCoordsWN[2]; 163 171 INumber GeographicCoordsWN[2]; 172 INumber PressionTempWN[2]; 164 173 INumber ActualisationN1[1]; 165 174 INumber ActualisationN2[1]; 166 167 //INumber SlewAccuracyN[2];168 //INumber TrackAccuracyN[2];169 175 170 176 /* Switch Vectors */ 171 177 ISwitchVectorProperty ConnectSP; 172 178 ISwitchVectorProperty OnCoordSetSP; 179 ISwitchVectorProperty AlignmentSP; 173 180 ISwitchVectorProperty AbortSlewSP; 174 181 ISwitchVectorProperty ParkSP; 175 182 176 183 /* Number Vectors */ 177 //INumberVectorProperty EquatorialCoordsRNP;178 184 INumberVectorProperty EquatorialCoordsWNP; 179 185 INumberVectorProperty GeographicCoordsWNP; 180 //INumberVectorProperty SlewAccuracyNP; 181 //INumberVectorProperty TrackAccuracyNP; 186 INumberVectorProperty PressionTempWNP; 182 187 INumberVectorProperty ActualisationNP1; 183 188 INumberVectorProperty ActualisationNP2; … … 191 196 192 197 protected: 198 193 199 int SocketsNumber; // nbre de sockets utilisés pour connecter les antennes 194 bool InitThreadOK; // Le thread est bien actif195 DefSocket Sockets[MAXHOSTNAME + 1]; // Etat dechaque socket. Un socket permet la communication avec une antenne200 bool InitThreadOK; // Le thread est-t-il actif ? 201 DefSocket Sockets[MAXHOSTNAME + 1]; // Définit chaque socket. Un socket permet la communication avec une antenne 196 202 pthread_t th1; // le pointeur du thread 197 203 198 204 double JD; // Jour julien 199 double lastRA; // Sauvegarde de la derniÚre position avant actualisation 200 double lastDEC; 205 double lastRA; // Sauvegarde de la derniÚre position avant actualisation, ici l'AD... 206 double lastDEC; // ...et la déclinaison 201 207 double JJAnc; // Sauvegarde du jour julien lors de la derniÚre actualisation de la position (fct Goto) 202 double ActualisationTM 1; // Délais entre deux actualisations dans les modes transit et tracking203 double ActualisationTM 2;208 double ActualisationTMTransit; // Délai entre deux actualisations dans les modes transit 209 double ActualisationTMTracking; // " " " tracking 204 210 double Longitude; // Longitude et latitude du lieu d'observation 205 211 double Latitude; 206 bool ActualisationPosition; // Permet de faire les étapes nécessaires pour réaliser un mouvement 212 double Pression; // Pression et température sur le lieu d'observation 213 double Temp; 214 bool RealisationGoto; // Permet de réaliser les différentes étapes nécessaires à la réalisation d'un goto 215 // tant qu'un goto n'est pas terminé, ActualisationPosition = true 207 216 bool Abort; // Annulation du mouvement en cours 208 217 bool Park; // On place les antennes dans une position de repos 209 bool Suivi; // Suivi d'un objet en cours...210 bool Update Goto; // On peut exécuter un Goto218 bool Suivi; // Est-ce que les antennes suivent actuellement un objet ? 219 bool UpdatedGoto; // On peut exécuter un Goto 211 220 bool Exit; // On ferme le driver 212 221 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 222 int currentSet; // mode de suivi actuel - tracking ou transit 223 int lastSet; // Variable interne de l'interface indi - ne pas toucher 224 int TrackingMode; // 1 : Transit 2: Tracking 218 225 }; 219 226
Note: See TracChangeset
for help on using the changeset viewer.