* 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.