Index: /BAORadio/libindi/libindi/BAOControl/bao_catalogue.dat
===================================================================
--- /BAORadio/libindi/libindi/BAOControl/bao_catalogue.dat	(revision 649)
+++ /BAORadio/libindi/libindi/BAOControl/bao_catalogue.dat	(revision 650)
@@ -1,2 +1,9 @@
+[star 0]
+name=POLARIS
+const=UMi
+ar=02:31:49.6
+de=89:15:50.9
+mag=1.97
+
 [star 1]
 name=KOCAB
Index: /BAORadio/libindi/libindi/BAOControl/baocontrol.cpp
===================================================================
--- /BAORadio/libindi/libindi/BAOControl/baocontrol.cpp	(revision 649)
+++ /BAORadio/libindi/libindi/BAOControl/baocontrol.cpp	(revision 650)
@@ -34,5 +34,5 @@
  * Laboratoire de l'AccÃ©lÃ©rateur LinÃ©aire *\n \
  *                                        *\n \
- *             v0.5  23/02/2012           *\n \
+ *             v0.51 02/04/2012           *\n \
  *        franckrichard033@gmail.com      *\n \
  ******************************************\n\n\n", true);
@@ -1040,4 +1040,44 @@
 
 /**************************************************************************************
+** Envoie une commande aux antennes
+** exemples : P, Z, A, Gf1000f0100
+**
+***************************************************************************************/
+
+bool BAOcontrol::EnvoyerCommande(string commande)
+{
+    stringstream os;
+
+    try
+    {
+        *client_socket << "<newTextVector device=\"BAO\" name=\"COMMAND_SET\">";
+        *client_socket << "<oneText name=\"COMMAND\">";
+        *client_socket << commande;
+        *client_socket << "</oneText>";
+        *client_socket << "</newTextVector>";
+
+        if (!VerifReponse("name=\"COMMAND_SET\" state=\"Ok\""))
+        {
+            ErreurLog("ERREUR fct EnvoyerCommande : pas de rÃ©ponse du pilote indi_BAO.\n\n");
+
+            return false;
+        }
+    }
+
+    // un problÃšme ?
+
+    catch ( SocketException& e )
+    {
+        ErreurLog("Exception was caught:" + e.description() + "\n");
+
+        return false;
+    }
+
+    return true;
+}
+
+
+
+/**************************************************************************************
 ** Place les antennes en position de repos
 **
@@ -1467,5 +1507,5 @@
         // (et donc accessibles Ã  l'antenne)
 
-        for (i=1; i<numEtoiles; i++)
+        for (i=0; i<numEtoiles; i++)
         {
             Azimut(Etoiles[i].ad, Etoiles[i].de, &Etoiles[i].az, &Etoiles[i].ha);
@@ -1513,5 +1553,5 @@
         // pour calibrer l'antenne
 
-        for (i=1; i<numEtoiles; i++)
+        for (i=0; i<numEtoiles; i++)
         {
             if ( Etoiles[i].selectionnee )
@@ -2049,4 +2089,35 @@
 
 
+    // Envoyer une commande aux antennes
+
+    if (chaine.find("send")!=string::npos)
+    {
+        string commande;
+
+        CommandeOK = true;
+
+        if (DecompositionCommande(chaine, "send", &commande, NULL))
+        {
+	    switch (commande[0])
+	    {
+	      case 'g' : commande[0]='G'; break;
+	      case 'a' : commande[0]='A'; break;
+	      case 'z' : commande[0]='Z'; break;
+	      case 'p' : commande[0]='P'; break;
+	    }
+	    
+            if (!EnvoyerCommande((string)commande))
+	    {
+	      ErreurLog("Erreur ! La commande n'a pas un format correct !");
+	    }
+	    else
+	    {
+	      AfficherLog("Lire le retour de la commande dans la fenÃªtre indiserver.\n\n", true);
+	    }
+        }
+    }
+
+    
+    
     // correction de l'alignement d'une antenne par rapport Ã  l'objet visÃ©
 
@@ -2285,5 +2356,7 @@
         cout << "align ip :               Lance la procÃ©dure d'alignement de l'antenne d'adresse ip." << endl;
         cout << "reset ip :               RÃ©initialise les paramÃštres d'alignement de l'antenne d'adresse ip." << endl;
-        cout << "set transit on :         Active le mode de suivi transit." << endl;
+        cout << "send comm :              Envoie la commande 'comm' aux antennes." << endl;
+	cout << "                         exemples : send P, send A, send Gf1000f1000" << endl;
+	cout << "set transit on :         Active le mode de suivi transit." << endl;
         cout << "set transit delay x :    Fixe la durÃ©e entre deux actualisations Ã  x seconde(s) dans le mode transit" << endl;
         cout << "set tracking on :        Active le mode de suivi tracking." << endl;
@@ -3030,9 +3103,9 @@
     UpdateTime();
 
-    numEtoiles = 1;
+    numEtoiles = 0;
 
     // Lecture des Ã©toiles
 
-    section = "star 1";
+    section = "star 0";
     key     = "name";
 
@@ -3229,4 +3302,6 @@
 
             ChoixCouleurs==1 ? IDLog(grey1) : IDLog(grey2);
+	    
+	    AfficherLog(">" + chaine + "\n\n", false);
 
             // on met en minuscules
Index: /BAORadio/libindi/libindi/BAOControl/baocontrol.h
===================================================================
--- /BAORadio/libindi/libindi/BAOControl/baocontrol.h	(revision 649)
+++ /BAORadio/libindi/libindi/BAOControl/baocontrol.h	(revision 650)
@@ -119,4 +119,5 @@
     bool EnvoyerDelaisModesTransitEtTracking();
     bool EnvoyerMethodeAlignement();
+    bool EnvoyerCommande(string commande);
     bool Park();
     bool Abort();
Index: /BAORadio/libindi/libindi/BAOTest/BAOtest_main.cpp
===================================================================
--- /BAORadio/libindi/libindi/BAOTest/BAOtest_main.cpp	(revision 649)
+++ /BAORadio/libindi/libindi/BAOTest/BAOtest_main.cpp	(revision 650)
@@ -225,6 +225,8 @@
                                std::cout <<  "MicrocontroÌleur : " << chaine;
 
-                               std::cout <<  "Positionnement de l antenne...\n";
-                            }
+                               std::cout <<  "Positionnement de l antenne...\n";			       
+                            }
+                            
+                            // sleep(20);
 
                             // sleep(rand()%10);
Index: /BAORadio/libindi/libindi/communs/logs.cpp
===================================================================
--- /BAORadio/libindi/libindi/communs/logs.cpp	(revision 649)
+++ /BAORadio/libindi/libindi/communs/logs.cpp	(revision 650)
@@ -74,5 +74,17 @@
     if ( (pFile = fopen(fichier.c_str(), "a")) != NULL)
     {
-        // On le sauvegarde dans le fichier log
+        time_t rawtime;
+        struct tm * timeinfo;
+
+	char buffer[80];
+	
+	// On sauvegarde la date et l'heure
+	
+        time ( &rawtime );
+        timeinfo = localtime ( &rawtime );
+        strftime (buffer,80,"%c    ",timeinfo);
+        fprintf(pFile, buffer);
+        
+	// On le sauvegarde dans le fichier log
 
         fprintf(pFile, Message.c_str());
Index: /BAORadio/libindi/libindi/drivers/telescope/BAO.cpp
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/BAO.cpp	(revision 649)
+++ /BAORadio/libindi/libindi/drivers/telescope/BAO.cpp	(revision 650)
@@ -52,12 +52,12 @@
     lastRA                = 0.0;
     lastDEC               = 0.0;
-    
+
     // Jour julien de la derniÃšre actualisation
-    
+
     JJAnc                 = 0.0;
 
     // Variables d'Ã©tat
 
-    currentSet            =  0; 
+    currentSet            =  0;
 
     // Nombre d'antennes connectÃ©es
@@ -68,7 +68,7 @@
 
     TrackingMode          =  BAO_TRACKING;
-    
+
     // MÃ©thode d'alignement par dÃ©faut
-    
+
     MethodeAlignement     = SIMPLE;
 
@@ -77,5 +77,5 @@
 
     ActualisationTMTransit  = 15.0 * 60.0;    // DÃ©lai entre 2 actualisations dans le mode transit (en sec)
-    
+
     ActualisationTMTracking = 5.0;            //                "                 "        tracking
 
@@ -108,9 +108,9 @@
 
     Exit           	  = false;
-    
+
     // Initialisation des paramÃštres atmosphÃ©riques par dÃ©faut
-    
+
     Pression              = 1013.0;
-    
+
     Temp                  = 10.0;
 
@@ -135,6 +135,6 @@
     // NumÃ©ro de version
 
-    IDLog("Indi server BAORadio...\n");
-    IDLog("Driver Version: 23-02-2012\n");
+    AfficherLog("Indi server BAORadio...\n");
+    AfficherLog("Driver Version: 0.51 (02-04-2012)\n");
 
     //connect_telescope();
@@ -172,5 +172,75 @@
     // permet de savoir si le destructeur a bien Ã©tÃ© atteint
 
-    IDLog("Sortie de indi_BAO\n");
+    AfficherLog("Sortie de indi_BAO\n");
+}
+
+
+
+/**************************************************************************************
+** Affiche le message Ã  l'Ã©cran puis sauvegarde le message dans le fichierBAO_indi.log
+**
+***************************************************************************************/
+
+void BAO::AfficherLog(const char* fmt,...)
+{
+    static bool avertissement = false;
+
+    va_list ap;
+
+    FILE *pFile = NULL;
+
+    string fichier;
+
+    va_start (ap, fmt);
+
+    vfprintf (stderr, fmt, ap);
+
+    va_end (ap);
+
+    fichier = "/home/" + (string)getenv("USER") + "/BAO_indi.log";
+
+    //Si le fichier log a une taille > 3M -> on efface le fichier
+
+    //if ( Taille(fichier) > TAILLEMAXLOGS ) remove(fichier.c_str());
+
+    if ( (pFile = fopen(fichier.c_str(), "a")) != NULL)
+    {
+        time_t rawtime;
+        struct tm * timeinfo;
+
+        char buffer[80];
+
+        // On sauvegarde la date et l'heure
+
+        time ( &rawtime );
+        timeinfo = localtime ( &rawtime );
+        strftime (buffer,80,"%c    ",timeinfo);
+        fprintf(pFile, buffer);
+
+        // On sauvegarde le message dans le fichier log
+        va_start (ap, fmt);
+
+        vfprintf(pFile, fmt, ap);
+
+        va_end (ap);
+
+        fclose(pFile);
+    }
+    else
+    {
+        if (!avertissement)
+        {
+            string chaine = "Impossible d'Ã©crire dans le fichier " + fichier +"\nMerci de vÃ©rifier les permissions\n";
+            chaine += "ou exÃ©cutez le programme en mode superutilisateur.\n\n";
+
+            va_start (ap, fmt);
+
+            vfprintf (stderr, chaine.c_str(), ap);
+
+            va_end (ap);
+
+            avertissement = true;
+        }
+    }
 }
 
