-- Copyright 2014-2015 Álvaro Fernández Rojas <noltari@gmail.com>
-- Licensed to the public under the Apache License 2.0.

m = Map("dump1090", "dump1090", translate("dump1090 is a Mode S decoder specifically designed for RTLSDR devices, here you can configure the settings."))

s = m:section(TypedSection, "dump1090", "")
s.addremove = true
s.anonymous = false

enable=s:option(Flag, "disabled", translate("Enabled"))
enable.enabled="0"
enable.disabled="1"
enable.default = "1"
enable.rmempty = false

respawn=s:option(Flag, "respawn", translate("Respawn"))
respawn.default = false

device_index=s:option(Value, "device_index", translate("RTL device index"))
device_index.rmempty = true
device_index.datatype = "uinteger"

gain=s:option(Value, "gain", translate("Gain (-10 for auto-gain)"))
gain.rmempty = true
gain.datatype = "integer"

enable_agc=s:option(Flag, "enable_agc", translate("Enable automatic gain control"))
enable_agc.default = false

freq=s:option(Value, "freq", translate("Frequency"))
freq.rmempty = true
freq.datatype = "uinteger"

ifile=s:option(Value, "ifile", translate("Data file"))
ifile.rmempty = true
ifile.datatype = "file"

iformat=s:option(ListValue, "iformat", translate("Sample format for data file"))
iformat:value("", translate("Default"))
iformat:value("UC8")
iformat:value("SC16")
iformat:value("SC16Q11")

throttle=s:option(Flag, "throttle", translate("When reading from a file play back in realtime, not at max speed"))
throttle.default = false

raw=s:option(Flag, "raw", translate("Show only messages hex values"))
raw.default = false

net=s:option(Flag, "net", translate("Enable networking"))

modeac=s:option(Flag, "modeac", translate("Enable decoding of SSR Modes 3/A & 3/C"))
modeac.default = false

net_beast=s:option(Flag, "net_beast", translate("TCP raw output in Beast binary format"))
net_beast.default = false

net_only=s:option(Flag, "net_only", translate("Enable just networking, no RTL device or file used"))
net_only.default = false

net_bind_address=s:option(Value, "net_bind_address", translate("IP address to bind to"))
net_bind_address.rmempty = true
net_bind_address.datatype = "ipaddr"

net_http_port=s:option(Value, "net_http_port", translate("HTTP server port"))
net_http_port.rmempty = true
net_http_port.datatype = "port"

net_ri_port=s:option(Value, "net_ri_port", translate("TCP raw input listen port"))
net_ri_port.rmempty = true
net_ri_port.datatype = "port"

net_ro_port=s:option(Value, "net_ro_port", translate("TCP raw output listen port"))
net_ro_port.rmempty = true
net_ro_port.datatype = "port"

net_sbs_port=s:option(Value, "net_sbs_port", translate("TCP BaseStation output listen port"))
net_sbs_port.rmempty = true
net_sbs_port.datatype = "port"

net_bi_port=s:option(Value, "net_bi_port", translate("TCP Beast input listen port"))
net_bi_port.rmempty = true
net_bi_port.datatype = "port"

net_bo_port=s:option(Value, "net_bo_port", translate("TCP Beast output listen port"))
net_bo_port.rmempty = true
net_bo_port.datatype = "port"

net_fatsv_port=s:option(Value, "net_fatsv_port", translate("FlightAware TSV output port"))
net_fatsv_port.rmempty = true
net_fatsv_port.datatype = "port"

net_ro_size=s:option(Value, "net_ro_size", translate("TCP raw output minimum size"))
net_ro_size.rmempty = true
net_ro_size.datatype = "uinteger"

net_ro_interval=s:option(Value, "net_ro_interval", translate("TCP raw output memory flush rate in seconds"))
net_ro_interval.rmempty = true
net_ro_interval.datatype = "uinteger"

