Permalink
Browse files

Merge pull request #2 from jouve/master

Debug && merge test -> master
  • Loading branch information...
2 parents 0ed1228 + d2de670 commit 4e76de66c0f32892cde67576a2b6d6b2585dc1ca @ORiGiNe committed May 15, 2012
View
@@ -8,7 +8,6 @@
delay(1000); \
}
-#define PRINT_ARD(oki) { Serial.write(oki); Serial.println("oki"); }
ArduinoGaop::ArduinoGaop() : AbstractGaop()
{
View
@@ -0,0 +1,3 @@
+#include "arduinofix.h"
+
+void __cxa_pure_virtual() { };
View
@@ -0,0 +1,6 @@
+#ifndef ARDUINOFIX_H
+#define ARDUINOFIX_H
+
+extern "C" void __cxa_pure_virtual();
+
+#endif // ARDUINOFIX_H
View
@@ -1,17 +1,5 @@
#include "AbstractGaop.h"
-#if DEBUG && !IAmNotOnThePandaBoard
-using namespace std;
-#include <iostream>
-
-void debug_affiche_trame(octet *trame, int taille)
-{
- for(int i = 0 ; i < taille+INFOCPL ; i++)
- cout << (int)trame[i] << "-";
- cout << endl;
-}
-#endif
-
AbstractGaop::AbstractGaop()
{
prochain = 0;
@@ -41,7 +29,7 @@ int AbstractGaop::create_trame(octet *trame, Commande &data, octet odid)
trame[i++] = BEGIN_TRAME;
trame[i++] = seq++;
trame[i++] = 2*data.getTaille(); //FIXME
- trame[i++] = odid;
+ trame[i++] = odid;
for (int j = 0; j < data.getTaille(); j++)
{
@@ -51,11 +39,6 @@ int AbstractGaop::create_trame(octet *trame, Commande &data, octet odid)
trame[i+1] = END_TRAME;
trame[i] = create_checksum(trame, 2*data.getTaille() + INFOCPL ); // FIXME
-
- #if DEBUG && !IAmNotOnThePandaBoard
- cout << "DEBUG AbstractGaop::create_trame : Trame crée : (taille : " << i+2 << ")" << endl;
- debug_affiche_trame(trame,trame[2]);
- #endif
return i+2;
}
@@ -87,11 +70,6 @@ bool AbstractGaop::read_trame(octet *trame, Commande &cmd, octet &odid)
cmd[i] = trame[2*i+INFOCPL_DEBUT]*0x100 + trame[2*i+INFOCPL_DEBUT+1];
}
- #if DEBUG && !IAmNotOnThePandaBoard
- cout << "DEBUG AbstractGaop::read_trame : Trame lue : " << endl;
- debug_affiche_trame(trame, taille_cmd);
- #endif
-
return true;
}
@@ -1,10 +1,7 @@
#include "AssocPeriphOdid.h"
#include <stdlib.h>
+#include "debug.h"
-#if DEBUG && !IAmNotOnThePandaBoard
-using namespace std;
-#include <iostream>
-#endif
AssocPeriphOdid::AssocPeriphOdid()
{
@@ -24,9 +21,7 @@ void AssocPeriphOdid::add(Peripherique *p)
t = (Peripherique**)realloc(t, taille*sizeof(Peripherique*));
t[taille-1] = p;
-#ifdef DEBUG && !IAmNotOnThePandaBoard
- cout << "DEBUG AssocPeriphOdid::add odid periph : " << (int)(p->getOdid()) <<endl;
-#endif
+ debug("DEBUG AssocPeriphOdid::add odid periph : " << (int)(p->getOdid()) <<endl);
}
Peripherique* AssocPeriphOdid::operator[](int n)
View
@@ -1,5 +1,5 @@
-#ifndef FICHIERDECONFIGURATION
-#define FICHIERDECONFIGURATION
+#ifndef CONFIG_H
+#define CONFIG_H
/*!
* \file Config.h
@@ -8,14 +8,14 @@
*/
/*!
- * \def IAmNotOnThePandaBoard
+ * \def ARDUINO
* \brief Indique si le code tourne sur arduino ou sur pc : include differents
* et hacks trickys pour faire tourner du cpp sous l'arduino.
* A la compilation sur le pc, on passe la valeur de cette macro à 0 (-D inside).
*/
-#ifndef IAmNotOnThePandaBoard
-#define IAmNotOnThePandaBoard 1
-#endif /* IAmNotOnThePandaBoard */
+#ifndef ARDUINO
+#define ARDUINO 1
+#endif /* ARDUINO */
/*!
* \brief Définition des structures de bases utilisées dans le GAOP
@@ -187,4 +187,4 @@ struct listedLine {
//FIXME:wtf != ?
#define TIMEOUTUSEC 25000
-#endif /*FICHIERDECONFIGURATION*/
+#endif /* CONFIG_H */
View
@@ -1,10 +1,6 @@
#include "Peripherique.h"
#include <stdlib.h>
-#if IAmNotOnThePandaBoard
-void __cxa_pure_virtual() { };
-#endif
-
Peripherique::Peripherique(octet odid)
{
this->odid = odid;
View
@@ -8,8 +8,8 @@
* Le code de ce bidule sera different cote arduino et cote pc
*/
-#if IAmNotOnThePandaBoard
-extern "C" void __cxa_pure_virtual();
+#if ARDUINO
+
#endif
class Peripherique
View
@@ -0,0 +1,15 @@
+#ifndef DEBUG_H
+#define DEBUG_H
+
+#ifdef ORIGINE_ARDUINO
+# define debug(args)
+#else
+# ifdef ORIGINE_DEBUG
+# include <iostream>
+# define debug(args) std::cout << args;
+# else
+# define debug(args)
+# endif
+#endif
+
+#endif // DEBUG_H
View
@@ -4,6 +4,7 @@
#include "AbstractGaop.h"
#include <pthread.h> /*pthread_* */
+#include <string>
/*!
* \class Gaop
@@ -12,21 +13,25 @@
*/
class PCGaop : public AbstractGaop
{
- public:
- PCGaop(const char *device);
+ public:
+ PCGaop(const char *device);
- ~PCGaop();
+ ~PCGaop();
- void initialise(AssocPeriphOdid*);
+ void initialise(AssocPeriphOdid*);
- bool send(Commande &c, octet odid);
+ bool send(Commande &c, octet odid);
- bool receive(AssocPeriphOdid&);
+ bool receive(AssocPeriphOdid&);
- private:
- int device; //file descriptor (open function)
- pthread_t fils; //pour le fork de Receive();
- void **pthreadarg;
+ protected:
+
+ void trame_to_string(octet *trame, int taille);
+
+ private:
+ int device; //file descriptor (open function)
+ pthread_t fils; //pour le fork de Receive();
+ void **pthreadarg;
};
#endif /*GAOPPROTOCOL */
View
@@ -1,11 +1,6 @@
#include "PCGaop.h"
#include "AssocPeriphOdid.h"
-#if DEBUG
-using namespace std;
-#include <iostream>
-#endif
-
#include <sys/stat.h> /*open*/
#include <fcntl.h> /*open*/
#include <signal.h> /*kill*/
@@ -15,6 +10,9 @@ using namespace std;
#include <iostream> /*cerr, cout, endl*/
#include <cstring> /*strerr*/
#include <cerrno> /*errno*/
+#include <sstream>
+
+using namespace std;
/*!
* Constructeur du protocole GAOP coté PC
@@ -92,9 +90,9 @@ void PCGaop::initialise(AssocPeriphOdid *tblassoc)
write(device, "?", 1); //Tu as combien de peripheriques ? // FIXME, voir wiki pour voir si c'est le vrai pb
while (read(device, r, 1) == 0); //J'en ai x
x = r[0];
-#ifdef DEBUG
- cout << "DEBUG Gaop::initialise : Nombre de devices : " << x << endl;
-#endif
+
+ debug("DEBUG Gaop::initialise : Nombre de devices : " << x);
+
for (int i = 0; i < x; i++)
{
//Donne moi l'ODID du device i si il marche, 0 sinon
@@ -105,23 +103,19 @@ void PCGaop::initialise(AssocPeriphOdid *tblassoc)
if (tblassoc->getByODID(odid) != NULL) //je regarde si je le connais
{
-#if DEBUG
- cout << "DEBUG Gaop::initialise : odid :" << (int)(tblassoc->getByODID(odid)->getOdid());
-#endif
+ debug("DEBUG Gaop::initialise : odid :" << (int)(tblassoc->getByODID(odid)->getOdid()));
+
write(device, "t", 1); // test son fonctionnement (et desactive le si il ne marche pas) XXX:magie du saint-esprit ?
while( read(device, r, 1) == 0);
if (r[0] != 'y') //si ca marche pas
{
-#if DEBUG
- cout << " supprimé" <<endl;
-#endif
+ debug(" supprimé");
+
tblassoc->rm(odid); //suppression par odid
}
else
{
-#if DEBUG
- cout << " activé" <<endl;
-#endif
+ debug( " activé");
//ca marche bien. je dis au peripherique qu'il peut m'utiliser
tblassoc->getByODID(odid)->associe(this);
}
@@ -191,13 +185,15 @@ bool PCGaop::send(Commande &cmd, octet odid)
octet buf[TAILLE_MAX_FRAME];
int taille_trame = create_trame(buf, cmd, odid);
+
+
+ debug("DEBUG AbstractGaop::create_trame : Trame crée : (taille : " << i+2 << ")");
+ debug(trame_to_string(trame,trame[2]) << endl);
int octets_envoyes = write(device, buf, taille_trame*sizeof(octet));
//tcdrain(device); //attendre que c'est bien envoye
- #if DEBUG && !IAmNotOnThePandaBoard
- cout << "Nombre octets envoyés : " << octets_envoyes << endl;
- #endif
+ debug("Nombre octets envoyés : " << octets_envoyes << endl);
//l'apres devient l'avant
if (odid != ODIDSPECIAL)
@@ -228,9 +224,9 @@ bool PCGaop::receive(AssocPeriphOdid& tblassoc)
send(cmd, ODIDSPECIAL);
flags &= ~GAOPDBK;
frames_recues = 0; //pret a recevoir
- }
+ }
- do
+ do
{
// Début d'une trame
if (nb_donnees == 0)
@@ -243,12 +239,12 @@ bool PCGaop::receive(AssocPeriphOdid& tblassoc)
}
// Récupération de l'entête
else if (nb_donnees < INFOCPL_DEBUT)
- {
+ {
i = read(device, buf+nb_donnees, (INFOCPL_DEBUT - nb_donnees)*(sizeof(octet)));
}
else //lit le reste = data + fin
i = read(device, buf+nb_donnees, (buf[2]+INFOCPL_FIN)*(sizeof(octet)));
-
+
nb_donnees += i;
/*
FIXME: Fail de lecture répétées
@@ -258,38 +254,33 @@ bool PCGaop::receive(AssocPeriphOdid& tblassoc)
towait.tv_nsec = 50000; //50 microsecondes
nanosleep(&towait, NULL);
-#ifdef DEBUG
- cout << "DEBUG PCGaop::send : Nombre de données lues via read : " << nb_donnees << endl;
- cout << "Derniere valeur de i : " << i << endl;
+ debug("DEBUG PCGaop::send : Nombre de données lues via read : " << nb_donnees);
+ debug("Derniere valeur de i : " << i);
if (nb_donnees >= 2 )
- cout << "Nombre de données attendues : " << (buf[2] + INFOCPL) <<endl;
-#endif
+ debug("Nombre de données attendues : " << (buf[2] + INFOCPL));
if (nb_donnees == 0 || i < 0 || nb_donnees > TAILLE_MAX_FRAME)
{
-#ifdef DEBUG
- cout << "DEBUG PCGaop::send : fail de read" << endl;
-#endif
+ debug("DEBUG PCGaop::send : fail de read");
return false;
}
} while (nb_donnees != (buf[2]+INFOCPL) && i >= 0);
// On essaye de lire cette trame
if ( read_trame(buf, cmd, odid) )
- {
- #if DEBUG
- cout << "DEBUG PCGaop::send : Succès de lecture de la trame" <<endl;
- #endif
+ {
+ debug("DEBUG AbstractGaop::read_trame : Trame lue : ");
+ debug(trame_to_string(trame, taille_cmd) << endl);
+
+ debug("DEBUG PCGaop::send : Succès de lecture de la trame");
if (odid == ODIDSPECIAL)
{
- #if DEBUG
- cout << "DEBUG PCGaop::send : ODID spécial" <<endl;
- #endif
+ debug("DEBUG PCGaop::send : ODID spécial");
flags &= ~GAOPBLK;
frames_envoyees = 0;
- }
+ }
else if (tblassoc.getByODID(odid) != NULL)
{
if (++frames_recues >= NB_FRAMES_MAX) flags |= GAOPDBK;
@@ -300,7 +291,15 @@ bool PCGaop::receive(AssocPeriphOdid& tblassoc)
}
else
{
- std::cerr << "Erreur de transmition ! " << std::endl;
+ cerr << "Erreur de transmition ! " << std::endl;
return false;
}
}
+
+void PCGaop::trame_to_string(octet *trame, int taille)
+{
+ ostringstream oss;
+ for(int i = 0 ; i < taille+INFOCPL ; i++)
+ oss << (int)trame[i] << "-";
+ return oss.str();
+}
Oops, something went wrong.

0 comments on commit 4e76de6

Please sign in to comment.