Index: /BAORadio/libindi/libindi/.kdev4/libindi.kdev4
===================================================================
--- /BAORadio/libindi/libindi/.kdev4/libindi.kdev4	(revision 491)
+++ /BAORadio/libindi/libindi/.kdev4/libindi.kdev4	(revision 492)
@@ -1,4 +1,4 @@
 [Buildset]
-BuildItems=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x00)
+BuildItems=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00\x00\x00\x01\x00\x00\x00\x0e\x00l\x00i\x00b\x00i\x00n\x00d\x00i)
 
 [CMake]
Index: /BAORadio/libindi/libindi/BAOTest/BAOtest_main.cpp
===================================================================
--- /BAORadio/libindi/libindi/BAOTest/BAOtest_main.cpp	(revision 491)
+++ /BAORadio/libindi/libindi/BAOTest/BAOtest_main.cpp	(revision 492)
@@ -104,4 +104,6 @@
 ***************************************************************************************/
 
+#define ERREURS 50
+
 int main ( int argc, int argv[] )
 {
@@ -109,4 +111,9 @@
     char cIP;
     char IP[20];
+    bool Aleat;
+
+    // Parametres sups
+    bool ErreursAleatoires=false;
+    bool Affichage=false;
 
     // Position PARK
@@ -115,8 +122,7 @@
 
     //init nbs alÃ©atoires
-    srand(time(NULL));
-
-    //ProbabilitÃ© qu'il y ait une erreur
-    int ERREUR=50;
+    if (ErreursAleatoires) srand(time(NULL));
+
+    
 
     std::cout <<  "******************\n";
@@ -128,5 +134,6 @@
     std::cin >> cIP;
 
-    if (cIP=='1') strcpy(IP, "192.168.0.1"); else strcpy(IP, "127.0.0.1");
+    if (cIP=='1') strcpy(IP, "192.168.0.1");
+    else strcpy(IP, "127.0.0.1");
 
 
@@ -136,137 +143,145 @@
 
         std::string reply;
-        std::string asks;
-        char chaine[500];
-
-        int numserveur=NumeroServeur();
-
+        std::string asks,memasks;
+        char chaine[5000];
 
         while (true)
         {
-            try
-            {
+            
                 client_socket >> asks;
 
-                if (asks.length()>1)
+                int pos=asks.find("\n");
+                memasks=asks;
+		
+                while ((pos!=string::npos) && (asks.length()>1))
                 {
-                std::cout <<  "Pilote BAO : " << asks ;
-
-		strcpy(chaine, "");
-
-                if (asks.find("STATUS")!=string::npos)
-                {
-                    strcpy(chaine, "ACK/STATUS\n");
-                    client_socket << chaine;
-
-                    std::cout <<  "MicrocontrÃŽleur : " << chaine;
-
-                    if (rand()%ERREUR!=1)
-                    {
-                        strcpy(chaine, "STATUS/READY\n");
-                    }
-                    else
-                    {
-                        strcpy(chaine, "STATUS/BUSY\n");
-                    }
-                }
-
-                if (asks.find("POS")!=string::npos)
-                {
-
-                    strcpy(chaine,"ACK/POS\n");
-                    client_socket << chaine;
-
-                    std::cout <<  "MicrocontrÃŽleur : " << chaine;
-
-                    if (rand()%ERREUR!=1)
-                    {
-                        sprintf(chaine, "POS/%i/%i/\n", Pos.x, Pos.y);
-                    }
-                    else
-                    {
-                        strcpy(chaine, "ERR/HALT/POS/\n");   //erreur moteur !
-                    }
-                }
-
-                if (asks.find("GOTO")!=string::npos)
-                {
-                    Pos=ExtractPosition(asks);
-
-                    strcpy(chaine,"ACK/GOTO/\n");
-                    client_socket << chaine;
-
-                    std::cout <<  "MicrocontrÃŽleur : " << chaine;
-
-                    std::cout <<  "Positionnement de l antenne...\n";
-
-                    sleep(rand()%10);
-
-                    if (rand()%ERREUR!=1)
-                    {
-                        strcpy(chaine, "OK/GOTO/\n");
-                    }
-                    else
-                    {
-                        strcpy(chaine, "ERR/HALT/GOTO/\n");   //erreur moteur !
-                    }
-                }
-
-                if (asks.find("PARK")!=string::npos)
-                {
-
-                    strcpy(chaine, "ACK/PARK\n");
-                    client_socket << chaine;
-
-                    std::cout <<  "MicrocontrÃŽleur : " << chaine;
-
-                    if (rand()%ERREUR!=1)
-                    {
-                        strcpy(chaine, "OK/PARK/\n");
-                    }
-                    else
-                    {
-                        strcpy(chaine, "ERR/HALT/PARK/\n");   //erreur
-                    }
-                }
-
-                if (asks.find("ABORT")!=string::npos)
-                {
-
-                    strcpy(chaine,"ACK/ABORT\n");
-                    client_socket << chaine;
-
-                    std::cout <<  "MicrocontrÃŽleur : " << chaine;
-
-                    if (rand()%ERREUR!=1)
-                    {
-                        strcpy(chaine, "OK/ABORT/\n");
-                    }
-                    else
-                    {
-                        strcpy(chaine, "ERR/HALT/ABORT/\n");   //erreur
-                    }                   
-                }
-
-                if (strlen(chaine)>0)
-                {
-                //   usleep(200);
-
-                   client_socket << chaine;
-
-
-                   std::cout <<  "MicrocontrÃŽleur : " << chaine;
-
-                   std::cout <<  "---------\n";
-                }
-
-		
-                }
-            }
-            catch ( SocketException& e) {
-                std::cout  << e.description() << "\n";
-                break;
-            }
-
-           
+                    memasks=asks.substr(pos+1);
+                    asks=asks.substr(0,pos);
+
+                    strcpy(chaine, "");
+
+                   
+                        if (ErreursAleatoires) Aleat=rand()%ERREURS != 1; else Aleat=1;
+
+                        if (Affichage) std::cout <<  "Pilote BAO : " << asks << "\n" ;
+         
+
+                        if (asks.find("STATUS")!=string::npos)
+                        {
+                            strcpy(chaine, "ACK/STATUS\n");
+                            client_socket << chaine;
+
+                            if (Affichage) std::cout <<  "MicrocontrÃŽleur : " << chaine;
+
+                            if (Aleat)
+                            {
+                                strcpy(chaine, "STATUS/READY\n");
+                            }
+                            else
+                            {
+                                strcpy(chaine, "STATUS/BUSY\n");
+                            }
+                        }
+
+                        if (asks.find("POS")!=string::npos)
+                        {
+
+                            strcpy(chaine,"ACK/POS\n");
+                            client_socket << chaine;
+
+                            if (Affichage) std::cout <<  "MicrocontrÃŽleur : " << chaine;
+
+                            if (Aleat)
+                            {
+                                sprintf(chaine, "POS/%i/%i/\n", Pos.x, Pos.y);
+                            }
+                            else
+                            {
+                                strcpy(chaine, "ERR/HALT/POS/\n");   //erreur moteur !
+                            }
+                        }
+
+                        if (asks.find("GOTO")!=string::npos)
+                        {
+                            Pos=ExtractPosition(asks);
+
+                            strcpy(chaine,"ACK/GOTO/\n");
+                            client_socket << chaine;
+
+                            if (Affichage)
+			    { 
+                               std::cout <<  "MicrocontrÃŽleur : " << chaine;
+
+                               std::cout <<  "Positionnement de l antenne...\n";
+                            }
+
+                            // sleep(rand()%10);
+
+                            if (Aleat)
+                            {
+                                strcpy(chaine, "OK/GOTO/\n");
+                            }
+                            else
+                            {
+                                strcpy(chaine, "ERR/HALT/GOTO/\n");   //erreur moteur !
+                            }
+                        }
+
+                        if (asks.find("PARK")!=string::npos)
+                        {
+
+                            strcpy(chaine, "ACK/PARK\n");
+                            client_socket << chaine;
+
+                            if (Affichage) std::cout <<  "MicrocontrÃŽleur : " << chaine;
+
+                            if (Aleat)
+                            {
+                                strcpy(chaine, "OK/PARK/\n");
+                            }
+                            else
+                            {
+                                strcpy(chaine, "ERR/HALT/PARK/\n");   //erreur
+                            }
+                        }
+
+                        if (asks.find("ABORT")!=string::npos)
+                        {
+
+                            strcpy(chaine,"ACK/ABORT\n");
+                            client_socket << chaine;
+
+                            if (Affichage) std::cout <<  "MicrocontrÃŽleur : " << chaine;
+
+                            if (Aleat)
+                            {
+                                strcpy(chaine, "OK/ABORT/\n");
+                            }
+                            else
+                            {
+                                strcpy(chaine, "ERR/HALT/ABORT/\n");   //erreur
+                            }
+                        }
+
+                        if (strlen(chaine)>1)
+                        {
+                            //   usleep(200);
+
+                            client_socket << chaine;
+
+
+                            if (Affichage)
+                            {
+                                std::cout <<  "MicrocontrÃŽleur : " << chaine;
+
+                                std::cout <<  "---------\n";
+                            }
+                        }
+                    
+
+                    asks=memasks;
+                    pos=asks.find("\n");
+                }           
+            
         }
     }
