owlps/TODO

134 lines
4.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

* Global
- Add option dump-configuration (displays the config & exits).
- Makefiles:
° Translate comments & help.
° Merge Makefile and Makefile_atheros*. Use template makefiles,
autohell, cmake…?
- Use string for network exchanges?
- Mark arguments as const in function headers if needed
Mostly done in the owlps-positioning C++ code (should check that),
but not constantly in C modules.
[Done in libowlps & libowlps-client.]
- Allow to use hostnames instead of IP addresses in all modules
getaddrinfo(3) (or gethostbyname(3)) should be used when opening
sockets in libowlps, then string buffer size have to be adapted in
all modules to be able to contain a long hostname.
- Use struct ether_addr to store MAC addresses?
We could use the struct ether_addr to store binary MAC addresses,
and convert them to strings with ether_ntoa() instead of
owl_mac_bytes_to_string(). See ether_aton(3).
* libowlps
- Currently unused functions:
° owl_timestamp_is_null()
* Aggregator
- -o should be optional.
- Add an option to (not) flush the output file.
- Refactor:
° monitor_requests()
° got_request()
- inet_ntoa() is not secure with threads
(But it is currently used by only one thread.) Use inet_ntop()
instead?
- Use the type of a request to identify it?
(along with the mobile MAC address and the request time)
- got_request(): option for the maximal difference time
For implicit packets, we consider that packets from the same MAC
and received within an interval of 10ms are part of the same
request. We should define an option to allow user to choose the
time he wants.
* Listener
- Refactor and review read_packet().
- Handle better the configuration file reading
Get rid of the "Cannot open configuration file" error, in quiet
mode and when the default configuration file has to be used (no
file specified by the user with -f).
- Listen for autocalibration requests without sending requests?
- read_packet(): use ieee80211_header_size for all implicit packets
Currently the size is corrected only for data packets.
* Client
- Add verbose & quiet options.
- Log sent requests?
- Allow to use a string for the direction?
Could be nice, but probably useless.
* Positioning
- Known bugs
° Cannot compute the error (Real) with autocalibration requests.
- Algorithms
° MinMax: use a different step for X, Y and Z?
- Autocalibration
° Generate reference points in 3D.
° Handle 2 APs, not only >2 APs.
° Find why some CalibrationRequest were not deleted when
calling Stock::delete_calibration_request() (via
ReferencePoint::delete_requests()).
- Refactoring
° Split Stock::generate_reference_point() into several functions.
° Write a class for Request::type?
CalibrationRequest::direction uses a dedicated class Direction, why
not Request::type? That would simplify writing of the type to
streams (no need to cast each time anymore).
° Wi-Fi devices' list
. Merge Stock::mobiles & Stock::aps?
. Factorise AccessPointsReaderCSV & MobilesReaderCSV?
° Members renaming
. InputMedium:
. - current_line_nb & get_current_line_nb()
. - get_next_request() > read_next_request()
. Input: get_next_request() > read_next_request()
. Area: p_min et p_max > coord_min et coord_max
- User interface
° When reading the APs, add them to the mobiles' list (or another
way to be able to have a single entry for an AP).
° Review the option names & descriptions.
° Add option positioning.self-calibrate (or autocalibrate), to
activate automatically the options needed by the autocalibration.
° Improve --verbose (and/or debug level): print the options, etc.
° Case-insensitive string comparison (for algorithm names, etc.).
° Use a prefix for configuration files (search for config files set
with relative path in owlps-positioning.cfg in the same directory).
- Optimisation & code improvement
° Multithread algorithm calls.
° ReferencePoint: the request list should be an unordered_set
instead of a vector, to guarantee the unicity of the elements.
° Pre-allocate vectors' memory with reserve().
"C++ en action", p. 217.
° Copy of containers to streams (in some operator<<() for
instance).
"C++ en action", p. 275.
° Review all the classes to respect principles exposed in "Coder
proprement", chapter 6, p. 103: do implement accessors for each
class attribute, etc.
- Unit tests
° Update tests (currently unmaintained).
° Unfinished tests:
. InputDataReader
. Input
. Output
. Positioning
° Test InterlinkNetworks::compute() ?
° Timestamp: there is a probability of 10^-6 that the value in
nanoseconds and the rounded value in milliseconds are identical, in
which case some tests can fail.