From f5292a5dd632993b89bd1001f997e8943535ce22 Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Tue, 15 Apr 2008 10:19:15 +0000 Subject: [PATCH] =?UTF-8?q?Beaucoup=20modifs=20cosm=C3=A9tiques=20et=20ajo?= =?UTF-8?q?uts=20dans=20GuiNuMo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Partout où cela était possible : * Indentation "Emacs" du code, aération. * Utilisation de #define pour les valeurs par défaut. * Utilisation des valeurs par défaut dans les constructeurs. server.cc/hh : * Gestion d'erreur basique pour les ouvertures de fichiers. Ajout du TODO, d'après celui fait par Fred sous format papier. Création des répertoires : * cfg : fichiers de configuration. * csv : fichiers d'entrée. * log : fichiers de sortie. git-svn-id: https://pif.pu-pm.univ-fcomte.fr/svn/loc@28 785a6c6c-259e-4ff1-8b91-dc31627914f0 --- GuiNuMo-server/Makefile | 7 +- GuiNuMo-server/TODO | 24 ++ GuiNuMo-server/accesspoint.cc | 71 ++--- GuiNuMo-server/accesspoint.hh | 63 ++-- GuiNuMo-server/area.cc | 49 ++- GuiNuMo-server/area.hh | 51 ++- GuiNuMo-server/{ => cfg}/access_points.cfg | 0 GuiNuMo-server/{ => cfg}/accesspoints.cfg | 0 GuiNuMo-server/clientinfo.cc | 11 +- GuiNuMo-server/clientinfo.hh | 9 +- GuiNuMo-server/measurement.cc | 34 +- GuiNuMo-server/measurement.hh | 31 +- GuiNuMo-server/point.cc | 28 +- GuiNuMo-server/point.hh | 43 ++- GuiNuMo-server/referencepoint.hh | 3 +- GuiNuMo-server/server.cc | 343 +++++++++++---------- GuiNuMo-server/server.hh | 11 +- GuiNuMo-server/test.cc | 4 +- 18 files changed, 401 insertions(+), 381 deletions(-) create mode 100644 GuiNuMo-server/TODO rename GuiNuMo-server/{ => cfg}/access_points.cfg (100%) rename GuiNuMo-server/{ => cfg}/accesspoints.cfg (100%) diff --git a/GuiNuMo-server/Makefile b/GuiNuMo-server/Makefile index 621727c..5a9635a 100644 --- a/GuiNuMo-server/Makefile +++ b/GuiNuMo-server/Makefile @@ -30,6 +30,7 @@ test: test.o point.o measurement.o accesspoint.o referencepoint.o clientinfo.o s $(LD) $(LDFLAGS) -o test test.o point.o measurement.o accesspoint.o referencepoint.o clientinfo.o server.o clean: - rm -fv *~ - rm -fv *.o - rm -fv test + @rm -fv *~ *.o + +purge : clean + @rm -fv test diff --git a/GuiNuMo-server/TODO b/GuiNuMo-server/TODO new file mode 100644 index 0000000..c9a251a --- /dev/null +++ b/GuiNuMo-server/TODO @@ -0,0 +1,24 @@ +* Measurement : + → RÀS + +* Point : + → RÀS + +* ReferencePoint : + → RÀS pour l'instant. + +* ClientInfo : classe qui doit contenir les données des utilisateurs. + - IP, + - Socket, + → plus tard, pour une vraie démo. + - Historique Viterbi, + → à faire maintenant. + +* Server : + → Mettre à jour les algos de Viterbi (3 au total). + +* Area : déf. des zones & waypoints entre les zones. Une zone = 2 points. + → Ajouter au serveur la gestion des connexités entre les zones + graphe qui s'étend (cf. avec les points de référence pour l'algo). + → Faire la fonction qui calcule les matrices étendues en utilisant : + ° la matrice de distances entre les points de connexité ; + ° les distances euclidiennes entre les points après FBCM et les points de connexité. diff --git a/GuiNuMo-server/accesspoint.cc b/GuiNuMo-server/accesspoint.cc index c889a83..7667928 100644 --- a/GuiNuMo-server/accesspoint.cc +++ b/GuiNuMo-server/accesspoint.cc @@ -1,67 +1,58 @@ #include "accesspoint.hh" -AccessPoint::AccessPoint() -{ - coordinates.setX(0); - coordinates.setY(0); - coordinates.setZ(0); - ap_addr = ""; - friis_index = 0; - freq = 2412; - antenna_gain = 2; //a good value - output_power = 20; //another good value, eq. to 100mW -} AccessPoint::AccessPoint(string addr, float fidx, Point coords, unsigned int f, float antg, float outp) { - coordinates = coords; - ap_addr = addr; - friis_index = fidx; - freq = f; - antenna_gain = antg; - output_power = outp; + coordinates = coords; + ap_addr = addr; + friis_index = fidx; + freq = f; + antenna_gain = antg; + output_power = outp; + + //cout << "coords = " << coords << " ; addr = " << addr << " ; fidx = " << fidx << " ; antg = " << antg << " ; outp = " << outp << endl ; } AccessPoint::AccessPoint(const AccessPoint &ap) { - coordinates = ap.coordinates; - ap_addr = ap.ap_addr; - friis_index = ap.friis_index; - freq = ap.freq; - antenna_gain = ap.antenna_gain; - output_power = ap.output_power; + coordinates = ap.coordinates; + ap_addr = ap.ap_addr; + friis_index = ap.friis_index; + freq = ap.freq; + antenna_gain = ap.antenna_gain; + output_power = ap.output_power; } bool AccessPoint::operator==(const AccessPoint &ap)const { - if(ap_addr == ap.ap_addr) - return true; - return false; + if(ap_addr == ap.ap_addr) + return true; + return false; } bool AccessPoint::operator!=(const AccessPoint &ap)const { - if(ap_addr != ap.ap_addr) - return true; - return false; + if(ap_addr != ap.ap_addr) + return true; + return false; } AccessPoint AccessPoint::operator=(const AccessPoint &ap) { - if(this == &ap) - return *this; - ap_addr = ap.ap_addr; - friis_index = ap.friis_index; - return *this; + if(this == &ap) + return *this; + ap_addr = ap.ap_addr; + friis_index = ap.friis_index; + return *this; } ostream &operator<<(ostream & os, AccessPoint & ap) { - os << "MAC Address: " << ap.ap_addr << endl; - os << "Coordinates: " << ap.coordinates << endl; - os << "Frequency: " << ap.freq << " Hz" << endl; - os << "Antenna gain: " << ap.antenna_gain << "dBi" << endl; - os << "Output power: " << ap.output_power << "dBm" << endl; + os << "MAC Address: " << ap.ap_addr << endl; + os << "Coordinates: " << ap.coordinates << endl; + os << "Frequency: " << ap.freq << " Hz" << endl; + os << "Antenna gain: " << ap.antenna_gain << "dBi" << endl; + os << "Output power: " << ap.output_power << "dBm" << endl; - return os; + return os; } diff --git a/GuiNuMo-server/accesspoint.hh b/GuiNuMo-server/accesspoint.hh index d6f1056..60f30c1 100644 --- a/GuiNuMo-server/accesspoint.hh +++ b/GuiNuMo-server/accesspoint.hh @@ -8,38 +8,43 @@ using namespace std; using std::string; +#define AP_DEFAULT_ADDR "" +#define AP_DEFAULT_FRIIS_INDEX 0 +#define AP_DEFAULT_FREQ 2412 +#define AP_DEFAULT_ANTENNA_GAIN 2 // A good value +#define AP_DEFAULT_OUTPUT_POWER 20 // Another good value, eq. to 100mW + class AccessPoint { - protected: - Point coordinates; - string ap_addr; - float friis_index; - unsigned int freq; - float antenna_gain; - float output_power; +protected: + Point coordinates; + string ap_addr; + float friis_index; + unsigned int freq; + float antenna_gain; + float output_power; - public: - AccessPoint(); - AccessPoint(string addr, float fidx, Point coords, unsigned int f, float antg, float outp); - AccessPoint(const AccessPoint &ap); - ~AccessPoint() {}; - string getApAddr()const { return ap_addr; }; - float getFriisIndex()const { return friis_index; }; - Point getCoordinates()const { return coordinates; }; - float getAntennaGain()const { return antenna_gain; }; - unsigned int getFrequency()const { return freq; }; - float getOutputPower()const { return output_power; }; - void setApAddr(string addr) { ap_addr = addr; }; - void setFriisIndex(float fidx) { friis_index = fidx; }; - void setCoordinates(Point apc) { coordinates = apc; }; - void setCoordinates(float x, float y, float z) { Point apc(x, y, z); coordinates = apc; }; - void setFrequency(unsigned int f) { freq = f; }; - void setAntennaGain(float antg) { antenna_gain = antg; }; - void setOutputPower(float outp) {output_power = outp; }; - bool operator==(const AccessPoint &ap)const; - bool operator!=(const AccessPoint &ap)const; - AccessPoint operator=(const AccessPoint &ap); - friend ostream &operator<<(ostream & os, AccessPoint & ap); +public: + AccessPoint(string addr = AP_DEFAULT_ADDR, float fidx = AP_DEFAULT_FRIIS_INDEX, Point coords = Point(), unsigned int f = AP_DEFAULT_FREQ, float antg = AP_DEFAULT_ANTENNA_GAIN, float outp = AP_DEFAULT_OUTPUT_POWER); + AccessPoint(const AccessPoint &ap); + ~AccessPoint() {}; + string getApAddr()const { return ap_addr; }; + float getFriisIndex()const { return friis_index; }; + Point getCoordinates()const { return coordinates; }; + float getAntennaGain()const { return antenna_gain; }; + unsigned int getFrequency()const { return freq; }; + float getOutputPower()const { return output_power; }; + void setApAddr(string addr) { ap_addr = addr; }; + void setFriisIndex(float fidx) { friis_index = fidx; }; + void setCoordinates(Point apc) { coordinates = apc; }; + void setCoordinates(float x, float y, float z) { Point apc(x, y, z); coordinates = apc; }; + void setFrequency(unsigned int f) { freq = f; }; + void setAntennaGain(float antg) { antenna_gain = antg; }; + void setOutputPower(float outp) {output_power = outp; }; + bool operator==(const AccessPoint &ap)const; + bool operator!=(const AccessPoint &ap)const; + AccessPoint operator=(const AccessPoint &ap); + friend ostream &operator<<(ostream & os, AccessPoint & ap); }; #endif diff --git a/GuiNuMo-server/area.cc b/GuiNuMo-server/area.cc index 786fe5e..77d7e48 100644 --- a/GuiNuMo-server/area.cc +++ b/GuiNuMo-server/area.cc @@ -1,41 +1,36 @@ #include "area.hh" -Area::Area() -{ - area_name = "None"; - x_min = 0; - x_max = 0; - y_min = 0; - y_max = 0; - z_min = 0; - z_max = 0; -} Area::Area(string an, float x1, float x2, float y1, float y2, float z1, float z2) { - area_name = an; - x_min = x1; - x_max = x2; - y_min = y1; - y_max = y2; - z_min = z1; - z_max = z2; + area_name = an; + x_min = x1; + x_max = x2; + y_min = y1; + y_max = y2; + z_min = z1; + z_max = z2; } Area::Area(const Area &a) { - area_name = a.area_name; - x_min = a.x_min; - x_max = a.x_max; - y_min = a.y_min; - y_max = a.y_max; - z_min = a.z_min; - z_max = a.z_max; + area_name = a.area_name; + x_min = a.x_min; + x_max = a.x_max; + y_min = a.y_min; + y_max = a.y_max; + z_min = a.z_min; + z_max = a.z_max; } bool Area::containsPoint(Point p)const { - if((p.getX()>=x_min)&&(p.getX()<=x_max)&&(p.getY()>=y_min)&&(p.getY()<=y_max)&&(p.getZ()>=z_min)&&(p.getZ()<=z_max)) - return true; - return false; + if((p.getX() >= x_min) \ + && (p.getX() <= x_max) \ + && (p.getY() >= y_min) \ + && (p.getY() <= y_max) \ + && (p.getZ() >= z_min) \ + && (p.getZ() <= z_max)) + return true; + return false; } diff --git a/GuiNuMo-server/area.hh b/GuiNuMo-server/area.hh index 9c8f8c9..918792b 100644 --- a/GuiNuMo-server/area.hh +++ b/GuiNuMo-server/area.hh @@ -10,34 +10,33 @@ using std::string; class Area { protected: - string area_name; - float x_min; - float x_max; - float y_min; - float y_max; - float z_min; - float z_max; + string area_name; + float x_min; + float x_max; + float y_min; + float y_max; + float z_min; + float z_max; public: - Area(); - Area(string an, float x1, float x2, float y1, float y2, float z1, float z2); - Area(const Area &a); - ~Area() {}; - bool containsPoint(Point p)const; - string getLabel()const { return label; }; - float getXmin()const { return x_min; }; - float getXmax()const { return x_max; }; - float getYmin()const { return y_min; }; - float getYmax()const { return y_max; }; - float getZmin()const { return z_min; }; - float getZmax()const { return z_max; }; - void setLabel(string l) { label = l; }; - void setXmin(float v) { x_min = v; }; - void setXmax(float v) { x_max = v; }; - void setYmin(float v) { y_min = v; }; - void setYmax(float v) { y_max = v; }; - void setZmin(float v) { z_min = v; }; - void setZmax(float v) { z_max = v; }; + Area(string an = "None", float x1 = 0, float x2 = 0, float y1 = 0, float y2 = 0, float z1 = 0, float z2 = 0); + Area(const Area &a); + ~Area() {}; + bool containsPoint(Point p)const; + string getLabel()const { return label; }; + float getXmin()const { return x_min; }; + float getXmax()const { return x_max; }; + float getYmin()const { return y_min; }; + float getYmax()const { return y_max; }; + float getZmin()const { return z_min; }; + float getZmax()const { return z_max; }; + void setLabel(string l) { label = l; }; + void setXmin(float v) { x_min = v; }; + void setXmax(float v) { x_max = v; }; + void setYmin(float v) { y_min = v; }; + void setYmax(float v) { y_max = v; }; + void setZmin(float v) { z_min = v; }; + void setZmax(float v) { z_max = v; }; }; #endif diff --git a/GuiNuMo-server/access_points.cfg b/GuiNuMo-server/cfg/access_points.cfg similarity index 100% rename from GuiNuMo-server/access_points.cfg rename to GuiNuMo-server/cfg/access_points.cfg diff --git a/GuiNuMo-server/accesspoints.cfg b/GuiNuMo-server/cfg/accesspoints.cfg similarity index 100% rename from GuiNuMo-server/accesspoints.cfg rename to GuiNuMo-server/cfg/accesspoints.cfg diff --git a/GuiNuMo-server/clientinfo.cc b/GuiNuMo-server/clientinfo.cc index 1723923..6f4be6a 100644 --- a/GuiNuMo-server/clientinfo.cc +++ b/GuiNuMo-server/clientinfo.cc @@ -1,20 +1,13 @@ #include "clientinfo.hh" -ClientInfo::ClientInfo() -{ - client_ip = "127.0.0.1"; - antenna_gain = 2; //good default value - client_listen_port = CLIENT_DEFAULT_PORT; - for(int i=0;i<5;i++) - viterbi_distances[i] = 0; -} ClientInfo::ClientInfo(string ip, int port, float antg) { client_ip = ip; antenna_gain = antg; client_listen_port = port; - for(int i=0;i<5;i++) + + for(int i=0 ; i < 5 ; i++) viterbi_distances[i] = 0; } diff --git a/GuiNuMo-server/clientinfo.hh b/GuiNuMo-server/clientinfo.hh index b7249e1..4374a92 100644 --- a/GuiNuMo-server/clientinfo.hh +++ b/GuiNuMo-server/clientinfo.hh @@ -10,6 +10,8 @@ using namespace std; using std::string; #define CLIENT_DEFAULT_PORT 7778 +#define CLIENT_DEFAULT_IP "127.0.0.1" +#define CLIENT_DEFAULT_ANTENNA_GAIN 2 // Good default value class ClientInfo { @@ -17,13 +19,12 @@ protected: string client_ip; float antenna_gain; int client_listen_port; - vector viterbi_vector1; /* Previous vector */ - vector viterbi_vector2; /* Last vector */ + vector viterbi_vector1; // Previous vector + vector viterbi_vector2; // Last vector float viterbi_distances[5]; public: - ClientInfo(); - ClientInfo(string ip, int port, float antg); + ClientInfo(string ip = CLIENT_DEFAULT_IP, int port = CLIENT_DEFAULT_PORT, float antg = CLIENT_DEFAULT_ANTENNA_GAIN); ~ClientInfo(); float getAntennaGain()const { return antenna_gain; }; }; diff --git a/GuiNuMo-server/measurement.cc b/GuiNuMo-server/measurement.cc index d9a17ea..a37ec26 100644 --- a/GuiNuMo-server/measurement.cc +++ b/GuiNuMo-server/measurement.cc @@ -2,32 +2,32 @@ void Measurement::addSsValue(int ssv) { - float ss_mwatts = pow(10, (float) ssv / 10.0) + (ss_list.size() * pow(10, average_ss / 10.0)); + float ss_mwatts = pow(10, (float) ssv / 10.0) + (ss_list.size() * pow(10, average_ss / 10.0)); - ss_list.push_back(ssv); - average_ss = 10 * log10(ss_mwatts / ss_list.size()); + ss_list.push_back(ssv); + average_ss = 10 * log10(ss_mwatts / ss_list.size()); } float Measurement::getSsSquareDistance(float ss)const { - return ((ss - average_ss) * (ss - average_ss)); + return ((ss - average_ss) * (ss - average_ss)); } ostream &operator<<(ostream &os, Measurement &m) { - unsigned int i; + unsigned int i; - os << m.mac_addr << "->"; - if(m.ss_list.size() == 0) - os << "No values"; - else - for(i=0;i"; + if (m.ss_list.size() == 0) + os << "No values"; + else + for (i = 0 ; i < m.ss_list.size() ; i++) + { + os << m.ss_list[i]; + if(i < m.ss_list.size() - 1) + os << ";"; + } + os << " [AVG=" << m.average_ss << "]"; - return os; + return os; } diff --git a/GuiNuMo-server/measurement.hh b/GuiNuMo-server/measurement.hh index 7569441..7518598 100644 --- a/GuiNuMo-server/measurement.hh +++ b/GuiNuMo-server/measurement.hh @@ -11,23 +11,22 @@ using std::string; class Measurement { - protected: - string mac_addr; - float average_ss; - vector ss_list; +protected: + string mac_addr; + float average_ss; + vector ss_list; - public: - Measurement() { mac_addr = "ff:ff:ff:ff:ff:ff"; average_ss = 0; }; - Measurement(string ma, float avg, vector ssl) { mac_addr = ma; average_ss = avg, ss_list = ssl; }; - Measurement(const Measurement &m) { mac_addr = m.mac_addr; average_ss = m.average_ss; ss_list = m.ss_list; }; - ~Measurement() { ss_list.clear(); }; - vector getSsList()const { return ss_list; }; - float getAverage()const { return average_ss; }; - string getMacAddr()const { return mac_addr; }; - void addSsValue(int ssv); - void setMacAddr(string ma) { mac_addr = ma; }; - float getSsSquareDistance(float ss)const; - friend ostream &operator<<(ostream &os, Measurement &m); +public: + Measurement(string ma = "ff:ff:ff:ff:ff:ff", float avg = 0, vector ssl = vector()) { mac_addr = ma; average_ss = avg, ss_list = ssl; }; + Measurement(const Measurement &m) { mac_addr = m.mac_addr; average_ss = m.average_ss; ss_list = m.ss_list; }; + ~Measurement() { ss_list.clear(); }; + vector getSsList()const { return ss_list; }; + float getAverage()const { return average_ss; }; + string getMacAddr()const { return mac_addr; }; + void addSsValue(int ssv); + void setMacAddr(string ma) { mac_addr = ma; }; + float getSsSquareDistance(float ss)const; + friend ostream &operator<<(ostream &os, Measurement &m); }; #endif diff --git a/GuiNuMo-server/point.cc b/GuiNuMo-server/point.cc index 976b1d7..86ca5dd 100644 --- a/GuiNuMo-server/point.cc +++ b/GuiNuMo-server/point.cc @@ -2,30 +2,30 @@ Point Point::operator=(const Point &p) { - if(this == &p) - return *this; - x = p.x; - y = p.y; - z = p.z; - return *this; + if(this == &p) + return *this; + x = p.x; + y = p.y; + z = p.z; + return *this; } bool Point::operator==(const Point &p)const { - if((x == p.x)&&(y == p.y)&&(z == p.z)) - return true; - return false; + if((x == p.x) && (y == p.y) && (z == p.z)) + return true; + return false; } bool Point::operator!=(const Point &p)const { - if((x == p.x)&&(y == p.y)&&(z == p.z)) - return false; - return true; + if((x == p.x) && (y == p.y) && (z == p.z)) + return false; + return true; } ostream &operator<<(ostream &os, const Point &p) { - os << "(" << p.x << ";" << p.y << ";" << p.z << ")"; - return os; + os << "(" << p.x << ";" << p.y << ";" << p.z << ")"; + return os; } diff --git a/GuiNuMo-server/point.hh b/GuiNuMo-server/point.hh index dba68d1..2e6921c 100644 --- a/GuiNuMo-server/point.hh +++ b/GuiNuMo-server/point.hh @@ -8,29 +8,28 @@ using namespace std; class Point { - protected: - float x; - float y; - float z; +protected: + float x; + float y; + float z; - public: - Point() { x = 0; y = 0; z = 0; }; - Point(const Point &p) { x = p.x; y = p.y; z = p.z; } ; - Point(float my_x, float my_y, float my_z) { x = my_x; y = my_y; z = my_z; }; - ~Point() {}; - float getX()const { return x; }; - float getY()const { return y; }; - float getZ()const { return z; }; - void setX(float my_x) { x = my_x; }; - void setY(float my_y) { y = my_y; }; - void setZ(float my_z) { z = my_z; }; - float squareDistance(const Point &p)const { return ((x-p.x)*(x-p.x))+((y-p.y)*(y-p.y))+((z-p.z)*(z-p.z)); }; - float squareDistance(float mx, float my, float mz)const { return ((x-mx)*(x-mx))+((y-my)*(y-my))+((z-mz)*(z-mz)); }; - float distance(const Point &p)const { return sqrt(((x-p.x)*(x-p.x))+((y-p.y)*(y-p.y))+((z-p.z)*(z-p.z))); }; - Point operator=(const Point &p); - bool operator==(const Point &p)const; - bool operator!=(const Point &p)const; - friend ostream &operator<<(ostream & os, const Point &p); +public: + Point(float _x = 0, float _y = 0, float _z = 0) { x = _x; y = _y; z = _z; } ; + Point(const Point &p) { x = p.x; y = p.y; z = p.z; } ; + ~Point() {}; + float getX()const { return x; }; + float getY()const { return y; }; + float getZ()const { return z; }; + void setX(float my_x) { x = my_x; }; + void setY(float my_y) { y = my_y; }; + void setZ(float my_z) { z = my_z; }; + float squareDistance(const Point &p)const { return ((x-p.x)*(x-p.x))+((y-p.y)*(y-p.y))+((z-p.z)*(z-p.z)); }; + float squareDistance(float mx, float my, float mz)const { return ((x-mx)*(x-mx))+((y-my)*(y-my))+((z-mz)*(z-mz)); }; + float distance(const Point &p)const { return sqrt(((x-p.x)*(x-p.x))+((y-p.y)*(y-p.y))+((z-p.z)*(z-p.z))); }; + Point operator=(const Point &p); + bool operator==(const Point &p)const; + bool operator!=(const Point &p)const; + friend ostream &operator<<(ostream & os, const Point &p); }; #endif diff --git a/GuiNuMo-server/referencepoint.hh b/GuiNuMo-server/referencepoint.hh index 1c03303..2bb09be 100644 --- a/GuiNuMo-server/referencepoint.hh +++ b/GuiNuMo-server/referencepoint.hh @@ -15,9 +15,8 @@ protected: vector measurement_list; public: - ReferencePoint() { coordinates.setX(0); coordinates.setY(0); coordinates.setZ(0); }; + ReferencePoint(float x = 0, float y = 0, float z = 0) { coordinates.setX(x); coordinates.setY(y); coordinates.setZ(z); }; ReferencePoint(const ReferencePoint &rp) { coordinates = rp.coordinates; measurement_list = rp.measurement_list; }; - ReferencePoint(float x, float y, float z) { coordinates.setX(x); coordinates.setY(y); coordinates.setZ(z); }; ReferencePoint(Point c) { coordinates = c; }; ~ReferencePoint() { measurement_list.clear(); }; float getSsSquareDistance(vector m)const; diff --git a/GuiNuMo-server/server.cc b/GuiNuMo-server/server.cc index fe9fae4..db3b09d 100644 --- a/GuiNuMo-server/server.cc +++ b/GuiNuMo-server/server.cc @@ -1,15 +1,16 @@ #include "server.hh" /* Misc. very usefull functions */ + /* Explodes a string into substrings based on separator sep. Returns a string vector. */ inline vector explode(string input, char sep) { vector vs; string tmp; unsigned int i; - - for(i=0;i explode(string input, char sep) { tmp.push_back(input[i]); } - + //Last entry, did not encounter a separator. vs.push_back(tmp); tmp.clear(); - + return vs; } @@ -30,9 +31,9 @@ inline vector explode(string input, char sep) inline int string2int(string nb) { istringstream iss(nb); - + int tmp; - iss>>tmp; + iss >> tmp; return tmp; } @@ -40,9 +41,9 @@ inline int string2int(string nb) inline unsigned int string2uint(string nb) { istringstream iss(nb); - + unsigned int tmp; - iss>>tmp; + iss >> tmp; return tmp; } @@ -50,9 +51,9 @@ inline unsigned int string2uint(string nb) inline float string2float(string nb) { istringstream iss(nb); - + float tmp; - iss>>tmp; + iss >> tmp; return tmp; } @@ -62,13 +63,13 @@ inline vector extractValues(string buff) unsigned int ptr = 0; vector ret; string tmp_field; - - if(buff[buff.size()-1] != ';') + + if (buff[buff.size()-1] != ';') buff.push_back(';'); - - while(ptr < buff.size()) + + while (ptr < buff.size()) { - if(buff[ptr] != ';') + if (buff[ptr] != ';') tmp_field.push_back(buff[ptr]); else { @@ -85,10 +86,10 @@ inline vector extractReferencePointInfoFromBuffer(string buffer_in) unsigned int i = 0; string tmp_field; vector ret; - + /* Extract coordinates */ /* x */ - while(buffer_in[i] != ';') + while (buffer_in[i] != ';') { tmp_field.push_back(buffer_in[i]); i++; @@ -96,9 +97,9 @@ inline vector extractReferencePointInfoFromBuffer(string buffer_in) ret.push_back(tmp_field); tmp_field.clear(); i++; //go after the ';' - + /* y */ - while(buffer_in[i] != ';') + while (buffer_in[i] != ';') { tmp_field.push_back(buffer_in[i]); i++; @@ -106,9 +107,9 @@ inline vector extractReferencePointInfoFromBuffer(string buffer_in) ret.push_back(tmp_field); tmp_field.clear(); i++; - + /* Extract direction (not used now) */ - while(buffer_in[i] != ';') + while (buffer_in[i] != ';') { tmp_field.push_back(buffer_in[i]); i++; @@ -116,9 +117,9 @@ inline vector extractReferencePointInfoFromBuffer(string buffer_in) ret.push_back(tmp_field); tmp_field.clear(); i++; - + /* Extract mac address */ - while(buffer_in[i] != ';') + while (buffer_in[i] != ';') { tmp_field.push_back(buffer_in[i]); i++; @@ -126,49 +127,35 @@ inline vector extractReferencePointInfoFromBuffer(string buffer_in) ret.push_back(tmp_field); tmp_field.clear(); i++; - + /* Extract scan list */ - while(i < buffer_in.size()) + while (i < buffer_in.size()) { tmp_field.push_back(buffer_in[i]); i++; } ret.push_back(tmp_field); tmp_field.clear(); - + /* Return the vector with each data */ return ret; } /* ***************************************************************** */ -Server::Server() -{ - /* Open socket */ - sockListen = socket(PF_INET, SOCK_DGRAM, 0); - sockSend = socket(PF_INET, SOCK_DGRAM, 0); - - /* Set addr */ - server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(DEFAULT_LISTEN_PORT); - server_addr.sin_addr.s_addr = inet_addr(DEFAULT_IP); - memset(server_addr.sin_zero, '\0', sizeof(server_addr.sin_zero)); - - /* Bind */ - bind(sockListen, (struct sockaddr *)&server_addr, sizeof(server_addr)); -} -Server::Server(string ip_addr, int listen_port, int send_port) +//Server::Server(string ip_addr, int listen_port, int send_port) // FIXME : paramètre send_port inutilisé +Server::Server(string ip_addr, int listen_port) { /* Open socket */ sockListen = socket(PF_INET, SOCK_DGRAM, 0); sockSend = socket(PF_INET, SOCK_DGRAM, 0); - + /* Set addr */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(listen_port); server_addr.sin_addr.s_addr = inet_addr(ip_addr.c_str()); memset(server_addr.sin_zero, '\0', sizeof(server_addr.sin_zero)); - + /* Bind */ bind(sockListen, (struct sockaddr *)&server_addr, sizeof(server_addr)); } @@ -197,10 +184,11 @@ bool Server::pointExists(float x, float y, float z)const { Point p(x, y, z); unsigned int i; - - for(i=0;i Server::getkClosestInSs(vector m, unsigned int k, boo vector points_vector; Point tmp_pt; float tmp_distance = 0, dist_max = 10000000, tmp_min; - - for(i=0;i Server::getkClosestInSs(vector m, unsigned int k, boo if(dist_max > tmp_distance) { /* remove old max */ - for(j=0;j Server::getkClosestInSs(vector m, unsigned int k, boo /* Else nothing needs to be done */ } } - + /* Sorts the vector */ - for(i=0;i distances_vector[j]) + for (j = i+1 ; j < distances_vector.size() ; j++) + if (tmp_min > distances_vector[j]) { tmp_min = distances_vector[j]; min_idx = j; } - if(min_idx != i) + + if (min_idx != i) { /* Swap points */ tmp_pt = points_vector[i]; points_vector[i] = points_vector[min_idx]; points_vector[min_idx] = tmp_pt; - + /* Swap distances */ distances_vector[min_idx] = distances_vector[i]; distances_vector[i] = tmp_min; } } - + return points_vector; } @@ -338,25 +327,25 @@ Point Server::getkWeightedInSs(vector m, unsigned int k, bool ignor float tmp_distance = 0, dist_max = 10000000; Point ret; float total = 0, x = 0, y = 0, z = 0; - - for(i=0;i tmp_distance)?tmp_distance:dist_max; + dist_max = (dist_max > tmp_distance) ? tmp_distance : dist_max; } else { /* if tmp_dst < dist_max, should add it and remove previous greatest dist. */ - if(dist_max > tmp_distance) + if (dist_max > tmp_distance) { /* remove old max */ - for(j=0;j m, unsigned int k, bool ignor /* Else nothing needs to be done */ } } - for(i=0;i vp)const unsigned int i; float x=0, y=0, z=0; Point p; - - for(i=0;i vp)const p.setX(x / (float) vp.size()); p.setY(y / (float) vp.size()); p.setZ(z / (float) vp.size()); - + return p; } @@ -415,47 +404,47 @@ Point Server::fbcm(vector m, int client_idx)const unsigned int i, ap_idx; float constant_term, minmax_res, minmax_max; float x = MINMAX_X_START, y = MINMAX_Y_START; - + i = 0; //cout << "FBCM: "; - for(i=0;i minmax_max) - minmax_max = centres[i].squareDistance(x, y, 3) - (dist_vect[i]*dist_vect[i]); - if(minmax_max < minmax_res) + for (i = 0 ; i < centres.size() ; i++) + if ((centres[i].squareDistance(x, y, 3) - (dist_vect[i]*dist_vect[i])) > minmax_max) + minmax_max = centres[i].squareDistance(x, y, 3) - (dist_vect[i] * dist_vect[i]); + if (minmax_max < minmax_res) { ret.setX(x); ret.setY(y); minmax_res = minmax_max; } } - + /* Clear all vectors */ addr.clear(); dist_vect.clear(); centres.clear(); - + /* Return position */ return ret; } @@ -469,42 +458,42 @@ Point Server::interlink(vector m, int client_idx)const unsigned int i, ap_idx; float constant_term, minmax_res, minmax_max; float x = MINMAX_X_START, y = MINMAX_Y_START; - + i = 0; - for(i=0;i minmax_max) - minmax_max = centres[i].squareDistance(x, y, 3) - (dist_vect[i]*dist_vect[i]); - if(minmax_max < minmax_res) + for (i = 0 ; i < centres.size() ; i++) + if ((centres[i].squareDistance(x, y, 3) - (dist_vect[i] * dist_vect[i])) > minmax_max) + minmax_max = centres[i].squareDistance(x, y, 3) - (dist_vect[i] * dist_vect[i]) ; + if (minmax_max < minmax_res) { ret.setX(x); ret.setY(y); minmax_res = minmax_max; } } - + /* Clear all vectors */ addr.clear(); dist_vect.clear(); centres.clear(); - + /* Return position */ return ret; } @@ -521,12 +510,18 @@ void Server::makeReferencePointListFromFile(string filename) string cpp_buffer, tmp_mes; vector measures_vector; vector infos; - - input_file.open(filename.c_str()); - while(!input_file.eof()) + + input_file.open(filename.c_str()) ; + if (input_file.fail()) + { + cerr << "Error opening input file « " << filename << " » !" << endl ; + return ; + } + + while (!input_file.eof()) { input_file.getline(buffer, BUFFER_LENGTH); - if ((input_file.rdstate() & ifstream::eofbit ) == 0 ) + if ((input_file.rdstate() & ifstream::eofbit) == 0) { /* Extract fields */ cpp_buffer = buffer; @@ -538,18 +533,18 @@ void Server::makeReferencePointListFromFile(string filename) tmp_point.setY(y); tmp_point.setZ(DEFAULT_Z); /* Use C++ string format */ - if(!pointExists(tmp_point)) + if (!pointExists(tmp_point)) { rp.setCoordinates(tmp_point); reference_point_list.push_back(rp); } pt_idx = pointIndex(tmp_point); measures_vector = extractValues(infos[4]); - for(i=0;i ap_infos; AccessPoint tmp_ap; - + input_file.open(filename.c_str()); - while(!input_file.eof()) + if (input_file.fail()) + { + cerr << "Error opening input file « " << filename << " » !" << endl ; + return ; + } + + while (!input_file.eof()) { input_file.getline(buffer, BUFFER_LENGTH); - if ((input_file.rdstate() & ifstream::eofbit ) == 0 ) + if ((input_file.rdstate() & ifstream::eofbit) == 0) { ap_infos = explode(buffer, ';'); cout << buffer << endl; - for(unsigned int i=0;i " << (friis_sum / friis_idx_list.size()) << endl; @@ -641,45 +640,49 @@ void Server::computeFriisFromRefList() } } + /* * Function computes new cumulative distances for each running viterbi instance, * Returns the solution (type: Point) of the last ended viterbi. * Distances are grouped by line corresponding to an instance. * vk MUST be the same as last.size() and current.size() ! */ +/* Point Server::viterbiLike(float ** dists, unsigned short vk, unsigned short vn, vector last, vector current) { unsigned int i, j, k; float min; vector last_dists; Point position; - - /* Compute the ending viterbi: line 0 */ - for(i=0;i vm; - makeReferencePointListFromFile("complete-scan.csv"); - makeApListFromFile("accesspoints.cfg"); + makeReferencePointListFromFile(DEFAULT_REF_POINT_FILE); + makeApListFromFile(DEFAULT_AP_FILE); computeFriisFromRefList(); - + /* Open a log file */ - logfile.open("radar_exp.csv"); + logfile.open(DEFAULT_LOGFILE); + if (logfile.fail()) + { + cerr << "Error opening output file « " << logfile << " » !" << endl ; + return ; + } /* Column names */ logfile << "Coordinates\t2-kss\t(Error)\t3-kss\t(Error)\t4-kss\t(Error)\t5-kss\t(Error)\tnss\t(Error)\tInterlink\t(Error)\tFBCM\t(Error)" << endl; - - for(i=0;i >, std::vector >) ; }; #endif diff --git a/GuiNuMo-server/test.cc b/GuiNuMo-server/test.cc index 11d1686..67ba27e 100644 --- a/GuiNuMo-server/test.cc +++ b/GuiNuMo-server/test.cc @@ -18,8 +18,8 @@ int main(int argc, char ** argv) ofstream output_file; string read_file; Server my_server; - + my_server.radar_exp(); - + return 0; }