diff --git a/owlps-positioning/Makefile b/owlps-positioning/Makefile index b5f3cf7..f6815ba 100644 --- a/owlps-positioning/Makefile +++ b/owlps-positioning/Makefile @@ -23,7 +23,7 @@ TARGET = owlps-positioning HEADER = owlps-positioning.hh OBJ = posutil.o point3d.o referencepoint.o waypoint.o building.o \ area.o wifidevice.o accesspoint.o mobile.o measurement.o \ - calibrationmeasurement.o request.o inputcsv.o + calibrationmeasurement.o request.o inputcsv.o stock.o all: $(TARGET) @@ -33,6 +33,7 @@ all: $(TARGET) $(GXX) $(GXXFLAGS) -c $< posutil.o: posutil.hh +stock.o: stock.hh point3d.o: point3d.hh referencepoint.o : referencepoint.hh point3d.o waypoint.o: waypoint.hh point3d.o building.o @@ -44,7 +45,7 @@ mobile.o: mobile.hh wifidevice.o measurement.o: measurement.hh accesspoint.o calibrationmeasurement.o: calibrationmeasurement.hh measurement.o referencepoint.o request.o: request.hh measurement.o -inputcsv.o: inputcsv.hh inputmedium.hh request.o +inputcsv.o: inputcsv.hh inputmedium.hh request.o stock.o #libowlps-positioning.o: libowlps-positioning.hh #positioning.o: point.hh referencepoint.hh accesspoint.hh area.hh measurement.hh libowlps-positioning.hh #server.o: server.hh positioning.hh point.hh measurement.hh treatment.hh libowlps-positioning.hh diff --git a/owlps-positioning/TODO b/owlps-positioning/TODO index 1deae6e..5651c3c 100644 --- a/owlps-positioning/TODO +++ b/owlps-positioning/TODO @@ -16,7 +16,8 @@ Utiliser '\n' plutôt que endl lorsque le vidage du tampon n'est pas nécessaire. -- Measurement : corriger le calcul de moyenne. +- Measurement + Vérifier le calcul de moyenne (a priori OK). - Revoir le diagramme UML ° Associations : devraient êtres représentées par des attributs @@ -31,6 +32,7 @@ - Accesseurs par références ? getref_mon_attribut() (cf. l'ancien clientinfo.hh) + −> Accesseur en lecture : retourne une référence constante. - C++ en action Espaces de noms ? 109 diff --git a/owlps-positioning/accesspoint.hh b/owlps-positioning/accesspoint.hh index 9fbb9d7..3f525df 100644 --- a/owlps-positioning/accesspoint.hh +++ b/owlps-positioning/accesspoint.hh @@ -18,9 +18,9 @@ public: const Point3D &_coordinates, const unsigned int &_frequency = AP_DEFAULT_CHANNEL): WifiDevice(wd), coordinates(_coordinates), frequency(_frequency) {} - AccessPoint(const Point3D &_coordinates, - const std::string &_ip_addr, - const std::string &_mac_addr, + AccessPoint(const Point3D &_coordinates = Point3D(), + const std::string &_ip_addr = "", + const std::string &_mac_addr = "", const float &_antenna_gain = AP_DEFAULT_ANTENNA_GAIN, const float &_trx_power = WIFIDEVICE_DEFAULT_TRX_POWER, const unsigned int &_frequency = AP_DEFAULT_CHANNEL): diff --git a/owlps-positioning/inputcsv.cc b/owlps-positioning/inputcsv.cc index 02815cc..beaf862 100644 --- a/owlps-positioning/inputcsv.cc +++ b/owlps-positioning/inputcsv.cc @@ -1,5 +1,6 @@ #include "inputcsv.hh" #include "posutil.hh" +#include "stock.hh" #include @@ -72,9 +73,10 @@ const Request& InputCSV::get_next_request() return current_request ; } - // FIXME! We need to search for the mobile corresponding to the read - // MAC address and set the mobile pointer in the Request. - //current_request.set_mobile(NULL) ; + // If the mobile did not exist, we create it + if (Stock::get_mobile(*ti).get_mac_addr().size() == 0) + Stock::getw_mobile(*ti).set_mac_addr(*ti) ; + current_request.set_mobile(&Stock::get_mobile(*ti)) ; // Read Timestamp field if (++ti == tok.end()) @@ -157,6 +159,11 @@ const Request& InputCSV::get_next_request() return current_request ; } + // If the AP did not exist, we create it + if (Stock::get_ap(mac_ap).get_mac_addr().size() == 0) + Stock::getw_ap(mac_ap).set_mac_addr(mac_ap) ; + measurements[mac_ap].set_ap(&Stock::get_ap(mac_ap)) ; + // Adding value measurements[mac_ap].add_ss(ss) ; } diff --git a/owlps-positioning/mobile.hh b/owlps-positioning/mobile.hh index 3569fe1..8762c3c 100644 --- a/owlps-positioning/mobile.hh +++ b/owlps-positioning/mobile.hh @@ -10,8 +10,8 @@ class Mobile: public WifiDevice { public: - Mobile(const std::string &_ip_addr, - const std::string &_mac_addr, + Mobile(const std::string &_ip_addr = "", + const std::string &_mac_addr = "", const float &_antenna_gain = MOBILE_DEFAULT_ANTENNA_GAIN, const float &_trx_power = WIFIDEVICE_DEFAULT_TRX_POWER): WifiDevice(_ip_addr, _mac_addr, _antenna_gain, _trx_power) {} diff --git a/owlps-positioning/stock.cc b/owlps-positioning/stock.cc new file mode 100644 index 0000000..0d07d02 --- /dev/null +++ b/owlps-positioning/stock.cc @@ -0,0 +1,12 @@ +#include "stock.hh" + +using namespace std ; +using std::tr1::unordered_map ; + + + +unordered_map Stock::mobiles = + unordered_map() ; + +unordered_map Stock::aps = + unordered_map() ; diff --git a/owlps-positioning/stock.hh b/owlps-positioning/stock.hh new file mode 100644 index 0000000..774fcf2 --- /dev/null +++ b/owlps-positioning/stock.hh @@ -0,0 +1,52 @@ +#ifndef _OWLPS_POSITIONING_STOCK_HH_ +#define _OWLPS_POSITIONING_STOCK_HH_ + +#include "mobile.hh" +#include "accesspoint.hh" + +#include + +class Stock +{ +private: + static std::tr1::unordered_map mobiles ; + static std::tr1::unordered_map aps ; + +public: + static const Mobile& get_mobile(const std::string &mac) ; + static Mobile& getw_mobile(const std::string &mac) ; + static const AccessPoint& get_ap(const std::string &mac) ; + static AccessPoint& getw_ap(const std::string &mac) ; +} ; + + + +/*** Accesseurs lecture ***/ + + +inline const Mobile& Stock::get_mobile(const std::string &mac) +{ + return mobiles[mac] ; +} + + +inline Mobile& Stock::getw_mobile(const std::string &mac) +{ + return mobiles[mac] ; +} + + +inline const AccessPoint& Stock::get_ap(const std::string &mac) +{ + return aps[mac] ; +} + + +inline AccessPoint& Stock::getw_ap(const std::string &mac) +{ + return aps[mac] ; +} + + + +#endif // _OWLPS_POSITIONING_STOCK_HH_ diff --git a/owlps-positioning/wifidevice.hh b/owlps-positioning/wifidevice.hh index c75b646..e8af829 100644 --- a/owlps-positioning/wifidevice.hh +++ b/owlps-positioning/wifidevice.hh @@ -18,8 +18,8 @@ protected: float trx_power ; // Transmit power in dBm public: - WifiDevice(const std::string &_ip_addr, - const std::string &_mac_addr, + WifiDevice(const std::string &_ip_addr = "", + const std::string &_mac_addr = "", const float &_antenna_gain = WIFIDEVICE_DEFAULT_ANTENNA_GAIN, const float &_trx_power = WIFIDEVICE_DEFAULT_TRX_POWER) ; WifiDevice(const WifiDevice &wd) ;