Commit Graph

1127 Commits

Author SHA1 Message Date
Matteo Cypriani f3f59ff203 [Positioning] TextFileWriter: fix text writing
We wrote a C string instead of a string into the file stream, which
caused valgrind errors.
2011-03-16 14:36:24 +01:00
Matteo Cypriani cf42098cbd [Positioning] Correct some coding style issues
Get rid of some cppcheck warnings.
2011-03-16 14:36:24 +01:00
Matteo Cypriani b21b7bd25f [Positioning] Correct some Doxygen comments
Turn REFERENCES_RELATION to YES in Doxyfile.
2011-03-16 14:36:24 +01:00
Matteo Cypriani 1e605ae16d [Positioning] Stock: add some comments 2011-03-16 14:36:24 +01:00
Matteo Cypriani c731bf578f [Positioning] Add positioning algorithm Basic FRBHM
Add class FRBHMBasic, which derives FBCM and RADAR.

ReferencePoint: Add functions friis_index_for_ap() and
friis_indexes_for_ap() (that takes code away from
Stock::update_all_friis_indexes()).

CartographyAlgorithm and MultilaterationAlgorithm now extend
PositioningAlgorithm with "public virtual" instead of "public".

CartographyAlgorithm: select_point() must now return a ReferencePoint.

MultilaterationMethod: Add pure virtual function multilaterate_2d().

MinMax: Add function multilaterate_2d().

MultilaterationAlgorithm: Add function multilaterate_2d() to map
MultilaterationMethod::multilaterate_2d().

Makefile: Fix some dependencies.
2011-03-16 14:36:24 +01:00
Matteo Cypriani e12db08b0d [Positioning] Add positioning algorithm FBCM
Add class FBCM.

AccessPoint: Add attribute friis_index.

Measurement: Add function get_ss_list_size().

Stock: Add function update_all_friis_indexes().
2011-03-16 14:36:23 +01:00
Matteo Cypriani a05c61a3c1 [Positioning] Define PosUtil::LIGHT_SPEED
This constant will be used instead of a constant value "300000000", with
a more accurate value.
Make MultilaterationAlgorithm use it, and fix the unit test.
2011-03-16 14:36:23 +01:00
Matteo Cypriani 3dcf8bc88a [Positioning] MultilaterationAlgorithm::make_constant_term()
Move the constant term computation from
InterlinkNetworks::estimate_distance() into the new function
MultilaterationAlgorithm::make_constant_term(). This will avoid
duplicate this code into the future FBCM::estimate_distance().
2011-03-16 14:36:23 +01:00
Matteo Cypriani e9eab6876d [Positioning] Add RADAR positioning algorithm
Add classes RADAR and CartographyAlgorithm, which is the super-class of
SS map based algorithms.

Measurement: Add functions:
- add_ss_list(), to add several SS in one operation.
- merge(), to merge a Measurement into another.
- ss_square_distance() (from old commented code), to compute the
  distance to a SS value or another Measurement.

posexcept: Add exception cannot_merge, used by Measurement::merge().

ReferencePoint:
- Add ss_square_distance() and functions used by it:
  complete_with_dummy_measurements(), compute_ss_square_distance() and
  get_all_measurements_sorted(). Use of sorted values (map instead of
  unordered_map) is useless, should be fixed soon.
- Delete old commented code: getPowerForAp(), addMeasurement() and old
  getSsSquareDistance().

Stock: Add function closest_reference_point().
2011-03-16 14:36:23 +01:00
Matteo Cypriani d7973a3ef0 [Positioning] InputCSV: Fix CalibrationRequest handling
We now consider a Request as a CalibrationRequest if the Direction field
is valid. We do not take care of the position fields any more.
2011-03-16 14:36:23 +01:00
Matteo Cypriani 92bb12bfe3 [Positioning] CalibrationRequest & Result: operator==() const
CalibrationRequest::operator==() was not marked as const, which caused
trouble with unordered_set.
This commit corrects also CalibrationRequest::operator!=(),
Result::operator==() and Result::operator!=().
2011-03-16 14:36:23 +01:00
Matteo Cypriani 2c62e30ff9 [Positioning] Define hash_value() for several classes
For object types that we needed to store into an unordered_set, we used
string-based hashes, defined into stock.cc. We now define new hash
functions as friend of target classes, based on boost::hash_combine.