Index: /BAORadio/libindi/libindi/BAOTest/Socket.cpp
===================================================================
--- /BAORadio/libindi/libindi/BAOTest/Socket.cpp	(revision 491)
+++ /BAORadio/libindi/libindi/BAOTest/Socket.cpp	(revision 492)
@@ -8,4 +8,5 @@
 #include <fcntl.h>
 #include <iostream>
+#include <netinet/tcp.h>
 
 
@@ -38,5 +39,8 @@
    //  TIME_WAIT - argh
     int on = 1;
+
     if ( setsockopt ( m_sock, SOL_SOCKET, SO_REUSEADDR, ( const char* ) &on, sizeof ( on ) ) == -1 ) return false;
+
+    if (setsockopt(m_sock, SOL_TCP, TCP_NODELAY, (const char*) &on, sizeof(on)) <0) return false;
 
     return true;
@@ -118,5 +122,4 @@
     else if (sel == 0) // timeout
     {
-        s="\n";
 	return 1;
     }
@@ -140,6 +143,5 @@
                  if (errno == EAGAIN )
 		 {
-		   s="\n";
-	           return 1;
+	           return 0;
 		 }
 		 
Index: /BAORadio/libindi/libindi/BAOTest/Socket.h
===================================================================
--- /BAORadio/libindi/libindi/BAOTest/Socket.h	(revision 491)
+++ /BAORadio/libindi/libindi/BAOTest/Socket.h	(revision 492)
@@ -17,5 +17,5 @@
 const int MAXHOSTNAME = 200;
 const int MAXCONNECTIONS = 5;
-const int MAXRECV = 500;
+const int MAXRECV = 5000;
 
 class Socket
Index: /BAORadio/libindi/libindi/drivers/telescope/BAO.cpp
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/BAO.cpp	(revision 491)
+++ /BAORadio/libindi/libindi/drivers/telescope/BAO.cpp	(revision 492)
@@ -22,4 +22,5 @@
 #include <time.h>
 #include <unistd.h>
+#include <sys/time.h>
 
 #include <config.h>
@@ -64,5 +65,5 @@
         // Trouver Ã©ventuellement un emplacement disponible dans l'intervalle [1..SocketsNumber]
 
-       /* 
+        /*
         for (int i=1; i<SocketsNumber; i++)
         {
@@ -80,5 +81,5 @@
         Sockets[pos].Connected=true;
 
-        if (pos == SocketsNumber) SocketsNumber++;
+        if (pos == SocketsNumber ) SocketsNumber++;
 
         InitThreadOK=true;
@@ -112,5 +113,5 @@
     if (pthread_create (&th1, NULL, pThreadSocket, NULL) < 0)
     {
-        IDLog("pthread_create error for thread 1\n");
+        IDLog("pthread_create error for threadSocket\n");
     }
 
@@ -242,5 +243,5 @@
 
     IDLog("Initilizing from BAO device...\n");
-    IDLog("Driver Version: 2010-05-06\n");
+    IDLog("Driver Version: 2010-05-12\n");
 
     //enableSimulation(true);
@@ -282,8 +283,9 @@
     IUFillTextVector(&ObjectTP, ObjectT, NARRAY(ObjectT), mydev, "OBJECT_INFO", "Object", BASIC_GROUP, IP_RW, 0, IPS_IDLE);
 
+
     // Equatorial Coords - SET
     IUFillNumber(&EquatorialCoordsWN[0], "RA", "RA  H:M:S", "%10.6m",  0., 24., 0., 0.);
     IUFillNumber(&EquatorialCoordsWN[1], "DEC", "Dec D:M:S", "%10.6m", -90., 90., 0., 0.);
-    IUFillNumberVector(&EquatorialCoordsWNP, EquatorialCoordsWN, NARRAY(EquatorialCoordsWN), mydev, "EQUATORIAL_EOD_COORD_REQUEST" , "Equatorial JNow", BASIC_GROUP, IP_RW, 0, IPS_IDLE);
+    IUFillNumberVector(&EquatorialCoordsWNP, EquatorialCoordsWN, NARRAY(EquatorialCoordsWN), mydev, "EQUATORIAL_EOD_COORD_REQUEST" , "Equatorial JNow", BASIC_GROUP, IP_WO, 0, IPS_IDLE);
 
     // Equatorial Coords - READ
@@ -295,5 +297,5 @@
     IUFillNumber(&GeographicCoordsWN[0], "LAT", "Lat  D", "%10.6m",  -90., 90., 0., 0.);
     IUFillNumber(&GeographicCoordsWN[1], "LONG", "Long D", "%10.6m", 0., 360., 0., 0.);
-    IUFillNumberVector(&GeographicCoordsWNP, GeographicCoordsWN, NARRAY(GeographicCoordsWN), mydev, "GEOGRAPHIC_COORD" , "Geographic coords", OPTIONS_GROUP, IP_RW, 0, IPS_IDLE);
+    IUFillNumberVector(&GeographicCoordsWNP, GeographicCoordsWN, NARRAY(GeographicCoordsWN), mydev, "GEOGRAPHIC_COORD" , "Geographic coords", OPTIONS_GROUP, IP_WO, 0, IPS_IDLE);
 
 
@@ -416,7 +418,11 @@
             //VÃ©rification
             //IDLog("Geographic : RA %5.2f - DEC %5.2f\n", Latitude, Longitude);
+
+            GeographicCoordsWNP.s = IPS_OK;
+            IDSetNumber(&GeographicCoordsWNP, NULL);
         }
         else
         {
+            GeographicCoordsWNP.s = IPS_ALERT;
             IDSetNumber(&GeographicCoordsWNP, "Latitude or Longitude missing or invalid");
 
@@ -466,5 +472,5 @@
 
             // on convertit les coordonnÃ©es Ã©quatoriales de la zone du ciel observÃ©e
-            // en unitÃ©s des codeurs des moteurs
+            // en unitÃ©s de codeurs des moteurs
 
             ADDEC2Motor(newRA, newDEC);
@@ -669,5 +675,5 @@
 ** Extraction de la position de l'antenne
 ** dans le retour de la commande POS
-** de type id/POS/Valeur az/Valeur alt
+** POS/Valeur az/Valeur alt
 ***************************************************************************************/
 
