2008-04-11 10:11:29 +02:00
|
|
|
#include "measurement.hh"
|
|
|
|
|
2009-12-11 13:52:21 +01:00
|
|
|
|
2010-01-04 17:10:42 +01:00
|
|
|
using namespace std ;
|
|
|
|
|
|
|
|
|
2009-12-11 13:52:21 +01:00
|
|
|
|
2010-01-16 12:23:07 +01:00
|
|
|
/* *** Constructors *** */
|
2009-12-11 13:52:21 +01:00
|
|
|
|
|
|
|
|
2010-02-01 17:11:36 +01:00
|
|
|
Measurement::Measurement(const AccessPoint *_ap)
|
|
|
|
{
|
|
|
|
ap = const_cast<AccessPoint*>(_ap) ;
|
|
|
|
ss_list.reserve(10) ;
|
|
|
|
average_ss = 0 ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-01-11 19:40:45 +01:00
|
|
|
Measurement::Measurement(const AccessPoint *_ap,
|
2009-12-11 17:56:31 +01:00
|
|
|
const vector<int> &_ss_list)
|
2009-12-11 13:52:21 +01:00
|
|
|
{
|
2010-01-18 14:19:57 +01:00
|
|
|
ap = const_cast<AccessPoint*>(_ap) ;
|
2009-12-11 17:56:31 +01:00
|
|
|
ss_list = _ss_list ;
|
2010-01-11 19:40:45 +01:00
|
|
|
ss_list.reserve(10) ;
|
2009-12-11 13:52:21 +01:00
|
|
|
update_average_ss() ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Measurement::Measurement(const Measurement &m)
|
|
|
|
{
|
2009-12-11 17:56:31 +01:00
|
|
|
ap = m.ap ;
|
2009-12-11 13:52:21 +01:00
|
|
|
ss_list = m.ss_list ;
|
|
|
|
average_ss = m.average_ss ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-01-16 12:23:07 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Note that values pointed by #ap are not deleted.
|
2010-01-07 16:26:13 +01:00
|
|
|
*/
|
2009-12-11 13:52:21 +01:00
|
|
|
Measurement::~Measurement()
|
|
|
|
{
|
|
|
|
ss_list.clear() ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-01-16 12:23:07 +01:00
|
|
|
/* *** Write accessors *** */
|
2009-12-11 13:52:21 +01:00
|
|
|
|
|
|
|
|
2010-01-16 12:23:07 +01:00
|
|
|
/**
|
|
|
|
* #average_ss is updated to include the new value.
|
2010-02-05 11:02:24 +01:00
|
|
|
* @param ss_dbm The signal strength to add to #ss_list (in dBm).
|
2010-01-16 12:23:07 +01:00
|
|
|
*/
|
2010-02-05 11:02:24 +01:00
|
|
|
void Measurement::add_ss(const int &ss_dbm)
|
2009-12-11 13:52:21 +01:00
|
|
|
{
|
2010-02-05 11:02:24 +01:00
|
|
|
double total_ss_mwatts =
|
|
|
|
pow(10, static_cast<double>(ss_dbm) / 10.0) + // New SS in mW
|
|
|
|
(ss_list.size() * pow(10, average_ss / 10.0)) ; // Other values in mW
|
|
|
|
|
|
|
|
ss_list.push_back(ss_dbm) ; // Add new value (dBm)
|
|
|
|
|
|
|
|
// Update average converting back in dBm
|
|
|
|
average_ss = 10.0 * log10(total_ss_mwatts / ss_list.size()) ;
|
2010-01-07 16:34:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-01-16 12:23:07 +01:00
|
|
|
/**
|
|
|
|
* update_average_ss() is automatically called to recalculate
|
|
|
|
* #average_ss.
|
|
|
|
*/
|
2010-01-07 16:34:31 +01:00
|
|
|
void Measurement::set_ss_list(const std::vector<int> &_ss_list)
|
|
|
|
{
|
|
|
|
ss_list = _ss_list ;
|
|
|
|
update_average_ss() ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-01-16 12:23:07 +01:00
|
|
|
/**
|
|
|
|
* - #ap is not deleted, only initialised to NULL.
|
|
|
|
* - #ss_list is cleared.
|
|
|
|
* - #average_ss is initialised to 0.
|
2010-01-07 16:34:31 +01:00
|
|
|
*/
|
|
|
|
void Measurement::clear()
|
|
|
|
{
|
|
|
|
ss_list.clear() ;
|
|
|
|
average_ss = 0 ;
|
|
|
|
ap = NULL ;
|
2009-12-11 13:52:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-05 11:02:24 +01:00
|
|
|
/* *** Operations *** */
|
|
|
|
|
|
|
|
|
|
|
|
void Measurement::update_average_ss()
|
|
|
|
{
|
2010-02-26 13:09:45 +01:00
|
|
|
if (ss_list.empty())
|
2010-02-05 11:02:24 +01:00
|
|
|
{
|
|
|
|
average_ss = 0 ;
|
|
|
|
return ;
|
|
|
|
}
|
|
|
|
|
|
|
|
double total_ss_mwatts = 0 ;
|
|
|
|
|
|
|
|
for (vector<int>::const_iterator i = ss_list.begin() ;
|
|
|
|
i != ss_list.end() ; ++i)
|
|
|
|
// Add the current value in mW to the total
|
|
|
|
total_ss_mwatts += pow(10, static_cast<double>(*i) / 10.0) ;
|
|
|
|
|
|
|
|
// Compute the average in mW and convert it to dBm
|
|
|
|
average_ss = 10 * log10(total_ss_mwatts / ss_list.size()) ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-01-16 12:23:07 +01:00
|
|
|
/* *** Operators *** */
|
2009-12-11 13:52:21 +01:00
|
|
|
|
|
|
|
|
2010-01-13 15:29:44 +01:00
|
|
|
const Measurement& Measurement::operator=(const Measurement &m)
|
2009-12-11 17:56:31 +01:00
|
|
|
{
|
|
|
|
if (this == &m)
|
|
|
|
return *this ;
|
|
|
|
|
|
|
|
ap = m.ap ;
|
|
|
|
ss_list = m.ss_list ;
|
|
|
|
average_ss = m.average_ss ;
|
|
|
|
|
|
|
|
return *this ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-01-07 16:26:13 +01:00
|
|
|
bool Measurement::operator==(const Measurement &m) const
|
2009-12-11 17:56:31 +01:00
|
|
|
{
|
|
|
|
if (this == &m)
|
|
|
|
return true ;
|
|
|
|
|
|
|
|
return
|
|
|
|
ap == m.ap &&
|
|
|
|
ss_list == m.ss_list &&
|
|
|
|
average_ss == m.average_ss ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-04-30 11:36:55 +02:00
|
|
|
ostream &operator<<(ostream &os, const Measurement &m)
|
2008-04-11 10:11:29 +02:00
|
|
|
{
|
2010-01-11 19:40:45 +01:00
|
|
|
// MAC address
|
2010-01-06 01:18:14 +01:00
|
|
|
os
|
2010-01-11 19:40:45 +01:00
|
|
|
<< "AP: " << (m.ap != NULL ? m.ap->get_mac_addr() : "Unknown_AP")
|
2010-01-06 01:18:14 +01:00
|
|
|
<< ": " ;
|
2010-01-04 16:37:18 +01:00
|
|
|
|
|
|
|
// List of SS
|
2010-02-26 13:09:45 +01:00
|
|
|
if (m.ss_list.empty())
|
2009-12-14 15:45:16 +01:00
|
|
|
os << "No values" ;
|
2008-04-15 12:19:15 +02:00
|
|
|
else
|
2010-01-04 16:37:18 +01:00
|
|
|
for (vector<int>::const_iterator i = m.ss_list.begin() ;
|
2010-01-13 15:29:44 +01:00
|
|
|
i != m.ss_list.end() ; ++i)
|
2008-04-15 12:19:15 +02:00
|
|
|
{
|
2010-01-04 16:37:18 +01:00
|
|
|
os << *i ;
|
|
|
|
if (i != m.ss_list.end() - 1)
|
2009-12-14 15:45:16 +01:00
|
|
|
os << ";" ;
|
2008-04-15 12:19:15 +02:00
|
|
|
}
|
2009-12-14 15:45:16 +01:00
|
|
|
os << " [AVG=" << m.average_ss << "]" ;
|
2009-05-29 13:46:49 +02:00
|
|
|
|
2010-01-04 16:37:18 +01:00
|
|
|
return os ;
|
2008-04-11 10:11:29 +02:00
|
|
|
}
|