The following classes now have a hash_value() function:
- Request
- CalibrationRequest
- Direction
- Timestamp
- Point3D
- ReferencePoint
2011-03-16 14:36:23 +01:00
Matteo Cypriani aafc277704 [Positioning] Fix ReferencePoint::operator<<()
Fix printing of CalibrationRequest list (pointers were printed instead
of values).
2011-03-16 14:36:23 +01:00
Matteo Cypriani 630df51702 [Positioning] Del MultilaterationAlgorithm::mobile
Makefile: Use colorgcc.
Update TODO.
2011-03-16 14:36:23 +01:00
Matteo Cypriani 428639b814 [Positioning] InputDataReader: read waypoints 2011-03-16 14:36:23 +01:00
Matteo Cypriani f85c7113ab [Positioning] Delete several exception classes
Create exceptions bad_configuration and missing_configuration and delete
all configuration-specific exceptions.
2011-03-16 14:36:23 +01:00
Matteo Cypriani a9ac8616e8 [Positioning] MinMax: Fix start/stop and < vs. <= 2011-03-16 14:36:23 +01:00
Matteo Cypriani 814ff2b651 [Positioning] Positioning & UserInterface: add Interlink 2011-03-16 14:36:23 +01:00
Matteo Cypriani 14902181af [Positioning] TopologyReaderCSV: read waypoints
Stock: add Waypoint list and support functions.

Waypoint:
- Use an unordered_set instead of a vector for the Building list.
- Add functions add_building(), add_buildings() and remove_building().
- Add operator string().

cfg/waypoints.csv: change format (add building name).
2011-03-16 14:36:23 +01:00
Matteo Cypriani 208c989c53 [Positioning] Add InputDataReader & TopologyReaderCSV
InputDataReader handles all data input, i.e. data needed to prepare
computation (topology, calibration measurements, etc.).

TopologyReaderCSV reads topology from a CSV file (just Building and Area
for the moment).

cfg/topo.csv: change format (add building name and reorder coordinates).

UserInterface: add data input options.

posexcept: add data input exceptions.
2011-03-16 14:36:23 +01:00
Matteo Cypriani a30b08ac3c [Positioning] Stock: add Building list & complete tests 2011-03-16 14:36:23 +01:00
Matteo Cypriani f4e8d7a1b7 [Positioning] Building: guarantee unique areas & waypoints
Building:
- Display areas & waypoints statistics in operator<<().
- Use an unordered_map for areas.
- Use an unordered_set for waypoints.
(instead of two vectors)

Area: display building name in operator<<().
2011-03-16 14:36:23 +01:00
Matteo Cypriani 2d4c90e4cd [Positioning] TextFileReader: handle comments
TextFileReader::read_nonblank_line() now skips lines beginning with a #,
or with blank characters and then #.
2011-03-16 14:36:22 +01:00
Matteo Cypriani 675d2d7213 [Positioning] Simplify exceptions in posexcept 2011-03-16 14:36:22 +01:00
Matteo Cypriani 8e6883cfc9 [Positioning] Add class CSVFileReader
CSVFileReader is a specialisation of TextFileReader, that allow reading
a CSV line field by field.

TextFileReader:
- Make private attributes protected to allow derivation.
- Add attribute current_line_nb.
- Add function read_nonblank_line().
- Delete useless accessor get_name().

Update InputCSV to use CSVFileReader.

Adapt unit tests for InputCSV and InputLogCSV: EOF is not reached right
after reading the last line, but after trying (and failing) to read one
more line.
2011-03-16 14:36:22 +01:00
Matteo Cypriani c82b95f8f0 [Positioning] Stock::find_create_{ap,mobile}()
Add function find_create_ap() and find_create_mobile() in Stock.
Use these functions in InputCSV instead of Stock::get_mobile() and try…
catch blocks.
2011-03-16 14:36:22 +01:00
Matteo Cypriani b707dae1f1 [Positioning] Fix dependencies in Makefile 2011-03-16 14:36:22 +01:00
Matteo Cypriani 24a328fc16 [Positioning] Fix Timestamp on 32 bits architectures 2011-03-16 14:36:22 +01:00
Matteo Cypriani 30e4e47ca8 [Positioning] UserInterface: categorise options 2011-03-16 14:36:22 +01:00
Matteo Cypriani 58ed434d6b [Positioning] Add class TextFileReader
TextFileReader read lines from a text file. It is aimed to be used by
all classes that read from a text file, as TextFileWriter is used by
those which write to a text file.

Code of TextFileReader is taken from class InputCSV.

Minor fixes on the TextFileWriter unit test.
2011-03-16 14:36:22 +01:00
Matteo Cypriani 866013248f [Positioning] TextFileWriter throws error_opening_output_file
Fix mistake in TextFileWriter::TextFileWriter(), that thrown
error_opening_input_file instead of error_opening_output_file.
Creation of class error_opening_output_file in posexcept.
2011-03-16 14:36:22 +01:00
Matteo Cypriani 1a51d234c6 [Positioning] Add InterlinkNetworks, MinMax & associates
Add classes:
- MultilaterationMethod
- MinMax (extends MultilaterationMethod)
- MultilaterationAlgorithm (extends PositioningAlgorithm)
- InterlinkNetworks (extends MultilaterationAlgorithm)
2011-03-16 14:36:22 +01:00
Matteo Cypriani 9f907b4db5 [Positioning] AccessPoint: frequency in Hz
The AP frequency was (by mistake) in MHz. It is now in Hz, as
documented.