@@ -678,10 +684,10 @@
     std::string str2;
 
-    result.x=-1;
-    result.y=-1;
+    result.x = -1;
+    result.y = -1;
 
     int pos = str.find("/");
 
-    if (pos!=string::npos)
+    if (pos != string::npos)
     {
         str2 = str.substr(pos+1);
@@ -689,9 +695,9 @@
         pos = str2.find("/");
 
-        if (pos!=string::npos)
-        {
-            result.x=atoi(str2.substr(0, pos).c_str());
-
-            result.y=atoi(str2.substr(pos+1).c_str());
+        if (pos != string::npos)
+        {
+            result.x = atoi(str2.substr(0, pos).c_str());
+
+            result.y = atoi(str2.substr(pos+1).c_str());
         }
     }
@@ -704,5 +710,5 @@
 /************************************************************************************
 * cette procÃ©dure convertit les coordonnÃ©es equatoriales de l'objet visÃ©
-* en unitÃ©s des codeurs des paraboles (nb de tours des deux axes moteurs depuis la position PARK)
+* en unitÃ©s de codeurs des paraboles (nb de tours des deux axes moteurs depuis la position PARK)
 ************************************************************************************/
 void BAO::ADDEC2Motor(double newRA, double newDEC)
@@ -713,12 +719,12 @@
     char AltStr[32];
 
-    // Calcule l'azimut et la hauteur de la zone du ciel pointÃ©e en fonction de la date et du lieu
-
-    Azimut(tsl, Latitude, newRA*15.0*Pidiv180, newDEC*Pidiv180, &targetAz, &targetAlt);
+    // Calcule la hauteur et l'azimut de la zone du ciel pointÃ©e (en fonction de la date et du lieu)
+
+    Azimut(tsl, Latitude, newRA * 15.0 * Pidiv180, newDEC * Pidiv180, &targetAz, &targetAlt);
 
     // En degrÃ©s
 
-    targetAlt*=N180divPi;
-    targetAz*=N180divPi;
+    targetAlt *= N180divPi;
+    targetAz *= N180divPi;
 
     // Affichage dans les logs
@@ -738,5 +744,6 @@
     targetAlt=((90.0-targetAlt)/60.0);
 
-    if (targetAlt>=1.0) targetAlt=1.0; //on ne peut pas viser un objet situÃ© Ã  moins de 30Â° de l'horizon
+    if (targetAlt>=1.0) targetAlt=1.0; //on ne peut pas viser un objet situÃ© Ã  moins de 30Â°
+                                       //au-dessus de l'horizon
 
     TargetPosition.y=(int)(6000.0*targetAlt);
@@ -746,5 +753,5 @@
 /************************************************************************************
 * Retourne simplement le nombre d'antennes connectÃ©es
-*
+* et capables de communiquer
 ************************************************************************************/
 
@@ -765,5 +772,5 @@
 void BAO::InitAntennes()
 {
-    for (int i=0; i< MAXHOSTNAME ; i++)
+    for (int i=0; i < MAXHOSTNAME ; i++)
     {
         Sockets[i].status=0;
@@ -772,6 +779,5 @@
         Sockets[i].AnomaliesExecution=0;
         Sockets[i].etape=0;
-        Sockets[i].PosValides=false;
-
+      
         Sockets[i].ack_status=false;
         Sockets[i].ack_pos=false;
@@ -779,5 +785,6 @@
         Sockets[i].ack_abort=false;
         Sockets[i].ack_goto=false;
-
+	
+	Sockets[i].PosValides=false;
         Sockets[i].GotoOk=false;
     }
@@ -793,7 +800,11 @@
     static bool ISPOLLRunning=false;
     static int memSocketsNumber=-1;
+    static int compt=1000;
+    int pos;
 
     struct tm date;
     time_t t;
+    struct timeval tv;
+    struct timezone tz;
 
     if (is_connected() == false) return;
@@ -803,30 +814,42 @@
     ISPOLLRunning=true;
 
-
-    //RÃ©cupÃ©ration de la date et de l'heure
-
-    time(&t);
-    date=*gmtime(&t) ;
-
-    Annee=(double)(date.tm_year+1900);
-    Mois=(double)(date.tm_mon+1);
-    Jour=(double)date.tm_mday;
-    Heu=(double)date.tm_hour;
-    Min=(double)date.tm_min;
-    Sec=(double)date.tm_sec;
-    UTCP=0.0;//(double)date.tm_isdst;
-
-
-    //Calcul du temps sidÃ©ral local
-
-    CalculTSL();
-
-
-    //Y a-t-il de nouvelles tentatives de connexion sur le serveur ?
-
-    InitThread();
-
-
-    if (InitThreadOK)  // Il faut au moins une connexion dÃ©tectÃ©e par le thread pour continuer
+    compt++;
+
+
+    //toutes les 100 millisec
+
+    if (compt>100)
+    {
+        //RÃ©cupÃ©ration de la date et de l'heure
+
+        time(&t);
+        date=*gmtime(&t);
+	gettimeofday(&tv, &tz);
+
+        Annee=(double)(date.tm_year+1900);
+        Mois=(double)(date.tm_mon+1);
+        Jour=(double)date.tm_mday;
+        Heu=(double)date.tm_hour;
+        Min=(double)date.tm_min;
+        Sec=(double)date.tm_sec+tv.tv_usec/1.0E6;
+        UTCP=0.0;//(double)date.tm_isdst;
+	
+	
+        //Calcul du temps sidÃ©ral local
+
+        CalculTSL();
+	
+	
+        //Y a-t-il de nouvelles tentatives de connexion sur le serveur ?
+
+        InitThread();
+
+        compt=0;
+    }
+
+
+
+
+    if (InitThreadOK)  // Il faut qu'il y ait eu au moins une connexion dÃ©tectÃ©e par le thread pour continuer
     {
 
@@ -837,5 +860,6 @@
             memSocketsNumber=SocketsNumber;
 
-            IDSetSwitch(&ConnectSP, "Connexion de l antenne %s. (Antennes connectÃ©es : %i)", Sockets[SocketsNumber-1].IP.c_str(), AntennesConnectees());
+            IDSetSwitch(&ConnectSP, "Connexion de l antenne %s. (Antennes connectÃ©es : %i)",
+                        Sockets[SocketsNumber-1].IP.c_str(), AntennesConnectees());
         }
 
@@ -851,182 +875,161 @@
                 {
                     std::string reponse, memreponse;
-
-
                     // on rÃ©cupÃšre la rÃ©ponse du microcontrÃŽleur
 
                     Sockets[i].new_sock >> reponse;
 
-                    if (reponse.length()>1)
+                    //IDSetSwitch(&OnCoordSetSP, "RÃ©ponse ISPOLL : %s\n", reponse.c_str());        // pour vÃ©rif
+
+                    //Dans le cas oÃ¹ plusieurs trames seraient arrivÃ©es entre deux appels de POLLMS
+                    //les traiter successivement
+
+                    pos=reponse.find("\n");   // d'oÃ¹ l'intÃ©rÃªt de mettre un '\n' Ã  la fin des trames
+					      //pour diffÃ©rencier une trame de la prÃ©cÃ©dente
+                    while ((pos!=string::npos) && (reponse.length()>1))
                     {
-                        //Dans le cas oÃ¹ plusieurs trames seraient arrivÃ©es entre deux appels de POLLMS
-                        //les traiter successivement
-
-                        int pos=reponse.find("\n");   // d'oÃ¹ l'intÃ©rÃªt de mettre un '\n' Ã  la fin des trames
-
-                        memreponse=reponse;
-
-                        while (pos!=string::npos)
+                        memreponse=reponse.substr(pos+1);
+
+                        reponse=reponse.substr(0, pos);
+
+
+                        // On traite ici les acknowledges
+
+                        if (reponse.find("ACK")!=string::npos)
                         {
-                            memreponse=reponse.substr(pos+1);
-
-                            reponse=reponse.substr (0, pos);
-
-                            //IDSetSwitch(&OnCoordSetSP, "RÃ©ponse ISPOLL : %s\n", reponse.c_str());        // pour vÃ©rif
-
-
-                            // On traite ici les acknowledges
-
-                            if (reponse.find("ACK")!=string::npos)
-                            {
-                                if (reponse.find("STATUS")!=string::npos)
+                            if (reponse.find("STATUS")!=string::npos)
+                            {
+                                Sockets[i].ack_status=true;
+                            }
+                            else if (reponse.find("POS")!=string::npos)
+                            {
+                                Sockets[i].ack_pos=true;
+                            }
+                            else if (reponse.find("GOTO")!=string::npos)
+                            {
+                                Sockets[i].ack_goto=true;
+                            }
+                            else if (reponse.find("PARK")!=string::npos)
+                            {
+                                Sockets[i].ack_park=true;
+                            }
+                            else if (reponse.find("ABORT")!=string::npos)
+                            {
+                                Sockets[i].ack_abort=true;
+                            }
+                        }
+                        else
+                        {
+                            //rÃ©ponse Ã  la requÃªte STATUS
+                            if (reponse.find("STATUS")!=string::npos)
+                            {
+                                if (reponse.find("READY")!=string::npos)
                                 {
-                                    Sockets[i].ack_status=true;
+                                    Sockets[i].status='R';
                                 }
-
-                                if (reponse.find("POS")!=string::npos)
+                                else if (reponse.find("BUSY")!=string::npos)
                                 {
-                                    Sockets[i].ack_pos=true;
+                                    Sockets[i].status='B';
                                 }
 
-                                if (reponse.find("PARK")!=string::npos)
+                            }//rÃ©ponse Ã  la requÃªte POSITION
+                            else if (reponse.find("POS")!=string::npos)
+                            {
+                                if (reponse.find("ERR")!=string::npos)
                                 {
-                                    Sockets[i].ack_park=true;
+                                    OnCoordSetSP.s = IPS_ALERT;
+                                    IDSetSwitch(&OnCoordSetSP, "ALERTE antenne %s : position de l antenne inconnue !\n",
+                                                Sockets[i].IP.c_str());
+                                    Sockets[i].PosValides=false;
+                                    // Si la position de l'antenne est inconnue, on dÃ©connecte l'antenne
+                                    Sockets[i].Connected=false;
                                 }
-
-                                if (reponse.find("ABORT")!=string::npos)
+                                else
                                 {
-                                    Sockets[i].ack_abort=true;
+                                    OnCoordSetSP.s = IPS_OK;
+                                    Sockets[i].Pos = ExtractPosition(reponse);
+                                    Sockets[i].PosValides = true;
+                                    IDSetSwitch(&ParkSP, "Antenne %s : POSITION OK  (x=%i, y=%i)\n",
+                                                Sockets[i].IP.c_str(), Sockets[i].Pos.x, Sockets[i].Pos.y);
                                 }
 
-                                if (reponse.find("GOTO")!=string::npos)
+                            }//rÃ©ponse Ã  la requÃªte PARK
+                            else if (reponse.find("PARK")!=string::npos)
+                            {
+                                if (reponse.find("ERR")!=string::npos)
                                 {
-                                    Sockets[i].ack_goto=true;
+                                    ParkSP.s = IPS_ALERT;
+                                    IDSetSwitch(&ParkSP, "ALERTE antenne %s : erreur PARK !\n", Sockets[i].IP.c_str());
+                                } else if (reponse.find("OK")!=string::npos)
+                                {
+                                    ParkSP.s = IPS_OK;
+                                    IDSetSwitch(&ParkSP, "Antenne %s : PARK OK\n",  Sockets[i].IP.c_str());
                                 }
-                            }
-                            else
-                            {
-                                //rÃ©ponse Ã  la requÃªte STATUS
-                                if (reponse.find("STATUS")!=string::npos)
+
+                            }//rÃ©ponse Ã  la requÃªte ABORT
+                            else if (reponse.find("ABORT")!=string::npos)
+                            {
+                                if (reponse.find("ERR")!=string::npos)
                                 {
-                                    if (reponse.find("READY")!=string::npos) Sockets[i].status='R';
-
-                                    if (reponse.find("BUSY")!=string::npos) Sockets[i].status='B';
+                                    AbortSlewSP.s = IPS_ALERT;
+                                    IDSetSwitch(&AbortSlewSP, "ALERTE antenne %s : erreur ABORT !\n",  Sockets[i].IP.c_str());
                                 }
 
-                                //rÃ©ponse Ã  la requÃªte POSITION
-                                if (reponse.find("POS")!=string::npos)
+                                if (reponse.find("OK")!=string::npos)
                                 {
-                                    if (reponse.find("ERR")!=string::npos)
+                                    AbortSlewSP.s = IPS_OK;
+                                    IDSetSwitch(&AbortSlewSP, "Antenne %s : ABORT OK\n",  Sockets[i].IP.c_str());
+                                }
+
+                            } //rÃ©ponse Ã  la requÃªte GOTO
+                            else if (reponse.find("GOTO")!=string::npos)
+                            {
+                                if (reponse.find("ERR")!=string::npos)
+                                {
+                                    OnCoordSetSP.s = IPS_ALERT;
+                                    IDSetSwitch(&OnCoordSetSP, "ALERTE antenne %s : Erreur GOTO !\n",  Sockets[i].IP.c_str());
+                                    Sockets[i].Connected=false;
+                                }
+                                else
+                                {
+                                    OnCoordSetSP.s = IPS_OK;
+
+                                    Sockets[i].GotoOk=true;
+
+                                    IDSetSwitch(&ParkSP, "Antenne %s : GOTO OK.\n",  Sockets[i].IP.c_str());
+
+                                    lastRA  = targetRA;
+                                    lastDEC = targetDEC;
+
+                                    //IDLog("We received JNow RA %s - DEC %s\n", RAStr, DecStr);*/
+
+                                    EquatorialCoordsWNP.s = IPS_OK;
+                                    IDSetNumber (&EquatorialCoordsWNP, NULL);
+
+                                    // Fin du Goto pour toutes les antennes ?
+
+                                    int num=0;
+
+                                    for (int j=1; j<SocketsNumber; j++) if (Sockets[j].Connected)
+                                        {
+                                            if (Sockets[j].GotoOk) num++;
+                                        }
+
+                                    if (num == AntennesConnectees())
                                     {
-                                        OnCoordSetSP.s = IPS_ALERT;
-                                        IDSetSwitch(&OnCoordSetSP, "ALERTE !\n");
-                                        IDSetSwitch(&OnCoordSetSP, "Antenne %s : position de l antenne inconnue !\n",  Sockets[i].IP.c_str());
-                                        Sockets[i].PosValides=false;
-                                        Sockets[i].Connected=false;   // Si la position de l'antenne est inconnue, c'est peut Ãªtre risquÃ© de faire un GOto
-                                    }
-                                    else
-                                    {
-                                        OnCoordSetSP.s = IPS_OK;
-                                        Sockets[i].Pos=ExtractPosition(reponse);
-                                        Sockets[i].PosValides=true;
-                                        IDSetSwitch(&ParkSP, "Antenne %s : POSITION OK  (x=%i, y=%i)\n",  Sockets[i].IP.c_str(), Sockets[i].Pos.x, Sockets[i].Pos.y);
-                                    }
-                                }
-
-
-                                //rÃ©ponse Ã  la requÃªte PARK
-                                if (reponse.find("PARK")!=string::npos)
-                                {
-                                    if (reponse.find("ERR")!=string::npos)
-                                    {
-                                        ParkSP.s = IPS_ALERT;
-                                        IDSetSwitch(&ParkSP, "ALERTE !\n");
-                                        IDSetSwitch(&ParkSP, "Antenne %s : erreur PARK !\n", Sockets[i].IP.c_str());
-                                    }
-
-                                    if (reponse.find("OK")!=string::npos)
-                                    {
-                                        ParkSP.s = IPS_OK;
-                                        IDSetSwitch(&ParkSP, "Antenne %s : PARK OK\n",  Sockets[i].IP.c_str());
-                                    }
-                                }
-
-                                //rÃ©ponse Ã  la requÃªte ABORT
-                                if (reponse.find("ABORT")!=string::npos)
-                                {
-                                    if (reponse.find("ERR")!=string::npos)
-                                    {
-                                        AbortSlewSP.s = IPS_ALERT;
-                                        IDSetSwitch(&AbortSlewSP, "ALERTE !\n");
-                                        IDSetSwitch(&AbortSlewSP, "Antenne %s : erreur ABORT !\n",  Sockets[i].IP.c_str());
-                                    }
-
-                                    if (reponse.find("OK")!=string::npos)
-                                    {
-                                        AbortSlewSP.s = IPS_OK;
-                                        IDSetSwitch(&AbortSlewSP, "Antenne %s : ABORT OK\n",  Sockets[i].IP.c_str());
-                                    }
-                                }
-
-                                //rÃ©ponse Ã  la requÃªte GOTO
-                                if (reponse.find("GOTO")!=string::npos)
-                                {
-                                    if (reponse.find("ERR")!=string::npos)
-                                    {
-                                        OnCoordSetSP.s = IPS_ALERT;
-                                        IDSetSwitch(&OnCoordSetSP, "ALERTE !\n");
-                                        IDSetSwitch(&OnCoordSetSP, "Antenne %s : Erreur GOTO !\n",  Sockets[i].IP.c_str());
-                                        Sockets[i].Connected=false;
-                                    }
-                                    else
-                                    {
-                                        OnCoordSetSP.s = IPS_OK;
-
-                                        Sockets[i].GotoOk=true;
-
-                                        IDSetSwitch(&ParkSP, "Antenne %s : GOTO OK.\n",  Sockets[i].IP.c_str());
-
-                                        char RAStr[32], DecStr[32];
-
-                                        //currentRA=targetRA;
-                                        //currentDEC=targetDEC;
-                                        lastRA  = targetRA;
-                                        lastDEC = targetDEC;
-
-                                        /*fs_sexa(RAStr, targetRA, 2, 3600);
-                                        fs_sexa(DecStr, targetDEC, 2, 3600);
-
-                                        IDLog("We received JNow RA %s - DEC %s\n", RAStr, DecStr);*/
-
-                                        //IDSetNumber (&EquatorialCoordsRNP, NULL);
-                                        EquatorialCoordsWNP.s = IPS_OK;
-                                        IDSetNumber (&EquatorialCoordsWNP, NULL);
-
-                                        // Fin du Goto pour toutes les antennes ?
-
-                                        int num=0;
-
-                                        for (int i=1; i<SocketsNumber; i++) if (Sockets[i].Connected)
-                                            {
-                                                if (Sockets[i].GotoOk) num++;
-                                            }
-
-                                        if (num == AntennesConnectees())
-                                        {
-                                            LecturePosition=false;
-
-                                            InitAntennes();
-
-                                            IDSetSwitch(&OnCoordSetSP, "GOTO OK !");
-                                        }
+                                        LecturePosition=false;
+
+                                        InitAntennes();
+
+                                        IDSetSwitch(&OnCoordSetSP, "GOTO OK !");
                                     }
                                 }
                             }
-
-                            // On passe enventuellement Ã  la trame suivante
-
-                            reponse=memreponse;
-                            pos=reponse.find("\n");
                         }
+
+                        // On passe Ã©ventuellement Ã  la trame suivante
+
+                        reponse=memreponse;
+                        pos=reponse.find("\n");
+
                     }
                 }
@@ -1034,5 +1037,5 @@
                 {
                     Sockets[i].Connected=false;
-                   
+
                     std::string oss;
                     oss="SocketException IsPoll : " + e.description() + "\n";
@@ -1044,331 +1047,364 @@
                 }
             }
-    
-
-
-    if (Abort)
-    {
-        IDSetSwitch(&ConnectSP, "Envoi de la commande Abort\n");
-
-        Goto=false;
+
+
+
+        if (Abort)
+        {
+            IDSetSwitch(&ConnectSP, "Envoi de la commande Abort\n");
+
+            Goto=false;
+
+            for (int i=1; i<SocketsNumber; i++) if (Sockets[i].Connected)
+                {
+                    if (!ABORT(i)) Sockets[i].sendalertes++;
+                }
+
+            LecturePosition=false;
+
+            InitAntennes();
+
+            Abort=false;
+        }
+
+
+        if (Park)
+        {
+            IDSetSwitch(&ConnectSP, "Envoi de la commande Park\n");
+
+            Goto=false;
+
+            for (int i=1; i<SocketsNumber; i++) if (Sockets[i].Connected)
+                {
+                    if (!PARK(i)) Sockets[i].sendalertes++;
+                }
+
+            LecturePosition=false;
+
+            InitAntennes();
+
+            Park=false;
+        }
+
+
+        // Gestion du suivi
+
+        if (Goto)
+        {
+            // DurÃ©e entre deux actualisations
+
+            double delai=15.0/60.0/24.0;   // Actualisation toutes les 15 minutes en mode transit
+
+            if (TrackingMode==2) delai=5.0/3600.0/24.0;   //et 5 secs en mode tracking
+
+
+            // On actualise la position
+
+            if (JJ-JJAnc > delai)
+            {
+                ADDEC2Motor(targetRA, targetDEC);
+
+                InitAntennes();
+
+                LecturePosition=true;
+
+                JJAnc=JJ;
+            }
+
+            //Plus d'antenne !
+
+            if (AntennesConnectees() == 0)
+            {
+                LecturePosition=false;
+
+                Goto=false;
+
+                InitAntennes();
+
+                IDSetSwitch(&OnCoordSetSP, "Erreur ! Plus d antennes connectÃ©es !");
+            }
+        }
+
+
+
+        // ExÃ©cution de la procÃ©dure complÃšte de lecture de la position de l'antenne
+        // puis envoi d'une commande Goto
+
+        if (LecturePosition)
+        {
+            for (int i=1; i<SocketsNumber; i++) if (Sockets[i].Connected)
+                {
+                    switch (Sockets[i].etape)
+                    {
+                        //Envoi des requÃªtes STATUS
+                    case 0 :
+                    {
+                        Sockets[i].AttenteExecution=0;
+                        Sockets[i].ack_status=false;
+                        Sockets[i].status=0;
+
+                        if (!STATUS(i)) Sockets[i].sendalertes++;
+
+                        Sockets[i].etape++;
+                    }
+                    break;
+
+                    //vÃ©rification ack statuts
+                    case 1 :
+                    {
+                        if (Sockets[i].ack_status)
+                        {
+                            Sockets[i].AttenteExecution=0;
+                            Sockets[i].etape++;
+                            i--;
+                        }
+                        else
+                        {
+                            // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
+
+                            Sockets[i].AttenteExecution++;
+
+                            if (Sockets[i].AttenteExecution>MAXATTENTE)
+                            {
+                                Sockets[i].etape=0;
+                                Sockets[i].AttenteExecution=0;
+                                Sockets[i].AnomaliesExecution++;
+                            }
+
+                            if (Sockets[i].AnomaliesExecution>MAXANOMALIES)
+                            {
+                                IDSetSwitch(&OnCoordSetSP, "ERREUR 1000 : Erreur critique sur l antenne %s. DÃ©connexion de l antenne.",
+                                            Sockets[i].IP.c_str());
+                                Sockets[i].Connected=false;
+                            }
+                        }
+                    }
+                    break;
+
+                    //status ready ?
+                    case 2 :
+                    {
+                        if (Sockets[i].status == 'R')
+                        {
+                            Sockets[i].AttenteExecution=0;
+                            Sockets[i].etape++;
+                            i--;
+                        }
+                        else
+                        {
+                            // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
+
+                            Sockets[i].AttenteExecution++;
+
+                            if (Sockets[i].AttenteExecution>MAXATTENTE)
+                            {
+                                Sockets[i].etape=0;
+                                Sockets[i].AttenteExecution=0;
+                                Sockets[i].AnomaliesExecution++;
+                            }
+
+                            if (Sockets[i].AnomaliesExecution>MAXANOMALIES)
+                            {
+                                IDSetSwitch(&OnCoordSetSP, "ERREUR 1001 : Erreur critique sur l antenne %s. DÃ©connexion de l antenne.",
+                                            Sockets[i].IP.c_str());
+                                Sockets[i].Connected=false;
+                            }
+                        }
+                    }
+                    break;
+
+                    //Envoi de la commande POS
+                    case 3 :
+                    {
+                        Sockets[i].ack_pos=false;
+                        Sockets[i].PosValides=false;
+
+                        if (!POSITION(i)) Sockets[i].sendalertes++;
+
+                        Sockets[i].etape++;
+                    }
+                    break;
+
+                    //ack POS
+                    case 4 :
+                    {
+                        if (Sockets[i].ack_pos)
+                        {
+                            Sockets[i].AttenteExecution=0;
+                            Sockets[i].etape++;
+                            i--;
+                        }
+                        else
+                        {
+                            // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
+
+                            Sockets[i].AttenteExecution++;
+
+                            if (Sockets[i].AttenteExecution>MAXATTENTE)
+                            {
+                                Sockets[i].etape=3;
+                                Sockets[i].AttenteExecution=0;
+                                Sockets[i].AnomaliesExecution++;
+                            }
+
+                            if (Sockets[i].AnomaliesExecution>MAXANOMALIES)
+                            {
+                                IDSetSwitch(&OnCoordSetSP, "ERREUR 1002 : Erreur critique sur l antenne %s. DÃ©connexion de l antenne.",
+                                            Sockets[i].IP.c_str());
+                                Sockets[i].Connected=false;
+                            }
+                        }
+                    }
+                    break;
+
+                    //Valeurs pos valides ?
+                    case 5 :
+                    {
+                        if (Sockets[i].PosValides)
+                        {
+                            Sockets[i].AttenteExecution=0;
+                            Sockets[i].etape++;
+                        }
+                        else
+                        {
+                            // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
+
+                            Sockets[i].AttenteExecution++;
+
+                            if (Sockets[i].AttenteExecution>MAXATTENTE)
+                            {
+                                Sockets[i].etape=0;
+                                Sockets[i].AttenteExecution=0;
+                                Sockets[i].AnomaliesExecution++;
+                            }
+
+                            if (Sockets[i].AnomaliesExecution>MAXANOMALIES)
+                            {
+                                IDSetSwitch(&OnCoordSetSP, "ERREUR 1003 : Erreur critique sur l antenne %s. DÃ©connexion de l antenne.",
+                                            Sockets[i].IP.c_str());
+                                Sockets[i].Connected=false;
+                            }
+                        }
+                    }
+                    break;
+
+                    }
+                }
+        }
+
+
+
+
+
+
+        // DÃ©tection d'anomalies concernant l'envoi de trames sur la socket. dÃ©connexion du micro-cont ?
 
         for (int i=1; i<SocketsNumber; i++) if (Sockets[i].Connected)
             {
-                if (!ABORT(i)) Sockets[i].sendalertes++;
+                if (Sockets[i].sendalertes > 0)
+                {
+                    IDSetSwitch(&OnCoordSetSP, "Erreur 1004 : Anomalie dÃ©tectÃ©e sur l antenne %s. DÃ©connexion de l antenne.",
+                                Sockets[i].IP.c_str());
+
+                    Sockets[i].Connected=false;
+                }
             }
 
-        LecturePosition=false;
-
-        InitAntennes();
-
-        Abort=false;
-    }
-
-
-    if (Park)
-    {
-        IDSetSwitch(&ConnectSP, "Envoi de la commande Park\n");
-
-        Goto=false;
+
+
+        //On attend que toutes les antennes soient prÃªtes pour lancer l'ordre Goto -> meilleure synchronisation
+
+        int num=0;
 
         for (int i=1; i<SocketsNumber; i++) if (Sockets[i].Connected)
             {
-                if (!PARK(i)) Sockets[i].sendalertes++;
+                if (Sockets[i].etape == 6) num++; //fin de la procÃ©dure LecturePosition. Les antennes sont prÃªtes
+                //Ã  recevoir l'ordre GOto
             }
 
-        LecturePosition=false;
-
-        InitAntennes();
-
-        Park=false;
-    }
-
-    // Gestion du suivi
-
-    if (Goto)
-    {
-        // DurÃ©e entre deux actualisations
-
-        double delai=15.0/60.0/24.0;   // Actualisation toutes les 15 minutes en mode transit
-
-        if (TrackingMode==2) delai=1.0/60.0/24.0;   //et 1 minute en mode tracking
-
-
-        // On actualise la position
-
-        if (JJ-JJAnc > delai)
-        {
-            ADDEC2Motor(targetRA, targetDEC);
-
-            InitAntennes();
-
-            LecturePosition=true;
-
-            JJAnc=JJ;
-        }
-
-        //Plus d'antenne !
-
-        if (AntennesConnectees() == 0)
-        {
-            LecturePosition=false;
-
-            Goto=false;
-
-            InitAntennes();
-
-            IDSetSwitch(&OnCoordSetSP, "Erreur 1004 : Plus d antennes connectÃ©es !");
-        }
-    }
-
-
-
-    // ExÃ©cution de la procÃ©dure complÃšte de lecture de la position de l'antenne
-    // puis envoi d'une commande Goto
-
-    if (LecturePosition)
-    {
-        for (int i=1; i<SocketsNumber; i++) if (Sockets[i].Connected)
-            {
-                switch (Sockets[i].etape)
+        if ((num == AntennesConnectees()) && (num>0))
+        {
+            for (int i=1; i<SocketsNumber; i++ ) if (Sockets[i].Connected)
                 {
-                    //Envoi des requÃªtes STATUS
-                case 0 :
-                {
-                    Sockets[i].AttenteExecution=0;
-                    Sockets[i].ack_status=false;
-                    Sockets[i].status=0;
-
-                    if (!STATUS(i)) Sockets[i].sendalertes++;
+                    Sockets[i].ack_goto=false;
+
+                    if (!GOTO(i, TargetPosition.x, TargetPosition.y)) Sockets[i].sendalertes++;
 
                     Sockets[i].etape++;
                 }
-                break;
-
-                //vÃ©rification ack statuts
-                case 1 :
-                {
-                    if (Sockets[i].ack_status)
-                    {
-                        Sockets[i].AttenteExecution=0;
-                        Sockets[i].etape++;
-                    }
-                    else
-                    {
-                        // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
-
-                        Sockets[i].AttenteExecution++;
-
-                        if (Sockets[i].AttenteExecution>MAXATTENTE)
-                        {
-                            Sockets[i].etape=0;
-                            Sockets[i].AttenteExecution=0;
-                        }
-                    }
-                }
-                break;
-
-                //status ready ?
-                case 2 :
-                {
-                    if (Sockets[i].status == 'R')
-                    {
-                        Sockets[i].AttenteExecution=0;
-                        Sockets[i].etape++;
-                    }
-                    else
-                    {
-                        // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
-
-                        Sockets[i].AttenteExecution++;
-
-                        if (Sockets[i].AttenteExecution>MAXATTENTE)
-                        {
-                            Sockets[i].etape=0;
-                            Sockets[i].AttenteExecution=0;
-                            Sockets[i].AnomaliesExecution++;
-                        }
-
-                        if (Sockets[i].AnomaliesExecution>MAXANOMALIES)
-                        {
-                            IDSetSwitch(&OnCoordSetSP, "ERREUR 1001 : Erreur critique sur l antenne %s. DÃ©connexion de l antenne.",  Sockets[i].IP.c_str());
-                            Sockets[i].Connected=false;                            
-                        }
-                    }
-                }
-                break;
-
-                //Envoi de la commande POS
-                case 3 :
-                {
-                    Sockets[i].ack_pos=false;
-                    Sockets[i].PosValides=false;
-
-                    if (!POSITION(i)) Sockets[i].sendalertes++;
-
-                    Sockets[i].etape++;
-                }
-                break;
-
-                //ack POS
-                case 4 :
-                {
-                    if (Sockets[i].ack_pos)
-                    {
-                        Sockets[i].AttenteExecution=0;
-                        Sockets[i].etape++;
-                    }
-                    else
-                    {
-                        // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
-
-                        Sockets[i].AttenteExecution++;
-
-                        if (Sockets[i].AttenteExecution>MAXATTENTE)
-                        {
-                            Sockets[i].etape=3;
-                            Sockets[i].AnomaliesExecution=0;
-                        }
-                    }
-                }
-                break;
-
-                //Valeurs pos valides ?
-                case 5 :
-                {
-                    if (Sockets[i].PosValides)
-                    {
-                        Sockets[i].ack_goto=false;
-
-                        if (!GOTO(i, TargetPosition.x, TargetPosition.y)) Sockets[i].sendalertes++;
-
-                        Sockets[i].AttenteExecution=0;
-                        Sockets[i].etape++;
-                    }
-                    else
-                    {
-                        // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
-
-                        Sockets[i].AttenteExecution++;
-
-                        if (Sockets[i].AttenteExecution>MAXATTENTE)
-                        {
-                            Sockets[i].etape=0;
-                            Sockets[i].AttenteExecution=0;
-                            Sockets[i].AnomaliesExecution++;
-                        }
-
-                        if (Sockets[i].AnomaliesExecution>MAXANOMALIES)
-                        {
-                            IDSetSwitch(&OnCoordSetSP, "ERREUR 1002 : Erreur critique sur l antenne %s. DÃ©connexion de l antenne.",  Sockets[i].IP.c_str());
-                            Sockets[i].Connected=false;
-                        }
-                    }
-                }
-                break;
-
-                //ack goto
-                case 6 :
-                {
-                    if (Sockets[i].ack_goto)
-                    {
-                        Sockets[i].etape++;
-                    }
-                    else
-                    {
-                        // on rÃ©itÃšre l'ordre prÃ©cÃ©dent si rien ne se passe
-
-                        Sockets[i].AttenteExecution++;
-
-                        if (Sockets[i].AttenteExecution>MAXATTENTE)
-                        {
-                            Sockets[i].etape=5;
-                            Sockets[i].AttenteExecution=0;
-                        }
-                    }
-                }
-                break;
-
-                }
+        }
+
+
+/*
+        switch (EquatorialCoordsWNP.s)
+        {
+        case IPS_IDLE:
+
+            break;
+
+        case IPS_BUSY:
+
+            switch (currentSet)
+            {
+            case LX200_TRANSIT:
+            OnCoordSetSP.sp[LX200_TRANSIT].s = ISS_ON;
+            IDSetSwitch (&OnCoordSetSP, "Slew is complete.");
+            break;
+
+            case LX200_TRACKING:
+            OnCoordSetSP.sp[LX200_TRACKING].s = ISS_ON;
+            IDSetSwitch (&OnCoordSetSP, "Slew is complete. Tracking...");
+            break;
             }
-    }
-
-
-    // DÃ©tection d'anomalies concernant l'envoi de trames sur la socket. dÃ©connexion du micro-cont ?
-
-    for (int i=1; i<SocketsNumber; i++) if (Sockets[i].Connected)
-        {
-            if (Sockets[i].sendalertes > 0)
-            {
-                IDSetSwitch(&OnCoordSetSP, "Erreur 1003 : Anomalie dÃ©tectÃ©e sur l antenne %s. DÃ©connexion de l antenne.",  Sockets[i].IP.c_str());
-
-                Sockets[i].Connected=false;
-            }
-        }
-
-    
-    
-    switch (EquatorialCoordsWNP.s)
-    {
-    case IPS_IDLE:
+
+            break;
+
+        case IPS_OK:
+
+            break;
+
+        case IPS_ALERT:
+
+            break;
+        }*/
+    }
+
+    ISPOLLRunning=false;
+}
+
+
+
+/**************************************************************************************
+**
+***************************************************************************************/
+bool BAO::process_coords()
+{
+    switch (currentSet)
+    {
+        // Transit
+    case BAO_TRANSIT:
+
+        EquatorialCoordsWNP.s = IPS_BUSY;
+
+        IDSetNumber (&EquatorialCoordsWNP, NULL);
+
+        InitAntennes();
+
+        JJAnc=JJ;
+
+        TrackingMode = 1;
+
+        Goto=true;
+
+        LecturePosition=true;
 
         break;
 
-    case IPS_BUSY:
-
-        /*switch (currentSet)
-        {
-        case LX200_TRANSIT:
-        OnCoordSetSP.sp[LX200_TRANSIT].s = ISS_ON;
-        IDSetSwitch (&OnCoordSetSP, "Slew is complete.");
-        break;
-
-        case LX200_TRACKING:
-        OnCoordSetSP.sp[LX200_TRACKING].s = ISS_ON;
-        IDSetSwitch (&OnCoordSetSP, "Slew is complete. Tracking...");
-        break;
-        }*/
-
-        break;
-
-    case IPS_OK:
-
-        break;
-
-    case IPS_ALERT:
-
-        break;
-    }
-    }
-
-    ISPOLLRunning=false;
-}
-
-
-
-/**************************************************************************************
-**
-***************************************************************************************/
-bool BAO::process_coords()
-{
-    switch (currentSet)
-    {
-        // Transit
-    case LX200_TRANSIT:
-
-        InitAntennes();
-
-        JJAnc=JJ;
-
-        TrackingMode = 1;
-
-        Goto=true;
-
-        LecturePosition=true;
-
-        break;
-
         // Tracking
-    case LX200_TRACKING:
+    case BAO_TRACKING:
+
+        EquatorialCoordsWNP.s = IPS_BUSY;
+
+        IDSetNumber (&EquatorialCoordsWNP, NULL);
 
         InitAntennes();
Index: /BAORadio/libindi/libindi/drivers/telescope/BAO.h
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/BAO.h	(revision 491)
+++ /BAORadio/libindi/libindi/drivers/telescope/BAO.h	(revision 492)
@@ -30,6 +30,6 @@
 #define MAXCARACTERES 1024
 
-#define MAXATTENTE 20                //Si une commande ne recoit pas d'acknowledge. Alors refaire 20 tentatives en renvoyant la commande
-#define MAXANOMALIES 2                //Si pas de rÃ©ponse au bout de 40 tentatives -> erreur critique -> socket perdue ?
+#define MAXATTENTE 40                //Si une commande ne recoit pas d'acknowledge. Alors refaire 40 tentatives en renvoyant la commande
+#define MAXANOMALIES 2               //Si pas de rÃ©ponse au bout de 80 tentatives -> erreur critique -> socket perdu ?
 
 struct Position
@@ -46,19 +46,19 @@
     
     bool Connected;              //le micro-contrÃŽleur est-il connectÃ© ?
-    bool PosValides;             //le micro-contrÃŽleur a-t-il donnÃ© sa position ?
+    bool PosValides;             //le micro-contrÃŽleur a-t-il donnÃ© une position valide ?
     char status;                 //status='B' pour busy  'R' pour READY
-    int sendalertes;             //une requÃªte send sur le rÃ©seau a gÃ©nÃ©rÃ© une erreur
-    int AttenteExecution;	 //Une antenne rencontre des difficultÃ©s pour executer un cycle de commandes
-    int AnomaliesExecution;	 //Erreur critique. L'antenne ne rÃ©agit plus
+    int sendalertes;             //une requÃªte "send" a gÃ©nÃ©rÃ© une erreur sur le rÃ©seau
+    int AttenteExecution;	 //L'antenne parvient-elle Ã  executer un cycle de commandes ?
+    int AnomaliesExecution;	 //Erreur critique. L'antenne ne rÃ©pond plus !
                     
     Position Pos;                //derniÃšre position retournÃ©e par le microcontrÃŽleur    
     int etape;
     
-    bool ack_status;
+    bool ack_status;             //Etat des acknowledges ?
     bool ack_pos;
     bool ack_park;
     bool ack_abort;
     bool ack_goto;
-    bool GotoOk;  
+    bool GotoOk;                 //Est-ce que le dernier goto est OK ?
 };
 
@@ -101,5 +101,5 @@
 private:
 
-    enum LX200_STATUS { LX200_TRANSIT, LX200_TRACKING, LX200_PARK };
+    enum BAO_STATUS { BAO_TRANSIT, BAO_TRACKING, BAO_PARK };
 
     /* Switches */
@@ -127,5 +127,5 @@
 
     /* Number Vectors */
-    INumberVectorProperty EquatorialCoordsRNP;
+    //INumberVectorProperty EquatorialCoordsRNP;
     INumberVectorProperty EquatorialCoordsWNP;
     INumberVectorProperty GeographicCoordsWNP;
Index: /BAORadio/libindi/libindi/drivers/telescope/Socket.cpp
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/Socket.cpp	(revision 491)
+++ /BAORadio/libindi/libindi/drivers/telescope/Socket.cpp	(revision 492)
@@ -8,4 +8,5 @@
 #include <fcntl.h>
 #include <iostream>
+#include <netinet/tcp.h>
 
 
@@ -36,7 +37,13 @@
 
 
-   //  TIME_WAIT - argh
     int on = 1;
+
     if ( setsockopt ( m_sock, SOL_SOCKET, SO_REUSEADDR, ( const char* ) &on, sizeof ( on ) ) == -1 ) return false;
+
+    // RÃ©duire les dÃ©lais lors des transmissions TCP/IP
+    // Voir article Ã  l'adresse
+    // http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.0/html/Realtime_Tuning_Guide/sect-Realtime_Tuning_Guide-Application_Tuning_and_Deployment-TCP_NODELAY_and_Small_Buffer_Writes.html
+    
+    if ( setsockopt(m_sock, SOL_TCP, TCP_NODELAY, (const char*) &on, sizeof(on)) < 0 ) return false;
 
     return true;
@@ -116,5 +123,4 @@
 }
 
-
 int Socket::recv ( std::string& s ) const
 {
@@ -131,12 +137,10 @@
     FD_SET(m_sock, &r); // ajoute la socket dans la liste des fd
     sel = select(m_sock + 1, &r, NULL, NULL, &timeout);
-    
     if (sel < 0) // select a rencontrÃ© un problÃšme
     {
-	return -1;
+        return -1;
     }
     else if (sel == 0) // timeout
     {
-        s="\n";
 	return 1;
     }
@@ -160,6 +164,5 @@
                  if (errno == EAGAIN )
 		 {
-		   s="\n";
-	           return 1;
+	           return 0;
 		 }
 		 
@@ -199,5 +202,4 @@
 }
 
-
 void Socket::set_non_blocking ( const bool b )
 {