@@ -246,4 +316,8 @@
     IUFillNumberVector(&EquatorialCoordsWNP, EquatorialCoordsWN, NARRAY(EquatorialCoordsWN), mydev, "EQUATORIAL_EOD_COORD_REQUEST" , "Equatorial JNow", BASIC_GROUP, IP_WO, 0, IPS_IDLE);
 
+    //Command
+    IUFillText(&CommandT[0], "COMMAND", "Command", "");
+    IUFillTextVector(&CommandTP, CommandT, NARRAY(CommandT), mydev, "COMMAND_SET", "Command", BASIC_GROUP, IP_WO, 0, IPS_IDLE);
+
     // Geographic coord - SET
     IUFillNumber(&GeographicCoordsWN[0], "LAT", "Lat  D", "%10.6m",  -90., 90., 0., 0.);
@@ -251,5 +325,5 @@
     IUFillNumberVector(&GeographicCoordsWNP, GeographicCoordsWN, NARRAY(GeographicCoordsWN), mydev, "GEOGRAPHIC_COORD" , "Geographic coords", OPTIONS_GROUP, IP_WO, 0, IPS_IDLE);
 
-     // Pression tempÃ©rature - SET
+    // Pression tempÃ©rature - SET
     IUFillNumber(&PressionTempWN[0], "Pression", "Pression mb", "%10.6m",  0., 1500., 0., 0.);
     IUFillNumber(&PressionTempWN[1], "Temperature", "Temperature Â°c", "%10.6m", -50., +50., 0., 0.);
