# Sample configuration file for OwlPS Positioner

# [Miscellaneous options]

# This option controls whether or not the output text files are flushed
# (written to the storage support) after each line.
# The default is to flush.
#flush-output-files = true

# "Replay" mode. With this option enabled, the current time is the
# emission timestamp of the most recent request; you will want to
# enable this when reading inputs (requests) off-line to replay
# scenarios, if time-related options are enabled (e.g.
# positioning.calibration-requests-timeout).
# To be useful, this option requires the listeners' clocks to be
# synchronised. If it is not the case, you should leave it disabled.
# The default is to run in "live mode", i.e. with this option disabled.
#replay = off

[data-input]
# The options in this section are related to the data that are read
# when the program starts.

# Description of the machines running the listeners (capture points).
cp-medium = CSV
cp-csv-file = /usr/local/etc/owlps/listeners.csv

# Description of the clients
mobile-medium = CSV
mobile-csv-file = /usr/local/etc/owlps/mobiles.csv

# Description of deployment area topology.
# You probably don't need a full description of the topology, see the
# topology example file for details.
# Uncomment the following line to activate the topology reading.
#topology-medium = CSV
#areas-csv-file = /usr/local/etc/owlps/topology.csv
#waypoints-csv-file = /usr/local/etc/owlps/waypoints.csv

#reference-points-medium = CSV
#reference-points-csv-file = /usr/local/etc/owlps/reference_points.csv

[input]
# The following options are related to the input of the requests
# (positioning requests and (auto-)calibration requests) from the
# aggregator.

#medium = CSV
#csv-file = /tmp/input.csv

#medium = UDP
#udp-port = 9902

[log]
# The following options allow to log the requests received from the
# aggregator.

# Uncomment the following line to completely disable logging (has
# precedence over the other logging options):
#medium = none

#medium = CSV
#csv-file = /tmp/owlps-positioner.log

[positioning]
# The options in this section are related to the way the requests are
# handled and the results are computed.

# Uncomment lines to activate one or more algorithm.
#algorithm = Real
#algorithm = InterlinkNetworks
#algorithm = FBCM
#algorithm = NSS
#algorithm = FRBHMBasic

# This option allows to create a new mobile when a request is sent by
# a mobile which is not currently in the mobiles' list (i.e. not
# declared in the mobiles' configuration file). If unset, the requests
# sent by unknown mobiles will be dropped.
# It is unactivated by default, mainly to avoid interferent devices.
#accept-new-mobiles = false

# This option allows to create a new capture point (CP) when a request
# is captured by a CP which is not currently in the CPs' list (i.e. not
# declared in the CPs' configuration file), or when a self-calibration
# request is sent by an unknown CP.
# It is unactivated by default for the sake of security.
#accept-new-cps = false

# When receiving a calibration or autocalibration request from a CP,
# containing the transmiter's coordinates, memorise the new CP's
# coordinates.
# This is unactivated by default for the sake of security.
#update-cp-coordinates-online = false

# Coordinates of the deployment area.
# This is used to delimit the area in which reference points are
# generated (when generate-reference-points includes "mesh"), and
# also by the MinMax trilateration method.
# Since MinMax is currently the only trilateration method implemented
# in OwlPS, you should define these parameters if you use any of the
# trilateration-based algorithms (InterlinkNetworks, FBCM, FRBHM).
# With the autocalibration, the Z coordinate is the floor number, not
# a true coordinate in meters.
# They are declared as strings (X;Y;Z). Do not quote!
#area-start = -2;-2;0
#area-stop = 20;30;6

# Algorithm to calculate the similarity, in the signal strength space,
# of two measurements.
# The following algorithms are implemented:
#   - mean: The mean of all the packets in the measurement is
#     computed, then the euclidean distance between the two means is
#     used.
#   - interval: The mean Im and the standard deviation Is of the
#     packets in the measurement I are computed; the closest reference
#     measurement R is the one with the highest number of packets in
#     the interval [Im-Is, Im+Is].
#   - interval2: Derived of the previous one, this algorithm
#     computes the percent of packets in both the intervals
#     [Im-0.674×Is, Im+0.674×Is] and [Im-Is, Im+Is].
#     Assuming a normal distribution, we should find approximately
#     50% of the packets in the first interval, and 68% in the second
#     interval. The closest R is the one for which the percents of
#     the two intervals are the closest to these theoretical scores.
# The default is "mean".
#ss-similarity = mean
#ss-similarity = interval
#ss-similarity = interval2

# Smallest possible value for a received signal strength, in dBm. This
# depends on the sensibility of the CPs' Wi-Fi hardware. It is used to
# compensate for CPs that are not in coverage in a given measurement.
# The default value is -99 dBm, which should be fine in most cases.
#smallest-ss = -99

# Generate reference points from the (auto)calibration requests
# received.
# This option can be set to any combination of the following values,
# separated by any characters of your choice (or even none):
#   - false (default): do not generate reference points; this is
#     equivalent to an empty string and if at least one of the next
#     values are present, the presence of the "false" string in the
#     option's value will be ignored.
#   - mesh: generate reference points according to the regular meshing
#     defined by the options area-start/stop and
#     generated-meshing-grain-*.
#   - line: generate reference points according to the line defined by
#     the option generated-line-path and generated-line-step.
#   - list: generate only the reference points defined by the option
#     generated-points-list.
# Any other or extra characters are ignored, and the string is
# equivalent to "false" if it doesn't contain any valid value.
# Default value:
#generate-reference-points = false
# Example of valid value to activate both meshing and list generation:
#generate-reference-points = mesh+list
#generate-reference-points = list,mesh
#generate-reference-points = meshlist
#generate-reference-points = falselistmesh

