170 lines
2.7 KiB
C++
170 lines
2.7 KiB
C++
#include "measurement.hh"
|
|
|
|
|
|
using namespace std ;
|
|
|
|
|
|
|
|
/*** Constructeurs ***/
|
|
|
|
|
|
Measurement::Measurement(const Mobile *_mobile, const AccessPoint *_ap,
|
|
const vector<int> &_ss_list)
|
|
{
|
|
mobile = (Mobile *) _mobile ;
|
|
ap = (AccessPoint *) _ap ;
|
|
ss_list = _ss_list ;
|
|
update_average_ss() ;
|
|
}
|
|
|
|
|
|
Measurement::Measurement(const Measurement &m)
|
|
{
|
|
mobile = m.mobile ;
|
|
ap = m.ap ;
|
|
ss_list = m.ss_list ;
|
|
average_ss = m.average_ss ;
|
|
}
|
|
|
|
|
|
Measurement::~Measurement()
|
|
{
|
|
ss_list.clear() ;
|
|
}
|
|
|
|
|
|
|
|
/*** Accesseurs lecture ***/
|
|
|
|
|
|
Mobile* Measurement::get_mobile() const
|
|
{
|
|
return mobile ;
|
|
}
|
|
|
|
|
|
AccessPoint* Measurement::get_ap() const
|
|
{
|
|
return ap ;
|
|
}
|
|
|
|
|
|
vector<int> Measurement::get_ss_list() const
|
|
{
|
|
return ss_list ;
|
|
}
|
|
|
|
|
|
float Measurement::get_average_ss() const
|
|
{
|
|
return average_ss ;
|
|
}
|
|
|
|
|
|
/*
|
|
float Measurement::get_ss_square_distance(const float &ss) const
|
|
{
|
|
return ((ss - average_ss) * (ss - average_ss)) ;
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
/*** Accesseurs écriture ***/
|
|
|
|
|
|
void Measurement::update_average_ss()
|
|
{
|
|
average_ss = 0 ;
|
|
|
|
for (vector<int>::iterator i = ss_list.begin() ; i < ss_list.end() ; i++)
|
|
{
|
|
float ss_mwatts =
|
|
pow(10, (float) *i / 10.0) +
|
|
(ss_list.size() * pow(10, average_ss / 10.0)) ;
|
|
average_ss = 10 * log10(ss_mwatts / ss_list.size()) ;
|
|
}
|
|
}
|
|
|
|
|
|
void Measurement::set_mobile(const Mobile *_mobile)
|
|
{
|
|
mobile = (Mobile *) _mobile ;
|
|
}
|
|
|
|
|
|
void Measurement::set_ap(const AccessPoint *_ap)
|
|
{
|
|
ap = (AccessPoint *) _ap ;
|
|
}
|
|
|
|
|
|
void Measurement::add_ss(const int &ss)
|
|
{
|
|
float ss_mwatts =
|
|
pow(10, (float) ss / 10.0) +
|
|
(ss_list.size() * pow(10, average_ss / 10.0)) ;
|
|
ss_list.push_back(ss) ;
|
|
average_ss = 10 * log10(ss_mwatts / ss_list.size()) ;
|
|
}
|
|
|
|
|
|
|
|
/*** Opérateurs ***/
|
|
|
|
|
|
Measurement Measurement::operator=(const Measurement &m)
|
|
{
|
|
if (this == &m)
|
|
return *this ;
|
|
|
|
mobile = m.mobile ;
|
|
ap = m.ap ;
|
|
ss_list = m.ss_list ;
|
|
average_ss = m.average_ss ;
|
|
|
|
return *this ;
|
|
}
|
|
|
|
|
|
bool Measurement::operator==(const Measurement &m)
|
|
{
|
|
if (this == &m)
|
|
return true ;
|
|
|
|
return
|
|
mobile == m.mobile &&
|
|
ap == m.ap &&
|
|
ss_list == m.ss_list &&
|
|
average_ss == m.average_ss ;
|
|
}
|
|
|
|
|
|
bool Measurement::operator!=(const Measurement &m)
|
|
{
|
|
return !(*this == m) ;
|
|
}
|
|
|
|
|
|
|
|
ostream &operator<<(ostream &os, const Measurement &m)
|
|
{
|
|
// MAC addresses
|
|
os << m.mobile->get_mac_addr() << "->" << m.ap->get_mac_addr() << ": " ;
|
|
|
|
// List of SS
|
|
if (m.ss_list.size() == 0)
|
|
os << "No values" ;
|
|
else
|
|
for (vector<int>::const_iterator i = m.ss_list.begin() ;
|
|
i < m.ss_list.end() ; i++)
|
|
{
|
|
os << *i ;
|
|
if (i != m.ss_list.end() - 1)
|
|
os << ";" ;
|
|
}
|
|
os << " [AVG=" << m.average_ss << "]" ;
|
|
|
|
return os ;
|
|
}
|