@@ -266,5 +340,5 @@
 
 /**************************************************************************************
-** DÃ©finition de tous les vecteurs de la boÃ®te de dialogue INDI 
+** DÃ©finition de tous les vecteurs de la boÃ®te de dialogue INDI
 ** Cette procÃ©dure doit Ãªtre obligatoirement prÃ©sente dans tous pilotes Indi
 **
@@ -280,5 +354,6 @@
     IDDefSwitch(&ConnectSP, NULL);
     IDDefText(&ObjectTP, NULL);
-    IDDefNumber(&EquatorialCoordsWNP, NULL);      
+    IDDefNumber(&EquatorialCoordsWNP, NULL);
+    IDDefText(&CommandTP, NULL);
     IDDefSwitch(&OnCoordSetSP, NULL);
     IDDefSwitch(&AlignmentSP, NULL);
@@ -290,5 +365,5 @@
     IDDefNumber(&ActualisationNP2, NULL);
     IDDefNumber(&PressionTempWNP, NULL);
-    IDDefNumber(&GeographicCoordsWNP, NULL);  
+    IDDefNumber(&GeographicCoordsWNP, NULL);
 }
 
@@ -309,4 +384,5 @@
     ObjectTP.s			= IPS_IDLE;
     EquatorialCoordsWNP.s	= IPS_IDLE;
+    CommandTP.s			= IPS_IDLE;
     PressionTempWNP.s           = IPS_IDLE;
     GeographicCoordsWNP.s	= IPS_IDLE;
@@ -330,4 +406,5 @@
     IDSetSwitch(&ParkSP, NULL);
     IDSetText(&ObjectTP, NULL);
+    IDSetText(&CommandTP, NULL);
     IDSetNumber(&EquatorialCoordsWNP, NULL);
     IDSetNumber(&PressionTempWNP, NULL);
@@ -374,4 +451,56 @@
         return;
     }
+
+
+    // ===================================
+    // Commands
+    // ===================================
+    if (!strcmp (name, CommandTP.name))
+    {
+        if (IUUpdateText(&CommandTP, texts, names, n) < 0)
+            return;
+
+        IText *eqp = IUFindText (&CommandTP, names[0]);
+
+
+        if (eqp == &CommandT[0])
+        {
+            char chaine[100];
+
+            bool result = false;
+
+            strcpy(chaine, texts[0]);
+
+            if (chaine[0] == 'G')
+            {
+                for (int i = 1; i<=strlen(chaine); i++) chaine[i-1]=chaine[i];
+		
+		IDLog(chaine);
+
+                for (int i = 1; i<SocketsNumber; i++ )
+                {
+                    if (Sockets[i].Connected)
+                    {
+                        result = COMMANDE(i, (char*)"G", chaine);
+                    }
+                }
+            }
+            else
+            {
+                for (int i = 1; i<SocketsNumber; i++ )
+                {
+                    if (Sockets[i].Connected)
+                    {
+                        result = COMMANDE(i, chaine, (char*)"");
+                    }
+                }
+            }
+
+            (result) ? CommandTP.s = IPS_OK : CommandTP.s = IPS_ALERT;
+
+            IDSetText(&CommandTP, NULL);
+        }
+        return;
+    }
 }
 
@@ -383,9 +512,9 @@
 **
 ** const char *dev  contient le nom du dispositif recevant le message (ici indi_BAO)
-** const char *name reÃ§oit  le nom de la rubrique modifiÃ©e par l'utilisateur 
+** const char *name reÃ§oit  le nom de la rubrique modifiÃ©e par l'utilisateur
 ** (ex : les coordonnÃ©es gÃ©ographiques, les coordonnÃ©es horaires de l'objet etc...)
 ** double names[] contient la liste de tous les champs modifiables dans chaque rubrique
 ** (ex : longitude et latitude dans la rubrique coordonnÃ©es gÃ©ographiques
-** char *values[] contient toutes les valeurs (numÃ©riques ou non) mais toujours exprimÃ©es 
+** char *values[] contient toutes les valeurs (numÃ©riques ou non) mais toujours exprimÃ©es
 ** sous la forme d'une chaÃ®ne de caractÃšres
 **
@@ -477,5 +606,5 @@
         {
             // VÃ©rification
-            // IDLog("Geographic : RA %5.2f - DEC %5.2f\n", Latitude, Longitude);
+            // AfficherLog("Geographic : RA %5.2f - DEC %5.2f\n", Latitude, Longitude);
 
             // nset vaut 2, nous sommes donc sÃ»rs qu'il n'y a pas de problÃšme dans les valeurs
@@ -483,5 +612,5 @@
             // voir le code plus haut pour comprendre...
 
-            // On change la couleur de la "diode" de la rubrique coordonnÃ©es 
+            // On change la couleur de la "diode" de la rubrique coordonnÃ©es
             // gÃ©ographiques de la boÃ®te en vert
 
@@ -575,5 +704,5 @@
             fs_sexa(DecStr, newDEC, 2, 3600);
 
-            IDLog("We received JNow RA %s - DEC %s\n", RAStr, DecStr);
+            AfficherLog("We received JNow RA %s - DEC %s\n", RAStr, DecStr);
 
             // on convertit les coordonnÃ©es Ã©quatoriales de la zone du ciel observÃ©e
@@ -600,6 +729,6 @@
         return;
     }
-    
-    
+
+
     // ===================================
     // Pression, Temperature
@@ -642,11 +771,11 @@
 
         if (nset == 2)
-        {  
-	    PressionTempWNP.s = IPS_OK;
+        {
+            PressionTempWNP.s = IPS_OK;
 
             IDSetNumber(&PressionTempWNP, NULL);
-		    
+
             Pression = newPression;
-	    Temp = newTemperature;
+            Temp = newTemperature;
         }
         else
@@ -735,5 +864,5 @@
 ** L'utilisateur clique sur l'un des boutons de la boÃ®te Indi
 ** MÃªme observation que pour la procÃ©dure prÃ©cÃ©dente
-** 
+**
 ***************************************************************************************/
 
