2009-05-29 17:02:20 +02:00
|
|
|
#include "libowlps-positioning.hh"
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
|
|
|
|
/* Tronque le float "f" à "n" décimales et le retourne */
|
2009-05-29 17:02:20 +02:00
|
|
|
float round_float(float f, int n)
|
|
|
|
{
|
|
|
|
n = (int) pow((double) 10, (double) n) ;
|
|
|
|
float f_dec = modff(f, &f) ;
|
|
|
|
f_dec = floor(f_dec * n) / n ;
|
|
|
|
|
|
|
|
return f + f_dec ;
|
|
|
|
}
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
|
|
|
|
/* Explodes a string into substrings based on separator sep. Returns a string vector. */
|
2009-05-29 17:02:20 +02:00
|
|
|
vector<string> explode(const string &input, const char &sep)
|
|
|
|
{
|
|
|
|
vector<string> vs;
|
|
|
|
string tmp;
|
|
|
|
unsigned int i;
|
|
|
|
|
|
|
|
for (i = 0 ; i < input.size() ; i++)
|
|
|
|
if (input[i] == sep)
|
|
|
|
{
|
|
|
|
vs.push_back(tmp);
|
|
|
|
tmp.clear();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
tmp.push_back(input[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
vs.push_back(tmp);
|
|
|
|
tmp.clear();
|
|
|
|
|
|
|
|
return vs;
|
|
|
|
}
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
|
|
|
|
/* Le Format Fred n'est pas utilisé */
|
2009-05-29 17:02:20 +02:00
|
|
|
vector<string> extractReferencePointInfoFromBuffer(const string &buffer_in)
|
|
|
|
{
|
|
|
|
unsigned int i = 0;
|
|
|
|
string tmp_field;
|
|
|
|
vector<string> ret;
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
/* Extract coordinates */
|
|
|
|
/* x */
|
2009-05-29 17:02:20 +02:00
|
|
|
while (buffer_in[i] != ';')
|
|
|
|
{
|
|
|
|
tmp_field.push_back(buffer_in[i]);
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
ret.push_back(tmp_field);
|
|
|
|
tmp_field.clear();
|
|
|
|
i++; // go after the ';'
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
/* y */
|
2009-05-29 17:02:20 +02:00
|
|
|
while (buffer_in[i] != ';')
|
|
|
|
{
|
|
|
|
tmp_field.push_back(buffer_in[i]);
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
ret.push_back(tmp_field);
|
|
|
|
tmp_field.clear();
|
|
|
|
i++;
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
/* z */
|
2009-05-29 17:02:20 +02:00
|
|
|
while (buffer_in[i] != ';')
|
|
|
|
{
|
|
|
|
tmp_field.push_back(buffer_in[i]);
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
ret.push_back(tmp_field);
|
|
|
|
tmp_field.clear();
|
|
|
|
i++;
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
/* Extract direction (not used now) */
|
2009-05-29 17:02:20 +02:00
|
|
|
while (buffer_in[i] != ';')
|
|
|
|
{
|
|
|
|
tmp_field.push_back(buffer_in[i]);
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
ret.push_back(tmp_field);
|
|
|
|
tmp_field.clear();
|
|
|
|
i++;
|
|
|
|
|
|
|
|
while (i <= buffer_in.size())
|
|
|
|
{
|
|
|
|
if ((buffer_in[i] == ';' || i == buffer_in.size()) && !tmp_field.empty()) // Si on est sur un séparateur et que la valeur lue n'est pas vide,
|
|
|
|
{
|
|
|
|
ret.push_back(tmp_field) ; // on met la valeur lue dans les valeurs de retour.
|
|
|
|
tmp_field.clear() ;
|
|
|
|
}
|
|
|
|
else // Si on n'est pas sur un séparateur,
|
|
|
|
tmp_field.push_back(buffer_in[i]) ; // on ajoute le caractère courant à la suite de la valeur lue.
|
|
|
|
|
|
|
|
i++ ;
|
|
|
|
}
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
/* Return the vector with each data */
|
2009-05-29 17:02:20 +02:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2009-07-16 17:25:14 +02:00
|
|
|
|
|
|
|
|
Incorporation de la dernière version de Julien
Extrait de son courriel :
« Par rapport à la précédente j'ai surtout corrigé des bugs. »
Note : la version du listener portable sur Fonera, envoyée en même temps
par Julien, viendra plus tard (le temps que je l'incorpore).
Détail des changements après analyse du code :
aggregator : correction de bogues.
positioning :
* Ajout d'un fichier de config format boost (cfg/config.cfg).
* Makefile : implantation des cibles "install" et "uninstall" ; la cible
"astyle" devient "style".
* accesspoint.{hh,cc}, area.cc, measurement.hh, point.{hh,cc},
referencepoint.{hh,cc} : cosmétique.
* owlps-positioning.c : correction de la lecture du fichier de config
(ajout d'une option permettant de spécifier un fichier alternatif).
* server.cc : essentiellement correction des requêtes.
* libowlps-positioning.{hh,cc} : passage de "unsigned long long" à
"uint64_t" comme type de retour de timeval_to_ms().
writeInDb :
* Ajout de la gestion d'un fichier de config.
* Ajout de deux scripts pour la BDD.
git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@96 785a6c6c-259e-4ff1-8b91-dc31627914f0
2009-07-01 15:39:58 +02:00
|
|
|
uint64_t timeval_to_ms(const struct timeval &d)
|
2009-05-29 17:02:20 +02:00
|
|
|
{
|
Incorporation de la dernière version de Julien
Extrait de son courriel :
« Par rapport à la précédente j'ai surtout corrigé des bugs. »
Note : la version du listener portable sur Fonera, envoyée en même temps
par Julien, viendra plus tard (le temps que je l'incorpore).
Détail des changements après analyse du code :
aggregator : correction de bogues.
positioning :
* Ajout d'un fichier de config format boost (cfg/config.cfg).
* Makefile : implantation des cibles "install" et "uninstall" ; la cible
"astyle" devient "style".
* accesspoint.{hh,cc}, area.cc, measurement.hh, point.{hh,cc},
referencepoint.{hh,cc} : cosmétique.
* owlps-positioning.c : correction de la lecture du fichier de config
(ajout d'une option permettant de spécifier un fichier alternatif).
* server.cc : essentiellement correction des requêtes.
* libowlps-positioning.{hh,cc} : passage de "unsigned long long" à
"uint64_t" comme type de retour de timeval_to_ms().
writeInDb :
* Ajout de la gestion d'un fichier de config.
* Ajout de deux scripts pour la BDD.
git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@96 785a6c6c-259e-4ff1-8b91-dc31627914f0
2009-07-01 15:39:58 +02:00
|
|
|
return d.tv_sec * 1000 + d.tv_usec / 1000 ;
|
2009-05-29 17:02:20 +02:00
|
|
|
}
|