[Positioning] Minimal handling of request type

Handle the new CSV & UDP formats that include the request type.
This commit is contained in:
Matteo Cypriani 2011-03-29 11:22:44 +02:00
parent 1dad77b26f
commit 1a5117d46b
7 changed files with 54 additions and 6 deletions

View File

@ -136,6 +136,7 @@ typedef struct _owl_autocalibration_order
#define OWL_REQUEST_CALIBRATION 1 #define OWL_REQUEST_CALIBRATION 1
#define OWL_REQUEST_AUTOCALIBRATION 2 #define OWL_REQUEST_AUTOCALIBRATION 2
#define OWL_REQUEST_IMPLICIT 10 #define OWL_REQUEST_IMPLICIT 10
#define OWL_REQUEST_UNDEFINED 255
/* Wi-Fi channel frequencies in Hz */ /* Wi-Fi channel frequencies in Hz */

View File

@ -43,6 +43,16 @@ const Request& InputCSV::get_next_request()
const Mobile &mobile = Stock::find_create_mobile(mac_mobile) ; const Mobile &mobile = Stock::find_create_mobile(mac_mobile) ;
current_request->set_mobile(&mobile) ; current_request->set_mobile(&mobile) ;
// Read request type
uint8_t type ;
if (! file.read_field(type))
{
// Wrong number of fields: blank current request
current_request->clear() ;
return *current_request ;
}
current_request->set_type(type) ;
// Read Timestamp field // Read Timestamp field
Timestamp timestamp ; Timestamp timestamp ;
if (! file.read_timestamp(timestamp)) if (! file.read_timestamp(timestamp))
@ -94,8 +104,9 @@ const Request& InputCSV::get_next_request()
current_request->set_measurements(measurements) ; current_request->set_measurements(measurements) ;
// If the direction is valid, it means we have a CalibrationRequest // Calibration request?
if (direction) if (type == OWL_REQUEST_CALIBRATION ||
type == OWL_REQUEST_AUTOCALIBRATION)
{ {
current_request_to_calibration_request() ; current_request_to_calibration_request() ;
CalibrationRequest *request = CalibrationRequest *request =

View File

@ -19,7 +19,10 @@ const string InputLogCSV::request_to_csv(const Request &request) const
ostringstream csv_line ; ostringstream csv_line ;
if (request.get_mobile() != NULL) if (request.get_mobile() != NULL)
csv_line << request.get_mobile()->get_mac_addr() ; csv_line << request.get_mobile()->get_mac_addr() ;
csv_line << ';' << request.get_time_sent() << ';' ; csv_line
<< ';' << static_cast<uint_fast16_t>(request.get_type())
<< ';' << request.get_time_sent()
<< ';' ;
const CalibrationRequest *calibration_request = const CalibrationRequest *calibration_request =
dynamic_cast<const CalibrationRequest*>(&request) ; dynamic_cast<const CalibrationRequest*>(&request) ;

View File

@ -110,6 +110,9 @@ const Request& InputUDPSocket::get_next_request()
const Mobile &mobile = Stock::find_create_mobile(mac_mobile) ; const Mobile &mobile = Stock::find_create_mobile(mac_mobile) ;
current_request->set_mobile(&mobile) ; current_request->set_mobile(&mobile) ;
// Request type
current_request->set_type(request.type) ;
// Timestamp // Timestamp
current_request->set_time_sent(Timestamp(request.request_time)) ; current_request->set_time_sent(Timestamp(request.request_time)) ;

View File

@ -20,10 +20,12 @@ const string OutputCSV::result_to_csv(const Result &result)
{ {
if (request->get_mobile() != NULL) if (request->get_mobile() != NULL)
csv_line << request->get_mobile()->get_mac_addr() ; csv_line << request->get_mobile()->get_mac_addr() ;
csv_line << ';' << request->get_time_sent() ; csv_line
<< ';' << static_cast<uint_fast16_t>(request->get_type())
<< ';' << request->get_time_sent() ;
} }
else else
csv_line << ';' ; csv_line << ";;;" ;
Point3D position = result.get_position() ; Point3D position = result.get_position() ;
csv_line csv_line

View File

@ -30,6 +30,7 @@ Request::~Request()
*/ */
void Request::clear() void Request::clear()
{ {
type = OWL_REQUEST_UNDEFINED ;
mobile = NULL ; mobile = NULL ;
time_sent.clear() ; time_sent.clear() ;
measurements.clear() ; measurements.clear() ;
@ -45,6 +46,7 @@ const Request& Request::operator=(const Request &source)
if (this == &source) if (this == &source)
return *this ; return *this ;
type = source.type ;
mobile = source.mobile ; mobile = source.mobile ;
time_sent = source.time_sent ; time_sent = source.time_sent ;
measurements = source.measurements ; measurements = source.measurements ;
@ -59,6 +61,7 @@ bool Request::operator==(const Request &source) const
return true ; return true ;
return return
type == source.type &&
mobile == source.mobile && mobile == source.mobile &&
time_sent == source.time_sent && time_sent == source.time_sent &&
measurements == source.measurements ; measurements == source.measurements ;
@ -74,7 +77,8 @@ ostream& operator<<(ostream &os, const Request &r)
// MAC address // MAC address
os os
<< "Mobile: " << "Type: " << static_cast<uint_fast16_t>(r.type)
<< ", Mobile: "
<< (r.mobile != NULL ? r.mobile->get_mac_addr() : "Unknown_Mobile") << (r.mobile != NULL ? r.mobile->get_mac_addr() : "Unknown_Mobile")
<< ":" ; << ":" ;
@ -101,6 +105,7 @@ size_t hash_value(const Request &source)
{ {
size_t seed = 0 ; size_t seed = 0 ;
boost::hash_combine(seed, source.type) ;
boost::hash_combine(seed, source.time_sent) ; boost::hash_combine(seed, source.time_sent) ;
if (source.mobile != NULL) if (source.mobile != NULL)
boost::hash_combine(seed, source.mobile->get_mac_addr()) ; boost::hash_combine(seed, source.mobile->get_mac_addr()) ;

View File

@ -6,6 +6,8 @@ class Mobile ;
#include "measurement.hh" #include "measurement.hh"
#include "timestamp.hh" #include "timestamp.hh"
#include <owlps.h>
#include <ctime> #include <ctime>
#include <boost/tr1/unordered_map.hpp> #include <boost/tr1/unordered_map.hpp>
#include <ostream> #include <ostream>
@ -14,6 +16,8 @@ class Mobile ;
class Request class Request
{ {
protected: protected:
/// Type of the request
uint_fast8_t type ;
/// The mobile that sent the request /// The mobile that sent the request
Mobile *mobile ; Mobile *mobile ;
/// Local date of the request on the mobile /// Local date of the request on the mobile
@ -29,21 +33,25 @@ public:
const std::tr1::unordered_map<std::string, Measurement> const std::tr1::unordered_map<std::string, Measurement>
&_measurements = &_measurements =
std::tr1::unordered_map<std::string, Measurement>()): std::tr1::unordered_map<std::string, Measurement>()):
type(OWL_REQUEST_UNDEFINED),
mobile(const_cast<Mobile*>(_mobile)), time_sent(_time_sent), mobile(const_cast<Mobile*>(_mobile)), time_sent(_time_sent),
measurements(_measurements) {} measurements(_measurements) {}
Request(const std::tr1::unordered_map<std::string, Measurement> Request(const std::tr1::unordered_map<std::string, Measurement>
&_measurements): &_measurements):
type(OWL_REQUEST_UNDEFINED),
mobile(NULL), measurements(_measurements) {} mobile(NULL), measurements(_measurements) {}
Request(const Timestamp &_time_sent, Request(const Timestamp &_time_sent,
const std::tr1::unordered_map<std::string, Measurement> const std::tr1::unordered_map<std::string, Measurement>
&_measurements = &_measurements =
std::tr1::unordered_map<std::string, Measurement>()): std::tr1::unordered_map<std::string, Measurement>()):
type(OWL_REQUEST_UNDEFINED),
mobile(NULL), time_sent(_time_sent), mobile(NULL), time_sent(_time_sent),
measurements(_measurements) {} measurements(_measurements) {}
Request(const Request &source): Request(const Request &source):
type(source.type),
mobile(source.mobile), time_sent(source.time_sent), mobile(source.mobile), time_sent(source.time_sent),
measurements(source.measurements) {} measurements(source.measurements) {}
@ -51,6 +59,7 @@ public:
/** @name Read accessors */ /** @name Read accessors */
//@{ //@{
uint8_t get_type(void) const ;
Mobile* get_mobile(void) const ; Mobile* get_mobile(void) const ;
const Timestamp& get_time_sent(void) const ; const Timestamp& get_time_sent(void) const ;
const std::tr1::unordered_map<std::string, Measurement>& const std::tr1::unordered_map<std::string, Measurement>&
@ -59,6 +68,7 @@ public:
/** @name Write accessors */ /** @name Write accessors */
//@{ //@{
void set_type(const uint8_t _type) ;
void set_mobile(const Mobile *_mobile) ; void set_mobile(const Mobile *_mobile) ;
void set_time_sent(const Timestamp &_time_sent) ; void set_time_sent(const Timestamp &_time_sent) ;
void set_measurements(const std::tr1::unordered_map void set_measurements(const std::tr1::unordered_map
@ -86,6 +96,13 @@ public:
/* *** Read accessors *** */ /* *** Read accessors *** */
inline uint8_t Request::get_type() const
{
return type ;
}
inline Mobile* Request::get_mobile() const inline Mobile* Request::get_mobile() const
{ {
return mobile ; return mobile ;
@ -109,6 +126,12 @@ Request::get_measurements(void) const
/* *** Write accessors *** */ /* *** Write accessors *** */
inline void Request::set_type(const uint8_t _type)
{
type = _type ;
}
inline void Request::set_mobile(const Mobile *_mobile) inline void Request::set_mobile(const Mobile *_mobile)
{ {
mobile = const_cast<Mobile*>(_mobile) ; mobile = const_cast<Mobile*>(_mobile) ;