@@ -786,10 +915,10 @@
 
         MethodeAlignement = get_switch_index(&AlignmentSP) + 1 ;
-	
-	/*char chaine[100];	
-	sprintf(chaine, "****************************************** %i\n", MethodeAlignement);
-	IDLog(chaine);*/
-        
-	AlignmentSP.s = IPS_OK;
+
+        /*char chaine[100];
+        sprintf(chaine, "****************************************** %i\n", MethodeAlignement);
+        AfficherLog(chaine);*/
+
+        AlignmentSP.s = IPS_OK;
         IDSetSwitch(&AlignmentSP, NULL);
 
@@ -827,8 +956,10 @@
             EquatorialCoordsWNP.s = IPS_IDLE;
             ObjectTP.s = IPS_IDLE;
+            CommandTP.s = IPS_IDLE;
 
             IDSetSwitch(&ConnectSP, "Envoi de la commande Abort\n");
             IDSetNumber(&EquatorialCoordsWNP, NULL);
             IDSetText(&ObjectTP, NULL);
+            IDSetText(&CommandTP, NULL);
         }
 
@@ -851,8 +982,10 @@
             EquatorialCoordsWNP.s = IPS_IDLE;
             ObjectTP.s = IPS_IDLE;
+            CommandTP.s = IPS_IDLE;
 
             IDSetSwitch(&ConnectSP, "Envoi de la commande Park\n");
             IDSetNumber(&EquatorialCoordsWNP, NULL);
             IDSetText(&ObjectTP, NULL);
+            IDSetText(&CommandTP, NULL);
         }
 
@@ -883,8 +1016,8 @@
 
             Sockets[SocketsNumber].IP = server.recupip(Sockets[SocketsNumber].new_sock);
-	    
-	    Sockets[SocketsNumber].AlignementAntenne->MethodeAlignement = MethodeAlignement;
-
-            Sockets[SocketsNumber++].Connected = true;	    
+
+            Sockets[SocketsNumber].AlignementAntenne->MethodeAlignement = MethodeAlignement;
+
+            Sockets[SocketsNumber++].Connected = true;
 
             InitThreadOK = true;
@@ -892,7 +1025,7 @@
         catch ( SocketException& e )
         {
-            /*IDLog("Indi_BAO, pThreadSocket exception : ");
-            IDLog(e.description().c_str());
-            IDLog("\n");*/
+            /*AfficherLog("Indi_BAO, pThreadSocket exception : ");
+            AfficherLog(e.description().c_str());
+            AfficherLog("\n");*/
         }
 
