[Positioning] Minimal handling of request type
Handle the new CSV & UDP formats that include the request type.
This commit is contained in:
parent
1dad77b26f
commit
1a5117d46b
|
@ -136,6 +136,7 @@ typedef struct _owl_autocalibration_order
|
|||
#define OWL_REQUEST_CALIBRATION 1
|
||||
#define OWL_REQUEST_AUTOCALIBRATION 2
|
||||
#define OWL_REQUEST_IMPLICIT 10
|
||||
#define OWL_REQUEST_UNDEFINED 255
|
||||
|
||||
|
||||
/* Wi-Fi channel frequencies in Hz */
|
||||
|
|
|
@ -43,6 +43,16 @@ const Request& InputCSV::get_next_request()
|
|||
const Mobile &mobile = Stock::find_create_mobile(mac_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
|
||||
Timestamp timestamp ;
|
||||
if (! file.read_timestamp(timestamp))
|
||||
|
@ -94,8 +104,9 @@ const Request& InputCSV::get_next_request()
|
|||
|
||||
current_request->set_measurements(measurements) ;
|
||||
|
||||
// If the direction is valid, it means we have a CalibrationRequest
|
||||
if (direction)
|
||||
// Calibration request?
|
||||
if (type == OWL_REQUEST_CALIBRATION ||
|
||||
type == OWL_REQUEST_AUTOCALIBRATION)
|
||||
{
|
||||
current_request_to_calibration_request() ;
|
||||
CalibrationRequest *request =
|
||||
|
|
|
@ -19,7 +19,10 @@ const string InputLogCSV::request_to_csv(const Request &request) const
|
|||
ostringstream csv_line ;
|
||||
if (request.get_mobile() != NULL)
|
||||
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 =
|
||||
dynamic_cast<const CalibrationRequest*>(&request) ;
|
||||
|
|
|
@ -110,6 +110,9 @@ const Request& InputUDPSocket::get_next_request()
|
|||
const Mobile &mobile = Stock::find_create_mobile(mac_mobile) ;
|
||||
current_request->set_mobile(&mobile) ;
|
||||
|
||||
// Request type
|
||||
current_request->set_type(request.type) ;
|
||||
|
||||
// Timestamp
|
||||
current_request->set_time_sent(Timestamp(request.request_time)) ;
|
||||
|
||||
|
|
|
@ -20,10 +20,12 @@ const string OutputCSV::result_to_csv(const Result &result)
|
|||
{
|
||||
if (request->get_mobile() != NULL)
|
||||
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
|
||||
csv_line << ';' ;
|
||||
csv_line << ";;;" ;
|
||||
|
||||
Point3D position = result.get_position() ;
|
||||
csv_line
|
||||
|
|
|
@ -30,6 +30,7 @@ Request::~Request()
|
|||
*/
|
||||
void Request::clear()
|
||||
{
|
||||
type = OWL_REQUEST_UNDEFINED ;
|
||||
mobile = NULL ;
|
||||
time_sent.clear() ;
|
||||
measurements.clear() ;
|
||||
|
@ -45,6 +46,7 @@ const Request& Request::operator=(const Request &source)
|
|||
if (this == &source)
|
||||
return *this ;
|
||||
|
||||
type = source.type ;
|
||||
mobile = source.mobile ;
|
||||
time_sent = source.time_sent ;
|
||||
measurements = source.measurements ;
|
||||
|
@ -59,6 +61,7 @@ bool Request::operator==(const Request &source) const
|
|||
return true ;
|
||||
|
||||
return
|
||||
type == source.type &&
|
||||
mobile == source.mobile &&
|
||||
time_sent == source.time_sent &&
|
||||
measurements == source.measurements ;
|
||||
|
@ -74,7 +77,8 @@ ostream& operator<<(ostream &os, const Request &r)
|
|||
|
||||
// MAC address
|
||||
os
|
||||
<< "Mobile: "
|
||||
<< "Type: " << static_cast<uint_fast16_t>(r.type)
|
||||
<< ", 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 ;
|
||||
|
||||
boost::hash_combine(seed, source.type) ;
|
||||
boost::hash_combine(seed, source.time_sent) ;
|
||||
if (source.mobile != NULL)
|
||||
boost::hash_combine(seed, source.mobile->get_mac_addr()) ;
|
||||
|
|
|
@ -6,6 +6,8 @@ class Mobile ;
|
|||
#include "measurement.hh"
|
||||
#include "timestamp.hh"
|
||||
|
||||
#include <owlps.h>
|
||||
|
||||
#include <ctime>
|
||||
#include <boost/tr1/unordered_map.hpp>
|
||||
#include <ostream>
|
||||
|
@ -14,6 +16,8 @@ class Mobile ;
|
|||
class Request
|
||||
{
|
||||
protected:
|
||||
/// Type of the request
|
||||
uint_fast8_t type ;
|
||||
/// The mobile that sent the request
|
||||
Mobile *mobile ;
|
||||
/// Local date of the request on the mobile
|
||||
|
@ -29,21 +33,25 @@ public:
|
|||
const std::tr1::unordered_map<std::string, Measurement>
|
||||
&_measurements =
|
||||
std::tr1::unordered_map<std::string, Measurement>()):
|
||||
type(OWL_REQUEST_UNDEFINED),
|
||||
mobile(const_cast<Mobile*>(_mobile)), time_sent(_time_sent),
|
||||
measurements(_measurements) {}
|
||||
|
||||
Request(const std::tr1::unordered_map<std::string, Measurement>
|
||||
&_measurements):
|
||||
type(OWL_REQUEST_UNDEFINED),
|
||||
mobile(NULL), measurements(_measurements) {}
|
||||
|
||||
Request(const Timestamp &_time_sent,
|
||||
const std::tr1::unordered_map<std::string, Measurement>
|
||||
&_measurements =
|
||||
std::tr1::unordered_map<std::string, Measurement>()):
|
||||
type(OWL_REQUEST_UNDEFINED),
|
||||
mobile(NULL), time_sent(_time_sent),
|
||||
measurements(_measurements) {}
|
||||
|
||||
Request(const Request &source):
|
||||
type(source.type),
|
||||
mobile(source.mobile), time_sent(source.time_sent),
|
||||
measurements(source.measurements) {}
|
||||
|
||||
|
@ -51,6 +59,7 @@ public:
|
|||
|
||||
/** @name Read accessors */
|
||||
//@{
|
||||
uint8_t get_type(void) const ;
|
||||
Mobile* get_mobile(void) const ;
|
||||
const Timestamp& get_time_sent(void) const ;
|
||||
const std::tr1::unordered_map<std::string, Measurement>&
|
||||
|
@ -59,6 +68,7 @@ public:
|
|||
|
||||
/** @name Write accessors */
|
||||
//@{
|
||||
void set_type(const uint8_t _type) ;
|
||||
void set_mobile(const Mobile *_mobile) ;
|
||||
void set_time_sent(const Timestamp &_time_sent) ;
|
||||
void set_measurements(const std::tr1::unordered_map
|
||||
|
@ -86,6 +96,13 @@ public:
|
|||
/* *** Read accessors *** */
|
||||
|
||||
|
||||
|
||||
inline uint8_t Request::get_type() const
|
||||
{
|
||||
return type ;
|
||||
}
|
||||
|
||||
|
||||
inline Mobile* Request::get_mobile() const
|
||||
{
|
||||
return mobile ;
|
||||
|
@ -109,6 +126,12 @@ Request::get_measurements(void) const
|
|||
/* *** Write accessors *** */
|
||||
|
||||
|
||||
inline void Request::set_type(const uint8_t _type)
|
||||
{
|
||||
type = _type ;
|
||||
}
|
||||
|
||||
|
||||
inline void Request::set_mobile(const Mobile *_mobile)
|
||||
{
|
||||
mobile = const_cast<Mobile*>(_mobile) ;
|
||||
|
|
Loading…
Reference in New Issue