/* * This file is part of the Owl Positioning System (OwlPS). * OwlPS is a project of the University of Franche-Comte * (Université de Franche-Comté), France. * * Copyright © Université de Franche-Comté 2007-2012. * * Corresponding author: Matteo Cypriani * *********************************************************************** * * This software is governed by the CeCILL license under French law and * abiding by the rules of distribution of free software. You can use, * modify and/or redistribute the software under the terms of the CeCILL * license as circulated by CEA, CNRS and INRIA at the following URL: * http://www.cecill.info * * As a counterpart to the access to the source code and rights to copy, * modify and redistribute granted by the license, users are provided * only with a limited warranty and the software's authors, the holder * of the economic rights, and the successive licensors have only * limited liability. * * In this respect, the user's attention is drawn to the risks * associated with loading, using, modifying and/or developing or * reproducing the software by the user in light of its specific status * of free software, that may mean that it is complicated to manipulate, * and that also therefore means that it is reserved for developers and * experienced professionals having in-depth computer knowledge. Users * are therefore encouraged to load and test the software's suitability * as regards their requirements in conditions enabling the security of * their systems and/or data to be ensured and, more generally, to use * and operate it in the same conditions as regards security. * * The fact that you are presently reading this means that you have had * knowledge of the CeCILL license and that you accept its terms. * *********************************************************************** */ #ifndef _OWLPS_POSITIONING_ACCESSPOINT_HH_ #define _OWLPS_POSITIONING_ACCESSPOINT_HH_ #include "wifidevice.hh" #include "point3d.hh" #include "posutil.hh" #define AP_DEFAULT_CHANNEL 6 #define AP_DEFAULT_ANTENNA_GAIN 5 /// Represents a capture \link WifiDevice Wi-Fi device\endlink class AccessPoint: public WifiDevice { protected: Point3D coordinates ; unsigned long frequency ; ///< Frequency (channel) in Hz float friis_index ; ///< Friis index used by FBCM public: /** * Special parameters: * - \em _antenna_gain Antenna gain in dBi. * - \em _trx_power Transmit power in dBm. * - \em channel Wi-Fi channel the AP is listening to (integer * between 1 and 14). It will be converted to a frequency in Hz. */ 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 &channel = AP_DEFAULT_CHANNEL): WifiDevice(_ip_addr, _mac_addr, _antenna_gain, _trx_power), coordinates(_coordinates), frequency(PosUtil::wifi_channel_to_hz(channel)), friis_index(0) {} AccessPoint(const WifiDevice &source, const Point3D &_coordinates, const unsigned int channel = AP_DEFAULT_CHANNEL): WifiDevice(source), coordinates(_coordinates), frequency(PosUtil::wifi_channel_to_hz(channel)), friis_index(0) {} AccessPoint(const WifiDevice &source): WifiDevice(source), coordinates(Point3D()), frequency(0), friis_index(0) {} AccessPoint(const AccessPoint &source): WifiDevice(source), coordinates(source.coordinates), frequency(source.frequency), friis_index(0) {} ~AccessPoint(void) {} /** @name Read accessors */ //@{ const Point3D& get_coordinates(void) const ; unsigned long get_frequency(void) const ; float get_friis_index(void) const ; //@} /** @name Write accessors */ //@{ void set_coordinates(const Point3D &_coordinates) ; void set_channel(const unsigned int channel) ; void set_frequency(const unsigned long _frequency) ; void set_friis_index(const float _friis_index) ; //@} /** @name Operations */ //@{ /// Returns the Friis formula's constant term double friis_constant_term(void) const ; /// \brief Computes the percentage of the calibration packets from /// \em trx received by the AP float received_calibration_from_ap(const AccessPoint &trx) const ; //@} /** @name Operators */ //@{ AccessPoint& operator=(const AccessPoint &source) ; bool operator==(const AccessPoint &source) const ; bool operator!=(const AccessPoint &source) const ; //@} /// Displays an AccessPoint friend std::ostream &operator<<(std::ostream &os, const AccessPoint &ap) ; } ; /* *** Read accessors *** */ inline const Point3D& AccessPoint::get_coordinates() const { return coordinates ; } inline unsigned long AccessPoint::get_frequency() const { return frequency ; } inline float AccessPoint::get_friis_index() const { return friis_index ; } /* *** Write accessors *** */ inline void AccessPoint::set_coordinates(const Point3D &_coordinates) { coordinates = _coordinates ; } /** * @param channel A Wi-Fi channel (integer between 1 and 14). It will * be converted into a frequency in Hz and affected to #frequency. If * it is not a Wi-Fi channel number, 0 will be affected to #frequency. */ inline void AccessPoint::set_channel(const unsigned int channel) { set_frequency(PosUtil::wifi_channel_to_hz(channel)) ; } /** * Sets #frequency with the value of the parameter \em _frequency. No * control is done, so you should pass a correct value. * * Note that set_channel() is more secure because a wrong channel * number will cause #frequency to be set to zero. */ inline void AccessPoint::set_frequency(const unsigned long _frequency) { frequency = _frequency ; } inline void AccessPoint::set_friis_index(const float _friis_index) { friis_index = _friis_index ; } /* *** Operators *** */ inline bool AccessPoint::operator!=(const AccessPoint &source) const { return !(*this == source) ; } #endif // _OWLPS_POSITIONING_ACCESSPOINT_HH_