@@ -921,5 +1054,5 @@
 /**************************************************************************************
 ** Extraction de la position de l'antenne aprÃšs l'envoi de la commande P
-** Le retour de la commande P est POSITION/valeur_az/valeur_alt/ 
+** Le retour de la commande P est POSITION/valeur_az/valeur_alt/
 ** Ce retour est envoyÃ© dans la chaÃ®ne str
 ** ExtractPosition retourne une structure Position contenant Valeur_az et Valeur_alt
@@ -950,5 +1083,5 @@
     }
 
-    IDLog((str +" failed !\n").c_str());
+    AfficherLog((str +" failed !\n").c_str());
 
     return false;
@@ -983,7 +1116,7 @@
         {
             newRA  = newRA2;
-	    newDEC = newDEC2;
-	  
-	    // Dans les modes d'alignement AFFINE et TAKI, on applique la matrice de correction
+            newDEC = newDEC2;
+
+            // Dans les modes d'alignement AFFINE et TAKI, on applique la matrice de correction
             // sur les coordonnÃ©es horaires de l'objet visÃ©
 
@@ -996,5 +1129,5 @@
 
                 if (Sockets[i].AlignementAntenne->MethodeAlignement ==  AFFINE ||
-                    Sockets[i].AlignementAntenne->MethodeAlignement ==  TAKI)
+                        Sockets[i].AlignementAntenne->MethodeAlignement ==  TAKI)
                 {
                     // On crÃ©e un vecteur avec pour coordonnÃ©es
@@ -1010,6 +1143,6 @@
                     // Message pour l'utilisateur et les logs
 
-                    IDLog("Application de la matrice AFFINE/TAKI\nCoordonnees initiales: AD = %s  Dec = %s\n", DHMS(newRA2*N180divPi, true ).c_str(),
-                          DHMS(newDEC2*N180divPi, false ).c_str());
+                    AfficherLog("Application de la matrice AFFINE/TAKI\nCoordonnees initiales: AD = %s  Dec = %s\n", DHMS(newRA2*N180divPi, true ).c_str(),
+                                DHMS(newDEC2*N180divPi, false ).c_str());
 
                     // On applique la matrice de transformation
@@ -1030,7 +1163,7 @@
                     newDEC = result.y;
 
-                    IDLog("Coordonnees finales: AD = %s  Dec = %s\n", DHMS(newRA*N180divPi, true ).c_str(),
-                          DHMS(newDEC*N180divPi, false ).c_str());
-                }               
+                    AfficherLog("Coordonnees finales: AD = %s  Dec = %s\n", DHMS(newRA*N180divPi, true ).c_str(),
+                                DHMS(newDEC*N180divPi, false ).c_str());
+                }
             }
             else
@@ -1038,5 +1171,5 @@
                 if (Sockets[i].AlignementAntenne->AlignementEnCours)
                 {
-		    // Si la matrice n'est pas prÃªte, c'est que la procÃ©dure d'alignement de l'antenne i n'est pas encore achevÃ©e.
+                    // Si la matrice n'est pas prÃªte, c'est que la procÃ©dure d'alignement de l'antenne i n'est pas encore achevÃ©e.
                     // On se contente ici d'appliquer des deltas en ascension droite et en dÃ©clinaison. Ces deltas sont envoyÃ©s de BAOcontrol
                     // au driver indi_BAO par l'intermÃ©diaire du fichier AlignementAntennes.cfg
@@ -1047,9 +1180,9 @@
                     newDEC = newDEC2 + Sockets[i].AlignementAntenne->delta_de[Sockets[i].AlignementAntenne->nbrcorrections] * PasDeltaDe;
 
-                    IDLog("Alignement en cours.\nDelta RA=%i  delta Dec=%i\n", Sockets[i].AlignementAntenne->delta_ad[Sockets[i].AlignementAntenne->nbrcorrections], Sockets[i].AlignementAntenne->delta_de[Sockets[i].AlignementAntenne->nbrcorrections]);
-                    IDLog("Nouvelles CoordonnÃ©es AD =%s  Dec = %s\n", DHMS(newRA*N180divPi, true).c_str(), DHMS(newDEC*N180divPi, false).c_str());		  
-		}
+                    AfficherLog("Alignement en cours.\nDelta RA=%i  delta Dec=%i\n", Sockets[i].AlignementAntenne->delta_ad[Sockets[i].AlignementAntenne->nbrcorrections], Sockets[i].AlignementAntenne->delta_de[Sockets[i].AlignementAntenne->nbrcorrections]);
+                    AfficherLog("Nouvelles CoordonnÃ©es AD =%s  Dec = %s\n", DHMS(newRA*N180divPi, true).c_str(), DHMS(newDEC*N180divPi, false).c_str());
+                }
             }
-    
+
             // Calcule la hauteur et l'azimut de la zone du ciel pointÃ©e (en fonction de la date et du lieu d'observation)
 
@@ -1064,14 +1197,14 @@
                 // AprÃšs s'Ãªtre assurer que nous utilisons la mÃ©thode SIMPLE et que la matrice de rotation est ok
 
-                IDLog("Application de la matrice SIMPLE\nCoordonnees initiales: Azi = %s  Haut = %s\n", DHMS(targetAz*N180divPi, false ).c_str(),
-                      DHMS(targetAlt*N180divPi, false ).c_str());
+                AfficherLog("Application de la matrice SIMPLE\nCoordonnees initiales: Azi = %s  Haut = %s\n", DHMS(targetAz*N180divPi, false ).c_str(),
+                            DHMS(targetAlt*N180divPi, false ).c_str());
 
                 // On constitue un vecteur vect
                 // Les coordonnÃ©es du vecteur correspondent Ã  la position
                 // d'un point dÃ©fini par une latitude targetAlt et une longitude targetAz
-		// sur une sphÃšre de rayon 1.
+                // sur une sphÃšre de rayon 1.
                 // On reconnaÃ®t les formules de passage des coordonnÃ©es
                 // sphÃ©riques aux coordonnÃ©es rectangulaires
-		
+
 
                 vect.x = cos(targetAz) * cos(targetAlt);
@@ -1081,6 +1214,6 @@
 
                 // Application de la matrice SIMPLE
-		
-		Sockets[i].AlignementAntenne->AppliquerMatriceCorrectionSimple(&result, vect);
+
+                Sockets[i].AlignementAntenne->AppliquerMatriceCorrectionSimple(&result, vect);
 
 
@@ -1091,6 +1224,6 @@
                 {
                     targetAz = atan( result.y / result.x );
-		    
-	            if (result.x < 0) targetAz += Pi;
+
+                    if (result.x < 0) targetAz += Pi;
                 }
                 else targetAz = Pidiv2;
@@ -1101,6 +1234,6 @@
 
 
-                IDLog("Coordonnees finales: Azi = %s  Haut = %s\n", DHMS(targetAz*N180divPi, false ).c_str(),
-                      DHMS(targetAlt*N180divPi, false ).c_str());
+                AfficherLog("Coordonnees finales: Azi = %s  Haut = %s\n", DHMS(targetAz*N180divPi, false ).c_str(),
+                            DHMS(targetAlt*N180divPi, false ).c_str());
             }
 
@@ -1129,24 +1262,24 @@
             fs_sexa(AltStr, targetAlt, 2, 3600);
 
-            IDLog("Coordonnees horizontales finales: Azi = %s  Haut= %s\n", AzStr, AltStr);
+            AfficherLog("Coordonnees horizontales finales: Azi = %s  Haut= %s\n", AzStr, AltStr);
 
 
             // Conversion des deux angles en pas codeurs
 
-            if ( targetAlt < HAUTMIN )
-            {
-                // L'objet est trop bas ( < 30Â°). On annule le suivi...
-
-                IDSetSwitch(&OnCoordSetSP, "Erreur ! L objet suivi est situe a moins de 30 deg au-dessus de l horizon. Goto annule.");
-
-                Suivi = false;
-
-                RealisationGoto = false;
-
-                InitAntennes();
-
-                return;
-            }
-            else
+            /*  if ( targetAlt < HAUTMIN )
+              {
+                  // L'objet est trop bas ( < 30Â°). On annule le suivi...
+
+                  IDSetSwitch(&OnCoordSetSP, "Erreur ! L objet suivi est situe a moins de 30 deg au-dessus de l horizon. Goto annule.");
+
+                  Suivi = false;
+
+                  RealisationGoto = false;
+
+                  InitAntennes();
+
+                  return;
+              }
+              else*/
             {
                 // Si la hauteur est supÃ©rieure Ã  90Â°, on doit ajouter 180Â° Ã  l'azimut et corriger
@@ -1159,4 +1292,6 @@
                 }
 