Function PosUtil::channel_to_frequency() is renamed
wifi_channel_to_hz().
2011-03-16 14:36:22 +01:00
Matteo Cypriani f0831db109 [Positioning] Point3D: set_coordinates(), distance_to_sphere()
- Add function set_coordinates(float, float, float).
- Add function distance_to_sphere().
- Suppress calls by reference for simple types (use const float instead
  of const &float).
2011-03-16 14:36:22 +01:00
Matteo Cypriani 64715f7a79 [Positioning] OutputFileMedium -> TextFileWriter
TextFileWriter:
- OutputFileMedium becomes TextFileWriter.
- Method write_string_to_file() becomes write_text() and is made public.
- Add a unit test.

InputLogCSV and OutputCSV do not extend OutputFileMedium anymore, but
use a TextFileWriter as an attribute.
2011-03-16 14:36:22 +01:00
Matteo Cypriani 56c45b3334 [Positioning] Add class OutputCSV
OutputCSV writes Result to a CSV file. It extends OutputFileMedium.

Update:
- Output.
- UserInterface (add option "output.csv-file").
- posexcept (add class no_output_csv_file).
2011-03-16 14:36:22 +01:00
Matteo Cypriani 84789f2ed2 [Positioning] Add class OutputFileMedium
OutputFileMedium is designed to be a super-class for classes that need
to write to a text file. It could also be a simple writer if the method
write_string_to_file() was public (maybe we should change that and
rename OutputFileMedium to OutputFileWriter or something like that).

InputLogCSV:
- Now extends InputLogMedium *and* OutputFileMedium.
- Make log_request() inline.
2011-03-16 14:36:22 +01:00
Matteo Cypriani 5f0bb90d45 [Positioning] TestUtil: clean set_up(), add Result list
TestUtil:
- Split set_up() into several functions.
- Add a list of Result, which will be useful very soon.
2011-03-16 14:36:22 +01:00
Matteo Cypriani 3a9498a0b5 [Positioning] Result: read accessors const 2011-03-16 14:36:22 +01:00
Matteo Cypriani 7bd6f8b261 [Positioning] owlps-positioning is almost usable
Add Positioning creation in owlps-positioning, so the program is usable,
configuration is checked in Positioning, Input and Output, and objects
are created and run normally.

UserInterface: Minor modification, config_file_name is not initialised
in constructor anymore, it is now a default value of the configuration
entry "config-file".
2011-03-16 14:36:21 +01:00
Matteo Cypriani 454579d9b7 [Positioning] InputCSV: fix null direction 2011-03-16 14:36:21 +01:00
Matteo Cypriani 8bb0036512 [Positioning] Request: timestamp -> time_sent 2011-03-16 14:36:21 +01:00
Matteo Cypriani ee0499afad [Positioning] Code and comments clean-up
- Where possible, use initialisation lists in class definition instead
  of explicit variable initialisations in source file.
- Rename some variables (use of "source" in copy constructors and
  operators…).
- Suppress useless Doxygen comments, allow non-documented members in
  Doxyfile.
2011-03-16 14:36:21 +01:00
Matteo Cypriani be8f0cf728 [Positioning] Add class posexcept
posexcept derivates from std::exception.
Exception classes defined in posexcept.hh are now derivated from
posexcept instead of std::exception.
2011-03-16 14:36:21 +01:00
Matteo Cypriani 175719db6d [Positioning] PosUtil: channel defs -> posutil.cc
Move channels defines into posutil.cc.
Remove some useless includes in PosUtil and InputCSV.
2011-03-16 14:36:21 +01:00
Matteo Cypriani 80fe1c505d [Positioning] ASSERT(a != b) instead of ASSERT_DIFFERS(a, b)
In cxxtest, TS_ASSERT_DIFFERS(a, b) tests !(a == b) and not (a != b).
Therefore, to test a::operator!=(b), we must avoid TS_ASSERT_DIFFERS()
(that will test !a::operator==(b)) and write instead TS_ASSERT(a != b).
2011-03-16 14:36:21 +01:00
Matteo Cypriani 92e58686f8 [Positioning] Add class Positioning
The new class Positioning is the interface between Input and Output,
using positioning algorithms to compute results from requests.
Update UserInterface to add option "positioning.algorithm"; update posexcept.
2011-03-16 14:36:21 +01:00
Matteo Cypriani 9ed1000bb3 [Positioning] Add class Output
Add class Output to handle outputs.
Update UserInterface to add option "output.medium"; update posexcept.
2011-03-16 14:36:21 +01:00
Matteo Cypriani 7088e524d4 [Positioning] Add OutputMedium & OutputTerminal
OutputMedium is the super-class of all output media.
OutputTerminal prints a Result on the terminal (or on any stream).
2011-03-16 14:36:21 +01:00
Matteo Cypriani 7c8038edc2 [Positioning] Result::operator<< and minor fixes
Result: add operator<<().

Input: delete log media in destructor.

Request: typo, suppress some useless Doxygen comments.
2011-03-16 14:36:21 +01:00