owlps/TODO

176 lines
6.7 KiB
Plaintext
Raw Permalink 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
- Known bugs
° libconfuse bugs (Listener & Aggregator):
. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=639074
. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=639115
- Rename some fields in the structures
° start_time -> rx_time, first_rx_time
- Eliminate remaining exit() calls to avoid memory leaks on exit.
- Add option dump-configuration (displays the config & exits).
- Makefiles:
° Translate comments & help.
° Merge Makefile and Makefile_atheros*. Use template makefiles,
autohell, cmake…?
- Use a string for positioning requests
Instead of a binary packet, use a CSV string containing the request
information. This will allow easy developments of clients in other
languages.
- 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).
- Filter the number of implicit packets per mobile?
Currently, in passive or mixed mode, *all* the receive packets are
transmitted to the aggregator.
- Option "read-only autocalibration"?
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.
- BSD port
http://www.unixgarden.com/index.php/programmation/introduction-a-la-programmation-wifi-en-c-sous-netbsd
- Use the "official" radiotap parser? (Expat license)
http://git.sipsolutions.net/?p=radiotap.git
* Client
- Add verbose & quiet options.
- Log sent requests?
- Allow to use a string for the direction?
Could be nice, but probably useless.
* UDP to HTTP
- Command-line options (port numbers, -v/-q, -h, -V).
- Delete inactive clients after a given amount of time.
- Refactor prepare_answer().
* Positioning
- Known bugs
° Cannot compute the error (Real) with autocalibration requests.
- Algorithms
° Add to the result the information "area error" (whether on not the
computed result is in the same room as the real position).
° Delete reference points after a given amount of time. This is to
avoid meaningless old reference points, for instance if an AP was
shut down.
° Handle the power and antenna gain difference between the
calibration mobile (or pseudo-mobile, for autocalibration) and the
mobile to position.
° MinMax: use a different step for X, Y and Z?
- Autocalibration
° Generate reference points in 3D.
° Check what happens with >4 APs, and fix it. We certainly should
select APs not only by the angle proximity, but also by the
distance proximity. Maybe implement three options: angle, distance,
and angle + distance.
° 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
° Multithreading:
. algorithm (parallelize computation of the different algorithms
for the same request) ;
. and/or requests (parallelize computation of several requests).
It would be possible (overkill?) to have a group of worker threads
and a job queue.
° 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.