+                if ( targetAlt < HAUTMIN ) targetAlt = HAUTMIN;
+
                 // On applique la formule de Marc pour convertir la hauteur en nombre de pas codeur alt
 
@@ -1166,8 +1301,8 @@
 
                 Sockets[i].TargetPosition.x = (int) Arrondi( targetAz * (double)NBREPASCODEURSAZ / 360.0);
-		
-		// Message de debug
-
-                IDLog("Nbre de pas codeurs Az = %i  Alt = %i\n", Sockets[i].TargetPosition.x, Sockets[i].TargetPosition.y);
+
+                // Message de debug
+
+                AfficherLog("Nbre de pas codeurs Az = %i  Alt = %i\n", Sockets[i].TargetPosition.x, Sockets[i].TargetPosition.y);
             }
         }
@@ -1200,5 +1335,5 @@
 void BAO::DeconnecterSocket(int num)
 {
-    if (Sockets[num].Connected) IDLog("Deconnexion de l antenne : %s\n", Sockets[num].IP.c_str());
+    if (Sockets[num].Connected) AfficherLog("Deconnexion de l antenne : %s\n", Sockets[num].IP.c_str());
     Sockets[num].new_sock.shutdown();
     Sockets[num].Connected = false;
@@ -1256,7 +1391,7 @@
 
         CalculTSL();
-	
-	
-	// On charge les paramÃštres de correction des antennes toutes les demi-secondes
+
+
+        // On charge les paramÃštres de correction des antennes toutes les demi-secondes
 
         if ( compt%500 == 0  && tv.tv_usec/1.0E6 > 0.5 )
@@ -1267,16 +1402,16 @@
                 {
                     // Si l'antenne i est connectÃ©e, on charge les paramÃštres
-                    Sockets[i].AlignementAntenne->TransmettreParametresClasseAstro(Annee, Mois, Jour, Heu, Min, Sec, Longitude, Latitude, Pression, Temp);	   
-		    
-		    if (Sockets[i].AlignementAntenne->MethodeAlignement == SIMPLE )
-		    {
-		      //IDLog("chargement simple\n");
-		      Sockets[i].AlignementAntenne->ChargementParametresAlignement(Sockets[i].IP, "/home/" + (string)getenv("USER") + "/AlignementAntennesSIMPLE.cfg", targetRA * 15 * Pidiv180, targetDEC * Pidiv180);
-		    }
-		    else
-		       {
-			// IDLog("chargement taki\n");
-		      Sockets[i].AlignementAntenne->ChargementParametresAlignement(Sockets[i].IP, "/home/" + (string)getenv("USER") + "/AlignementAntennesTAKI.cfg", targetRA * 15 * Pidiv180, targetDEC * Pidiv180);
-		    }
+                    Sockets[i].AlignementAntenne->TransmettreParametresClasseAstro(Annee, Mois, Jour, Heu, Min, Sec, Longitude, Latitude, Pression, Temp);
+
+                    if (Sockets[i].AlignementAntenne->MethodeAlignement == SIMPLE )
+                    {
+                        //AfficherLog("chargement simple\n");
+                        Sockets[i].AlignementAntenne->ChargementParametresAlignement(Sockets[i].IP, "/home/" + (string)getenv("USER") + "/AlignementAntennesSIMPLE.cfg", targetRA * 15 * Pidiv180, targetDEC * Pidiv180);
+                    }
+                    else
+                    {
+                        // AfficherLog("chargement taki\n");
+                        Sockets[i].AlignementAntenne->ChargementParametresAlignement(Sockets[i].IP, "/home/" + (string)getenv("USER") + "/AlignementAntennesTAKI.cfg", targetRA * 15 * Pidiv180, targetDEC * Pidiv180);
+                    }
                 }
             }
@@ -1342,5 +1477,5 @@
                         // on l'affiche dans le log
 
-                        IDLog("Reponse recue de %s : %s\n", Sockets[i].IP.c_str(), reponse.c_str());
+                        AfficherLog("Reponse recue de %s : %s\n", Sockets[i].IP.c_str(), reponse.c_str());
 
                         // On vÃ©rifie ici les acknowledges
@@ -1383,4 +1518,6 @@
                                     IDSetSwitch(&OnCoordSetSP, "ALERTE antenne %s : position de l antenne inconnue !\n",
                                                 Sockets[i].IP.c_str());
+                                    AfficherLog("ALERTE antenne %s : position de l antenne inconnue !\n",
+                                                Sockets[i].IP.c_str());
 
                                     // La position de l'antenne st donc inconnue
@@ -1436,4 +1573,5 @@
 
                                     IDSetSwitch(&ParkSP, "ALERTE antenne %s : erreur PARK !\n", Sockets[i].IP.c_str());
+                                    AfficherLog("ALERTE antenne %s : erreur ABORT !\n",  Sockets[i].IP.c_str());
                                 }
                                 else if (Sockets[i].ack_park && reponse.find("OK")!=string::npos)
@@ -1461,4 +1599,5 @@
 
                                     IDSetSwitch(&AbortSlewSP, "ALERTE antenne %s : erreur ABORT !\n",  Sockets[i].IP.c_str());
+                                    AfficherLog("ALERTE antenne %s : erreur ABORT !\n",  Sockets[i].IP.c_str());
                                 }
                                 else if (Sockets[i].ack_abort && reponse.find("OK")!=string::npos)