# With this option disabled, each generated reference point contains
# a single packet in a single calibration request, computed from the
# mean of the real measurements.
# If enabled, the generated reference points will contain a series of
# packets, better matching the real requests; if no packet ID from the
# real requests match, a single packet reference point is generated
# instead. Default is enabled.
#generate-multi-packet-reference-points = true

# When generate-reference-points includes "list", the reference points
# are generated with the specified distance (in metres) between one
# another, in the X and Y axis.
#generated-meshing-grain-x = 0.5
#generated-meshing-grain-y = 0.5
# The Z option is currently a floor number instead of a vertical
# coordinate in meters. You should leave it to 1, except if you are
# deploying across non-contiguous floors, which is unlikely.
#generated-meshing-grain-z = 1

# When generate-reference-points includes "line", the reference points
# are generated along to the path defined by this option. They are
# generated in a straight line between the given points. At least one of
# the points provided must be the coordinates of a capture point, and
# the path defined here should "link" (include) all the capture points
# that are going to be used for this kind of autocalibration.
# In the string, the values are separated by semicolons, and each group
# of coordinates can optionally be surrounded by parenthesis. The two
# following examples, which declare a path following the points (1;1;1),
# (10;1;1) and (10;10;1), are equivalent:
#generated-line-path = (1;1;1);(10;1;1);(10;10;1)
#generated-line-path = 1;1;1;10;1;1;10;10;1

# When generate-reference-points includes "line", the reference points
# are generated with this (approximate) distance (in metres) between one
# another.
#generated-line-step = 0.5

# When generate-reference-points includes "list", the list of reference
# points declared here is be generated. In the string, the values are
# separated by semicolons, and each group of coordinates can optionally
# be surrounded by parenthesis. The two following examples, which
# declare the points (1;2;1) and (4;2.5;1), are equivalent:
#generated-points-list = (1;2;1);(4;2.5;1)
#generated-points-list = 1;2;1;4;2.5;1

# This option allows the calibration requests sent during the
# positioning phase to be added to the calibration request's list. They
# are added to the calibration requests read by InputDataReader during
# the start-up phase. If this option is not activated, the calibration
# requests are handled as positioning requests.
# This option must be activated for the self-calibration to work, but
# it is not activated by default for security purposes.
#accept-new-calibration-requests = false

# Maximum age of the calibration requests, in seconds. If greater than
# zero, the calibration requests older than this timeout will be
# deleted. See also the replay option.
#calibration-requests-timeout = 0

# With this option activated, the calibration requests associated with
# an existing reference point are deleted when receiving a new
# calibration request, before to associate the new request with the
# reference point.
# The default is true, as there is generally no point keeping old
# calibration requests.
#unique-calibration-requests = true

# If you activate the above option and want the calibration requests
# to be treated as positioning requests (in addition to the normal
# treatment of calibration requests), activate this option.
# The default is false: the first calibration requests' purpose is to
# serve the positioning process, not to use it.
#position-calibration-requests = false

[positioning.nss]
# This subsection contains the options related to the NSS (a.k.a. RADAR)
# algorithm and derivated.

# For a given positioning request, average all the calibration requests
# associated with a reference point before to compute the SS similarity.
# The default is false, i.e. the positioning request is compared
# directly to each calibration request.
#average-reference-points = false

# Do not select reference points on which a CP is sit, as far as
# possible (i.e. if there are reference points where no CP sits).
# This is useful if you are using autocalibration and want to select
# only the generated reference points.
# The default is false.
#ignore-cp-reference-points = false

[positioning.filter]
# This subsection contains filtering-related options.

# Maximal speed at which the mobile terminal can move, in km/h.
# This option also controls the activation of the filter (0 = disabled).
#max-speed = 0

# With this option set to a positive number, the maximum speed is
# temporarily set to max-speed-cp (instead of max-speed) when the mobile
# terminal is found to be close enough to a capture point. This option
# determines this "close enough" distance, in metres.
# This is useful in deployments where the system is much more accurate
# when the mobile is close to a capture point, such as underground
# mining tunnels; in such environments, 15 m appears to be a reasonable
# value to start experimenting.
# The default is 0, i.e. never change the maximum speed.
#cp-reset-distance = 0

# Maximal (virtual) speed at which the mobiles can move when they are
# within cp-reset-distance, in km/h. 0 (the default value) corresponds
# to an unlimited speed, i.e. filtering will be completely disabled when
# the mobile is found to be close to a CP.
#max-speed-cp = 0

[output]
# The following options are related to the output of the results.

# Compute the euclidean distance error in two dimensions instead of
# three dimensions. This can be useful when doing experiments on only
# one floor.
# The default is false, i.e. the error is computed in 3D.
#2d-error = false

# This is the default output if none is specified.
#medium = Terminal

#medium = CSV
#csv-file = /tmp/owlps-positioner.out

#medium = UDP
# Currently, the host must be an IPv4 address (not a DNS name, nor an
# IPv6).
#udp-host =
#udp-port = 9910

# The TCPEvAAL output follows the specification of EvAAL 2012 to
# communicate with the SocketAdapter program developed by the
# organizers.
# Note: you can use only one algorithm when using the TCPEvAAL output.
#medium = TCPEvAAL
# Currently, the host must be an IP address (not a DNS name).
#tcpevaal-host = 127.0.0.1
#tcpevaal-port = 4444

# vim: syntax=cfg