net_heartbeat=s:option(Value, "net_heartbeat", translate("TCP heartbeat rate in seconds"))
net_heartbeat.rmempty = true
net_heartbeat.datatype = "uinteger"

net_buffer=s:option(Value, "net_buffer", translate("TCP buffer size 64Kb * (2^n)"))
net_buffer.rmempty = true
net_buffer.datatype = "uinteger"

net_verbatim=s:option(Flag, "net_verbatim", translate("Do not apply CRC corrections to messages we forward"))
net_verbatim.default = false

forward_mlat=s:option(Flag, "forward_mlat", translate("Allow forwarding of received mlat results to output ports"))
forward_mlat.default = false

lat=s:option(Value, "lat", translate("Reference/receiver latitude for surface posn"))
lat.rmempty = true
lat.datatype = "float"

lon=s:option(Value, "lon", translate("Reference/receiver longitude for surface posn"))
lon.rmempty = true
lon.datatype = "float"

max_range=s:option(Value, "max_range", translate("Absolute maximum range for position decoding"))
max_range.rmempty = true
max_range.datatype = "uinteger"

fix=s:option(Flag, "fix", translate("Enable single-bits error correction using CRC"))
fix.default = false

no_fix=s:option(Flag, "no_fix", translate("Disable single-bits error correction using CRC"))
no_fix.default = false

no_crc_check=s:option(Flag, "no_crc_check", translate("Disable messages with broken CRC"))
no_crc_check.default = false

phase_enhance=s:option(Flag, "phase_enhance", translate("Enable phase enhancement"))
phase_enhance.default = false

aggressive=s:option(Flag, "aggressive", translate("More CPU for more messages"))
aggressive.default = false

mlat=s:option(Flag, "mlat", translate("Display raw messages in Beast ascii mode"))
mlat.default = false

stats=s:option(Flag, "stats", translate("Print stats at exit"))
stats.default = false

stats_range=s:option(Flag, "stats_range", translate("Collect/show range histogram"))
stats_range.default = false

stats_every=s:option(Value, "stats_every", translate("Show and reset stats every seconds"))
stats_every.rmempty = true
stats_every.datatype = "uinteger"

onlyaddr=s:option(Flag, "onlyaddr", translate("Show only ICAO addresses"))
onlyaddr.default = false

metric=s:option(Flag, "metric", translate("Use metric units"))
metric.default = false

snip=s:option(Value, "snip", translate("Strip IQ file removing samples"))
snip.rmempty = true
snip.datatype = "uinteger"

debug_mode=s:option(Value, "debug", translate("Debug mode flags"))
debug_mode.rmempty = true

ppm=s:option(Value, "ppm", translate("Set receiver error in parts per million"))
ppm.rmempty = true
ppm.datatype = "uinteger"

html_dir=s:option(Value, "html_dir", translate("Base directory for the internal HTTP server"))
html_dir.rmempty = true
html_dir.datatype = "directory"

write_json=s:option(Value, "write_json", translate("Periodically write json output to a directory"))
write_json.rmempty = true
write_json.datatype = "directory"

write_json_every=s:option(Flag, "write_json_every", translate("Write json output every t seconds"))
write_json_every.rmempty = true
write_json_every.datatype = "uinteger"

json_location_accuracy=s:option(ListValue, "json_location_accuracy", translate("Accuracy of receiver location in json metadata"))
json_location_accuracy:value("", translate("Default"))
json_location_accuracy:value("0", "No location")
json_location_accuracy:value("1", "Approximate")
json_location_accuracy:value("2", "Exact")

oversample=s:option(Flag, "oversample", translate("Use the 2.4MHz demodulator"))
oversample.default = false

dcfilter=s:option(Flag, "dcfilter", translate("Apply a 1Hz DC filter to input data"))
dcfilter.default = false

measure_noise=s:option(Flag, "measure_noise", translate("Measure noise power"))
measure_noise.default = false

return m