@@ -1485,9 +1624,10 @@
                                     // Message d'erreur
 
-                                    IDSetSwitch(&OnCoordSetSP, "ALERTE antenne %s : Erreur GOTO !\n",  Sockets[i].IP.c_str());
-
+                                    IDSetSwitch(&OnCoordSetSP, "ALERTE antenne %s : Erreur NACK GOTO !\nRetour : %s\n",  Sockets[i].IP.c_str(), reponse.c_str());
+                                    AfficherLog("ALERTE antenne %s : Erreur NACK GOTO !\nRetour : %s\n",  Sockets[i].IP.c_str(), reponse.c_str());
                                     // On dÃ©connecte l'antenne. Elle ne semble pas en mesure d'exÃ©cuter les ordres goto
 
-                                    DeconnecterSocket(i);
+                                    // 02/04/2012 Le fait de recevoir un nack/eos ne nÃ©cessite pas de devoir dÃ©connecter l'antenne
+                                    // DeconnecterSocket(i);
                                 }
                                 else if (Sockets[i].ack_goto)
@@ -1576,7 +1716,7 @@
                     DeconnecterSocket(i);
 
-                    IDLog("Indi_BAO, SocketException IsPoll : ");
-                    IDLog(e.description().c_str());
-                    IDLog("\n");
+                    AfficherLog("Indi_BAO, SocketException IsPoll : ");
+                    AfficherLog(e.description().c_str());
+                    AfficherLog("\n");
                 }
             }
@@ -1662,12 +1802,12 @@
         {
             // DÃ©lais entre deux actualisations
-            
+
             // Actualisation toutes les 15 minutes en mode transit (par dÃ©faut)
 
-            double delai = ActualisationTMTransit / 3600.0 / 24.0;   
-	    
-	    // et 5 secs en mode tracking (par dÃ©faut)
-
-            if (TrackingMode == BAO_TRACKING) delai = ActualisationTMTracking / 3600.0 / 24.0;   
+            double delai = ActualisationTMTransit / 3600.0 / 24.0;
+
+            // et 5 secs en mode tracking (par dÃ©faut)
+
+            if (TrackingMode == BAO_TRACKING) delai = ActualisationTMTracking / 3600.0 / 24.0;
 
 
@@ -1705,5 +1845,5 @@
                     IDSetSwitch(&OnCoordSetSP, "Erreur ! Plus d antennes connectees !");
 
-                    if (Suivi) IDLog("ArrÃªt du suivi !");
+                    if (Suivi) AfficherLog("ArrÃªt du suivi !");
 
                     RealisationGoto=false;
@@ -1810,11 +1950,13 @@
 
                                 //Message Ã  l'attention de l'utilisateur
-				
+
                                 IDSetSwitch(&OnCoordSetSP, "Erreur sur l antenne %s : pas d acknowledge recu apres l ordre POSITION. \
 Deconnexion de l antenne.", Sockets[i].IP.c_str());
+                                AfficherLog("Erreur sur l antenne %s : pas d acknowledge recu apres l ordre POSITION. \
+Deconnexion de l antenne.", Sockets[i].IP.c_str());
 
                                 // On dÃ©connecte l'antenne
-				
-                                DeconnecterSocket(i);
+
+                                // DeconnecterSocket(i);
                             }
                         }
@@ -1831,10 +1973,10 @@
                             // Tout vas bien
                             // On ne consigne aucune anomalie
-                            
+
                             Sockets[i].AttenteExecution = 0;
                             Sockets[i].AnomaliesExecution = 0;
 
                             //On passe Ã  l'Ã©tape suivante
-			    
+
                             Sockets[i].etape++;
                         }
@@ -1853,5 +1995,5 @@
 
                                 // On consigne une erreur grave. L'antenne tarde Ã  rÃ©pondre
-				
+
                                 Sockets[i].AnomaliesExecution++;
                             }
@@ -1859,5 +2001,5 @@
                             // Aucune rÃ©ponse de l'antenne depuis plusieurs minutes
                             // On la dÃ©connecte
-                            
+
                             if (Sockets[i].AnomaliesExecution > MAXANOMALIES)
                             {
@@ -1867,11 +2009,13 @@
 
                                 //Message d'erreur
-				
+
                                 IDSetSwitch(&OnCoordSetSP, "Erreur sur l antenne %s : la position retournee n est pas valide. \
 Deconnexion de l antenne.", Sockets[i].IP.c_str());
+                                AfficherLog("Erreur sur l antenne %s : la position retournee n est pas valide. \
+Deconnexion de l antenne.", Sockets[i].IP.c_str());
 
                                 //DÃ©connexion de l'antenne
-				
-                                DeconnecterSocket(i);
+
+                                // DeconnecterSocket(i);
                             }
                         }
@@ -1914,6 +2058,7 @@
 
                                 IDSetSwitch(&OnCoordSetSP, "Erreur sur l antenne %s : pas d acknowledge recu apres l ordre GOTO. Deconnexion de l antenne.", Sockets[i].IP.c_str());
-
-                                DeconnecterSocket(i);
+                                AfficherLog("Erreur sur l antenne %s : pas d acknowledge recu apres l ordre GOTO. Deconnexion de l antenne.", Sockets[i].IP.c_str());
+
+                                // DeconnecterSocket(i);
                             }
                         }
@@ -1958,7 +2103,9 @@
                                 // Message d'erreur
                                 IDSetSwitch(&OnCoordSetSP, "Erreur sur l antenne %s : l antenne n a pas renvoye GOTO/OK. Deconnexion de l antenne.", Sockets[i].IP.c_str());
+                                AfficherLog("Erreur sur l antenne %s : l antenne n a pas renvoye GOTO/OK. Deconnexion de l antenne.", Sockets[i].IP.c_str());
+
 
                                 //DÃ©connexion de l'antenne
-                                DeconnecterSocket(i);
+                                // DeconnecterSocket(i);
                             }
                         }
@@ -1972,5 +2119,5 @@
 
         ///////////////////////////////////////
-        // RÃ©alisation d'un goto - traitement de l'Ã©tape 3 
+        // RÃ©alisation d'un goto - traitement de l'Ã©tape 3
         // On place cette partie du traitement en dehors du switch et de la boucle
         // pour pouvoir envoyer les gotos Ã  toutes les antennes lorsque l'on a la confirmation
@@ -2031,8 +2178,9 @@
 
                     IDSetSwitch(&OnCoordSetSP, "Erreur sur l antenne %s : deconnexion de l antenne.", Sockets[i].IP.c_str());
+                    AfficherLog("Erreur sur l antenne %s : deconnexion de l antenne.", Sockets[i].IP.c_str());
 
                     // DÃ©connexion antenne
 
-                    DeconnecterSocket(i);
+                    // DeconnecterSocket(i);
                 }
             }
@@ -2057,5 +2205,5 @@
     {
         // Transit
-        
+
     case BAO_TRANSIT:
 
@@ -2100,9 +2248,9 @@
 
         // Tracking
-	
+
     case BAO_TRACKING:
 
         // Ãteindre les voyants dans la boÃ®te de dialogue Indi
-        
+
         EquatorialCoordsWNP.s = IPS_BUSY;
         AbortSlewSP.s = IPS_IDLE;
@@ -2155,5 +2303,5 @@
         // Petit message
 
-        IDLog("\nHello BAORadio !\n");
+        AfficherLog("\nHello BAORadio !\n");
 
         // On lance le thread !
@@ -2166,5 +2314,5 @@
         if (pthread_create (&th1, NULL, (void*(*)(void*))LancementThread, this) < 0)
         {
-            IDLog("pthread_create error for threadSocket\n");
+            AfficherLog("pthread_create error for threadSocket\n");
         }
 
@@ -2179,5 +2327,5 @@
         ConnectSP.s = IPS_IDLE;
         IDSetSwitch (&ConnectSP, "BAORadio is offline.");
-        IDLog("Telescope is offline.");
+        AfficherLog("Telescope is offline.");
 
         // On dÃ©connecte tous les sockets
@@ -2238,5 +2386,5 @@
         Sockets[numsocket].new_sock << chaine;
 
-        IDLog("Commande envoyee a %s: %s", Sockets[numsocket].IP.c_str(), chaine);
+        AfficherLog("Commande envoyee a %s: %s", Sockets[numsocket].IP.c_str(), chaine);
     }
     catch (SocketException& e)
@@ -2246,7 +2394,7 @@
         DeconnecterSocket(numsocket);
 
-        IDLog("Indi_BAO, COMMANDE exception : ");
-        IDLog(e.description().c_str());
-        IDLog("\n");
+        AfficherLog("Indi_BAO, COMMANDE exception : ");
+        AfficherLog(e.description().c_str());
+        AfficherLog("\n");
 
         return false;
@@ -2328,9 +2476,9 @@
 
     // ne pas faire des tours complets en Az pour rien...
-    
+
     while (deltaAz > NBREPASCODEURSAZ) deltaAz -= NBREPASCODEURSAZ;
 
     // Doit rÃ©soudre tous les problÃšmes concernant l'azimut...
-    
+
     if (deltaAz > NBREPASCODEURSAZ / 2 )
     {
@@ -2365,5 +2513,5 @@
 {
     //Il ne faut exÃ©cuter la fonction qu'une seule fois
-    
+
     static int isInit = 0;
 
@@ -2464,5 +2612,5 @@
     ConnectSP.s = IPS_IDLE;
     IDSetSwitch(&ConnectSP, "The connection to the telescope is lost.");
-    IDLog("arret");
+    AfficherLog("arret");
     return;
 }
Index: /BAORadio/libindi/libindi/drivers/telescope/BAO.h
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/BAO.h	(revision 649)
+++ /BAORadio/libindi/libindi/drivers/telescope/BAO.h	(revision 650)
@@ -23,4 +23,6 @@
 #include <fstream>
 
+#include <stdarg.h>
+
 #include <termios.h>
 #include <unistd.h>
@@ -148,4 +150,6 @@
     void connection_lost();
     void connection_resumed();
+    
+    void AfficherLog(const char* Message,...);
 
 
@@ -166,4 +170,5 @@
     IText PortT[1];
     IText ObjectT[1];
+    IText CommandT[1];
 
     /* Numbers */
@@ -192,4 +197,5 @@
     ITextVectorProperty PortTP;
     ITextVectorProperty ObjectTP;
+    ITextVectorProperty CommandTP;
 
 
Index: /BAORadio/libindi/libindi/result_recherche_bao
===================================================================
--- /BAORadio/libindi/libindi/result_recherche_bao	(revision 649)
+++ /BAORadio/libindi/libindi/result_recherche_bao	(revision 650)
@@ -0,0 +1,27 @@
+
+
+Results from query to  NASA/IPAC Extragalactic Database (NED),
+which is operated by the Jet Propulsion Laboratory, California Institute of
+Technology, under contract with the National Aeronautics and Space Administration.
+This work was (partially) supported by the US National Virtual Observatory
+development project, which is funded by the National Science Foundation
+under cooperative agreement AST0122449 with The Johns Hopkins University.
+
+
+
+queryDateTime:2012-04-01T09:37:58PDT
+
+
+
+Main Information Table for MESSIER 031
+
+
+
+Equinox:J2000.0
+
+
+
+CoordSystem:Equatorial
+
+No.|Object Name|RA(deg)|DEC(deg)|Type|Velocity|Redshift|Redshift Flag|Magnitude and Filter|Distance (arcmin)|References|Notes|Photometry Points|Positions|Redshift Points|Diameter Points|Associations
+1|MESSIER 031| 10.68479 |  41.26906 |G|  -300|-0.001001 |    | 4.36||3374|18|138|8|26|7|2
