├── debian
├── compat
├── source
│ └── format
├── dump1090-mutability.logrotate
├── dump1090-mutability.install
├── dump1090-mutability.conffiles
├── nginx
│ └── dump1090-mutability
├── cron-template
├── lighttpd
│ └── 89-dump1090.conf
├── control
├── rules
├── dump1090-mutability.postrm
├── config-template
└── dump1090-mutability.postinst
├── public_html
├── db
│ ├── 9.json
│ ├── B.json
│ ├── D.json
│ ├── F.json
│ ├── 2.json
│ ├── README
│ ├── 6.json
│ ├── 4062.json
│ ├── 1.json
│ ├── 400F.json
│ ├── 400C.json
│ ├── 4C.json
│ ├── 400A.json
│ ├── 400D.json
│ └── 400E.json
├── spinny.gif
├── flags-tiny
│ ├── UAE.png
│ ├── Angola.png
│ ├── Aruba.png
│ ├── Belize.png
│ ├── Benin.png
│ ├── Bhutan.png
│ ├── Bosnia.png
│ ├── Brazil.png
│ ├── Brunei.png
│ ├── Canada.png
│ ├── Chad.png
│ ├── Chile.png
│ ├── China.png
│ ├── Cuba.png
│ ├── Cyprus.png
│ ├── Egypt.png
│ ├── Fiji.png
│ ├── France.png
│ ├── Gabon.png
│ ├── Gambia.png
│ ├── Ghana.png
│ ├── Greece.png
│ ├── Guam.png
│ ├── Guinea.png
│ ├── Guyana.png
│ ├── Haiti.png
│ ├── India.png
│ ├── Iran.png
│ ├── Iraq.png
│ ├── Israel.png
│ ├── Italy.png
│ ├── Japan.png
│ ├── Jordan.png
│ ├── Kenya.png
│ ├── Kuwait.png
│ ├── Laos.png
│ ├── Latvia.png
│ ├── Libya.png
│ ├── Macao.png
│ ├── Malawi.png
│ ├── Mali.png
│ ├── Malta.png
│ ├── Mexico.png
│ ├── Monaco.png
│ ├── Nauru.png
│ ├── Nepal.png
│ ├── Niger.png
│ ├── Niue.png
│ ├── Norway.png
│ ├── Oman.png
│ ├── Palau.png
│ ├── Panama.png
│ ├── Peru.png
│ ├── Poland.png
│ ├── Qatar.png
│ ├── Rwanda.png
│ ├── Samoa.png
│ ├── Spain.png
│ ├── Sudan.png
│ ├── Sweden.png
│ ├── Syria.png
│ ├── Taiwan.png
│ ├── Tibet.png
│ ├── Togo.png
│ ├── Tonga.png
│ ├── Turkey.png
│ ├── Tuvalu.png
│ ├── Uganda.png
│ ├── Yemen.png
│ ├── Zambia.png
│ ├── blank.png
│ ├── Albania.png
│ ├── Algeria.png
│ ├── Andorra.png
│ ├── Anguilla.png
│ ├── Armenia.png
│ ├── Austria.png
│ ├── Bahamas.png
│ ├── Bahrain.png
│ ├── Barbados.png
│ ├── Belarus.png
│ ├── Belgium.png
│ ├── Bermuda.png
│ ├── Bolivia.png
│ ├── Botswana.png
│ ├── Bulgaria.png
│ ├── Burundi.png
│ ├── Cambodia.png
│ ├── Cameroon.png
│ ├── Colombia.png
│ ├── Comoros.png
│ ├── Croatia.png
│ ├── Denmark.png
│ ├── Djibouti.png
│ ├── Dominica.png
│ ├── Ecuador.png
│ ├── Eritrea.png
│ ├── Estonia.png
│ ├── Ethiopia.png
│ ├── Finland.png
│ ├── Georgia.png
│ ├── Germany.png
│ ├── Grenada.png
│ ├── Honduras.png
│ ├── Hungary.png
│ ├── Iceland.png
│ ├── Ireland.png
│ ├── Jamaica.png
│ ├── Kiribati.png
│ ├── Lebanon.png
│ ├── Lesotho.png
│ ├── Liberia.png
│ ├── Malaysia.png
│ ├── Maldives.png
│ ├── Moldova.png
│ ├── Mongolia.png
│ ├── Morocco.png
│ ├── Myanmar.png
│ ├── Namibia.png
│ ├── Nigeria.png
│ ├── Pakistan.png
│ ├── Paraguay.png
│ ├── Portugal.png
│ ├── Romania.png
│ ├── Senegal.png
│ ├── Slovakia.png
│ ├── Slovenia.png
│ ├── Somalia.png
│ ├── Suriname.png
│ ├── Tanzania.png
│ ├── Thailand.png
│ ├── Tunisia.png
│ ├── Ukraine.png
│ ├── Uruguay.png
│ ├── Vanuatu.png
│ ├── Vietnam.png
│ ├── Zimbabwe.png
│ ├── Afghanistan.png
│ ├── Argentina.png
│ ├── Australia.png
│ ├── Azerbaijan.png
│ ├── Bangladesh.png
│ ├── Cape_Verde.png
│ ├── Costa_Rica.png
│ ├── El_Salvador.png
│ ├── Gibraltar.png
│ ├── Greenland.png
│ ├── Guatemala.png
│ ├── Hong_Kong.png
│ ├── Indonesia.png
│ ├── Kazakhstan.png
│ ├── Kyrgyzstan.png
│ ├── Lithuania.png
│ ├── Luxembourg.png
│ ├── Macedonia.png
│ ├── Madagascar.png
│ ├── Martinique.png
│ ├── Mauritania.png
│ ├── Mauritius.png
│ ├── Micronesia.png
│ ├── Montserrat.png
│ ├── Mozambique.png
│ ├── Netherlands.png
│ ├── New_Zealand.png
│ ├── Nicaragua.png
│ ├── North_Korea.png
│ ├── Philippines.png
│ ├── Puerto_Rico.png
│ ├── Saint_Lucia.png
│ ├── San_Marino.png
│ ├── Seychelles.png
│ ├── Singapore.png
│ ├── South_Korea.png
│ ├── Sri_Lanka.png
│ ├── Swaziland.png
│ ├── Switzerland.png
│ ├── Tajikistan.png
│ ├── Timor-Leste.png
│ ├── Uzbekistan.png
│ ├── Venezuela.png
│ ├── Yugoslavia.png
│ ├── Burkina_Faso.png
│ ├── Cook_Islands.png
│ ├── Cote_d_Ivoire.png
│ ├── Faroe_Islands.png
│ ├── Guinea_Bissau.png
│ ├── Liechtenstein.png
│ ├── Saint_Pierre.png
│ ├── Saudi_Arabia.png
│ ├── Sierra_Leone.png
│ ├── South_Africa.png
│ ├── South_Georgia.png
│ ├── Soviet_Union.png
│ ├── Turkmenistan.png
│ ├── Vatican_City.png
│ ├── American_Samoa.png
│ ├── Cayman_Islands.png
│ ├── Christmas_Island.png
│ ├── Cyprus_Northern.png
│ ├── Czech_Republic.png
│ ├── Falkland_Islands.png
│ ├── French_Polynesia.png
│ ├── Marshall_Islands.png
│ ├── Norfolk_Island.png
│ ├── Papua_New_Guinea.png
│ ├── Pitcairn_Islands.png
│ ├── Solomon_Islands.png
│ ├── United_Kingdom.png
│ ├── Dominican_Republic.png
│ ├── Equatorial_Guinea.png
│ ├── Russian_Federation.png
│ ├── US_Virgin_Islands.png
│ ├── Wallis_and_Futuna.png
│ ├── Antigua_and_Barbuda.png
│ ├── Netherlands_Antilles.png
│ ├── Republic_of_the_Congo.png
│ ├── Saint_Kitts_and_Nevis.png
│ ├── Sao_Tome_and_Principe.png
│ ├── Serbia_and_Montenegro.png
│ ├── Trinidad_and_Tobago.png
│ ├── British_Virgin_Islands.png
│ ├── Central_African_Republic.png
│ ├── Turks_and_Caicos_Islands.png
│ ├── United_States_of_America.png
│ ├── Democratic_Republic_of_the_Congo.png
│ ├── Saint_Vincent_and_the_Grenadines.png
│ └── README.txt
├── jquery
│ └── README
├── test
│ ├── markers_test.html
│ └── markers_test.js
├── style.css
├── ol3
│ ├── ol3-layerswitcher.css
│ └── ol-3.17.1.css
├── formatter.js
├── dbloader.js
└── config.js
├── gap
├── testfiles
└── modes1.bin
├── .gitignore
├── start2.cmd
├── start2I.cmd
├── start8.cmd
├── start8I.cmd
├── compat
├── clock_gettime
│ ├── clock_gettime.h
│ ├── LICENSE
│ └── clock_gettime.c
├── clock_nanosleep
│ ├── clock_nanosleep.h
│ ├── LICENSE
│ └── clock_nanosleep.c
└── compat.h
├── postinstall.txt
├── preinstall.txt
├── conio.h
├── demod_2000.h
├── demod_2400.h
├── util.h
├── crc.h
├── icao_filter.h
├── README.md
├── cpr.h
├── convert.h
├── license.txt
├── LICENSE
├── demod_8000.h
├── tools
├── extract-icao-ranges.py
├── update-aircraft-database.sh
└── vrs-basicaircraft-to-json.py
├── Makefile
├── util.c
├── anet.h
├── net_io.h
├── mode_ac.c
├── icao_filter.c
├── stats.h
└── track.h
/debian/compat:
--------------------------------------------------------------------------------
1 | 8
2 |
--------------------------------------------------------------------------------
/public_html/db/9.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/public_html/db/B.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/public_html/db/D.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/debian/source/format:
--------------------------------------------------------------------------------
1 | 3.0 (native)
2 |
--------------------------------------------------------------------------------
/gap:
--------------------------------------------------------------------------------
1 | Gap=0x3f0 e=0x9beedb62 a=0x9beedf52
2 |
--------------------------------------------------------------------------------
/public_html/db/F.json:
--------------------------------------------------------------------------------
1 | {"A0001":{"r":"FAV0001","t":"A319"}}
--------------------------------------------------------------------------------
/testfiles/modes1.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/testfiles/modes1.bin
--------------------------------------------------------------------------------
/public_html/spinny.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/spinny.gif
--------------------------------------------------------------------------------
/public_html/flags-tiny/UAE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/UAE.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Angola.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Angola.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Aruba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Aruba.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Belize.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Belize.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Benin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Benin.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Bhutan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Bhutan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Bosnia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Bosnia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Brazil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Brazil.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Brunei.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Brunei.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Canada.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Canada.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Chad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Chad.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Chile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Chile.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/China.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/China.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cuba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cuba.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cyprus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cyprus.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Egypt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Egypt.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Fiji.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Fiji.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/France.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/France.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Gabon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Gabon.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Gambia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Gambia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Ghana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Ghana.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Greece.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Greece.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Guam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Guam.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Guinea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Guinea.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Guyana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Guyana.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Haiti.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Haiti.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/India.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/India.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Iran.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Iran.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Iraq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Iraq.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Israel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Israel.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Italy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Italy.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Japan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Japan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Jordan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Jordan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Kenya.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Kenya.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Kuwait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Kuwait.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Laos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Laos.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Latvia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Latvia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Libya.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Libya.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Macao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Macao.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Malawi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Malawi.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Mali.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Mali.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Malta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Malta.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Mexico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Mexico.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Monaco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Monaco.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Nauru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Nauru.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Nepal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Nepal.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Niger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Niger.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Niue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Niue.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Norway.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Norway.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Oman.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Oman.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Palau.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Palau.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Panama.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Panama.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Peru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Peru.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Poland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Poland.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Qatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Qatar.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Rwanda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Rwanda.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Samoa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Samoa.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Spain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Spain.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Sudan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Sudan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Sweden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Sweden.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Syria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Syria.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Taiwan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Taiwan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Tibet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Tibet.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Togo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Togo.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Tonga.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Tonga.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Turkey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Turkey.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Tuvalu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Tuvalu.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Uganda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Uganda.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Yemen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Yemen.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Zambia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Zambia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/blank.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/blank.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | *.o
3 | *.dll
4 | *.gz
5 | *.docx
6 | *.pdf
7 | drawing.h
8 | testbench.c
9 | *.stackdump
10 |
--------------------------------------------------------------------------------
/public_html/flags-tiny/Albania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Albania.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Algeria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Algeria.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Andorra.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Andorra.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Anguilla.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Anguilla.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Armenia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Armenia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Austria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Austria.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Bahamas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Bahamas.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Bahrain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Bahrain.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Barbados.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Barbados.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Belarus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Belarus.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Belgium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Belgium.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Bermuda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Bermuda.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Bolivia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Bolivia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Botswana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Botswana.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Bulgaria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Bulgaria.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Burundi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Burundi.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cambodia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cambodia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cameroon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cameroon.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Colombia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Colombia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Comoros.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Comoros.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Croatia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Croatia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Denmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Denmark.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Djibouti.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Djibouti.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Dominica.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Dominica.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Ecuador.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Ecuador.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Eritrea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Eritrea.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Estonia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Estonia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Ethiopia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Ethiopia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Finland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Finland.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Georgia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Georgia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Germany.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Germany.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Grenada.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Grenada.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Honduras.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Honduras.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Hungary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Hungary.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Iceland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Iceland.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Ireland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Ireland.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Jamaica.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Jamaica.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Kiribati.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Kiribati.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Lebanon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Lebanon.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Lesotho.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Lesotho.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Liberia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Liberia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Malaysia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Malaysia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Maldives.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Maldives.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Moldova.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Moldova.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Mongolia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Mongolia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Morocco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Morocco.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Myanmar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Myanmar.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Namibia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Namibia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Nigeria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Nigeria.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Pakistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Pakistan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Paraguay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Paraguay.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Portugal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Portugal.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Romania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Romania.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Senegal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Senegal.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Slovakia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Slovakia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Slovenia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Slovenia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Somalia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Somalia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Suriname.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Suriname.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Tanzania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Tanzania.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Thailand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Thailand.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Tunisia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Tunisia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Ukraine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Ukraine.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Uruguay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Uruguay.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Vanuatu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Vanuatu.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Vietnam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Vietnam.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Zimbabwe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Zimbabwe.png
--------------------------------------------------------------------------------
/debian/dump1090-mutability.logrotate:
--------------------------------------------------------------------------------
1 | /var/log/dump1090-mutability.log {
2 | weekly
3 | rotate 4
4 | copytruncate
5 | }
6 |
--------------------------------------------------------------------------------
/public_html/flags-tiny/Afghanistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Afghanistan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Argentina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Argentina.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Australia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Australia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Azerbaijan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Azerbaijan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Bangladesh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Bangladesh.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cape_Verde.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cape_Verde.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Costa_Rica.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Costa_Rica.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/El_Salvador.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/El_Salvador.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Gibraltar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Gibraltar.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Greenland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Greenland.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Guatemala.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Guatemala.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Hong_Kong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Hong_Kong.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Indonesia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Indonesia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Kazakhstan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Kazakhstan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Kyrgyzstan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Kyrgyzstan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Lithuania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Lithuania.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Luxembourg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Luxembourg.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Macedonia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Macedonia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Madagascar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Madagascar.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Martinique.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Martinique.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Mauritania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Mauritania.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Mauritius.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Mauritius.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Micronesia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Micronesia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Montserrat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Montserrat.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Mozambique.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Mozambique.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Netherlands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Netherlands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/New_Zealand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/New_Zealand.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Nicaragua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Nicaragua.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/North_Korea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/North_Korea.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Philippines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Philippines.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Puerto_Rico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Puerto_Rico.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Saint_Lucia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Saint_Lucia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/San_Marino.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/San_Marino.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Seychelles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Seychelles.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Singapore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Singapore.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/South_Korea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/South_Korea.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Sri_Lanka.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Sri_Lanka.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Swaziland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Swaziland.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Switzerland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Switzerland.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Tajikistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Tajikistan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Timor-Leste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Timor-Leste.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Uzbekistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Uzbekistan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Venezuela.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Venezuela.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Yugoslavia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Yugoslavia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Burkina_Faso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Burkina_Faso.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cook_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cook_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cote_d_Ivoire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cote_d_Ivoire.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Faroe_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Faroe_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Guinea_Bissau.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Guinea_Bissau.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Liechtenstein.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Liechtenstein.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Saint_Pierre.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Saint_Pierre.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Saudi_Arabia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Saudi_Arabia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Sierra_Leone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Sierra_Leone.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/South_Africa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/South_Africa.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/South_Georgia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/South_Georgia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Soviet_Union.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Soviet_Union.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Turkmenistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Turkmenistan.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Vatican_City.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Vatican_City.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/American_Samoa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/American_Samoa.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cayman_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cayman_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Christmas_Island.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Christmas_Island.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Cyprus_Northern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Cyprus_Northern.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Czech_Republic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Czech_Republic.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Falkland_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Falkland_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/French_Polynesia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/French_Polynesia.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Marshall_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Marshall_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Norfolk_Island.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Norfolk_Island.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Papua_New_Guinea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Papua_New_Guinea.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Pitcairn_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Pitcairn_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Solomon_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Solomon_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/United_Kingdom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/United_Kingdom.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Dominican_Republic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Dominican_Republic.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Equatorial_Guinea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Equatorial_Guinea.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Russian_Federation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Russian_Federation.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/US_Virgin_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/US_Virgin_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Wallis_and_Futuna.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Wallis_and_Futuna.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Antigua_and_Barbuda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Antigua_and_Barbuda.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Netherlands_Antilles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Netherlands_Antilles.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Republic_of_the_Congo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Republic_of_the_Congo.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Saint_Kitts_and_Nevis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Saint_Kitts_and_Nevis.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Sao_Tome_and_Principe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Sao_Tome_and_Principe.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Serbia_and_Montenegro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Serbia_and_Montenegro.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Trinidad_and_Tobago.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Trinidad_and_Tobago.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/British_Virgin_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/British_Virgin_Islands.png
--------------------------------------------------------------------------------
/public_html/db/2.json:
--------------------------------------------------------------------------------
1 | {"01001":{"r":"V5-NAM","t":"F900"},"01028":{"r":"V5-NMF","t":"A343"},"01029":{"r":"V5-NME","t":"A343"},"02031":{"r":"E3-AAQ","t":"B762"}}
--------------------------------------------------------------------------------
/public_html/flags-tiny/Central_African_Republic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Central_African_Republic.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Turks_and_Caicos_Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Turks_and_Caicos_Islands.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/United_States_of_America.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/United_States_of_America.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Democratic_Republic_of_the_Congo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Democratic_Republic_of_the_Congo.png
--------------------------------------------------------------------------------
/public_html/flags-tiny/Saint_Vincent_and_the_Grenadines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SDRplay/dump1090/HEAD/public_html/flags-tiny/Saint_Vincent_and_the_Grenadines.png
--------------------------------------------------------------------------------
/public_html/jquery/README:
--------------------------------------------------------------------------------
1 | This directory contains local copies of jQuery / jQuery UI;
2 | the original versions are available from jquery.com under
3 | a MIT-style license.
4 |
--------------------------------------------------------------------------------
/start2.cmd:
--------------------------------------------------------------------------------
1 | @echo off
2 | title CTRL-C to EXIT - v1.46 Std Performance dump1090
3 | .\DisableClose.exe
4 | .\sdrplay_dump1090.exe --dev-sdrplay --quiet --net
5 | pause
6 |
--------------------------------------------------------------------------------
/start2I.cmd:
--------------------------------------------------------------------------------
1 | @echo off
2 | title CTRL-C to EXIT - v1.46 Std Perf Interactive dump1090
3 | .\DisableClose.exe
4 | .\sdrplay_dump1090.exe --dev-sdrplay --interactive --net
5 | pause
6 |
--------------------------------------------------------------------------------
/start8.cmd:
--------------------------------------------------------------------------------
1 | @echo off
2 | title CTRL-C to EXIT - v1.46 High Performance dump1090
3 | .\DisableClose.exe
4 | .\sdrplay_dump1090.exe --dev-sdrplay --quiet --net --oversample
5 | pause
6 |
--------------------------------------------------------------------------------
/start8I.cmd:
--------------------------------------------------------------------------------
1 | @echo off
2 | title CTRL-C to EXIT - v1.46 High Perf Interactive dump1090
3 | .\DisableClose.exe
4 | .\sdrplay_dump1090.exe --dev-sdrplay --interactive --net --oversample
5 | pause
6 |
--------------------------------------------------------------------------------
/debian/dump1090-mutability.install:
--------------------------------------------------------------------------------
1 | public_html/* usr/share/dump1090-mutability/html
2 | debian/lighttpd/* etc/lighttpd/conf-available
3 | debian/nginx/* etc/nginx/sites-available
4 | debian/config-template usr/share/dump1090-mutability
5 |
--------------------------------------------------------------------------------
/public_html/db/README:
--------------------------------------------------------------------------------
1 | This directory contains static data on some aircraft (registrations, etc)
2 | originally derived from Virtual Radar Server's BasicAircraftLookup.sqb
3 | (see tools/vrs-basicaircraft-to-json.py). As that database is no longer being
4 | updated, the data is directly included here rather than periodically refreshing
5 | from the online copy.
6 |
--------------------------------------------------------------------------------
/debian/dump1090-mutability.conffiles:
--------------------------------------------------------------------------------
1 | /usr/share/dump1090-mutability/html/config.js
2 | /usr/share/dump1090-mutability/html/gmap.html
3 | /usr/share/dump1090-mutability/html/script.js
4 | /usr/share/dump1090-mutability/html/planeObject.js
5 | /usr/share/dump1090-mutability/html/style.css
6 | /usr/share/dump1090-mutability/html/markers.js
7 | /usr/share/dump1090-mutability/html/formatter.js
8 | /usr/share/dump1090-mutability/html/dbloader.js
9 |
--------------------------------------------------------------------------------
/public_html/flags-tiny/README.txt:
--------------------------------------------------------------------------------
1 | This directory contains flag icons for use to display country flags in the DUMP1090 web interface.
2 |
3 | Country flag functionality submitted by Dino Moriello
4 |
5 | The flags are supplied by
6 | Free Country Flags by Gang of the Coconuts and is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
7 |
8 | Free Country Flags:
9 | http://www.free-country-flags.com/
10 |
11 | Creative Commons Attribution-ShareAlike 3.0 Unported License
12 | http://creativecommons.org/licenses/by-sa/3.0/
13 |
--------------------------------------------------------------------------------
/public_html/test/markers_test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | DUMP1090 MARKERS TEST
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/debian/nginx/dump1090-mutability:
--------------------------------------------------------------------------------
1 | # Allows access to the static files that provide the dump1090 map view,
2 | # and also to the dynamically-generated json parts that contain aircraft
3 | # data and are periodically written by the dump1090 daemon.
4 | #
5 | server{
6 | rewrite ^/dump1090/$ /dump1090/gmap.html permanent;
7 | rewrite ^/dump1090$ /dump1090/gmap.html permanent;
8 |
9 | location /dump1090/ {
10 | alias /usr/share/dump1090-mutability/html/;
11 | }
12 | location /dump1090/data/ {
13 | alias /run/dump1090-mutability/;
14 | }
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/compat/clock_gettime/clock_gettime.h:
--------------------------------------------------------------------------------
1 | #ifndef CLOCK_GETTIME_H
2 | #define CLOCK_GETTIME_H
3 |
4 | #include
5 |
6 | #ifdef _CLOCKID_T_DEFINED_
7 | #define CLOCKID_T
8 | #endif
9 |
10 | #ifndef CLOCKID_T
11 | #define CLOCKID_T
12 | typedef enum
13 | {
14 | CLOCK_REALTIME,
15 | CLOCK_MONOTONIC,
16 | CLOCK_PROCESS_CPUTIME_ID,
17 | CLOCK_THREAD_CPUTIME_ID
18 | } clockid_t;
19 | #endif // CLOCKID_T
20 |
21 | struct timespec;
22 |
23 | static mach_timebase_info_data_t __clock_gettime_inf;
24 |
25 | int clock_gettime(clockid_t clk_id, struct timespec *tp);
26 |
27 | #endif // CLOCK_GETTIME_H
28 |
--------------------------------------------------------------------------------
/postinstall.txt:
--------------------------------------------------------------------------------
1 | Quick start guide:
2 |
3 | Install Virtual Radar (http://www.virtualradarserver.co.uk)
4 | Run the start2.bat (or start8.bat) script in the installation directory
5 | Connect via a browser to the virtual radar server (normally http://127.0.0.1/VirtualRadar)
6 |
7 | If multiple RSPs are available and no aircraft are being detected, make sure you type the correpsonding number from the menu that will be displayed. This tells dump1090 which RSP to use and press make sure to press return after the number.
8 |
9 | Remember port B is used by default if you are using the RSP2 and tuner 2 is used by default if you are using the RSPduo.
10 |
11 | Enjoy!
12 |
--------------------------------------------------------------------------------
/compat/clock_nanosleep/clock_nanosleep.h:
--------------------------------------------------------------------------------
1 | #ifndef CLOCK_NANOSLEEP_H
2 | #define CLOCK_NANOSLEEP_H
3 |
4 | #ifdef _CLOCKID_T_DEFINED_
5 | #define CLOCKID_T
6 | #endif
7 |
8 | #ifndef CLOCKID_T
9 | #define CLOCKID_T
10 | typedef enum
11 | {
12 | CLOCK_REALTIME,
13 | CLOCK_MONOTONIC,
14 | CLOCK_PROCESS_CPUTIME_ID,
15 | CLOCK_THREAD_CPUTIME_ID
16 | } clockid_t;
17 | #endif // CLOCKID_T
18 |
19 | #ifndef TIMER_ABSTIME
20 | #define TIMER_ABSTIME 1
21 | #endif // TIMER_ABSTIME
22 |
23 | struct timespec;
24 |
25 | int clock_nanosleep (clockid_t id, int flags, const struct timespec *ts,
26 | struct timespec *ots);
27 |
28 | #endif //CLOCK_NANOSLEEP_H
29 |
--------------------------------------------------------------------------------
/debian/cron-template:
--------------------------------------------------------------------------------
1 | ## TEMPLATE FILE - This is used to create /etc/cron.d/dump1090-mutability ##
2 | ## The first three lines will be discarded ##
3 |
4 | # Checks for updates to the VRS aircraft database once a day at around 5am;
5 | # when an update is available, downloads it and regenerates the JSON data
6 | # used by the webmap.
7 |
8 | # NB: the minute value below is randomly generated on install, to avoid
9 | # all installs hitting the server at the same time.
10 |
11 | # m h dom mon dow user command
12 | @MIN@ 5 * * * @USER@ test -x /usr/share/dump1090-mutability/update-aircraft-database.sh && /usr/share/dump1090-mutability/update-aircraft-database.sh --log-to-file
13 |
--------------------------------------------------------------------------------
/debian/lighttpd/89-dump1090.conf:
--------------------------------------------------------------------------------
1 | # Allows access to the static files that provide the dump1090 map view,
2 | # and also to the dynamically-generated json parts that contain aircraft
3 | # data and are periodically written by the dump1090 daemon.
4 |
5 | url.redirect += (
6 | "^/dump1090/$" => "/dump1090/gmap.html",
7 | "^/dump1090$" => "/dump1090/gmap.html"
8 | )
9 |
10 | alias.url += (
11 | "/dump1090/data/" => "/run/dump1090-mutability/",
12 | "/dump1090/" => "/usr/share/dump1090-mutability/html/"
13 | )
14 |
15 | # The stat cache must be disabled, as aircraft.json changes
16 | # frequently and lighttpd's stat cache often ends up with the
17 | # wrong content length.
18 | server.stat-cache-engine = "disable"
19 |
--------------------------------------------------------------------------------
/preinstall.txt:
--------------------------------------------------------------------------------
1 | This is the 1.46 release of the dump1090 application for Windows to support the SDRplay RSP1, RSP1A, RSP2 and RSPduo.
2 |
3 | This code is still in development, please see the documentation that is installed with this software for its use and known issues.
4 |
5 | NOTE 1: If you start the software with multiple RSPs available, please select the one you want dump1090 to use in the command prompt window from the menu list that will appear.
6 |
7 | NOTE 2: If using the RSP2 for ADS-B - PORT B will be used by default.
8 |
9 | NOTE 3: If using the RSPduo for ADS-B - Tuner 2 will be used by default.
10 |
11 | A full set of command line options can be seen by running sdrplay_dump1090.exe --help in a command prompt window from the dump1090 installation directory.
12 |
--------------------------------------------------------------------------------
/compat/compat.h:
--------------------------------------------------------------------------------
1 | #ifndef COMPAT_UTIL_H
2 | #define COMPAT_UTIL_H
3 |
4 | /*
5 | * Platform-specific bits
6 | */
7 |
8 | #if defined(__APPLE__)
9 |
10 | /*
11 | * Mach endian conversion
12 | */
13 | # include
14 | # define bswap_16 OSSwapInt16
15 | # define bswap_32 OSSwapInt32
16 | # define bswap_64 OSSwapInt64
17 | # include
18 | # define le16toh(x) OSSwapLittleToHostInt16(x)
19 | # define le32toh(x) OSSwapLittleToHostInt32(x)
20 |
21 | #else // other platforms
22 |
23 | # include
24 |
25 | #endif
26 |
27 | #ifdef MISSING_NANOSLEEP
28 | #include "clock_nanosleep/clock_nanosleep.h"
29 | #endif
30 |
31 | #ifdef MISSING_GETTIME
32 | #include "clock_gettime/clock_gettime.h"
33 | #endif
34 |
35 | #endif //COMPAT_UTIL_H
36 |
--------------------------------------------------------------------------------
/conio.h:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | /* reads from keypress, doesn't echo */
6 | int _getch(void)
7 | {
8 | struct termios oldattr, newattr;
9 | int ch;
10 | tcgetattr( STDIN_FILENO, &oldattr );
11 | newattr = oldattr;
12 | newattr.c_lflag &= ~( ICANON | ECHO );
13 | tcsetattr( STDIN_FILENO, TCSANOW, &newattr );
14 | ch = getchar();
15 | tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
16 | return ch;
17 | }
18 |
19 | /* reads from keypress, echoes */
20 | int _getche(void)
21 | {
22 | struct termios oldattr, newattr;
23 | int ch;
24 | tcgetattr( STDIN_FILENO, &oldattr );
25 | newattr = oldattr;
26 | newattr.c_lflag &= ~( ICANON );
27 | tcsetattr( STDIN_FILENO, TCSANOW, &newattr );
28 | ch = getchar();
29 | tcsetattr( STDIN_FILENO, TCSANOW, &oldattr );
30 | return ch;
31 | }
32 |
--------------------------------------------------------------------------------
/debian/control:
--------------------------------------------------------------------------------
1 | Source: dump1090-mutability
2 | Section: embedded
3 | Priority: extra
4 | Maintainer: Oliver Jowett
5 | Build-Depends: debhelper(>=8), librtlsdr-dev, libusb-1.0-0-dev, pkg-config
6 | Standards-Version: 3.9.3
7 | Homepage: https://github.com/mutability/dump1090
8 | Vcs-Git: https://github.com/mutability/dump1090.git
9 |
10 | Package: dump1090-mutability
11 | Architecture: any
12 | Depends: ${shlibs:Depends}, ${misc:Depends}, adduser
13 | Recommends: python(>=2.5), cron | cron-daemon, curl
14 | Suggests: lighttpd
15 | Provides: fatsv-data-source
16 | Description: ADS-B Ground Station System for RTL-SDR
17 | Networked Aviation Mode S / ADS-B decoder/translator with RTL-SDR software
18 | defined radio USB device support.
19 | .
20 | This is a packaging of the "mutability" fork of dump1090 that includes
21 | sampling at 2.4MHz and other improvements.
22 |
--------------------------------------------------------------------------------
/demod_2000.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // demod_2000.h: 2MHz Mode S demodulator prototypes.
4 | //
5 | // Copyright (c) 2014,2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #ifndef DUMP1090_DEMOD_2000_H
21 | #define DUMP1090_DEMOD_2000_H
22 |
23 | #include
24 |
25 | struct mag_buf;
26 |
27 | void demodulate2000(struct mag_buf *mag);
28 |
29 | #endif
30 |
--------------------------------------------------------------------------------
/demod_2400.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // demod_2400.h: 2.4MHz Mode S demodulator prototypes.
4 | //
5 | // Copyright (c) 2014,2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #ifndef DUMP1090_DEMOD_2400_H
21 | #define DUMP1090_DEMOD_2400_H
22 |
23 | #include
24 |
25 | struct mag_buf;
26 |
27 | void demodulate2400(struct mag_buf *mag);
28 |
29 | #endif
30 |
--------------------------------------------------------------------------------
/debian/rules:
--------------------------------------------------------------------------------
1 | #!/usr/bin/make -f
2 | # -*- makefile -*-
3 | # Sample debian/rules that uses debhelper.
4 | # This file was originally written by Joey Hess and Craig Small.
5 | # As a special exception, when this file is copied by dh-make into a
6 | # dh-make output file, you may use that output file without restriction.
7 | # This special exception was added by Craig Small in version 0.37 of dh-make.
8 |
9 | # Uncomment this to turn on verbose mode.
10 | export DH_VERBOSE=1
11 |
12 | export DEB_BUILD_MAINT_OPTIONS = hardening=+all
13 |
14 | DPKG_EXPORT_BUILDFLAGS = 1
15 | include /usr/share/dpkg/buildflags.mk
16 |
17 | export DUMP1090_VERSION=$(shell dpkg-parsechangelog | sed -n 's/^Version: /v/p')
18 | SRCNAME=$(shell dpkg-parsechangelog | sed -n 's/^Source: //p')
19 |
20 | override_dh_auto_build:
21 | dh_auto_build -- 'EXTRACFLAGS=-DHTMLPATH=\"/usr/share/dump1090-mutability/html\" -DMODES_DUMP1090_VARIANT=\"$(SRCNAME)\"'
22 |
23 | override_dh_install:
24 | dh_install
25 | install -d debian/dump1090-mutability/usr/bin
26 | cp -a dump1090 debian/dump1090-mutability/usr/bin/dump1090-mutability
27 | cp -a view1090 debian/dump1090-mutability/usr/bin/view1090-mutability
28 |
29 | %:
30 | dh $@
31 |
--------------------------------------------------------------------------------
/compat/clock_nanosleep/LICENSE:
--------------------------------------------------------------------------------
1 | /***********************************************************************
2 | * Copyright © 2006 Rémi Denis-Courmont. *
3 | * This program is free software; you can redistribute and/or modify *
4 | * it under the terms of the GNU General Public License as published *
5 | * by the Free Software Foundation; version 2 of the license, or (at *
6 | * your option) any later version. *
7 | * *
8 | * This program is distributed in the hope that it will be useful, *
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
11 | * See the GNU General Public License for more details. *
12 | * *
13 | * You should have received a copy of the GNU General Public License *
14 | * along with this program; if not, you can get it from: *
15 | * http://www.gnu.org/copyleft/gpl.html *
16 | ***********************************************************************/
--------------------------------------------------------------------------------
/debian/dump1090-mutability.postrm:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # postrm script for #PACKAGE#
3 | #
4 | # see: dh_installdeb(1)
5 |
6 | set -e
7 |
8 | # summary of how this script can be called:
9 | # * `remove'
10 | # * `purge'
11 | # * `upgrade'
12 | # * `failed-upgrade'
13 | # * `abort-install'
14 | # * `abort-install'
15 | # * `abort-upgrade'
16 | # * `disappear'
17 | #
18 | # for details, see http://www.debian.org/doc/debian-policy/ or
19 | # the debian-policy package
20 |
21 |
22 | case "$1" in
23 | purge)
24 | rm -f /etc/default/dump1090-mutability
25 | rm -f /etc/cron.d/dump1090-mutability
26 | rm -rf /var/cache/dump1090-mutability
27 | ;;
28 |
29 | remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
30 | ;;
31 |
32 | *)
33 | echo "postrm called with unknown argument \`$1'" >&2
34 | exit 1
35 | ;;
36 | esac
37 |
38 | # dh_installdeb will replace this with shell code automatically
39 | # generated by other debhelper scripts.
40 |
41 | #DEBHELPER#
42 |
43 | exit 0
44 |
--------------------------------------------------------------------------------
/util.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // track.h: aircraft state tracking prototypes
4 | //
5 | // Copyright (c) 2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #ifndef DUMP1090_UTIL_H
21 | #define DUMP1090_UTIL_H
22 |
23 | #include
24 |
25 | /* Returns system time in milliseconds */
26 | uint64_t mstime(void);
27 |
28 | /* Returns the time elapsed, in nanoseconds, from t1 to t2,
29 | * where t1 and t2 are 12MHz counters.
30 | */
31 | int64_t receiveclock_ns_elapsed(uint64_t t1, uint64_t t2);
32 |
33 | /* Normalize the value in ts so that ts->nsec lies in
34 | * [0,999999999]
35 | */
36 | struct timespec;
37 | void normalize_timespec(struct timespec *ts);
38 |
39 | #endif
40 |
--------------------------------------------------------------------------------
/crc.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // crc.h: Mode S checksum prototypes.
4 | //
5 | // Copyright (c) 2014,2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #ifndef DUMP1090_CRC_H
21 | #define DUMP1090_CRC_H
22 |
23 | #include
24 |
25 | // Global max for fixable bit erros
26 | #define MODES_MAX_BITERRORS 2
27 |
28 | struct errorinfo {
29 | uint32_t syndrome; // CRC syndrome
30 | int errors; // number of errors
31 | int8_t bit[MODES_MAX_BITERRORS]; // bit positions to fix (-1 = no bit)
32 | };
33 |
34 | void modesChecksumInit(int fixBits);
35 | uint32_t modesChecksum(uint8_t *msg, int bitlen);
36 | struct errorinfo *modesChecksumDiagnose(uint32_t syndrome, int bitlen);
37 | void modesChecksumFix(uint8_t *msg, struct errorinfo *info);
38 |
39 | #endif
40 |
--------------------------------------------------------------------------------
/icao_filter.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // icao_filter.c: prototypes for ICAO address hashtable
4 | //
5 | // Copyright (c) 2014,2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #ifndef DUMP1090_ICAO_FILTER_H
21 | #define DUMP1090_ICAO_FILTER_H
22 |
23 | // Call once:
24 | void icaoFilterInit();
25 |
26 | // Add an address to the filter
27 | void icaoFilterAdd(uint32_t addr);
28 |
29 | // Test if the given address matches the filter
30 | int icaoFilterTest(uint32_t addr);
31 |
32 | // Test if the top 16 bits match any previously added address.
33 | // If they do, returns an arbitrary one of the matched
34 | // addresses. Returns 0 on failure.
35 | uint32_t icaoFilterTestFuzzy(uint32_t partial);
36 |
37 | // Call this periodically to allow the filter to expire
38 | // old entries.
39 | void icaoFilterExpire();
40 |
41 | #endif
42 |
--------------------------------------------------------------------------------
/compat/clock_gettime/LICENSE:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c), MM Weiss
3 | * All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without modification,
6 | * are permitted provided that the following conditions are met:
7 | *
8 | * 1. Redistributions of source code must retain the above copyright notice,
9 | * this list of conditions and the following disclaimer.
10 | *
11 | * 2. Redistributions in binary form must reproduce the above copyright notice,
12 | * this list of conditions and the following disclaimer in the documentation
13 | * and/or other materials provided with the distribution.
14 | *
15 | * 3. Neither the name of the MM Weiss nor the names of its contributors
16 | * may be used to endorse or promote products derived from this software without
17 | * specific prior written permission.
18 | *
19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
22 | * SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 | * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
26 | * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
27 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | */
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DUMP1090
2 |
3 | The latest version number of this particular build of `dump1090` is `1.47`
4 |
5 | This build supports all RSPs and requires API `3.x` which can be downloaded from the `SDRplay`
6 |
7 | Downloads page: https://www.sdrplay.com/downloads
8 |
9 | This build also still supports the `RTL-SDR` device and so the `RTL-SDR` library needs to be installed also.
10 |
11 | ## Build from source
12 |
13 | $ git clone https://github.com/SDRplay/dump1090
14 | $ cd dump1090
15 |
16 | NOTE: BEFORE BUILDING CHECK PATHS IN THE Makefile...
17 |
18 | PKG_CONFIG_PATH: add the path to the librtlsdr.pc file
19 | SDRPLAY_CFLAGS: If you have problems including the API header files, add the path to the API inc directory here
20 | SDRPLAY_LIBS: If you have problems with linking to the API dll, add the path here
21 |
22 | There are examples of the SDRPlay variables if building on Cygwin,n the Makefile. They may not be required if building on Linux
23 |
24 | $ SDRPLAY=1 make dump1090
25 |
26 | To build on Windows, use Cygwin - note: after building under Cygwin you may need to specify the path to the API dll,
27 | or add the API dll path to your system path. An example of how to do this on the command line is...
28 |
29 | $ PATH="/cygdrive/c/program files/sdrplay/api/x86":$PATH ./dump1090.exe
30 |
31 | ## Usage example
32 |
33 | You should specify SDRPlay at start:
34 |
35 | $ ./dump1090 --dev-sdrplay
36 |
37 |
38 | -------------------------------------------------
39 |
40 | This is a fork of mutability's version of dump1090 (https://github.com/mutability/dump1090)
41 |
42 | This version is licensed under the GPL (v2 or later). See the file COPYING for details.
43 |
--------------------------------------------------------------------------------
/cpr.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // cpr.h - Compact Position Reporting prototypes
4 | //
5 | // Copyright (c) 2014,2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #ifndef DUMP1090_CPR_H
21 | #define DUMP1090_CPR_H
22 |
23 | int decodeCPRairborne(int even_cprlat, int even_cprlon,
24 | int odd_cprlat, int odd_cprlon,
25 | int fflag,
26 | double *out_lat, double *out_lon);
27 |
28 | int decodeCPRsurface(double reflat, double reflon,
29 | int even_cprlat, int even_cprlon,
30 | int odd_cprlat, int odd_cprlon,
31 | int fflag,
32 | double *out_lat, double *out_lon);
33 |
34 | int decodeCPRrelative(double reflat, double reflon,
35 | int cprlat, int cprlon,
36 | int fflag, int surface,
37 | double *out_lat, double *out_lon);
38 |
39 | #endif
40 |
--------------------------------------------------------------------------------
/convert.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // convert.h: support for various IQ -> magnitude conversions
4 | //
5 | // Copyright (c) 2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #ifndef DUMP1090_CONVERT_H
21 | #define DUMP1090_CONVERT_H
22 |
23 | struct converter_state;
24 | typedef enum { INPUT_UC8=0, INPUT_SC16, INPUT_SC16Q11 } input_format_t;
25 |
26 | typedef void (*iq_convert_fn)(void *iq_data,
27 | uint16_t *mag_data,
28 | unsigned nsamples,
29 | struct converter_state *state,
30 | double *out_power);
31 |
32 | iq_convert_fn init_converter(input_format_t format,
33 | double sample_rate,
34 | int filter_dc,
35 | int compute_power,
36 | struct converter_state **out_state);
37 |
38 | void cleanup_converter(struct converter_state *state);
39 |
40 | #endif
41 |
--------------------------------------------------------------------------------
/license.txt:
--------------------------------------------------------------------------------
1 | Dump1090 was written by Salvatore Sanfilippo antirez@gmail.com (2012) and is released under the following BSD three clause license.
2 | Malcolm Robb support@attavionics.com (2014) made a number of improvements
3 | SDRplay Limited info@sdrplay.com (2016-2019) added RSP support
4 |
5 | Copyright (c) 2012, Salvatore Sanfilippo antirez@gmail.com
6 | All rights reserved.
7 |
8 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
9 |
10 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
13 |
14 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | This version of dump1090 is licensed under the GPL, v2 or later.
2 |
3 | Please see the individual source files and the file COPYING
4 | for full copyright and license details.
5 |
6 | If you need to use dump1090 in a way that is incompatible with
7 | the GPL, please contact Oliver Jowett
8 | to discuss your requirements.
9 |
10 | The source code incorporates work that was released under a
11 | BSD-style license, reproduced below. For unmodified versions
12 | of the original work that may be used under the terms of that
13 | license, please see https://github.com/antirez/dump1090 and
14 | https://github.com/MalcolmRobb/dump1090.
15 |
16 | // Copyright (C) 2012 by Salvatore Sanfilippo
17 | //
18 | // All rights reserved.
19 | //
20 | // Redistribution and use in source and binary forms, with or without
21 | // modification, are permitted provided that the following conditions are
22 | // met:
23 | //
24 | // * Redistributions of source code must retain the above copyright
25 | // notice, this list of conditions and the following disclaimer.
26 | //
27 | // * Redistributions in binary form must reproduce the above copyright
28 | // notice, this list of conditions and the following disclaimer in the
29 | // documentation and/or other materials provided with the distribution.
30 | //
31 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
34 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 | // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
36 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
37 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
38 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
39 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
41 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42 |
--------------------------------------------------------------------------------
/demod_8000.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // demod_8000.h: 8MHz Mode S demodulator prototypes.
4 | //
5 | // This file is free software: you may copy, redistribute and/or modify it
6 | // under the terms of the GNU General Public License as published by the
7 | // Free Software Foundation, either version 2 of the License, or (at your
8 | // option) any later version.
9 | //
10 | // This file is distributed in the hope that it will be useful, but
11 | // WITHOUT ANY WARRANTY; without even the implied warranty of
12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 | // General Public License for more details.
14 | //
15 | // You should have received a copy of the GNU General Public License
16 | // along with this program. If not, see .
17 |
18 | #ifndef DUMP1090_DEMOD_8000_H
19 | #define DUMP1090_DEMOD_8000_H
20 |
21 | #include
22 |
23 |
24 |
25 | #define D8M_NUM_PHASES 8 // samples per bit
26 |
27 | #define D8M_WIN_LEN (MODES_SHORT_MSG_BITS + MODES_LONG_MSG_BITS) // match window to search for peak correlation
28 |
29 | #define D8M_SEARCH_BACK 4 // bits to search back relative to peak
30 | #define D8M_SEARCH_AHEAD 12 // bits to search ahead relative to peak
31 | #define D8M_SEARCH_WIDTH (D8M_SEARCH_BACK+D8M_SEARCH_AHEAD) // total search width in bits
32 | #define D8M_SEARCH_BYTES ((D8M_SEARCH_WIDTH+7)/8) // same in bytes, rounded up
33 |
34 | #define D8M_LOOK_BACK ((D8M_WIN_LEN+D8M_SEARCH_BACK+1)*D8M_NUM_PHASES) // buffer look-back required for algorithm
35 | #define D8M_LOOK_AHEAD ((MODES_SHORT_MSG_BITS+D8M_SEARCH_AHEAD)*D8M_NUM_PHASES) // buffer look-ahead required for algorithm
36 |
37 | #define D8M_BUF_OVERLAP (D8M_LOOK_BACK+D8M_LOOK_AHEAD) // total extra buffer compared to frame of data
38 |
39 |
40 |
41 | struct mag_buf;
42 |
43 | void demodulate8000(struct mag_buf *mag);
44 |
45 | #endif
46 |
--------------------------------------------------------------------------------
/public_html/style.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0; padding: 0; background-color: #ffffff; font-family: Tahoma, Sans-Serif;
3 | font-size: 10pt; overflow: auto; height: 100%;
4 | }
5 | div#map_container { float: left; width: 100%; height: 100%; }
6 | div#map_canvas { height: 100%; margin-right: 420px; }
7 |
8 | div#sidebar_container { float: left; width: 410px; margin-left: -410px; height: 100%; overflow: auto; }
9 |
10 | div#SpecialSquawkWarning { position: absolute; bottom: 25px; right: 430px; border: 2px solid red;
11 | background-color: #FFFFA3; opacity: 0.75; filter:alpha(opacity=75); padding: 5px;
12 | text-align: center; }
13 |
14 | div#update_error { position: absolute; bottom: 25px; left: 25px; border: 2px solid red;
15 | background-color: #FFFFA3; opacity: 0.75; filter:alpha(opacity=75); padding: 5px;
16 | text-align: center; }
17 |
18 | div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right: 0; background: #000; opacity: 0.8; filter: alpha(opacity=80); }
19 | #spinny { width: 128px; height: 128px; position: absolute; top: 50%; left: 50%; margin: -64px 0 0 -64px; }
20 | #loader_progress { width: 250px; height: 20px; position: absolute; top: 50%; left: 50%; margin: 128px 0 0 -125px; }
21 |
22 | #tableinfo, #sudo_buttons { font-size: x-small; font-family: monospace; }
23 |
24 | .vPosition { font-weight: bold; background-color: #d5ffd5; }
25 | .mlat { font-weight: bold; background-color: #d5d5ff; }
26 | .squawk7500 { font-weight: bold; background-color: #ff5555; }
27 | .squawk7600 { font-weight: bold; background-color: #00ffff; }
28 | .squawk7700 { font-weight: bold; background-color: #ffff00; }
29 | .selected { background-color: #dddddd; }
30 | .plane_table_row { cursor: pointer; }
31 | .hidden { display: none; }
32 |
33 | .infoblock_heading { font-size: larger; }
34 | .infoblock_heading a { text-decoration: none; color: blue; font-size: x-small;}
35 | .infoblock_body { font-size: small; }
36 |
37 | #selected_icao { font-size: x-small; }
38 | #selected_registration { font-size: x-small; }
39 | #selected_icaotype { font-size: x-small; }
40 |
41 | .dim { opacity: 0.3; filter:alpha(opacity=30); /* For IE8 and earlier */ }
42 |
43 | .pointer { cursor: pointer; }
44 |
45 |
--------------------------------------------------------------------------------
/tools/extract-icao-ranges.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | import subprocess
4 | import re
5 |
6 | command = [
7 | 'pdftotext',
8 | '-layout',
9 | '-f', '187',
10 | '-l', '191',
11 | '-enc', 'ASCII7',
12 | 'adsb-AN10_V3_cons.pdf',
13 | '-'
14 | ]
15 | main_line = re.compile(r' ([^*]+?)\s+\*\s+([01-]{4})\s+([01-]{2})\s+([01-]{3})\s+([01-]{3})\s+([01-]{2})\s+([-]{10})\s*')
16 | continuation_line = re.compile(r' ([^ ].*)\s*')
17 |
18 | def scan():
19 | matches = []
20 |
21 | process = subprocess.Popen(command,
22 | stdin=subprocess.DEVNULL,
23 | stdout=subprocess.PIPE)
24 | match = None
25 | for line in process.stdout:
26 | line = line.decode('ascii')
27 | if match:
28 | cmatch = continuation_line.match(line)
29 | if cmatch:
30 | country = match.group(1) + ' ' + cmatch.group(1)
31 | else:
32 | country = match.group(1)
33 |
34 | matches.append((country,
35 | match.group(2) + match.group(3) +
36 | match.group(4) + match.group(5) +
37 | match.group(6) + match.group(7)))
38 |
39 | if cmatch:
40 | match = None
41 | continue
42 |
43 | match = main_line.match(line)
44 |
45 | if match:
46 | matches.append((match.group(1),
47 | match.group(2) + match.group(3) +
48 | match.group(4) + match.group(5) +
49 | match.group(6) + match.group(7)))
50 |
51 | return matches
52 |
53 | if __name__ == '__main__':
54 | matches = scan()
55 |
56 | print ('var ICAO_Ranges = [');
57 |
58 | for country, assignment in matches:
59 | low = int(assignment.replace('-', '0'), 2)
60 | high = int(assignment.replace('-', '1'), 2)
61 | print(' {{ start: 0x{low:06X}, end: 0x{high:06X}, country: "{country}", flag_image: "{flag}" }},'.format(
62 | low=low,
63 | high=high,
64 | country=country,
65 | flag=country.replace(' ','_').replace("'","").replace('-','_') + '.png'))
66 | print ('];')
67 |
--------------------------------------------------------------------------------
/public_html/db/6.json:
--------------------------------------------------------------------------------
1 | {"00007":{"r":"EK-32011","t":"A319"},"0000C":{"r":"EK32008","t":"A320"},"00013":{"r":"EK-11001","t":"AN12"},"0002F":{"r":"EK-12104","t":"AN12"},"0003C":{"r":"EK-RA01","t":"A319"},"0004A":{"r":"EK-32007","t":"A319"},"00059":{"r":"EK-95015","t":"SU95"},"0005A":{"r":"EK-95016","t":"SU95"},"00076":{"r":"EK-74723","t":"B742"},"00079":{"r":"EK-74798","t":"B742"},"00087":{"r":"EK-74799","t":"B742"},"0009D":{"r":"EK-73775","t":"B735"},"0009F":{"r":"EK-73772","t":"B735"},"00803":{"r":"4K-AZ03","t":"A319"},"00804":{"r":"4K-AZ04","t":"A319"},"00805":{"r":"4K-AZ05","t":"A319"},"00806":{"r":"4K-AI06","t":"GLF5"},"00808":{"r":"4K-MEK8","t":"GLF5"},"00826":{"r":"4K-AZ38","t":"B752"},"0082B":{"r":"4K-AZ43","t":"B752"},"00836":{"r":"4K-AZ54","t":"A320"},"00838":{"r":"4K-AZ56","t":"AN12"},"0084D":{"r":"4K-AZ77","t":"A320"},"0084E":{"r":"4K-AZ78","t":"A320"},"0084F":{"r":"4K-AZ79","t":"A320"},"00850":{"r":"4K-AZ80","t":"A320"},"00851":{"r":"4K-AZ81","t":"B763"},"00852":{"r":"4K-AZ82","t":"B763"},"00853":{"r":"4K-AZ83","t":"A320"},"00854":{"r":"4K-AZ84","t":"A320"},"00858":{"r":"4K-AZ88","t":"GALX"},"008D0":{"r":"4K-AZ208","t":"G280"},"00918":{"r":"4K-AZ280","t":"G280"},"00B20":{"r":"4K-800","t":"B744"},"00B21":{"r":"4K-SW888","t":"B744"},"00B70":{"r":"4K-SW880","t":"B763"},"00B78":{"r":"4K-AZ888","t":"GLF4"},"00BB9":{"r":"4K-SW808","t":"B763"},"00BBE":{"r":"4K-SW008","t":"B744"},"00BC4":{"r":"4K-AI88","t":"GLF6"},"00BE8":{"r":"4K-BAKU","t":"B763"},"01097":{"r":"EX-37008"},"010F2":{"r":"EX-32001","t":"A320"},"010F4":{"r":"EX-37001","t":"B733"},"010F9":{"r":"EX-73401","t":"B734"},"01839":{"r":"EZ-A779","t":"B77L"},"0183A":{"r":"EZ-A778","t":"B77L"},"0183B":{"r":"EZ-A017","t":"B738"},"0183C":{"r":"EZ-A016","t":"B738"},"0183D":{"r":"EZ-A015","t":"B738"},"01842":{"r":"EZ-A010","t":"B752"},"01846":{"r":"EZ-A011","t":"B752"},"01847":{"r":"EZ-A012","t":"B752"},"01849":{"r":"EZ-A014","t":"B752"},"01854":{"r":"EZ-A106","t":"B712"},"01855":{"r":"EZ-A107","t":"B712"},"01858":{"r":"EZ-A004","t":"B738"},"01859":{"r":"EZ-A005","t":"B738"},"0185A":{"r":"EZ-A007","t":"B737"},"0185E":{"r":"EZ-A006","t":"B737"},"0185F":{"r":"EZ-A008","t":"B737"},"01860":{"r":"EZ-A009","t":"B737"},"01861":{"r":"EZ-A777","t":"B772"},"80001":{"r":"A5-RGF","t":"A319"},"80002":{"r":"A5-RGG","t":"A319"},"82209":{"r":"JU-1011","t":"B763"},"8220A":{"r":"JU-1012","t":"B763"},"83037":{"r":"UP-B5701","t":"B752"},"83065":{"r":"UP-Y4204","t":"YK42"},"83088":{"r":"UP-I7620","t":"IL76"},"830A5":{"r":"UP-A2001","t":"A320"},"830BD":{"r":"UP-CS302","t":"C25B"},"830C2":{"r":"UP-K3501","t":"B350"},"830ED":{"r":"UP-A3001","t":"A332"},"830FE":{"r":"UP-K3502","t":"B350"},"831E8":{"r":"UP-T5409","t":"T154"}}
--------------------------------------------------------------------------------
/public_html/test/markers_test.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | var MarkerLayer;
4 | var NextLon = 0;
5 | var NextLat = 0;
6 |
7 | function setup_markers_test() {
8 | MarkerLayer = new ol.layer.Vector({
9 | source: new ol.source.Vector(),
10 | });
11 |
12 | var map = new ol.Map({
13 | target: 'map_canvas',
14 | layers: [
15 | MarkerLayer
16 | ],
17 | view: new ol.View({
18 | center: ol.proj.fromLonLat([5, 0]),
19 | zoom: 7
20 | }),
21 | controls: [new ol.control.Zoom(),
22 | new ol.control.Rotate()],
23 | loadTilesWhileAnimating: true,
24 | loadTilesWhileInteracting: true
25 | });
26 |
27 | for (var type in TypeIcons) {
28 | add_marker(type, TypeIcons[type]);
29 | }
30 |
31 | for (var category in CategoryIcons) {
32 | add_marker(category, CategoryIcons[category]);
33 | }
34 |
35 | add_marker("Default", DefaultIcon);
36 |
37 | map.getView().setCenter(ol.proj.fromLonLat([5, NextLat/2]));
38 | }
39 |
40 | function add_marker(title, baseMarker) {
41 | var weight = (1 / baseMarker.scale).toFixed(1);
42 | var icon = new ol.style.Icon({
43 | anchor: baseMarker.anchor,
44 | anchorXUnits: 'pixels',
45 | anchorYUnits: 'pixels',
46 | scale: baseMarker.scale,
47 | imgSize: baseMarker.size,
48 | src: svgPathToURI(baseMarker.path, baseMarker.size, '#000000', weight, '#00C000'),
49 | rotation: 0,
50 | opacity: 1.0,
51 | rotateWithView: (baseMarker.noRotate ? false : true)
52 | });
53 |
54 | var markerStyle = new ol.style.Style({
55 | image: icon,
56 | text: new ol.style.Text({
57 | textAlign: 'center',
58 | textBaseline: 'top',
59 | offsetY: 30,
60 | text: title,
61 | scale: 1.5
62 | })
63 | });
64 |
65 | var pos = [NextLon, NextLat];
66 | var marker = new ol.Feature(new ol.geom.Point(ol.proj.fromLonLat(pos)));
67 | marker.setStyle(markerStyle);
68 | MarkerLayer.getSource().addFeature(marker);
69 |
70 | NextLon += 1;
71 | if (NextLon >= 10) {
72 | NextLon -= 10;
73 | NextLat -= 1;
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/compat/clock_nanosleep/clock_nanosleep.c:
--------------------------------------------------------------------------------
1 | /*
2 | * clock_nanosleep.c - clock_nanosleep() replacement
3 | */
4 |
5 | /***********************************************************************
6 | * Copyright © 2006 Rémi Denis-Courmont. *
7 | * This program is free software; you can redistribute and/or modify *
8 | * it under the terms of the GNU General Public License as published *
9 | * by the Free Software Foundation; version 2 of the license, or (at *
10 | * your option) any later version. *
11 | * *
12 | * This program is distributed in the hope that it will be useful, *
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
15 | * See the GNU General Public License for more details. *
16 | * *
17 | * You should have received a copy of the GNU General Public License *
18 | * along with this program; if not, you can get it from: *
19 | * http://www.gnu.org/copyleft/gpl.html *
20 | ***********************************************************************/
21 |
22 | #include // for errno, EINVAL
23 | #include // for nanosleep, NULL
24 |
25 | #include "clock_nanosleep.h"
26 | #ifdef MISSING_GETTIME
27 | #include "../clock_gettime/clock_gettime.h" // for clock_gettime
28 | #endif
29 |
30 | int clock_nanosleep(clockid_t id, int flags, const struct timespec *ts,
31 | struct timespec *ots) {
32 | int ret;
33 |
34 | if (id != CLOCK_REALTIME)
35 | return EINVAL;
36 |
37 | if (flags & TIMER_ABSTIME) {
38 | struct timespec mine;
39 |
40 | if (clock_gettime(id, &mine))
41 | return errno;
42 |
43 | if (mine.tv_sec > ts->tv_sec)
44 | return 0; // behind schedule
45 |
46 | if (mine.tv_nsec > ts->tv_nsec) {
47 | if (mine.tv_sec == ts->tv_sec)
48 | return 0; // behind schedule too
49 |
50 | mine.tv_nsec = 1000000000 + ts->tv_nsec - mine.tv_nsec;
51 | mine.tv_sec++;
52 | }
53 | else
54 | mine.tv_nsec = ts->tv_nsec - mine.tv_nsec;
55 |
56 | mine.tv_sec = ts->tv_sec - mine.tv_sec;
57 |
58 | /* With TIMER_ABSTIME, clock_nanosleep ignores */
59 | ret = nanosleep(&mine, NULL);
60 | }
61 | else
62 | ret = nanosleep(ts, ots);
63 |
64 | return ret ? errno : 0;
65 | }
66 |
--------------------------------------------------------------------------------
/public_html/db/4062.json:
--------------------------------------------------------------------------------
1 | {"04":{"r":"G-LATE","t":"F2TH"},"06":{"r":"G-RSCU","t":"A109"},"08":{"r":"G-HEMZ","t":"A109"},"0B":{"r":"G-MACN","t":"SR22"},"0E":{"r":"G-CGGU","t":"CL60"},"10":{"r":"G-EDEO","t":"BE24"},"12":{"r":"G-EGVO","t":"F900"},"17":{"r":"G-DLAA","t":"C208"},"1A":{"r":"G-CGGW","t":"MT"},"1B":{"r":"G-STBA","t":"B77W"},"1C":{"r":"G-STBB","t":"B77W"},"1D":{"r":"G-STBC","t":"B77W"},"1E":{"r":"G-RIZA","t":"PRM1"},"22":{"r":"G-LCYJ","t":"E190"},"25":{"r":"G-HCFC","t":"A109"},"28":{"r":"G-EZTP","t":"A320"},"29":{"r":"G-EZTR","t":"A320"},"2A":{"r":"G-EZTS","t":"A320"},"2B":{"r":"G-EZTT","t":"A320"},"2C":{"r":"G-EZTU","t":"A320"},"2D":{"r":"G-EZTV","t":"A320"},"2E":{"r":"G-EZTW","t":"A320"},"2F":{"r":"G-EZTX","t":"A320"},"30":{"r":"G-LCYK","t":"E190"},"31":{"r":"G-LCYL","t":"E190"},"37":{"r":"G-TSLS","t":"GL5T"},"38":{"r":"G-JOEB","t":"SR22"},"39":{"r":"G-DTFL","t":"P46T"},"3A":{"r":"G-PBAT","t":"CRUZ"},"3E":{"r":"G-OMSA","t":"FDCT"},"3F":{"r":"G-CGJT","t":"CRUZ"},"40":{"r":"G-MCAN","t":"A109"},"41":{"r":"G-SHSI","t":"E135"},"43":{"r":"G-LUEK","t":"C182"},"45":{"r":"G-JONT","t":"SR22"},"48":{"r":"G-CGHD","t":"C172"},"4E":{"r":"G-EUYG","t":"A320"},"4F":{"r":"G-EUYH","t":"A320"},"50":{"r":"G-EUYI","t":"A320"},"54":{"r":"G-CGID","t":"PA31"},"55":{"r":"G-CGHI","t":"F2TH"},"66":{"r":"G-LEAX","t":"C56X"},"67":{"r":"G-SONE","t":"C25A"},"6B":{"r":"G-HUBY","t":"E135"},"6D":{"r":"G-CGHW","t":"CRUZ"},"6E":{"r":"G-GKRC","t":"C180"},"70":{"r":"G-ROKO","t":"NG4"},"78":{"r":"G-CGHY","t":"H25B"},"79":{"r":"G-LCYM","t":"E190"},"7A":{"r":"G-YROZ","t":"CDUS"},"7D":{"r":"G-OMSV","t":"BE20"},"80":{"r":"G-CGLR","t":"CRUZ"},"87":{"r":"G-HAYY","t":"CRUZ"},"89":{"r":"G-ISCD","t":"CRUZ"},"8C":{"r":"G-JOHA","t":"SR20"},"8F":{"r":"G-COBM","t":"BE30"},"90":{"r":"G-COBI","t":"B350"},"92":{"r":"G-CGIL","t":"CRUZ"},"95":{"r":"G-EMSA","t":"CRUZ"},"A3":{"r":"G-OOBP","t":"B752"},"A4":{"r":"G-OOBN","t":"B752"},"A6":{"r":"G-PLAR","t":"RV9"},"B0":{"r":"G-REAF","t":"JAB4"},"B1":{"r":"G-EVPH"},"B6":{"r":"G-XCRJ","t":"RV9"},"B7":{"r":"G-KANL","t":"GLEX"},"B8":{"r":"G-PVEL","t":"GL5T"},"B9":{"r":"G-WINR","t":"R22"},"BA":{"r":"G-CKSC","t":"CRUZ"},"BF":{"r":"G-DAVM","t":"CP10"},"C0":{"r":"G-CGJA","t":"CL60"},"C1":{"r":"G-CGLZ","t":"ULAC"},"C9":{"r":"G-ZMED","t":"LJ35"},"CD":{"r":"G-CGJH","t":"ULAC"},"D1":{"r":"G-KUIP","t":"CRUZ"},"D2":{"r":"G-POLA","t":"EC35"},"D4":{"r":"G-CGMF","t":"C56X"},"D5":{"r":"G-LSAK","t":"B752"},"D8":{"r":"G-TVHB","t":"EC35"},"DC":{"r":"G-CGJS","t":"CRUZ"},"E0":{"r":"G-OBOF","t":"GX"},"E1":{"r":"G-RMMA","t":"GL5T"},"E2":{"r":"G-CGJN","t":"RV7"},"E3":{"r":"G-VKGO","t":"E50P"},"E5":{"r":"G-LOOC","t":"C172"},"E9":{"r":"G-CGKY","t":"C182"},"EC":{"r":"G-SCVF","t":"CRUZ"},"EF":{"r":"G-XXZZ","t":"LJ60"},"F3":{"r":"G-CGMP","t":"CRUZ"},"F6":{"r":"G-JDRD","t":"ULAC"},"FF":{"r":"G-ZOOG","t":"P06T"}}
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # When building a package or installing otherwise in the system, make
3 | # sure that the variable PREFIX is defined, e.g. make PREFIX=/usr/local
4 | #
5 | PROGNAME=dump1090
6 | SDRPLAY=1
7 | DUMP1090_VERSION="dump1090_mutability_sdrplay"
8 |
9 | # Path to rtlsdr library ** ADD PATH TO RTL-SDR librtlsdr.pc file **
10 | PKG_CONFIG_PATH=
11 | LIBS_RTL=`pkg-config --libs librtlsdr`
12 |
13 | ifndef DUMP1090_VERSION
14 | DUMP1090_VERSION=$(shell git describe --tags --match=v*)
15 | endif
16 |
17 | ifdef PREFIX
18 | BINDIR=$(PREFIX)/bin
19 | SHAREDIR=$(PREFIX)/share/$(PROGNAME)
20 | EXTRACFLAGS=-DHTMLPATH=\"$(SHAREDIR)\"
21 | endif
22 |
23 | ifdef SDRPLAY
24 | SDRPLAY_CFLAGS=-DSDRPLAY
25 | # path to API files
26 | # the following is for building on Windows under CygWin
27 | # uncomment as necessary
28 | #SDRPLAY_LIBS=-L"/cygdrive/c/program files/sdrplay/api/x86"
29 | #SDRPLAY_CFLAGS+=-I"/cygdrive/c/program files/sdrplay/api/inc"
30 | endif
31 |
32 | CPPFLAGS+=-fcommon
33 | CPPFLAGS+=-DMODES_DUMP1090_VERSION=\"$(DUMP1090_VERSION)\"
34 | CFLAGS+= -O2 -g -Wall -Werror -W
35 | CFLAGS+=$(SDRPLAY_CFLAGS)
36 | LIBS=$(SDRPLAY_LIBS) $(LIBS_RTL) -lsdrplay_api -lpthread -lm -lrtlsdr
37 | CC=gcc
38 |
39 | UNAME := $(shell uname)
40 |
41 | ifeq ($(UNAME), Linux)
42 | LIBS+=-lrt
43 | CFLAGS+=-std=c11 -D_DEFAULT_SOURCE
44 | endif
45 | ifeq ($(UNAME), Darwin)
46 | UNAME_R := $(shell uname -r)
47 | ifeq ($(shell expr "$(UNAME_R)" : '1[012345]\.'),3)
48 | CFLAGS+=-std=c11 -DMISSING_GETTIME -DMISSING_NANOSLEEP
49 | COMPAT+=compat/clock_gettime/clock_gettime.o compat/clock_nanosleep/clock_nanosleep.o
50 | else
51 | # Darwin 16 (OS X 10.12) supplies clock_gettime() and clockid_t
52 | CFLAGS+=-std=c11 -DMISSING_NANOSLEEP -DCLOCKID_T
53 | COMPAT+=compat/clock_nanosleep/clock_nanosleep.o
54 | endif
55 | endif
56 |
57 | ifeq ($(UNAME), OpenBSD)
58 | CFLAGS+= -DMISSING_NANOSLEEP
59 | COMPAT+= compat/clock_nanosleep/clock_nanosleep.o
60 | endif
61 |
62 | all: dump1090 view1090
63 |
64 | %.o: %.c *.h
65 | $(CC) $(CPPFLAGS) $(CFLAGS) $(EXTRACFLAGS) -c $< -o $@
66 |
67 | dump1090.o: CFLAGS += `pkg-config --cflags librtlsdr`
68 |
69 | dump1090: dump1090.o anet.o interactive.o mode_ac.o mode_s.o net_io.o crc.o demod_2000.o demod_2400.o demod_8000.o stats.o cpr.o icao_filter.o track.o util.o convert.o $(COMPAT)
70 | $(CC) -o $@ $^ $(LIBS) $(LDFLAGS)
71 |
72 | view1090: view1090.o anet.o interactive.o mode_ac.o mode_s.o net_io.o crc.o stats.o cpr.o icao_filter.o track.o util.o $(COMPAT)
73 | $(CC) -o $@ $^ $(LIBS) $(LDFLAGS)
74 |
75 | faup1090: faup1090.o anet.o mode_ac.o mode_s.o net_io.o crc.o stats.o cpr.o icao_filter.o track.o util.o $(COMPAT)
76 | $(CC) -o $@ $^ $(LIBS) $(LDFLAGS)
77 |
78 | clean:
79 | rm -f *.o compat/clock_gettime/*.o compat/clock_nanosleep/*.o dump1090 view1090 faup1090 cprtests crctests
80 |
81 | test: cprtests
82 | ./cprtests
83 |
84 | cprtests: cpr.o cprtests.o
85 | $(CC) $(CPPFLAGS) $(CFLAGS) $(EXTRACFLAGS) -o $@ $^ -lm
86 |
87 | crctests: crc.c crc.h
88 | $(CC) $(CPPFLAGS) $(CFLAGS) $(EXTRACFLAGS) -DCRCDEBUG -o $@ $<
89 |
--------------------------------------------------------------------------------
/tools/update-aircraft-database.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # This script checks for a new version of BasicAircraftLookup from
4 | # the VRS website and, if one is available, downloads it and updates
5 | # the dump1090 webmap json files.
6 |
7 | set -e
8 |
9 | # defaults that can be overridden:
10 | VRS_URL=${VRS_URL:-http://www.virtualradarserver.co.uk/Files/BasicAircraftLookup.sqb.gz}
11 | CACHEDIR=${CACHEDIR:-/var/cache/dump1090-mutability}
12 | JSONDIR=${JSONDIR:-$CACHEDIR/db}
13 | SQBDIR=${SQBDIR:-$CACHEDIR/sqb}
14 | LOGFILE=${LOGFILE:-/var/log/dump1090-mutability.log}
15 | UPDATESCRIPT=${UPDATESCRIPT:-/usr/share/dump1090-mutability/vrs-basicaircraft-to-json.py}
16 |
17 | if [ -f /etc/default/dump1090-mutability ]
18 | then
19 | . /etc/default/dump1090-mutability
20 | fi
21 |
22 | ETAGFILE=$SQBDIR/BasicAircraftLookup.sqb.etag
23 | SQBFILE=$SQBDIR/BasicAircraftLookup.sqb
24 |
25 | CHECKMODIFIED=true
26 | LOGTOFILE=false
27 | while [ "$#" -gt 0 ]
28 | do
29 | case "$1" in
30 | -f|--force) CHECKMODIFIED=false ;;
31 | -l|--log-to-file) LOGTOFILE=true ;;
32 | *) echo "unrecognized option: $1" >&2; exit 1 ;;
33 | esac
34 | shift
35 | done
36 |
37 | if $LOGTOFILE; then exec >>$LOGFILE 2>&1; fi
38 |
39 | log() {
40 | date "+%c $*" >&2
41 | }
42 |
43 | mkdir -p $CACHEDIR $JSONDIR $SQBDIR
44 | rm -f $ETAGFILE.new $SQBFILE.new
45 |
46 | log "Checking VRS server for an updated database.."
47 |
48 | # get ETag
49 | curl --silent --fail --include --head $VRS_URL | grep ETag >$ETAGFILE.new
50 |
51 | # check for existing file
52 | RETRIEVE=true
53 | ARGS=""
54 | if $CHECKMODIFIED && [ -f $SQBFILE ]
55 | then
56 | if [ -s $ETAGFILE -a -s $ETAGFILE.new ]
57 | then
58 | if cmp -s $ETAGFILE $ETAGFILE.new
59 | then
60 | log "Database not modified."
61 | RETRIEVE=false
62 | else
63 | log "Database modified, will retrieve a new copy."
64 | fi
65 | else
66 | # do an if-modified-since
67 | log "Database possibly modified, will try to retrieve a new copy."
68 | ARGS="-z $SQBFILE"
69 | fi
70 | fi
71 |
72 | if $RETRIEVE
73 | then
74 | log "Retrieving database.."
75 | curl --silent --fail --remote-time --retry 2 $ARGS -o $SQBFILE.new $VRS_URL
76 | mv $ETAGFILE.new $ETAGFILE
77 | if [ -f $SQBFILE.new ]
78 | then
79 | log "Decompressing database.."
80 | zcat $SQBFILE.new >$SQBFILE
81 | touch -r $SQBFILE.new $SQBFILE
82 | rm $SQBFILE.new
83 | else
84 | log "Database not modified."
85 | fi
86 | fi
87 |
88 | UPDATE=true
89 | if $CHECKMODIFIED
90 | then
91 | if test -f $JSONDIR/last_update; then
92 | if ! test $SQBFILE -nt $JSONDIR/last_update; then UPDATE=false; fi
93 | fi
94 | fi
95 |
96 | if $UPDATE
97 | then
98 | log "Updating JSON files from database.."
99 | mkdir -p $JSONDIR/new
100 | $UPDATESCRIPT $SQBFILE $JSONDIR/new
101 | rm -f $JSONDIR/*.json
102 | mv $JSONDIR/new/*.json $JSONDIR/
103 | touch -r $SQBFILE $JSONDIR/last_update
104 | rmdir $JSONDIR/new
105 | log "Done."
106 | else
107 | log "No update to JSON files needed."
108 | fi
109 |
110 |
--------------------------------------------------------------------------------
/util.c:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // util.c: misc utilities
4 | //
5 | // Copyright (c) 2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | // This file incorporates work covered by the following copyright and
21 | // permission notice:
22 | //
23 | // Copyright (C) 2012 by Salvatore Sanfilippo
24 | //
25 | // All rights reserved.
26 | //
27 | // Redistribution and use in source and binary forms, with or without
28 | // modification, are permitted provided that the following conditions are
29 | // met:
30 | //
31 | // * Redistributions of source code must retain the above copyright
32 | // notice, this list of conditions and the following disclaimer.
33 | //
34 | // * Redistributions in binary form must reproduce the above copyright
35 | // notice, this list of conditions and the following disclaimer in the
36 | // documentation and/or other materials provided with the distribution.
37 | //
38 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
39 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
40 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
41 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
42 | // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
44 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
45 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
46 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
47 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
48 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49 |
50 | #include "util.h"
51 |
52 | #include
53 | #include
54 |
55 | uint64_t mstime(void)
56 | {
57 | struct timeval tv;
58 | uint64_t mst;
59 |
60 | gettimeofday(&tv, NULL);
61 | mst = ((uint64_t)tv.tv_sec)*1000;
62 | mst += tv.tv_usec/1000;
63 | return mst;
64 | }
65 |
66 | int64_t receiveclock_ns_elapsed(uint64_t t1, uint64_t t2)
67 | {
68 | return (t2 - t1) * 1000U / 12U;
69 | }
70 |
71 | void normalize_timespec(struct timespec *ts)
72 | {
73 | if (ts->tv_nsec > 1000000000) {
74 | ts->tv_sec += ts->tv_nsec / 1000000000;
75 | ts->tv_nsec = ts->tv_nsec % 1000000000;
76 | } else if (ts->tv_nsec < 0) {
77 | long adjust = ts->tv_nsec / 1000000000 + 1;
78 | ts->tv_sec -= adjust;
79 | ts->tv_nsec = (ts->tv_nsec + 1000000000 * adjust) % 1000000000;
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/public_html/db/1.json:
--------------------------------------------------------------------------------
1 | {"02A28":{"r":"21512","t":"BER2"},"17AED":{"r":"RA-97005","t":"SU95"},"40AF1":{"t":"H25B"},"40AF2":{"t":"H25B"},"40AF3":{"t":"H25B"},"40AF4":{"t":"H25B"},"40AF6":{"t":"H25B"},"40AF8":{"t":"H25B"},"42328":{"t":"F900"},"42329":{"t":"F900"},"4232B":{"t":"F900"},"42330":{"t":"F900"},"42B11":{"t":"AN12"},"42C2D":{"t":"AN12"},"42FA3":{"t":"AN12"},"432BC":{"t":"AN12"},"4661E":{"t":"AN26"},"4A55A":{"t":"YK42"},"4A567":{"t":"YK42"},"4A571":{"t":"YK42"},"4A580":{"t":"YK42"},"4A591":{"t":"YK42"},"4A593":{"t":"YK42"},"4A594":{"t":"YK42"},"4A5AB":{"t":"YK42"},"4A5AC":{"t":"YK42"},"4A5B2":{"t":"YK42"},"4A5B8":{"t":"YK42"},"4A5B9":{"t":"YK42"},"4A5C0":{"t":"YK42"},"4A5C9":{"t":"YK42"},"4A5CA":{"t":"YK42"},"4A5CE":{"t":"YK42"},"4F105":{"t":"A148"},"4F106":{"t":"A148"},"4F107":{"t":"A148"},"4F108":{"t":"A148"},"4F109":{"t":"A148"},"4F10A":{"t":"A148"},"4F10D":{"t":"A148"},"4F10E":{"t":"A148"},"4FA0A":{"t":"T204"},"4FA11":{"t":"T204"},"4FA12":{"t":"T204"},"4FA13":{"t":"T204"},"4FA14":{"t":"T204"},"4FA15":{"t":"T204"},"4FA18":{"t":"T204"},"4FA20":{"t":"T204"},"4FA26":{"t":"T204"},"4FA27":{"t":"T204"},"4FA28":{"t":"T204"},"4FA2B":{"t":"T204"},"4FA2C":{"t":"T204"},"4FA2D":{"t":"T204"},"4FA2E":{"t":"T204"},"4FA2F":{"t":"T204"},"4FA31":{"t":"T204"},"4FA32":{"t":"T204"},"4FA39":{"t":"T204"},"4FA3A":{"t":"T204"},"4FBF8":{"t":"T204"},"4FBFD":{"t":"T204"},"4FC03":{"t":"T204"},"4FC04":{"t":"T204"},"4FC05":{"t":"T204"},"4FC06":{"t":"T204"},"4FC08":{"t":"T204"},"4FC09":{"t":"T204"},"4FC0A":{"t":"T204"},"4FC25":{"t":"T204"},"50690":{"t":"CL60"},"50691":{"t":"CL30"},"50692":{"t":"CRJ2"},"50693":{"t":"CRJ2"},"50694":{"t":"CRJ2"},"50695":{"t":"CL30"},"50696":{"t":"CL60"},"50697":{"t":"CL30"},"51D28":{"t":"B737"},"51D2C":{"t":"B737"},"51D30":{"t":"B752"},"51D31":{"t":"B752"},"51D32":{"t":"B752"},"51D33":{"t":"B752"},"51D34":{"t":"B752"},"51D36":{"t":"B752"},"51D37":{"t":"B752"},"51D38":{"t":"B752"},"51D39":{"t":"B752"},"51D3A":{"t":"B752"},"51D41":{"t":"A319"},"51D42":{"t":"A319"},"52A4A":{"t":"IL76"},"52A4B":{"t":"IL76"},"52A52":{"t":"IL76"},"52A62":{"t":"IL76"},"52A8D":{"t":"IL76"},"52AD7":{"t":"IL76"},"52ADF":{"t":"IL76"},"52BEF":{"t":"IL76"},"52C28":{"t":"IL76"},"52C29":{"t":"IL76"},"52C96":{"t":"IL76"},"52C97":{"t":"IL76"},"52C98":{"t":"IL76"},"533AD":{"t":"IL76"},"5405E":{"t":"A124"},"54077":{"t":"A124"},"54078":{"t":"A124"},"5407A":{"t":"A124"},"5407B":{"t":"A124"},"5407C":{"t":"A124"},"5407D":{"t":"A124"},"5407E":{"t":"A124"},"5407F":{"t":"A124"},"54094":{"t":"A124"},"5409A":{"t":"A124"},"5409B":{"t":"A124"},"5409D":{"t":"A124"},"5409E":{"t":"A124"},"5409F":{"t":"A124"},"540A0":{"t":"A124"},"540A1":{"t":"A124"},"54C15":{"t":"T154"},"54C18":{"t":"T154"},"54C1A":{"t":"T154"},"54C31":{"t":"T154"},"54CA3":{"t":"T154"},"54E7D":{"t":"T154"},"54E96":{"t":"T154"},"54E9B":{"t":"T154"},"54EAB":{"t":"T154"},"54EB6":{"t":"T154"},"54EE0":{"t":"T154"},"54F16":{"t":"T154"},"54F53":{"t":"T154"},"551C2":{"t":"IL62"},"551C4":{"t":"IL62"},"5521F":{"t":"IL62"},"55221":{"t":"IL62"},"5522A":{"t":"IL62"},"5522C":{"t":"IL62"},"55BA9":{"t":"SU95"},"55BAA":{"t":"SU95"},"55BAB":{"t":"SU95"},"55BAC":{"t":"SU95"},"55BAD":{"t":"SU95"},"55BAE":{"t":"SU95"},"55BAF":{"t":"SU95"},"55BB0":{"t":"SU95"},"55BB1":{"t":"SU95"},"55BB2":{"t":"SU95"},"57705":{"t":"IL96"},"57707":{"t":"IL96"},"57708":{"t":"IL96"},"5770A":{"t":"IL96"},"5770B":{"t":"IL96"},"5770F":{"t":"IL96"},"57710":{"t":"IL96"},"57712":{"t":"IL96"},"57714":{"r":"CU-T1254","t":"IL96"},"57765":{"t":"IL96"},"57766":{"t":"IL96"},"57767":{"t":"IL96"}}
--------------------------------------------------------------------------------
/public_html/ol3/ol3-layerswitcher.css:
--------------------------------------------------------------------------------
1 | .layer-switcher.shown.ol-control {
2 | background-color: transparent;
3 | }
4 |
5 | .layer-switcher.shown.ol-control:hover {
6 | background-color: transparent;
7 | }
8 |
9 | .layer-switcher {
10 | position: absolute;
11 | top: 3.5em;
12 | right: 0.5em;
13 | text-align: left;
14 | }
15 |
16 | .layer-switcher.shown {
17 | bottom: 3em;
18 | }
19 |
20 | .layer-switcher .panel {
21 | padding: 0 1em 0 0;
22 | margin: 0;
23 | border: 4px solid #eee;
24 | border-radius: 4px;
25 | background-color: white;
26 | display: none;
27 | max-height: 100%;
28 | overflow-y: auto;
29 | }
30 |
31 | .layer-switcher.shown .panel {
32 | display: block;
33 | }
34 |
35 | .layer-switcher button {
36 | float: right;
37 | width: 38px;
38 | height: 38px;
39 | background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACE1BMVEX///8A//8AgICA//8AVVVAQID///8rVVVJtttgv98nTmJ2xNgkW1ttyNsmWWZmzNZYxM4gWGgeU2JmzNNr0N1Rwc0eU2VXxdEhV2JqytQeVmMhVmNoydUfVGUgVGQfVGQfVmVqy9hqy9dWw9AfVWRpydVry9YhVmMgVGNUw9BrytchVWRexdGw294gVWQgVmUhVWPd4N6HoaZsy9cfVmQgVGRrytZsy9cgVWQgVWMgVWRsy9YfVWNsy9YgVWVty9YgVWVry9UgVWRsy9Zsy9UfVWRsy9YgVWVty9YgVWRty9Vsy9aM09sgVWRTws/AzM0gVWRtzNYgVWRuy9Zsy9cgVWRGcHxty9bb5ORbxdEgVWRty9bn6OZTws9mydRfxtLX3Nva5eRix9NFcXxOd4JPeINQeIMiVmVUws9Vws9Vw9BXw9BYxNBaxNBbxNBcxdJexdElWWgmWmhjyNRlx9IqXGtoipNpytVqytVryNNrytZsjZUuX210k5t1y9R2zNR3y9V4lp57zth9zdaAnKOGoaeK0NiNpquV09mesrag1tuitbmj1tuj19uktrqr2d2svcCu2d2xwMO63N+7x8nA3uDC3uDFz9DK4eHL4eLN4eIyYnDX5OM5Z3Tb397e4uDf4uHf5uXi5ePi5+Xj5+Xk5+Xm5+Xm6OY6aHXQ19fT4+NfhI1Ww89gx9Nhx9Nsy9ZWw9Dpj2abAAAAWnRSTlMAAQICAwQEBgcIDQ0ODhQZGiAiIyYpKywvNTs+QklPUlNUWWJjaGt0dnd+hIWFh4mNjZCSm6CpsbW2t7nDzNDT1dje5efr7PHy9PT29/j4+Pn5+vr8/f39/f6DPtKwAAABTklEQVR4Xr3QVWPbMBSAUTVFZmZmhhSXMjNvkhwqMzMzMzPDeD+xASvObKePPa+ffHVl8PlsnE0+qPpBuQjVJjno6pZpSKXYl7/bZyFaQxhf98hHDKEppwdWIW1frFnrxSOWHFfWesSEWC6R/P4zOFrix3TzDFLlXRTR8c0fEEJ1/itpo7SVO9Jdr1DVxZ0USyjZsEY5vZfiiAC0UoTGOrm9PZLuRl8X+Dq1HQtoFbJZbv61i+Poblh/97TC7n0neCcK0ETNUrz1/xPHf+DNAW9Ac6t8O8WH3Vp98f5lCaYKAOFZMLyHL4Y0fe319idMNgMMp+zWVSybUed/+/h7I4wRAG1W6XDy4XmjR9HnzvDRZXUAYDFOhC1S/Hh+fIXxen+eO+AKqbs+wAo30zDTDvDxKoJN88sjUzDFAvBzEUGFsnADoIvAJzoh2BZ8sner+Ke/vwECuQAAAABJRU5ErkJggg==') /*logo.png*/;
40 | background-repeat: no-repeat;
41 | background-position: 2px;
42 | background-color: white;
43 | border: none;
44 | }
45 |
46 | .layer-switcher.shown button {
47 | display: none;
48 | }
49 |
50 | .layer-switcher button:focus, .layer-switcher button:hover {
51 | background-color: white;
52 | }
53 |
54 | .layer-switcher ul {
55 | padding-left: 1em;
56 | list-style: none;
57 | }
58 |
59 | .layer-switcher li.group {
60 | padding-top: 5px;
61 | }
62 |
63 | .layer-switcher li.group > label {
64 | font-weight: bold;
65 | }
66 |
67 | .layer-switcher li.layer {
68 | display: table;
69 | }
70 |
71 | .layer-switcher li.layer label, .layer-switcher li.layer input {
72 | display: table-cell;
73 | vertical-align: sub;
74 | }
75 |
76 | .layer-switcher input {
77 | margin: 4px;
78 | }
79 |
80 | .layer-switcher.touch ::-webkit-scrollbar {
81 | width: 4px;
82 | }
83 |
84 | .layer-switcher.touch ::-webkit-scrollbar-track {
85 | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
86 | border-radius: 10px;
87 | }
88 |
89 | .layer-switcher.touch ::-webkit-scrollbar-thumb {
90 | border-radius: 10px;
91 | -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5);
92 | }
93 |
--------------------------------------------------------------------------------
/public_html/ol3/ol-3.17.1.css:
--------------------------------------------------------------------------------
1 | .ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}
--------------------------------------------------------------------------------
/anet.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // anet.h: Basic TCP socket stuff made a bit less boring
4 | //
5 | // Copyright (c) 2016 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | // This file incorporates work covered by the following copyright and
21 | // permission notice:
22 | //
23 |
24 | /* anet.c -- Basic TCP socket stuff made a bit less boring
25 | *
26 | * Copyright (c) 2006-2012, Salvatore Sanfilippo
27 | * All rights reserved.
28 | *
29 | * Redistribution and use in source and binary forms, with or without
30 | * modification, are permitted provided that the following conditions are met:
31 | *
32 | * * Redistributions of source code must retain the above copyright notice,
33 | * this list of conditions and the following disclaimer.
34 | * * Redistributions in binary form must reproduce the above copyright
35 | * notice, this list of conditions and the following disclaimer in the
36 | * documentation and/or other materials provided with the distribution.
37 | * * Neither the name of Redis nor the names of its contributors may be used
38 | * to endorse or promote products derived from this software without
39 | * specific prior written permission.
40 | *
41 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
42 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
45 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
46 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
47 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
48 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
49 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
51 | * POSSIBILITY OF SUCH DAMAGE.
52 | */
53 |
54 | #ifndef ANET_H
55 | #define ANET_H
56 |
57 | #define ANET_OK 0
58 | #define ANET_ERR -1
59 | #define ANET_ERR_LEN 256
60 |
61 | #if defined(__sun)
62 | #define AF_LOCAL AF_UNIX
63 | #endif
64 |
65 | int anetTcpConnect(char *err, char *addr, char *service);
66 | int anetTcpNonBlockConnect(char *err, char *addr, char *service);
67 | int anetRead(int fd, char *buf, int count);
68 | int anetTcpServer(char *err, char *service, char *bindaddr, int *fds, int nfds);
69 | int anetTcpAccept(char *err, int serversock);
70 | int anetWrite(int fd, char *buf, int count);
71 | int anetNonBlock(char *err, int fd);
72 | int anetTcpNoDelay(char *err, int fd);
73 | int anetTcpKeepAlive(char *err, int fd);
74 | int anetSetSendBuffer(char *err, int fd, int buffsize);
75 |
76 | #endif
77 |
--------------------------------------------------------------------------------
/tools/vrs-basicaircraft-to-json.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python2
2 |
3 | #
4 | # Converts a Virtual Radar Server BasicAircraftLookup.sqb database
5 | # into a bunch of json files suitable for use by the webmap
6 | #
7 |
8 | import sqlite3, json, sys
9 | from contextlib import closing
10 |
11 | def extract(dbfile, todir, blocklimit, debug):
12 | ac_count = 0
13 | block_count = 0
14 |
15 | blocks = {}
16 | for i in xrange(16):
17 | blocks['%01X' % i] = {}
18 |
19 | print >>sys.stderr, 'Reading', dbfile
20 | with closing(sqlite3.connect(dbfile)) as db:
21 | with closing(db.execute('SELECT a.Icao, a.Registration, m.Icao FROM Aircraft a, Model m WHERE a.ModelID = m.ModelID')) as c:
22 | for icao24, reg, icaotype in c:
23 | bkey = icao24[0:1].upper()
24 | dkey = icao24[1:].upper()
25 | blocks[bkey][dkey] = {}
26 | if reg: blocks[bkey][dkey]['r'] = reg
27 | if icaotype: blocks[bkey][dkey]['t'] = icaotype
28 | ac_count += 1
29 | print >>sys.stderr, 'Read', ac_count, 'aircraft'
30 |
31 | print >>sys.stderr, 'Writing blocks:',
32 |
33 | queue = sorted(blocks.keys())
34 | while queue:
35 | bkey = queue[0]
36 | del queue[0]
37 |
38 | blockdata = blocks[bkey]
39 | if len(blockdata) > blocklimit:
40 | if debug: print >>sys.stderr, 'Splitting block', bkey, 'with', len(blockdata), 'entries..',
41 |
42 | # split all children out
43 | children = {}
44 | for dkey in blockdata.keys():
45 | new_bkey = bkey + dkey[0]
46 | new_dkey = dkey[1:]
47 |
48 | if new_bkey not in children: children[new_bkey] = {}
49 | children[new_bkey][new_dkey] = blockdata[dkey]
50 |
51 | # look for small children we can retain in the parent, to
52 | # reduce the total number of files needed. This reduces the
53 | # number of blocks needed from 150 to 61
54 | blockdata = {}
55 | children = sorted(children.items(), key=lambda x: len(x[1]))
56 | retained = 1
57 |
58 | while len(children[0][1]) + retained < blocklimit:
59 | # move this child back to the parent
60 | c_bkey, c_entries = children[0]
61 | for c_dkey, entry in c_entries.items():
62 | blockdata[c_bkey[-1] + c_dkey] = entry
63 | retained += 1
64 | del children[0]
65 |
66 | if debug: print >>sys.stderr, len(children), 'children created,', len(blockdata), 'entries retained in parent'
67 | children = sorted(children, key=lambda x: x[0])
68 | blockdata['children'] = [x[0] for x in children]
69 | blocks[bkey] = blockdata
70 | for c_bkey, c_entries in children:
71 | blocks[c_bkey] = c_entries
72 | queue.append(c_bkey)
73 |
74 | path = todir + '/' + bkey + '.json'
75 | if debug: print >>sys.stderr, 'Writing', len(blockdata), 'entries to', path
76 | else: print >>sys.stderr, bkey,
77 | block_count += 1
78 | with closing(open(path, 'w')) as f:
79 | json.dump(obj=blockdata, fp=f, check_circular=False, separators=(',',':'), sort_keys=True)
80 |
81 | print >>sys.stderr, 'done.'
82 | print >>sys.stderr, 'Wrote', block_count, 'blocks'
83 |
84 | if __name__ == '__main__':
85 | if len(sys.argv) < 3:
86 | print >>sys.stderr, 'Syntax: %s ' % sys.argv[0]
87 | sys.exit(1)
88 | else:
89 | extract(sys.argv[1], sys.argv[2], 1000, False)
90 | sys.exit(0)
91 |
--------------------------------------------------------------------------------
/net_io.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // net_io.h: network handling.
4 | //
5 | // Copyright (c) 2014,2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #ifndef DUMP1090_NETIO_H
21 | #define DUMP1090_NETIO_H
22 |
23 | // Describes a networking service (group of connections)
24 |
25 | struct aircraft;
26 | struct modesMessage;
27 | struct client;
28 | struct net_service;
29 | typedef int (*read_fn)(struct client *, char *);
30 | typedef void (*heartbeat_fn)(struct net_service *);
31 |
32 | // Describes one network service (a group of clients with common behaviour)
33 | struct net_service {
34 | struct net_service* next;
35 | const char *descr;
36 | int listener_count; // number of listeners
37 | int *listener_fds; // listening FDs
38 |
39 | int connections; // number of active clients
40 |
41 | struct net_writer *writer; // shared writer state
42 |
43 | const char *read_sep; // hander details for input data
44 | read_fn read_handler;
45 | };
46 |
47 | // Structure used to describe a networking client
48 | struct client {
49 | struct client* next; // Pointer to next client
50 | int fd; // File descriptor
51 | struct net_service *service; // Service this client is part of
52 | int buflen; // Amount of data on buffer
53 | char buf[MODES_CLIENT_BUF_SIZE+1]; // Read buffer
54 | };
55 |
56 | // Common writer state for all output sockets of one type
57 | struct net_writer {
58 | struct net_service *service; // owning service
59 | void *data; // shared write buffer, sized MODES_OUT_BUF_SIZE
60 | int dataUsed; // number of bytes of write buffer currently used
61 | uint64_t lastWrite; // time of last write to clients
62 | heartbeat_fn send_heartbeat; // function that queues a heartbeat if needed
63 | };
64 |
65 | struct net_service *serviceInit(const char *descr, struct net_writer *writer, heartbeat_fn hb_handler, const char *sep, read_fn read_handler);
66 | struct client *serviceConnect(struct net_service *service, char *addr, int port);
67 | void serviceListen(struct net_service *service, char *bind_addr, char *bind_ports);
68 | struct client *createSocketClient(struct net_service *service, int fd);
69 | struct client *createGenericClient(struct net_service *service, int fd);
70 |
71 | // view1090 / faup1090 want to create these themselves:
72 | struct net_service *makeBeastInputService(void);
73 | struct net_service *makeFatsvOutputService(void);
74 |
75 | void modesInitNet(void);
76 | void modesQueueOutput(struct modesMessage *mm, struct aircraft *a);
77 | void modesNetPeriodicWork(void);
78 |
79 | // TODO: move these somewhere else
80 | char *generateAircraftJson(const char *url_path, int *len);
81 | char *generateStatsJson(const char *url_path, int *len);
82 | char *generateReceiverJson(const char *url_path, int *len);
83 | char *generateHistoryJson(const char *url_path, int *len);
84 | void writeJsonToFile(const char *file, char * (*generator) (const char *,int*));
85 |
86 | #endif
87 |
--------------------------------------------------------------------------------
/debian/config-template:
--------------------------------------------------------------------------------
1 | ## TEMPLATE FILE - This is used to create /etc/default/dump1090-mutability ##
2 | ## The first three lines will be discarded ##
3 |
4 | # dump1090-mutability configuration file
5 | # This is a POSIX shell fragment.
6 | # You can edit this file directly, or use
7 | # "dpkg-reconfigure dump1090-mutability"
8 |
9 | # Set to "yes" to start dump1090 on boot.
10 | START_DUMP1090=
11 |
12 | # User to run dump1090 as.
13 | DUMP1090_USER=
14 |
15 | # Logfile to log to
16 | LOGFILE=
17 |
18 | #
19 | # Receiver options
20 | #
21 |
22 | # RTLSDR device index or serial number to use
23 | # If set to "none", dump1090 will be started in --net-only mode
24 | DEVICE=
25 |
26 | # RTLSDR gain in dB.
27 | # If set to "max" (the default) the maximum supported gain is used.
28 | # If set to "agc", the tuner AGC is used to set the gain.
29 | GAIN=
30 |
31 | # RTLSDR frequency correction in PPM
32 | PPM=
33 |
34 | # If yes, enable sampling at 2.4MHz. Otherwise, 2.0MHz is used.
35 | OVERSAMPLE=
36 |
37 | # If yes, enables phase-enhancement of messages
38 | PHASE_ENHANCE=
39 |
40 | #
41 | # Decoding options
42 | #
43 |
44 | # If yes, fixes messages with correctable CRC errors.
45 | FIX_CRC=
46 |
47 | # If set, supplies a reference location for local position decoding.
48 | LAT=
49 | LON=
50 |
51 | # If set, provides the absolute maximum receiver range used to
52 | # filter bad position reports, and to determine when local position
53 | # decoding is safe to use. Specify this in nautical miles (NM).
54 | MAX_RANGE=
55 |
56 | #
57 | # Networking options
58 | #
59 |
60 | # Port to listen on for HTTP connections. 0 disables.
61 | # HTTP defaults to being disabled unless you specify something here. I
62 | # that you do not enable this, and instead serve the contents of
63 | # /usr/share/dump1090-mutability and JSON_DIR (below) using a proper
64 | # webserver. See /etc/lighttpd/conf-available/90-dump1090.conf
65 | # for an example configuration ("sudo lighty-enable-mod dump1090" to enable)
66 | HTTP_PORT=
67 |
68 | # Port to listen on for raw (AVR-format) input connections. 0 disables.
69 | RAW_INPUT_PORT=
70 |
71 | # Port to listen on for raw (AVR-format) output connections. 0 disables.
72 | RAW_OUTPUT_PORT=
73 |
74 | # Port to listen on for SBS-format output connections. 0 disables.
75 | SBS_OUTPUT_PORT=
76 |
77 | # Port to listen on for Beast-format input connections. 0 disables.
78 | BEAST_INPUT_PORT=
79 |
80 | # Port to listen on for Beast-format output connections. 0 disables.
81 | BEAST_OUTPUT_PORT=
82 |
83 | # TCP heartbeat interval in seconds. 0 disables.
84 | NET_HEARTBEAT=
85 |
86 | # Minimum output buffer size per write, in bytes.
87 | NET_OUTPUT_SIZE=
88 |
89 | # Maximum buffering time before writing, in seconds.
90 | NET_OUTPUT_INTERVAL=
91 |
92 | # TCP buffer size, in bytes
93 | NET_BUFFER=
94 |
95 | # Bind ports on a particular address. If unset, binds to all interfaces.
96 | # This defaults to binding to localhost. If you need to allow remote
97 | # connections, change this.
98 | NET_BIND_ADDRESS=
99 |
100 | #
101 | # Misc options
102 | #
103 |
104 | # Interval (in seconds) between logging stats to the logfile. 0 disables.
105 | STATS_INTERVAL=
106 |
107 | # Path to write json state to (for use with an external webserver). Blank disables.
108 | JSON_DIR=
109 |
110 | # Interval between writing json state (in seconds). 0 disables.
111 | JSON_INTERVAL=
112 |
113 | # Accuracy of receiver location to write to json state, one of "exact" / "approximate" / "none"
114 | JSON_LOCATION_ACCURACY=
115 |
116 | # Set to yes to log all decoded messages
117 | # This can get large fast!
118 | LOG_DECODED_MESSAGES=
119 |
120 | # Additional options that are passed to the Daemon.
121 | EXTRA_ARGS=
122 |
--------------------------------------------------------------------------------
/mode_ac.c:
--------------------------------------------------------------------------------
1 | // dump1090, a Mode S messages decoder for RTLSDR devices.
2 | //
3 | // Copyright (C) 2012 by Salvatore Sanfilippo
4 | //
5 | // All rights reserved.
6 | //
7 | // Redistribution and use in source and binary forms, with or without
8 | // modification, are permitted provided that the following conditions are
9 | // met:
10 | //
11 | // * Redistributions of source code must retain the above copyright
12 | // notice, this list of conditions and the following disclaimer.
13 | //
14 | // * Redistributions in binary form must reproduce the above copyright
15 | // notice, this list of conditions and the following disclaimer in the
16 | // documentation and/or other materials provided with the distribution.
17 | //
18 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 | // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 | //
30 |
31 | #include "dump1090.h"
32 | //
33 | //=========================================================================
34 | //
35 | // Input format is : 00:A4:A2:A1:00:B4:B2:B1:00:C4:C2:C1:00:D4:D2:D1
36 | //
37 | int ModeAToModeC(unsigned int ModeA)
38 | {
39 | unsigned int FiveHundreds = 0;
40 | unsigned int OneHundreds = 0;
41 |
42 | if ( (ModeA & 0xFFFF8889) // check zero bits are zero, D1 set is illegal
43 | || ((ModeA & 0x000000F0) == 0) ) // C1,,C4 cannot be Zero
44 | {return -9999;}
45 |
46 | if (ModeA & 0x0010) {OneHundreds ^= 0x007;} // C1
47 | if (ModeA & 0x0020) {OneHundreds ^= 0x003;} // C2
48 | if (ModeA & 0x0040) {OneHundreds ^= 0x001;} // C4
49 |
50 | // Remove 7s from OneHundreds (Make 7->5, snd 5->7).
51 | if ((OneHundreds & 5) == 5) {OneHundreds ^= 2;}
52 |
53 | // Check for invalid codes, only 1 to 5 are valid
54 | if (OneHundreds > 5)
55 | {return -9999;}
56 |
57 | //if (ModeA & 0x0001) {FiveHundreds ^= 0x1FF;} // D1 never used for altitude
58 | if (ModeA & 0x0002) {FiveHundreds ^= 0x0FF;} // D2
59 | if (ModeA & 0x0004) {FiveHundreds ^= 0x07F;} // D4
60 |
61 | if (ModeA & 0x1000) {FiveHundreds ^= 0x03F;} // A1
62 | if (ModeA & 0x2000) {FiveHundreds ^= 0x01F;} // A2
63 | if (ModeA & 0x4000) {FiveHundreds ^= 0x00F;} // A4
64 |
65 | if (ModeA & 0x0100) {FiveHundreds ^= 0x007;} // B1
66 | if (ModeA & 0x0200) {FiveHundreds ^= 0x003;} // B2
67 | if (ModeA & 0x0400) {FiveHundreds ^= 0x001;} // B4
68 |
69 | // Correct order of OneHundreds.
70 | if (FiveHundreds & 1) {OneHundreds = 6 - OneHundreds;}
71 |
72 | return ((FiveHundreds * 5) + OneHundreds - 13);
73 | }
74 | //
75 | //=========================================================================
76 | //
77 | void decodeModeAMessage(struct modesMessage *mm, int ModeA)
78 | {
79 | mm->msgtype = 32; // Valid Mode S DF's are DF-00 to DF-31.
80 | // so use 32 to indicate Mode A/C
81 |
82 | mm->msgbits = 16; // Fudge up a Mode S style data stream
83 | mm->msg[0] = (ModeA >> 8);
84 | mm->msg[1] = (ModeA);
85 |
86 | // Fudge an address based on Mode A (remove the Ident bit)
87 | mm->addr = (ModeA & 0x0000FF7F) | MODES_NON_ICAO_ADDRESS;
88 |
89 | // Set the Identity field to ModeA
90 | mm->modeA = ModeA & 0x7777;
91 | mm->bFlags |= MODES_ACFLAGS_SQUAWK_VALID;
92 |
93 | // Flag ident in flight status
94 | mm->fs = ModeA & 0x0080;
95 |
96 | // Not much else we can tell from a Mode A/C reply.
97 | // Just fudge up a few bits to keep other code happy
98 | mm->correctedbits = 0;
99 | }
100 | //
101 | // ===================== Mode A/C detection and decoding ===================
102 | //
103 |
--------------------------------------------------------------------------------
/public_html/db/400F.json:
--------------------------------------------------------------------------------
1 | {"00":{"r":"G-EZBF","t":"A319"},"01":{"r":"G-EZBG","t":"A319"},"02":{"r":"G-EZBH","t":"A319"},"03":{"r":"G-JOAL","t":"BE20"},"06":{"r":"G-CCVP","t":"BE58"},"08":{"r":"G-GSYJ","t":"DA42"},"0A":{"r":"G-NTWK","t":"AS55"},"0B":{"r":"G-VRED","t":"A346"},"10":{"r":"G-CLIF","t":"C42"},"11":{"r":"G-SARM","t":"C42"},"12":{"r":"G-TBEA","t":"C25A"},"14":{"r":"G-ARJU","t":"PA23"},"15":{"r":"G-DIAM","t":"DA40"},"18":{"r":"G-RASA","t":"DA42"},"1C":{"r":"G-ZUMO","t":"PC12"},"1F":{"r":"G-YBAA","t":"C172"},"20":{"r":"G-CEAU","t":"R44"},"21":{"r":"G-HDEW","t":"P32R"},"22":{"r":"G-MAJW","t":"JS41"},"25":{"r":"G-MAJX","t":"JS41"},"26":{"r":"G-MAJZ","t":"JS41"},"28":{"r":"G-MPSA","t":"BK17"},"29":{"r":"G-MPSB","t":"BK17"},"2A":{"r":"G-MPSC","t":"BK17"},"2B":{"r":"G-CDZT","t":"BE20"},"2C":{"r":"G-YEOM","t":"PA31"},"30":{"r":"G-SPYS","t":"R44"},"31":{"r":"G-TCXA","t":"A332"},"32":{"r":"G-SAIG","t":"R44"},"34":{"r":"G-HTRL","t":"PA34"},"36":{"r":"G-EEBB","t":"S76"},"3A":{"r":"G-NETB","t":"SR22"},"3C":{"r":"G-CBZX","t":"MCR1"},"3D":{"r":"G-FSEU","t":"BE20"},"3E":{"r":"G-ISSW","t":"EC55"},"3F":{"r":"G-ISSV","t":"EC55"},"40":{"r":"G-ISSU","t":"EC55"},"41":{"r":"G-MAMD","t":"BE20"},"42":{"r":"G-PDGK","t":"AS65"},"43":{"r":"G-FBEB","t":"E190"},"44":{"r":"G-JIBO","t":"JS31"},"46":{"r":"G-MAJY","t":"JS41"},"47":{"r":"G-VUEM","t":"C501"},"48":{"r":"G-RVMB","t":"RV9"},"4A":{"r":"G-PLAL","t":"EC35"},"4B":{"r":"G-BIMU","t":"S61"},"4C":{"r":"G-LSAE","t":"B752"},"4D":{"r":"G-BYTB","t":"TRIN"},"4E":{"r":"G-TAAB","t":"SR22"},"52":{"r":"G-CDXK","t":"DA42"},"53":{"r":"G-OWAR","t":"P28A"},"61":{"r":"G-GSSO","t":"GLF5"},"62":{"r":"G-BURT","t":"P28A"},"63":{"r":"G-VWEB","t":"A346"},"65":{"r":"G-BSPK","t":"C195"},"67":{"r":"G-DOLY","t":"C303"},"68":{"r":"G-MOOR","t":"TOBA"},"6A":{"r":"G-CCEJ","t":"EV97"},"6B":{"r":"G-RVCL","t":"RV6"},"6D":{"r":"G-CBMP","t":"C82R"},"6F":{"r":"G-BPGU","t":"P28A"},"70":{"r":"G-GUYS","t":"PA34"},"76":{"r":"G-XELA","t":"R44"},"77":{"r":"G-EEZR","t":"R44"},"78":{"r":"G-LOVB","t":"JS31"},"7B":{"r":"G-BEVG","t":"PA34"},"7F":{"r":"G-CDYK","t":"RJ85"},"82":{"r":"G-OCCY","t":"DA42"},"83":{"r":"G-OCCZ","t":"DA42"},"86":{"r":"G-WOFM","t":"A109"},"8C":{"r":"G-DAKM","t":"DA40"},"8D":{"r":"G-VEZE","t":"VEZE"},"8E":{"r":"G-AEDU","t":"DH90"},"91":{"r":"G-MEET","t":"LJ45"},"96":{"r":"G-CGFD","t":"CL60"},"99":{"r":"G-DBCJ","t":"A319"},"9A":{"r":"G-DBCK","t":"A319"},"9D":{"r":"G-GTJM","t":"EC20"},"A4":{"r":"G-WJCJ","t":"EC55"},"A5":{"r":"G-BHDX","t":"C172"},"A6":{"r":"G-INDC","t":"C303"},"A7":{"r":"G-KALS","t":"CL30"},"A8":{"r":"G-OLDK","t":"LJ45"},"A9":{"r":"G-SVSB","t":"C680"},"AA":{"r":"G-PKRG","t":"C560"},"AE":{"r":"G-AXZP","t":"PA23"},"AF":{"r":"G-CEDG","t":"R44"},"B1":{"r":"G-SAMJ","t":"P68"},"B5":{"r":"G-LLMW","t":"DA42"},"B6":{"r":"G-JKMH","t":"DA42"},"B7":{"r":"G-PETS","t":"DA42"},"B8":{"r":"G-OCCD","t":"DA40"},"B9":{"r":"G-OCCE","t":"DA40"},"BA":{"r":"G-JECP","t":"DH8D"},"BB":{"r":"G-BMKD","t":"BE9L"},"BC":{"r":"G-VVTV","t":"DA42"},"BD":{"r":"G-OCCF","t":"DA40"},"BE":{"r":"G-OCCG","t":"DA40"},"C1":{"r":"G-GFEA","t":"C172"},"C2":{"r":"G-CEFG","t":"B763"},"C3":{"r":"G-JVBP","t":"EV97"},"C4":{"r":"G-AZAB","t":"PA30"},"C5":{"r":"G-BHBG","t":"P32R"},"C7":{"r":"G-OUNI","t":"SR20"},"C8":{"r":"G-TAAC","t":"SR20"},"CB":{"r":"G-PURL","t":"P32R"},"CE":{"r":"G-HARK","t":"CL60"},"CF":{"r":"G-SFCJ","t":"C525"},"D2":{"r":"G-BMDK","t":"PA34"},"D3":{"r":"G-LEVO","t":"R44"},"D5":{"r":"G-CECX","t":"R44"},"D6":{"r":"G-GENI","t":"R44"},"D9":{"r":"G-JJAB","t":"JAB4"},"DA":{"r":"G-EZBI","t":"A319"},"DB":{"r":"G-EZBJ","t":"A319"},"DC":{"r":"G-EZBK","t":"A319"},"DD":{"r":"G-EZBL","t":"A319"},"DE":{"r":"G-EZBM","t":"A319"},"DF":{"r":"G-EZBN","t":"A319"},"E0":{"r":"G-EZBO","t":"A319"},"E1":{"r":"G-EZBP","t":"A319"},"E2":{"r":"G-EZBR","t":"A319"},"E3":{"r":"G-EZBT","t":"A319"},"E5":{"r":"G-ILLG","t":"R44"},"E6":{"r":"G-BRME","t":"P28A"},"E7":{"r":"G-EDCS","t":"BE40"},"E8":{"r":"G-ULES","t":"AS50"},"E9":{"r":"G-RJXN","t":"E145"},"EA":{"r":"G-RJXO","t":"E145"},"EB":{"r":"G-BUUR","t":"ATP"},"ED":{"r":"G-OMRH","t":"C550"},"EE":{"r":"G-SARV","t":"RV4"},"EF":{"r":"G-AIST","t":"SPIT"},"F0":{"r":"G-OCCH","t":"DA40"},"F1":{"r":"G-OCCK","t":"DA40"},"F2":{"r":"G-FDZA","t":"B738"},"F3":{"r":"G-FDZB","t":"B738"},"F4":{"r":"G-FDZD","t":"B738"},"F5":{"r":"G-OCCL","t":"DA40"},"F6":{"r":"G-OCCM","t":"DA40"},"F7":{"r":"G-OCCN","t":"DA40"},"F8":{"r":"G-TRUE","t":"H500"},"FD":{"r":"G-BHIB","t":"C182"},"FE":{"r":"G-FBEC","t":"E190"}}
--------------------------------------------------------------------------------
/public_html/formatter.js:
--------------------------------------------------------------------------------
1 | // -*- mode: javascript; indent-tabs-mode: t; c-basic-offset: 8 -*-
2 | "use strict";
3 |
4 | var NBSP='\u00a0';
5 | var DEGREES='\u00b0'
6 | var UP_TRIANGLE='\u25b2'; // U+25B2 BLACK UP-POINTING TRIANGLE
7 | var DOWN_TRIANGLE='\u25bc'; // U+25BC BLACK DOWN-POINTING TRIANGLE
8 |
9 | var TrackDirections = ["North","Northeast","East","Southeast","South","Southwest","West","Northwest"];
10 |
11 | // formatting helpers
12 |
13 | // track in degrees (0..359)
14 | function format_track_brief(track) {
15 | if (track === null){
16 | return "";
17 | }
18 |
19 | return Math.round(track);
20 | }
21 |
22 | // track in degrees (0..359)
23 | function format_track_long(track) {
24 | if (track === null){
25 | return "n/a";
26 | }
27 |
28 | var trackDir = Math.floor((360 + track % 360 + 22.5) / 45) % 8;
29 | return Math.round(track) + DEGREES + NBSP + "(" + TrackDirections[trackDir] + ")";
30 | }
31 |
32 | // altitude (input: alt in feet)
33 | // brief will always show either Metric or Imperial
34 | function format_altitude_brief(alt, vr) {
35 | var alt_text;
36 |
37 | if (alt === null){
38 | return "";
39 | } else if (alt === "ground"){
40 | return "ground";
41 | }
42 |
43 | if (Metric) {
44 | alt_text = Math.round(alt * 0.3048) + NBSP; // Altitude to meters
45 | } else {
46 | alt_text = Math.round(alt) + NBSP;
47 | }
48 |
49 | // Vertical Rate Triangle
50 | if (vr > 128){
51 | return alt_text + UP_TRIANGLE;
52 | } else if (vr < -128){
53 | return alt_text + DOWN_TRIANGLE;
54 | } else {
55 | return alt_text + NBSP;
56 | }
57 | }
58 |
59 | // alt in ft
60 | function _alt_to_unit(alt, m) {
61 | if (m)
62 | return Math.round(alt * 0.3048) + NBSP + "m";
63 | else
64 | return Math.round(alt) + NBSP + "ft";
65 | }
66 |
67 | function format_altitude_long(alt, vr) {
68 | var alt_text = "";
69 |
70 | if (alt === null) {
71 | return "n/a";
72 | } else if (alt === "ground") {
73 | return "on ground";
74 | }
75 |
76 | // Primary unit
77 | alt_text = _alt_to_unit(alt, Metric);
78 |
79 | // Secondary unit
80 | if (ShowOtherUnits) {
81 | alt_text = alt_text + ' | ' + _alt_to_unit(alt, !Metric);
82 | }
83 |
84 | if (vr > 128) {
85 | return UP_TRIANGLE + NBSP + alt_text;
86 | } else if (vr < -128) {
87 | return DOWN_TRIANGLE + NBSP + alt_text;
88 | } else {
89 | return alt_text;
90 | }
91 | }
92 |
93 | //input: speed in kts
94 | function format_speed_brief(speed) {
95 | if (speed === null) {
96 | return "";
97 | }
98 |
99 | if (Metric) {
100 | return Math.round(speed * 1.852); // knots to kilometers per hour
101 | } else {
102 | return Math.round(speed); // knots
103 | }
104 | }
105 |
106 | // speed in kts
107 |
108 | function _speed_to_unit(speed, m) {
109 | if (m)
110 | return Math.round(speed * 1.852) + NBSP + "km/h";
111 | else
112 | return Math.round(speed) + NBSP + "kt";
113 | }
114 |
115 | function format_speed_long(speed) {
116 | if (speed === null) {
117 | return "n/a";
118 | }
119 |
120 | // Primary unit
121 | var speed_text = _speed_to_unit(speed, Metric);
122 |
123 | // Secondary unit
124 | if (ShowOtherUnits) {
125 | speed_text = speed_text + ' | ' + _speed_to_unit(speed, !Metric);
126 | }
127 |
128 | return speed_text;
129 | }
130 |
131 | // dist in meters
132 | function format_distance_brief(dist) {
133 | if (dist === null) {
134 | return "";
135 | }
136 |
137 | if (Metric) {
138 | return (dist/1000).toFixed(1); // meters to kilometers
139 | } else {
140 | return (dist/1852).toFixed(1); // meters to nautocal miles
141 | }
142 | }
143 |
144 | // dist in metres
145 |
146 | function _dist_to_unit(dist, m) {
147 | if (m)
148 | return (dist/1000).toFixed(1) + NBSP + "km";
149 | else
150 | return (dist/1852).toFixed(1) + NBSP + "NM";
151 | }
152 |
153 | function format_distance_long(dist) {
154 | if (dist === null) {
155 | return "n/a";
156 | }
157 |
158 | // Primary unit
159 | var dist_text = _dist_to_unit(dist, Metric);
160 |
161 | // Secondary unit
162 | if (ShowOtherUnits) {
163 | dist_text = dist_text + ' | ' + _dist_to_unit(dist, !Metric);
164 | }
165 |
166 | return dist_text;
167 | }
168 |
169 | // p is a [lon, lat] coordinate
170 | function format_latlng(p) {
171 | return p[1].toFixed(3) + DEGREES + "," + NBSP + p[0].toFixed(3) + DEGREES;
172 | }
173 |
--------------------------------------------------------------------------------
/public_html/dbloader.js:
--------------------------------------------------------------------------------
1 | // -*- mode: javascript; indent-tabs-mode: nil; c-basic-offset: 8 -*-
2 |
3 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
4 | //
5 | // dbloader.js: load aircraft metadata from static json files
6 | //
7 | // Copyright (c) 2014,2015 Oliver Jowett
8 | //
9 | // This file is free software: you may copy, redistribute and/or modify it
10 | // under the terms of the GNU General Public License as published by the
11 | // Free Software Foundation, either version 2 of the License, or (at your
12 | // option) any later version.
13 | //
14 | // This file is distributed in the hope that it will be useful, but
15 | // WITHOUT ANY WARRANTY; without even the implied warranty of
16 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 | // General Public License for more details.
18 | //
19 | // You should have received a copy of the GNU General Public License
20 | // along with this program. If not, see .
21 |
22 | "use strict";
23 |
24 | var _aircraft_cache = {};
25 |
26 | function getAircraftData(icao) {
27 | var defer;
28 |
29 | icao = icao.toUpperCase();
30 |
31 | if (icao in _aircraft_cache) {
32 | defer = _aircraft_cache[icao];
33 | } else {
34 | // load from blocks:
35 | defer = _aircraft_cache[icao] = $.Deferred();
36 | request_from_db(icao, 1, defer);
37 | }
38 |
39 | return defer;
40 | }
41 |
42 | function request_from_db(icao, level, defer) {
43 | var bkey = icao.substring(0, level);
44 | var dkey = icao.substring(level);
45 | var req = db_ajax(bkey);
46 |
47 | req.done(function(data) {
48 | var subkey;
49 |
50 | if (dkey in data) {
51 | defer.resolve(data[dkey]);
52 | return;
53 | }
54 |
55 | if ("children" in data) {
56 | subkey = bkey + dkey.substring(0,1);
57 | if (data.children.indexOf(subkey) != -1) {
58 | request_from_db(icao, level+1, defer);
59 | return;
60 | }
61 | }
62 | defer.reject();
63 | });
64 |
65 | req.fail(function(jqXHR,textStatus,errorThrown) {
66 | defer.reject();
67 | });
68 | }
69 |
70 | var _request_count = 0;
71 | var _request_queue = [];
72 | var _request_cache = {};
73 |
74 | var MAX_REQUESTS = 2;
75 |
76 | function db_ajax(bkey) {
77 | var defer;
78 |
79 | if (bkey in _request_cache) {
80 | return _request_cache[bkey];
81 | }
82 |
83 | if (_request_count < MAX_REQUESTS) {
84 | // just do ajax directly
85 | ++_request_count;
86 | defer = _request_cache[bkey] = $.ajax({ url: 'db/' + bkey + '.json',
87 | cache: true,
88 | timeout: 5000,
89 | dataType : 'json' });
90 | defer.always(db_ajax_request_complete);
91 | } else {
92 | // put it in the queue
93 | defer = _request_cache[bkey] = $.Deferred();
94 | defer.bkey = bkey;
95 | _request_queue.push(defer);
96 | }
97 |
98 | return defer;
99 | }
100 |
101 | function db_ajax_request_complete() {
102 | var req;
103 | var ajaxreq;
104 |
105 | if (_request_queue.length == 0) {
106 | --_request_count;
107 | } else {
108 | req = _request_queue.shift();
109 | ajaxreq = $.ajax({ url: 'db/' + req.bkey + '.json',
110 | cache: true,
111 | timeout: 5000,
112 | dataType : 'json' });
113 | ajaxreq.done(function(data) { req.resolve(data); });
114 | ajaxreq.fail(function(jqxhr, status, error) { req.reject(jqxhr, status, error); });
115 | ajaxreq.always(db_ajax_request_complete);
116 | }
117 | }
118 |
--------------------------------------------------------------------------------
/public_html/db/400C.json:
--------------------------------------------------------------------------------
1 | {"00":{"r":"G-NIVA","t":"EC55"},"01":{"r":"G-CBTN","t":"PA31"},"02":{"r":"G-OAPE","t":"C303"},"05":{"r":"G-OWAL","t":"PA34"},"06":{"r":"G-JETJ","t":"C550"},"07":{"r":"G-ZARI","t":"AA5"},"08":{"r":"G-DMAH","t":"TRIN"},"09":{"r":"G-THOG","t":"B733"},"0A":{"r":"G-THOH","t":"B733"},"0C":{"r":"G-MACA","t":"R22"},"10":{"r":"G-RVRW","t":"PA23"},"11":{"r":"G-MAXI","t":"PA34"},"12":{"r":"G-KWIN","t":"F2TH"},"13":{"r":"G-KWLI","t":"C421"},"16":{"r":"G-TREC","t":"C421"},"18":{"r":"G-OTUI","t":"TRIN"},"19":{"r":"G-DMCS","t":"P28A"},"1A":{"r":"G-BYDF","t":"S76"},"1E":{"r":"G-SVEA","t":"P28A"},"1F":{"r":"G-BGHJ","t":"C172"},"20":{"r":"G-IJYS","t":"JS31"},"21":{"r":"G-BHKJ","t":"C421"},"22":{"r":"G-OSCC","t":"PA32"},"24":{"r":"G-POPA","t":"BE36"},"25":{"r":"G-BVYF","t":"PA31"},"27":{"r":"G-BMMC","t":"C310"},"29":{"r":"G-OBAL","t":"M20P"},"2A":{"r":"G-ATHR","t":"P28A"},"2B":{"r":"G-BTNT","t":"P28A"},"2C":{"r":"G-CBAL","t":"P28A"},"2D":{"r":"G-BNMB","t":"P28A"},"2E":{"r":"G-UAVA","t":"PA30"},"2F":{"r":"G-KVIP","t":"BE20"},"30":{"r":"G-FIFA","t":"C404"},"31":{"r":"G-DIPM","t":"P46T"},"32":{"r":"G-HWAA","t":"EC35"},"33":{"r":"G-BHLX","t":"AA5"},"35":{"r":"G-SAPM","t":"TRIN"},"37":{"r":"G-ATSR","t":"BE35"},"38":{"r":"G-BVES","t":"C340"},"3F":{"r":"G-RVRD","t":"PA23"},"41":{"r":"G-EZNM","t":"A319"},"42":{"r":"G-EJAR","t":"A319"},"43":{"r":"G-EZIA","t":"A319"},"44":{"r":"G-EZIB","t":"A319"},"45":{"r":"G-EZID","t":"A319"},"46":{"r":"G-EZIC","t":"A319"},"47":{"r":"G-EZIE","t":"A319"},"48":{"r":"G-EZIF","t":"A319"},"49":{"r":"G-EZIG","t":"A319"},"4A":{"r":"G-EZIH","t":"A319"},"4B":{"r":"G-EZII","t":"A319"},"4C":{"r":"G-EZIJ","t":"A319"},"4D":{"r":"G-EZIK","t":"A319"},"4E":{"r":"G-EZIL","t":"A319"},"4F":{"r":"G-EZIM","t":"A319"},"50":{"r":"G-EZIN","t":"A319"},"51":{"r":"G-AVNU","t":"P28A"},"52":{"r":"G-OOBL","t":"B763"},"53":{"r":"G-GTDL","t":"A320"},"54":{"r":"G-TCAC","t":"A320"},"55":{"r":"G-OSEA","t":"BN2P"},"56":{"r":"G-TERY","t":"P28A"},"57":{"r":"G-PZAZ","t":"PA31"},"58":{"r":"G-CDHV","t":"R44"},"5A":{"r":"G-STRL","t":"AS50"},"5C":{"r":"G-CDKA","t":"SB20"},"5D":{"r":"G-CDKB","t":"SB20"},"5E":{"r":"G-CGET","t":"B733"},"5F":{"r":"G-ECJM","t":"P28A"},"62":{"r":"G-BWNZ","t":"A109"},"63":{"r":"G-ISAY","t":"JS41"},"67":{"r":"G-NSUK","t":"PA34"},"6A":{"r":"G-GAFA","t":"PA34"},"6B":{"r":"G-BGRE","t":"BE20"},"6C":{"r":"G-VIPV","t":"PA31"},"70":{"r":"G-JECH","t":"DH8D"},"72":{"r":"G-BAVL","t":"PA27"},"73":{"r":"G-EFBP","t":"C172"},"75":{"r":"G-MRJK","t":"A320"},"76":{"r":"G-OZBK","t":"A320"},"79":{"r":"G-BTFT","t":"BE58"},"7A":{"r":"G-JETX","t":"B06"},"7D":{"r":"G-STRI","t":"B733"},"7F":{"r":"G-BOIC","t":"P28R"},"80":{"r":"G-ISHK","t":"C172"},"81":{"r":"G-BYBP","t":"C185"},"83":{"r":"G-BZIT","t":"BE58"},"85":{"r":"G-BOFC","t":"BE76"},"86":{"r":"G-UMMI","t":"PA31"},"89":{"r":"G-ORVR","t":"P68"},"8B":{"r":"G-HUBB","t":"P68"},"8F":{"r":"G-STRJ","t":"B733"},"90":{"r":"G-SCIP","t":"TRIN"},"91":{"r":"G-VALY","t":"TRIN"},"94":{"r":"G-GURN","t":"PA31"},"A2":{"r":"G-BTNC","t":"AS65"},"A4":{"r":"G-GBEN","t":"R44"},"A5":{"r":"G-WOWD","t":"DH8C"},"A6":{"r":"G-CCXJ","t":"C340"},"A9":{"r":"G-FIND","t":"F406"},"AA":{"r":"G-TURF","t":"F406"},"AC":{"r":"G-NOSE","t":"C402"},"AD":{"r":"G-MIND","t":"C404"},"AF":{"r":"G-SOUL","t":"C310"},"B0":{"r":"G-BODY","t":"C310"},"B2":{"r":"G-TWIN","t":"PA44"},"B4":{"r":"G-WLDN","t":"R44"},"B9":{"r":"G-LGNI","t":"SF34"},"BA":{"r":"G-BRNV","t":"P28A"},"BB":{"r":"G-JREE","t":"M7"},"BC":{"r":"G-DSID","t":"PA34"},"BD":{"r":"G-BJCW","t":"P32R"},"C0":{"r":"G-ILET","t":"R44"},"C3":{"r":"G-AZWY","t":"PA24"},"C5":{"r":"G-BMJO","t":"PA34"},"C6":{"r":"G-CIEL","t":"C560"},"C9":{"r":"G-REST","t":"BE35"},"CA":{"r":"G-BRDO","t":"C177"},"CB":{"r":"G-CDLT","t":"H25B"},"CC":{"r":"G-BJNZ","t":"PA27"},"CF":{"r":"G-EZIO","t":"A319"},"D0":{"r":"G-EZIP","t":"A319"},"D1":{"r":"G-EZIR","t":"A319"},"D2":{"r":"G-EZIS","t":"A319"},"D3":{"r":"G-EZIT","t":"A319"},"D4":{"r":"G-EZIU","t":"A319"},"D5":{"r":"G-EZIV","t":"A319"},"D6":{"r":"G-EZIW","t":"A319"},"D7":{"r":"G-EZIX","t":"A319"},"D8":{"r":"G-EZIY","t":"A319"},"D9":{"r":"G-OEWD","t":"PRM1"},"DA":{"r":"G-BYKP","t":"P28T"},"DB":{"r":"G-EMCA","t":"AC11"},"DC":{"r":"G-LARE","t":"PA30"},"DE":{"r":"G-HANG","t":"DA42"},"DF":{"r":"G-CDKR","t":"DA42"},"E1":{"r":"G-SLCT","t":"DA42"},"E2":{"r":"G-SELC","t":"DA42"},"E3":{"r":"G-RALA","t":"R44"},"E7":{"r":"G-BNYB","t":"P28A"},"E8":{"r":"G-MSPT","t":"EC35"},"EA":{"r":"G-REGE","t":"R44"},"EB":{"r":"G-EUXI","t":"A321"},"EE":{"r":"G-LGNJ","t":"SF34"},"EF":{"r":"G-LGNK","t":"SF34"},"F2":{"r":"G-CDDG","t":"P28A"},"F3":{"r":"G-RAGT","t":"PA32"},"F4":{"r":"G-JUPP","t":"P32T"},"F5":{"r":"G-AZGL","t":"RALL"},"F9":{"r":"G-JECI","t":"DH8D"},"FB":{"r":"G-GYMM","t":"P28A"},"FD":{"r":"G-UIST","t":"JS31"},"FE":{"r":"G-LNKS","t":"JS31"}}
--------------------------------------------------------------------------------
/public_html/db/4C.json:
--------------------------------------------------------------------------------
1 | {"0188":{"r":"YU-AMI","t":"IL76"},"01A3":{"r":"YU-AND","t":"B733"},"01A5":{"r":"YU-ANF","t":"B733"},"01A8":{"r":"YU-ANI","t":"B733"},"01A9":{"r":"YU-ANJ","t":"B733"},"01AA":{"r":"YU-ANK","t":"B733"},"01AB":{"r":"YU-ANL","t":"B733"},"01AF":{"r":"YU-ANP","t":"B732"},"01B5":{"r":"YU-ANV","t":"B733"},"01B6":{"r":"YU-ANW","t":"B733"},"01CD":{"r":"YU-AON","t":"B733"},"01D2":{"r":"YU-AOS","t":"B734"},"01D4":{"r":"YU-AOU","t":"B733"},"01D5":{"r":"YU-AOV","t":"B733"},"01E0":{"r":"YU-APA","t":"A319"},"01E1":{"r":"YU-APB","t":"A319"},"01E2":{"r":"YU-APC","t":"A319"},"01E3":{"r":"YU-APD","t":"A319"},"01E4":{"r":"YU-APE","t":"A319"},"01E5":{"r":"YU-APF","t":"A319"},"01E6":{"r":"YU-APG","t":"A320"},"01E7":{"r":"YU-APH","t":"A320"},"01E8":{"r":"YU-API","t":"A319"},"01E9":{"r":"YU-APJ","t":"A319"},"05A0":{"r":"YU-BNA","t":"FA50"},"0639":{"r":"YU-BRZ","t":"LJ31"},"0646":{"r":"YU-BSG","t":"C550"},"064C":{"r":"YU-BSM","t":"C550"},"0653":{"r":"YU-BST","t":"C525"},"0661":{"r":"YU-BTB","t":"C550"},"066C":{"r":"YU-BTM","t":"C650"},"066D":{"r":"YU-BTN","t":"C25B"},"0694":{"r":"YU-BUU","t":"C25A"},"072C":{"r":"YU-BZM","t":"C56X"},"0739":{"r":"YU-BZZ","t":"C550"},"1C93":{"r":"YU-HET","t":"GAZL"},"1C98":{"r":"YU-HEY","t":"GAZL"},"1D82":{"r":"YU-HMC","t":"GAZL"},"3274":{"r":"YU-MTU","t":"C525"},"498A":{"r":"YU-SMK","t":"C56X"},"49E0":{"r":"YU-SPA","t":"C56X"},"49E1":{"r":"YU-SPB","t":"C56X"},"49E2":{"r":"YU-SPC","t":"C56X"},"49EC":{"r":"YU-SPM","t":"C510"},"4AAB":{"r":"YU-SVL","t":"C56X"},"800A":{"r":"5B-DAW","t":"A320"},"800D":{"r":"5B-DBA","t":"A320"},"800E":{"r":"5B-DBB","t":"A320"},"800F":{"r":"5B-DBC","t":"A320"},"8012":{"r":"5B-DBD","t":"A320"},"801E":{"r":"5B-DBO","t":"A319"},"801F":{"r":"5B-DBP","t":"A319"},"8020":{"r":"5B-DBS","t":"A332"},"8021":{"r":"5B-DBT","t":"A332"},"8022":{"r":"5B-DBU","t":"B738"},"8023":{"r":"5B-DBV","t":"B738"},"8025":{"r":"5B-DBX","t":"B738"},"802D":{"r":"5B-DBZ","t":"B738"},"8031":{"r":"5B-CKO","t":"F2TH"},"8032":{"r":"5B-DBR","t":"B738"},"8037":{"r":"5B-DCF","t":"A319"},"803A":{"r":"5B-DCG","t":"A320"},"803B":{"r":"5B-DCH","t":"A320"},"803D":{"r":"5B-DCJ","t":"A320"},"803E":{"r":"5B-DCK","t":"A320"},"803F":{"r":"5B-DCL","t":"A320"},"8040":{"r":"5B-DCM","t":"A320"},"8046":{"r":"5B-DCN","t":"A319"},"804C":{"r":"5B-DCO","t":"A321"},"804D":{"r":"5B-DCP","t":"A321"},"C0D5":{"r":"TF-BBD","t":"B733"},"C0D9":{"r":"TF-BBE","t":"B733"},"C0DA":{"r":"TF-BBF","t":"B733"},"C0DB":{"r":"TF-BBG","t":"B733"},"C0DC":{"r":"TF-BBH","t":"B734"},"C0DD":{"r":"TF-TNM","t":"B734"},"C0DE":{"r":"TF-BBI","t":"B733"},"C0DF":{"r":"TF-BBJ","t":"B734"},"C1A2":{"r":"TF-ELF","t":"A306"},"C1AC":{"r":"TF-ELK","t":"A306"},"C1BC":{"r":"TF-NPA","t":"J328"},"C264":{"r":"TF-FID","t":"B752"},"C265":{"r":"TF-FIE","t":"B752"},"C266":{"r":"TF-CIB","t":"B752"},"C267":{"r":"TF-LLX","t":"B752"},"C268":{"r":"TF-FIC","t":"B752"},"C269":{"r":"TF-FIA","t":"B752"},"C26A":{"r":"TF-FIY","t":"B752"},"C26B":{"r":"TF-FIZ","t":"B752"},"C26C":{"r":"TF-FIK","t":"B752"},"C26D":{"r":"TF-IST","t":"B752"},"C26F":{"r":"TF-FIW","t":"B752"},"C270":{"r":"TF-ISF","t":"B752"},"C271":{"r":"TF-ISK","t":"B752"},"C272":{"r":"TF-ISD","t":"B752"},"C273":{"r":"TF-FIT","t":"B752"},"C274":{"r":"TF-FIS","t":"B752"},"C277":{"r":"TF-FIK","t":"B752"},"C29E":{"r":"TF-FII","t":"B752"},"C29F":{"r":"TF-FIH","t":"B752"},"C2A2":{"r":"TF-FIJ","t":"B752"},"C2A3":{"r":"TF-FIN","t":"B752"},"C2A5":{"r":"TF-FIR","t":"B752"},"C2A6":{"r":"TF-FIO","t":"B752"},"C2A7":{"r":"TF-FIP","t":"B752"},"C2AC":{"r":"TF-FIG","t":"B752"},"C2AD":{"r":"TF-FIV","t":"B752"},"C2AE":{"r":"TF-FIX","t":"B753"},"C2C4":{"r":"TF-FIB","t":"B763"},"C2C5":{"r":"TF-FIU","t":"B752"},"C2C9":{"r":"TF-MIK","t":"J328"},"C2CC":{"r":"TF-NPB","t":"J328"},"C334":{"r":"TF-JMO","t":"F50"},"C394":{"r":"TF-ATX","t":"B742"},"C3B4":{"r":"TF-ARJ","t":"B742"},"C3B7":{"r":"TF-ARM","t":"B742"},"C3BD":{"r":"TF-ARP","t":"B742"},"C3C8":{"r":"TF-AME","t":"B743"},"C3C9":{"r":"TF-AMI","t":"B744"},"C3CD":{"r":"TF-AMJ","t":"B743"},"C3D2":{"r":"TF-AMP","t":"B744"},"C3D6":{"r":"TF-AAA","t":"B742"},"C3D7":{"r":"TF-AAB","t":"B742"},"C3D8":{"r":"TF-AMS","t":"B744"},"C3D9":{"r":"TF-AMU","t":"B744"},"C3DA":{"r":"TF-AMT","t":"B744"},"C3DB":{"r":"TF-AMV","t":"B744"},"C3DC":{"r":"TF-AMX","t":"B744"},"C3DD":{"r":"TF-NAC","t":"B744"},"C3DE":{"r":"TF-NAD","t":"B744"},"C3E0":{"r":"TF-AMY","t":"B744"},"C3E1":{"r":"TF-AMZ","t":"B744"},"C3E2":{"r":"TF-AAC","t":"B744"},"C3E3":{"r":"TF-AAD","t":"B744"},"C3E4":{"r":"TF-AAE","t":"B744"},"C3E6":{"r":"TF-AMF","t":"B744"},"C3E8":{"r":"TF-AML","t":"B744"},"C468":{"r":"TF-SIF","t":"DH8C"},"C47B":{"r":"TF-JXG","t":"B737"},"C47D":{"r":"TF-JXI","t":"B738"},"C4B9":{"r":"TF-WOW","t":"A320"},"C4C6":{"r":"TF-MOM","t":"A321"},"C4C7":{"r":"TF-DAD","t":"A321"},"C4D3":{"r":"TF-BRO","t":"A320"},"C4D4":{"r":"TF-SIS","t":"A320"},"children":["4CA"]}
--------------------------------------------------------------------------------
/public_html/db/400A.json:
--------------------------------------------------------------------------------
1 | {"00":{"r":"G-EZJU","t":"B737"},"02":{"r":"G-OZBG","t":"A321"},"04":{"r":"G-CELX","t":"B733"},"05":{"r":"G-EZJW","t":"B737"},"06":{"r":"G-EZJV","t":"B737"},"07":{"r":"G-EZJX","t":"B737"},"08":{"r":"G-TCDV","t":"A321"},"09":{"r":"G-DHJZ","t":"A320"},"0A":{"r":"G-SUEW","t":"A320"},"0B":{"r":"G-KKAZ","t":"A320"},"0D":{"r":"G-VROC","t":"B744"},"0E":{"r":"G-EUUO","t":"A320"},"0F":{"r":"G-ZAPU","t":"B752"},"12":{"r":"G-CELY","t":"B733"},"13":{"r":"G-EZJY","t":"B737"},"14":{"r":"G-EZJZ","t":"B737"},"15":{"r":"G-EZKA","t":"B737"},"17":{"r":"G-BFIV","t":"C177"},"18":{"r":"G-SSXX","t":"EC35"},"19":{"r":"G-ORJA","t":"BE20"},"1C":{"r":"G-ONAV","t":"PA31"},"1F":{"r":"G-TALF","t":"PA24"},"25":{"r":"G-EUUP","t":"A320"},"26":{"r":"G-EUUR","t":"A320"},"27":{"r":"G-CDCX","t":"C750"},"28":{"r":"G-BWWW","t":"JS31"},"29":{"r":"G-CHAI","t":"CL60"},"2A":{"r":"G-JEDM","t":"DH8D"},"2B":{"r":"G-JEDN","t":"DH8D"},"2D":{"r":"G-TTOI","t":"A320"},"2E":{"r":"G-TTOJ","t":"A320"},"30":{"r":"G-TCDA","t":"A321"},"31":{"r":"G-YAKN","t":"YK52"},"32":{"r":"G-CELZ","t":"B733"},"33":{"r":"G-CELA","t":"B733"},"34":{"r":"G-CELB","t":"B733"},"35":{"r":"G-CELE","t":"B733"},"3A":{"r":"G-CTWW","t":"PA34"},"3B":{"r":"G-FILE","t":"PA34"},"3C":{"r":"G-EMAX","t":"PA31"},"3E":{"r":"G-VIPX","t":"PA31"},"40":{"r":"G-SGEC","t":"BE20"},"42":{"r":"G-GSSC","t":"B744"},"43":{"r":"G-JEDO","t":"DH8D"},"45":{"r":"G-HRYZ","t":"P28A"},"47":{"r":"G-VICM","t":"BE33"},"48":{"r":"G-CCGS","t":"D328"},"50":{"r":"G-EZKB","t":"B737"},"51":{"r":"G-EZKC","t":"B737"},"52":{"r":"G-EZKD","t":"B737"},"53":{"r":"G-EZKE","t":"B737"},"54":{"r":"G-EZKF","t":"B737"},"55":{"r":"G-EZKG","t":"B737"},"57":{"r":"G-EZNC","t":"A319"},"58":{"r":"G-WINA","t":"C560"},"5A":{"r":"G-ZXZX","t":"LJ45"},"5B":{"r":"G-DBCA","t":"A319"},"5E":{"r":"G-CELP","t":"B733"},"5F":{"r":"G-CELR","t":"B733"},"60":{"r":"G-OOBF","t":"B752"},"61":{"r":"G-ORTH"},"62":{"r":"G-BHTA","t":"P28A"},"63":{"r":"G-DAAT","t":"EC35"},"66":{"r":"G-MEDJ","t":"A321"},"67":{"r":"G-LIZZ","t":"PA23"},"68":{"r":"G-EZEA","t":"A319"},"69":{"r":"G-EZEB","t":"A319"},"6A":{"r":"G-EZEC","t":"A319"},"6B":{"r":"G-EZED","t":"A319"},"6C":{"r":"G-BCBG","t":"PA23"},"70":{"r":"G-TENG","t":"E300"},"71":{"r":"G-GRGA","t":"H25B"},"73":{"r":"G-VIPA","t":"C182"},"76":{"r":"G-CIFE","t":"BE20"},"77":{"r":"G-JEDP","t":"DH8D"},"78":{"r":"G-JEDR","t":"DH8D"},"79":{"r":"G-JEDT","t":"DH8D"},"7C":{"r":"G-DBCC","t":"A319"},"7D":{"r":"G-DBCB","t":"A319"},"7E":{"r":"G-OZBH","t":"A321"},"7F":{"r":"G-OZBI","t":"A321"},"80":{"r":"G-IBFW","t":"P28R"},"82":{"r":"G-ZAPR","t":"B462"},"83":{"r":"G-JPSX","t":"F900"},"85":{"r":"G-CIFW","t":"BE20"},"86":{"r":"G-OLIV","t":"BE20"},"87":{"r":"G-RAFO","t":"BE20"},"88":{"r":"G-RAFP","t":"BE20"},"89":{"r":"G-YPRS","t":"C550"},"8A":{"r":"G-OOBH","t":"B752"},"8B":{"r":"G-OBNA","t":"PA34"},"8C":{"r":"G-BMLS","t":"P28R"},"8D":{"r":"G-BAMV","t":"DR40"},"8E":{"r":"G-OOPX","t":"A320"},"8F":{"r":"G-VSSH","t":"A346"},"90":{"r":"G-VNAP","t":"A346"},"92":{"r":"G-OAAF","t":"ATP"},"98":{"r":"G-GAJB","t":"AA5"},"99":{"r":"G-STRF","t":"B737"},"9A":{"r":"G-STRH","t":"B737"},"9B":{"r":"G-CBFM","t":"TB21"},"9C":{"r":"G-BTII","t":"AA5"},"9D":{"r":"G-JANT","t":"P28A"},"9F":{"r":"G-EZEG","t":"A319"},"A2":{"r":"G-EZEJ","t":"A319"},"A3":{"r":"G-EZEK","t":"A319"},"A5":{"r":"G-PLAZ","t":"AC11"},"A7":{"r":"G-EZEF","t":"A319"},"B0":{"r":"G-GPMW","t":"P28T"},"B1":{"r":"G-SAMM","t":"C340"},"B2":{"r":"G-DIXY","t":"P28A"},"B3":{"r":"G-JACS","t":"P28A"},"B8":{"r":"G-RIGH","t":"P32R"},"BB":{"r":"G-IDAB","t":"C550"},"BC":{"r":"G-NESW","t":"PA34"},"BD":{"r":"G-JEDU","t":"DH8D"},"BE":{"r":"G-LVLV","t":"CL60"},"C1":{"r":"G-TWIZ","t":"AC11"},"C2":{"r":"G-BALN","t":"C310"},"C5":{"r":"G-OAJS"},"C9":{"r":"G-BFBU","t":"P68"},"CA":{"r":"G-UILT","t":"C303"},"CB":{"r":"G-AZID","t":"C150"},"CC":{"r":"G-ZLOJ","t":"BE36"},"D0":{"r":"G-CBTT","t":"P28A"},"D1":{"r":"G-LGNH","t":"SF34"},"D2":{"r":"G-JEDV","t":"DH8D"},"D4":{"r":"G-RVIX","t":"RV9"},"D6":{"r":"G-ATCX","t":"C182"},"D7":{"r":"G-SENX","t":"PA34"},"D8":{"r":"G-VONS","t":"P32R"},"DA":{"r":"G-OMJC","t":"PRM1"},"DD":{"r":"G-EZEN","t":"A319"},"DE":{"r":"G-EZEO","t":"A319"},"DF":{"r":"G-EZEP","t":"A319"},"E1":{"r":"G-EZET","t":"A319"},"E2":{"r":"G-EZEU","t":"A319"},"E3":{"r":"G-EZEV","t":"A319"},"E4":{"r":"G-EZEW","t":"A319"},"E7":{"r":"G-EZEZ","t":"A319"},"E9":{"r":"G-BNVE","t":"P28A"},"EA":{"r":"G-PECK","t":"PA32"},"EB":{"r":"G-DJJA","t":"P28A"},"ED":{"r":"G-OOBJ","t":"B752"},"EE":{"r":"G-OOBI","t":"B752"},"EF":{"r":"G-FAVS","t":"PA32"},"F0":{"r":"G-IKOS","t":"C550"},"F1":{"r":"G-JEMD","t":"ATP"},"F4":{"r":"G-DNOP","t":"PA46"},"F6":{"r":"G-DRFC"},"F7":{"r":"G-EZAM","t":"A319"},"F8":{"r":"G-EZDC","t":"A319"},"F9":{"r":"G-EZMH","t":"A319"},"FA":{"r":"G-EZSM","t":"A319"},"FB":{"r":"G-EUXC","t":"A321"},"FC":{"r":"G-EUXD","t":"A321"},"FD":{"r":"G-EUXE","t":"A321"},"FE":{"r":"G-EUXF","t":"A321"},"FF":{"r":"G-EUXG","t":"A321"}}
--------------------------------------------------------------------------------
/public_html/db/400D.json:
--------------------------------------------------------------------------------
1 | {"00":{"r":"G-CDLY","t":"SR20"},"01":{"r":"G-CTCE","t":"DA42"},"02":{"r":"G-CTCF","t":"DA42"},"03":{"r":"G-CTCG","t":"DA42"},"04":{"r":"G-JKMI","t":"DA42"},"07":{"r":"G-PVPC","t":"PC12"},"08":{"r":"G-COVB","t":"P28A"},"0B":{"r":"G-PZIZ","t":"PA31"},"0C":{"r":"G-BEJV","t":"PA34"},"0D":{"r":"G-BCVY","t":"PA34"},"0E":{"r":"G-OHLI","t":"R44"},"0F":{"r":"G-WALI","t":"R44"},"14":{"r":"G-GREY","t":"PA46"},"15":{"r":"G-BDUN","t":"PA34"},"16":{"r":"G-BHYG","t":"PA34"},"17":{"r":"G-BXRH","t":"C185"},"1A":{"r":"G-BPRJ","t":"AS55"},"1B":{"r":"G-BVLG","t":"AS55"},"1C":{"r":"G-NETR","t":"AS55"},"23":{"r":"G-CBBC","t":"BDOG"},"25":{"r":"G-BOCG","t":"PA34"},"27":{"r":"G-LSAB","t":"B752"},"29":{"r":"G-BLFI","t":"P28A"},"2D":{"r":"G-RATV","t":"P28T"},"2E":{"r":"G-OTVR","t":"PA34"},"30":{"r":"G-VWKD","t":"A346"},"36":{"r":"G-NMAK","t":"A319"},"37":{"r":"G-NFLA","t":"JS31"},"38":{"r":"G-MOOO","t":"LJ45"},"3A":{"r":"G-ATSZ","t":"PA30"},"3C":{"r":"G-OVIN","t":"AC11"},"3D":{"r":"G-SIGN"},"43":{"r":"G-LINE","t":"AS55"},"44":{"r":"G-BOPA","t":"P28A"},"45":{"r":"G-OOTT","t":"AS50"},"46":{"r":"G-MRMJ","t":"AS65"},"48":{"r":"G-CHEY","t":"PA31"},"4A":{"r":"G-CGRI","t":"A109"},"4B":{"r":"G-OOBM","t":"B763"},"4C":{"r":"G-IMAC","t":"CL60"},"4D":{"r":"G-BOUL","t":"PA34"},"4E":{"r":"G-BOWE","t":"PA34"},"4F":{"r":"G-BSRR","t":"C182"},"50":{"r":"G-TCEE","t":"H500"},"51":{"r":"G-BGPA","t":"C182"},"57":{"r":"G-VBLU","t":"A346"},"58":{"r":"G-VWIN","t":"A346"},"59":{"r":"G-SVPN","t":"P32R"},"5A":{"r":"G-DBCG","t":"A319"},"5B":{"r":"G-DBCH","t":"A319"},"5D":{"r":"G-LGKO","t":"CL60"},"5E":{"r":"G-PREI","t":"PRM1"},"60":{"r":"G-CSBD","t":"P28B"},"61":{"r":"G-OTVI","t":"R44"},"62":{"r":"G-JBIZ","t":"C550"},"63":{"r":"G-BTZN"},"64":{"r":"G-PCOP","t":"BE20"},"68":{"r":"G-VVBK","t":"PA34"},"69":{"r":"G-EZIZ","t":"A319"},"6A":{"r":"G-CDNK","t":"LJ45"},"6B":{"r":"G-GLTT","t":"PA31"},"6C":{"r":"G-WAGS","t":"R44"},"6D":{"r":"G-SHAF","t":"R44"},"6E":{"r":"G-EVEV","t":"R44"},"70":{"r":"G-OSPY","t":"SR20"},"72":{"r":"G-SEEK","t":"C210"},"74":{"r":"G-AWUZ","t":"C172"},"77":{"r":"G-FULM","t":"S76"},"78":{"r":"G-CHIP","t":"P28A"},"7B":{"r":"G-BOUM","t":"PA34"},"81":{"r":"G-OPSS","t":"SR20"},"84":{"r":"G-ELAM","t":"PA30"},"85":{"r":"G-ARRD","t":"DR10"},"86":{"r":"G-CCVM","t":"RV7"},"87":{"r":"G-TTIE","t":"A321"},"89":{"r":"G-MEDL","t":"A321"},"8A":{"r":"G-PEJM","t":"P28A"},"8B":{"r":"G-EZAA","t":"A319"},"8C":{"r":"G-EZAB","t":"A319"},"8D":{"r":"G-EZAC","t":"A319"},"8E":{"r":"G-EZAD","t":"A319"},"8F":{"r":"G-EZAE","t":"A319"},"90":{"r":"G-EZAF","t":"A319"},"91":{"r":"G-EZAG","t":"A319"},"92":{"r":"G-EZAH","t":"A319"},"93":{"r":"G-KEEF","t":"AC11"},"94":{"r":"G-NWAA","t":"EC35"},"97":{"r":"G-FPLE","t":"BE20"},"98":{"r":"G-SIRA","t":"E135"},"9A":{"r":"G-ROUS","t":"PA34"},"9B":{"r":"G-VONJ","t":"PRM1"},"9C":{"r":"G-HAFT","t":"DA42"},"9E":{"r":"G-ORZA","t":"DA42"},"9F":{"r":"G-DMND","t":"DA42"},"A0":{"r":"G-DBCI","t":"A319"},"A2":{"r":"G-NJIM","t":"P32R"},"A3":{"r":"G-ODHB","t":"R44"},"A4":{"r":"G-IFTF","t":"H25B"},"AB":{"r":"G-GDSG","t":"A109"},"AC":{"r":"G-DASA","t":"FA50"},"AD":{"r":"G-EZAI","t":"A319"},"AE":{"r":"G-EZAJ","t":"A319"},"AF":{"r":"G-EZAK","t":"A319"},"B0":{"r":"G-EZAL","t":"A319"},"B1":{"r":"G-EZAN","t":"A319"},"B2":{"r":"G-EZAO","t":"A319"},"B3":{"r":"G-EZAP","t":"A319"},"B4":{"r":"G-EZAS","t":"A319"},"B5":{"r":"G-ENHP","t":"EN48"},"B6":{"r":"G-PPLC","t":"C560"},"B8":{"r":"G-CEGR","t":"BE20"},"B9":{"r":"G-BFBR","t":"P28A"},"BA":{"r":"G-FJET","t":"C550"},"BB":{"r":"G-GOAC","t":"PA34"},"BD":{"r":"G-JANI","t":"R44"},"BE":{"r":"G-BLXA","t":"TRIN"},"C2":{"r":"G-SASC","t":"BE20"},"C3":{"r":"G-SASD","t":"BE20"},"C4":{"r":"G-RUES","t":"HR10"},"C5":{"r":"G-IINI","t":"RV9"},"C7":{"r":"G-OLFT","t":"AC11"},"C8":{"r":"G-CJAG","t":"PRM1"},"CA":{"r":"G-HDEF","t":"R44"},"CB":{"r":"G-WCCI","t":"E135"},"CE":{"r":"G-SHAR","t":"C182"},"CF":{"r":"G-CDSR","t":"LJ45"},"D0":{"r":"G-IJAG","t":"C182"},"D1":{"r":"G-SYLJ","t":"E135"},"D2":{"r":"G-MATX","t":"PC12"},"D3":{"r":"G-GRND","t":"A109"},"D4":{"r":"G-CTCD","t":"DA42"},"D5":{"r":"G-OPFR","t":"DA42"},"D8":{"r":"G-CDSF","t":"DA40"},"D9":{"r":"G-KAFT","t":"DA40"},"DA":{"r":"G-LAFT","t":"DA40"},"DB":{"r":"G-OOGA","t":"GA7"},"DC":{"r":"G-JECJ","t":"DH8D"},"DE":{"r":"G-LACI","t":"C172"},"DF":{"r":"G-CDTA"},"E0":{"r":"G-RJXM","t":"E145"},"E1":{"r":"G-TESI","t":"SIRA"},"E2":{"r":"G-JETO","t":"C550"},"E5":{"r":"G-HIJK","t":"C421"},"E6":{"r":"G-ISLB","t":"JS32"},"E7":{"r":"G-ISLC","t":"JS32"},"E8":{"r":"G-ISLD","t":"JS32"},"E9":{"r":"G-XXRS","t":"GLEX"},"EA":{"r":"G-PRKR","t":"CL60"},"EB":{"r":"G-OBSM","t":"R44"},"ED":{"r":"G-RULE","t":"R44"},"F0":{"r":"G-RMBM","t":"R44"},"F1":{"r":"G-GEMM","t":"SR20"},"F2":{"r":"G-IFTE","t":"H25B"},"F3":{"r":"G-JETA","t":"C550"},"F4":{"r":"G-VUEZ","t":"C550"},"F6":{"r":"G-JECL","t":"DH8D"},"F7":{"r":"G-JECK","t":"DH8D"},"F9":{"r":"G-VANA","t":"GA8"},"FA":{"r":"G-BXOZ","t":"P28A"},"FC":{"r":"G-EMAA","t":"EC35"},"FD":{"r":"G-CDVB","t":"A109"},"FF":{"r":"G-CDVE","t":"A109"}}
--------------------------------------------------------------------------------
/public_html/db/400E.json:
--------------------------------------------------------------------------------
1 | {"00":{"r":"G-JAFS","t":"P32R"},"01":{"r":"G-OTNA","t":"R44"},"02":{"r":"G-JKAY","t":"R44"},"03":{"r":"G-ECJI","t":"FA10"},"04":{"r":"G-BPKF","t":"G115"},"06":{"r":"G-MAJP","t":"JS41"},"07":{"r":"G-MAJT","t":"JS41"},"08":{"r":"G-EDCJ","t":"C525"},"09":{"r":"G-VFIT","t":"A346"},"0A":{"r":"G-WAIN","t":"C550"},"0B":{"r":"G-PGGY","t":"R44"},"0D":{"r":"G-CDPT","t":"B763"},"0F":{"r":"G-TIMC","t":"R44"},"12":{"r":"G-EZAT","t":"A319"},"13":{"r":"G-EZAU","t":"A319"},"14":{"r":"G-EZAV","t":"A319"},"15":{"r":"G-FRAD","t":"FA20"},"16":{"r":"G-CDTG","t":"DA42"},"17":{"r":"G-DSKY","t":"DA42"},"19":{"r":"G-CDTE","t":"SIRA"},"1B":{"r":"G-HILO","t":"AC11"},"1D":{"r":"G-DBLA","t":"B763"},"1E":{"r":"G-PJLO","t":"B763"},"1F":{"r":"G-OFFO","t":"E300"},"20":{"r":"G-ZXCL","t":"E300"},"21":{"r":"G-ZXEL","t":"E300"},"22":{"r":"G-ZEXL","t":"E300"},"24":{"r":"G-FBEA","t":"E190"},"25":{"r":"G-LGAR","t":"LJ60"},"29":{"r":"G-OLDW","t":"LJ45"},"2A":{"r":"G-BFZD","t":"C182"},"2C":{"r":"G-EGJA","t":"TRIN"},"2D":{"r":"G-TRAT","t":"PC12"},"2F":{"r":"G-BEAG","t":"PA34"},"30":{"r":"G-BGFT","t":"PA34"},"32":{"r":"G-BORW","t":"C172"},"33":{"r":"G-DAVD","t":"C172"},"34":{"r":"G-GGNG","t":"R44"},"37":{"r":"G-JECM","t":"DH8D"},"38":{"r":"G-JECN","t":"DH8D"},"39":{"r":"G-CELO","t":"B733"},"3A":{"r":"G-CDWK","t":"R44"},"43":{"r":"G-TUCK","t":"RV8"},"46":{"r":"G-SCOL","t":"GA8"},"48":{"r":"G-TSDS","t":"P32R"},"49":{"r":"G-CDZH","t":"B738"},"4A":{"r":"G-CDZI","t":"B738"},"4C":{"r":"G-ERFS","t":"P28A"},"4E":{"r":"G-LSAC","t":"B752"},"51":{"r":"G-MEDM","t":"A321"},"52":{"r":"G-EUNI","t":"BE20"},"55":{"r":"G-GBMR","t":"BE20"},"56":{"r":"G-GALX","t":"F900"},"59":{"r":"G-EZAW","t":"A319"},"5A":{"r":"G-EZAX","t":"A319"},"5B":{"r":"G-EZAY","t":"A319"},"5C":{"r":"G-EZAZ","t":"A319"},"5D":{"r":"G-PFFN","t":"BE20"},"5F":{"r":"G-CDJN","t":"GYRO"},"61":{"r":"G-BSXS","t":"P28A"},"62":{"r":"G-JPOT","t":"P32R"},"63":{"r":"G-CDWY","t":"A109"},"66":{"r":"G-SAMP","t":"A109"},"6B":{"r":"G-MRRR","t":"H500"},"6C":{"r":"G-PBRL","t":"R22"},"6E":{"r":"G-XLLL","t":"AS50"},"73":{"r":"G-BOMS","t":"C172"},"74":{"r":"G-VFIZ","t":"A346"},"75":{"r":"G-VYOU","t":"A346"},"77":{"r":"G-ZAPX","t":"B752"},"7A":{"r":"G-CMBS","t":"EXPL"},"7D":{"r":"G-BPUM","t":"C182"},"7E":{"r":"G-OJAZ","t":"R44"},"7F":{"r":"G-JRED","t":"R44"},"80":{"r":"G-IBMS","t":"R44"},"85":{"r":"G-DJET","t":"DA42"},"86":{"r":"G-ORDH","t":"AS55"},"8A":{"r":"G-ASIT","t":"C180"},"8C":{"r":"G-JECO","t":"DH8D"},"8F":{"r":"G-BYWL","t":"G115"},"90":{"r":"G-BYWM","t":"G115"},"91":{"r":"G-BYWN","t":"G115"},"92":{"r":"G-BYWO","t":"G115"},"93":{"r":"G-BYWP","t":"G115"},"94":{"r":"G-BYWR","t":"G115"},"95":{"r":"G-BYWS","t":"G115"},"96":{"r":"G-BYWT","t":"G115"},"97":{"r":"G-BYWU","t":"G115"},"98":{"r":"G-BYWV","t":"G115"},"9B":{"r":"G-BYWX","t":"G115"},"9C":{"r":"G-BYWY","t":"G115"},"9D":{"r":"G-BYWZ","t":"G115"},"9E":{"r":"G-BYXA","t":"G115"},"9F":{"r":"G-BYXB","t":"G115"},"A0":{"r":"G-BYXC","t":"G115"},"A1":{"r":"G-BYXD","t":"G115"},"A2":{"r":"G-BYXE","t":"G115"},"A3":{"r":"G-BYXF","t":"G115"},"A4":{"r":"G-BYXG","t":"G115"},"A5":{"r":"G-BYXH","t":"G115"},"A7":{"r":"G-BYXJ","t":"G115"},"A9":{"r":"G-BYXL","t":"G115"},"AB":{"r":"G-BYXN","t":"G115"},"AC":{"r":"G-BYXO","t":"G115"},"AD":{"r":"G-BYXP","t":"G115"},"AF":{"r":"G-BYXS","t":"G115"},"B0":{"r":"G-BYXT","t":"G115"},"B1":{"r":"G-BYXX","t":"G115"},"B2":{"r":"G-BYXY","t":"G115"},"B3":{"r":"G-BYXZ","t":"G115"},"B4":{"r":"G-BYYA","t":"G115"},"B5":{"r":"G-BYYB","t":"G115"},"B7":{"r":"G-BYWB","t":"G115"},"B9":{"r":"G-BYWD","t":"G115"},"BA":{"r":"G-BYWE","t":"G115"},"BB":{"r":"G-BYWF","t":"G115"},"BC":{"r":"G-BYWG","t":"G115"},"BD":{"r":"G-BYWH","t":"G115"},"BE":{"r":"G-BYWI","t":"G115"},"BF":{"r":"G-BYWJ","t":"G115"},"C0":{"r":"G-HURI","t":"HURI"},"C2":{"r":"G-MAJU","t":"JS41"},"C3":{"r":"G-MAJV","t":"JS41"},"C4":{"r":"G-RAMS","t":"P32R"},"C5":{"r":"G-BYUA","t":"G115"},"C6":{"r":"G-BYUB","t":"G115"},"C7":{"r":"G-BYUC","t":"G115"},"C8":{"r":"G-BYUD","t":"G115"},"C9":{"r":"G-BYUE","t":"G115"},"CA":{"r":"G-BYUF","t":"G115"},"CB":{"r":"G-BYUG","t":"G115"},"CC":{"r":"G-BYUH","t":"G115"},"CD":{"r":"G-BYUI","t":"G115"},"CE":{"r":"G-BYUJ","t":"G115"},"CF":{"r":"G-BYUK","t":"G115"},"D1":{"r":"G-BYUM","t":"G115"},"D2":{"r":"G-BYUN","t":"G115"},"D3":{"r":"G-BYUO","t":"G115"},"D4":{"r":"G-BYUP","t":"G115"},"D5":{"r":"G-BYUR","t":"G115"},"D6":{"r":"G-BYUS","t":"G115"},"D8":{"r":"G-BYUU","t":"G115"},"DA":{"r":"G-BYUW","t":"G115"},"DB":{"r":"G-BYUX","t":"G115"},"DC":{"r":"G-BYUY","t":"G115"},"DD":{"r":"G-BYUZ","t":"G115"},"DE":{"r":"G-BYVA","t":"G115"},"DF":{"r":"G-BYVB","t":"G115"},"E0":{"r":"G-BYVC","t":"G115"},"E1":{"r":"G-BYVD","t":"G115"},"E2":{"r":"G-BYVE","t":"G115"},"E3":{"r":"G-BYVF","t":"G115"},"E4":{"r":"G-BYVG","t":"G115"},"E6":{"r":"G-BYVI","t":"G115"},"E7":{"r":"G-BYVJ","t":"G115"},"E8":{"r":"G-BYVK","t":"G115"},"E9":{"r":"G-BYVL","t":"G115"},"EA":{"r":"G-BYVM","t":"G115"},"EC":{"r":"G-BYVO","t":"G115"},"ED":{"r":"G-BYVP","t":"G115"},"EE":{"r":"G-BYVR","t":"G115"},"EF":{"r":"G-BYVS","t":"G115"},"F0":{"r":"G-BYVT","t":"G115"},"F1":{"r":"G-BYVU","t":"G115"},"F2":{"r":"G-BYVV","t":"G115"},"F3":{"r":"G-BYVW","t":"G115"},"F4":{"r":"G-BYVX","t":"G115"},"F6":{"r":"G-BYVZ","t":"G115"},"F9":{"r":"G-JURG","t":"AC11"},"FB":{"r":"G-EZBA","t":"A319"},"FC":{"r":"G-EZBB","t":"A319"},"FD":{"r":"G-EZBC","t":"A319"},"FE":{"r":"G-EZBD","t":"A319"},"FF":{"r":"G-EZBE","t":"A319"}}
--------------------------------------------------------------------------------
/debian/dump1090-mutability.postinst:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # postinst script for dump1090
3 | #
4 | # see: dh_installdeb(1)
5 |
6 | set -e
7 |
8 | # summary of how this script can be called:
9 | # * `configure'
10 | # * `abort-upgrade'
11 | # * `abort-remove' `in-favour'
12 | #
13 | # * `abort-remove'
14 | # * `abort-deconfigure' `in-favour'
15 | # `removing'
16 | #
17 | # for details, see http://www.debian.org/doc/debian-policy/ or
18 | # the debian-policy package
19 |
20 | NAME=dump1090-mutability
21 | CONFIGFILE=/etc/default/$NAME
22 | SRCCONFIGFILE=$CONFIGFILE
23 | TEMPLATECONFIG=/usr/share/$NAME/config-template
24 | CRONFILE=/etc/cron.d/$NAME
25 | TEMPLATECRON=/usr/share/$NAME/cron-template
26 | SEDSCRIPT=$CONFIGFILE.sed.tmp
27 |
28 | subvar_raw() {
29 | # $1 = config value
30 | # $2 = config var name
31 |
32 | if ! grep -Eq "^ *$2=" $SRCCONFIGFILE; then
33 | # if not present in the config file, add it at the end
34 | echo "\$a $2=$1" >> $SEDSCRIPT
35 | else
36 | # otherwise, replace the current value
37 | echo "s@^ *$2=.*@$2=\"$1\"@" >>$SEDSCRIPT
38 | fi
39 | }
40 |
41 | subvar() {
42 | # $1 = db var name
43 | # $2 = config var name
44 | db_get $NAME/$1
45 | subvar_raw "$RET" "$2"
46 | }
47 |
48 | subvar_yn() {
49 | # $1 = db var name
50 | # $2 = config var name
51 | db_get $NAME/$1
52 | if [ "$RET" = "true" ]; then subvar_raw "yes" "$2"; else subvar_raw "no" "$2"; fi
53 | }
54 |
55 | case "$1" in
56 | configure)
57 | . /usr/share/debconf/confmodule
58 |
59 | # If we have no config file, start from the template.
60 | # Avoid copying the template to the config file
61 | # before substitution; this leaves an all-blank config
62 | # in place if something fails, which causes problems
63 | # on subsequent reconfiguration.
64 | SKIPLINES=0
65 | if [ ! -e $SRCCONFIGFILE ]; then
66 | SRCCONFIGFILE=$TEMPLATECONFIG
67 | SKIPLINES=4
68 | fi
69 |
70 | rm -f $SEDSCRIPT
71 |
72 | subvar_yn auto-start START_DUMP1090
73 | subvar run-as-user DUMP1090_USER
74 | subvar log-file LOGFILE
75 | subvar rtlsdr-device DEVICE
76 | subvar rtlsdr-gain GAIN
77 | subvar rtlsdr-ppm PPM
78 | subvar_yn rtlsdr-oversample OVERSAMPLE
79 | subvar_yn decode-fixcrc FIX_CRC
80 | subvar_yn decode-phase-enhance PHASE_ENHANCE
81 | subvar decode-lat LAT
82 | subvar decode-lon LON
83 | subvar decode-max-range MAX_RANGE
84 | subvar net-http-port HTTP_PORT
85 | subvar net-ri-port RAW_INPUT_PORT
86 | subvar net-ro-port RAW_OUTPUT_PORT
87 | subvar net-bi-port BEAST_INPUT_PORT
88 | subvar net-bo-port BEAST_OUTPUT_PORT
89 | subvar net-sbs-port SBS_OUTPUT_PORT
90 | subvar net-heartbeat NET_HEARTBEAT
91 | subvar net-out-size NET_OUTPUT_SIZE
92 | subvar net-out-interval NET_OUTPUT_INTERVAL
93 | subvar net-buffer NET_BUFFER
94 | subvar net-bind-address NET_BIND_ADDRESS
95 | subvar stats-interval STATS_INTERVAL
96 | subvar json-dir JSON_DIR
97 | subvar json-interval JSON_INTERVAL
98 | subvar json-location-accuracy JSON_LOCATION_ACCURACY
99 | subvar_yn log-decoded-messages LOG_DECODED_MESSAGES
100 | subvar extra-args EXTRA_ARGS
101 |
102 | tail -n +$SKIPLINES < $SRCCONFIGFILE | sed -f $SEDSCRIPT > $CONFIGFILE.tmp
103 | if [ -e $CONFIGFILE ]; then
104 | chown --reference=$CONFIGFILE $CONFIGFILE.tmp
105 | chmod --reference=$CONFIGFILE $CONFIGFILE.tmp
106 | fi
107 | mv -f $CONFIGFILE.tmp $CONFIGFILE
108 | rm $SEDSCRIPT
109 |
110 | db_get $NAME/run-as-user
111 | RUNAS="$RET"
112 | if ! getent passwd "$RUNAS" >/dev/null
113 | then
114 | adduser --system --home /usr/share/$NAME --no-create-home --quiet "$RUNAS"
115 | fi
116 |
117 | # create log if missing; change ownership if needed so the cronjob works
118 | db_get $NAME/log-file
119 | touch $RET
120 | chown $RUNAS $RET
121 |
122 | # this config file has changed a few times, restart lighttpd to make sure we
123 | # have the latest version
124 | if [ -e /etc/lighttpd/conf-enabled/89-dump1090.conf ]; then
125 | echo "Restarting lighttpd.." >&2
126 | invoke-rc.d lighttpd restart || echo "Warning: lighttpd failed to restart." >&2
127 | fi
128 | ;;
129 |
130 | abort-upgrade|abort-remove|abort-deconfigure)
131 | ;;
132 |
133 | *)
134 | echo "postinst called with unknown argument \`$1'" >&2
135 | exit 1
136 | ;;
137 | esac
138 |
139 | # dh_installdeb will replace this with shell code automatically
140 | # generated by other debhelper scripts.
141 |
142 | #DEBHELPER#
143 |
144 | if [ "$1" = "configure" ]; then db_stop; fi
145 | exit 0
146 |
--------------------------------------------------------------------------------
/icao_filter.c:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // icao_filter.c: hashtable for ICAO addresses
4 | //
5 | // Copyright (c) 2014,2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | #include "dump1090.h"
21 |
22 | // hash table size, must be a power of two:
23 | #define ICAO_FILTER_SIZE 4096
24 |
25 | // Millis between filter expiry flips:
26 | #define MODES_ICAO_FILTER_TTL 60000
27 |
28 | // Open-addressed hash table with linear probing.
29 | // We store each address twice to handle Data/Parity
30 | // which need to match on a partial address (top 16 bits only).
31 |
32 | // Maintain two tables and switch between them to age out entries.
33 |
34 | static uint32_t icao_filter_a[ICAO_FILTER_SIZE];
35 | static uint32_t icao_filter_b[ICAO_FILTER_SIZE];
36 | static uint32_t *icao_filter_active;
37 |
38 | static uint32_t icaoHash(uint32_t a)
39 | {
40 | // Jenkins one-at-a-time hash, unrolled for 3 bytes
41 | uint32_t hash = 0;
42 |
43 | hash += a & 0xff;
44 | hash += hash << 10;
45 | hash ^= hash >> 6;
46 |
47 | hash += (a >> 8) & 0xff;
48 | hash += (hash << 10);
49 | hash ^= (hash >> 6);
50 |
51 | hash += (a >> 16) & 0xff;
52 | hash += (hash << 10);
53 | hash ^= (hash >> 6);
54 |
55 | hash += (hash << 3);
56 | hash ^= (hash >> 11);
57 | hash += (hash << 15);
58 |
59 | return hash & (ICAO_FILTER_SIZE-1);
60 | }
61 |
62 | void icaoFilterInit()
63 | {
64 | memset(icao_filter_a, 0, sizeof(icao_filter_a));
65 | memset(icao_filter_b, 0, sizeof(icao_filter_b));
66 | icao_filter_active = icao_filter_a;
67 | }
68 |
69 | void icaoFilterAdd(uint32_t addr)
70 | {
71 | uint32_t h, h0;
72 | h0 = h = icaoHash(addr);
73 | while (icao_filter_active[h] && icao_filter_active[h] != addr) {
74 | h = (h+1) & (ICAO_FILTER_SIZE-1);
75 | if (h == h0) {
76 | fprintf(stderr, "ICAO hash table full, increase ICAO_FILTER_SIZE\n");
77 | return;
78 | }
79 | }
80 | if (!icao_filter_active[h])
81 | icao_filter_active[h] = addr;
82 |
83 | // also add with a zeroed top byte, for handling DF20/21 with Data Parity
84 | h0 = h = icaoHash(addr & 0x00ffff);
85 | while (icao_filter_active[h] && (icao_filter_active[h] & 0x00ffff) != (addr & 0x00ffff)) {
86 | h = (h+1) & (ICAO_FILTER_SIZE-1);
87 | if (h == h0) {
88 | fprintf(stderr, "ICAO hash table full, increase ICAO_FILTER_SIZE\n");
89 | return;
90 | }
91 | }
92 | if (!icao_filter_active[h])
93 | icao_filter_active[h] = addr;
94 | }
95 |
96 | int icaoFilterTest(uint32_t addr)
97 | {
98 | uint32_t h, h0;
99 |
100 | h0 = h = icaoHash(addr);
101 | while (icao_filter_a[h] && icao_filter_a[h] != addr) {
102 | h = (h+1) & (ICAO_FILTER_SIZE-1);
103 | if (h == h0)
104 | break;
105 | }
106 | if (icao_filter_a[h] == addr)
107 | return 1;
108 |
109 | h = h0;
110 | while (icao_filter_b[h] && icao_filter_b[h] != addr) {
111 | h = (h+1) & (ICAO_FILTER_SIZE-1);
112 | if (h == h0)
113 | break;
114 | }
115 | if (icao_filter_b[h] == addr)
116 | return 1;
117 |
118 | return 0;
119 | }
120 |
121 | uint32_t icaoFilterTestFuzzy(uint32_t partial)
122 | {
123 | uint32_t h, h0;
124 |
125 | partial &= 0x00ffff;
126 | h0 = h = icaoHash(partial);
127 | while (icao_filter_a[h] && (icao_filter_a[h] & 0x00ffff) != partial) {
128 | h = (h+1) & (ICAO_FILTER_SIZE-1);
129 | if (h == h0)
130 | break;
131 | }
132 | if ((icao_filter_a[h] & 0x00ffff) == partial)
133 | return icao_filter_a[h];
134 |
135 | h = h0;
136 | while (icao_filter_b[h] && (icao_filter_b[h] & 0x00ffff) != partial) {
137 | h = (h+1) & (ICAO_FILTER_SIZE-1);
138 | if (h == h0)
139 | break;
140 | }
141 | if ((icao_filter_b[h] & 0x00ffff) == partial)
142 | return icao_filter_b[h];
143 |
144 | return 0;
145 | }
146 |
147 | // call this periodically:
148 | void icaoFilterExpire()
149 | {
150 | static uint64_t next_flip = 0;
151 | uint64_t now = mstime();
152 |
153 | if (now >= next_flip) {
154 | if (icao_filter_active == icao_filter_a) {
155 | memset(icao_filter_b, 0, sizeof(icao_filter_b));
156 | icao_filter_active = icao_filter_b;
157 | } else {
158 | memset(icao_filter_a, 0, sizeof(icao_filter_a));
159 | icao_filter_active = icao_filter_a;
160 | }
161 | next_flip = now + MODES_ICAO_FILTER_TTL;
162 | }
163 | }
164 |
--------------------------------------------------------------------------------
/compat/clock_gettime/clock_gettime.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c), MM Weiss
3 | * All rights reserved.
4 | *
5 | * Redistribution and use in source and binary forms, with or without modification,
6 | * are permitted provided that the following conditions are met:
7 | *
8 | * 1. Redistributions of source code must retain the above copyright notice,
9 | * this list of conditions and the following disclaimer.
10 | *
11 | * 2. Redistributions in binary form must reproduce the above copyright notice,
12 | * this list of conditions and the following disclaimer in the documentation
13 | * and/or other materials provided with the distribution.
14 | *
15 | * 3. Neither the name of the MM Weiss nor the names of its contributors
16 | * may be used to endorse or promote products derived from this software without
17 | * specific prior written permission.
18 | *
19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
22 | * SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 | * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
26 | * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
27 | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | */
29 |
30 | /*
31 | * clock_gettime_stub.c
32 | * gcc -Wall -c clock_gettime_stub.c
33 | * posix realtime functions; MacOS user space glue
34 | */
35 |
36 | /* @comment
37 | * other possible implementation using intel builtin rdtsc
38 | * rdtsc-workaround: http://www.mcs.anl.gov/~kazutomo/rdtsc.html
39 | *
40 | * we could get the ticks by doing this
41 | *
42 | * __asm __volatile("mov %%ebx, %%esi\n\t"
43 | * "cpuid\n\t"
44 | * "xchg %%esi, %%ebx\n\t"
45 | * "rdtsc"
46 | * : "=a" (a),
47 | * "=d" (d)
48 | * );
49 | * we could even replace our tricky sched_yield call by assembly code to get a better accurency,
50 | * anyway the following C stub will satisfy 99% of apps using posix clock_gettime call,
51 | * moreover, the setter version (clock_settime) could be easly written using mach primitives:
52 | * http://www.opensource.apple.com/source/xnu/xnu-${VERSION}/osfmk/man/ (clock_[set|get]_time)
53 | *
54 | * hackers don't be crackers, don't you use a flush toilet?
55 | *
56 | *
57 | * @see draft: ./posix-realtime-stub/posix-realtime-stub.c
58 | *
59 | */
60 |
61 |
62 | #include "clock_gettime.h"
63 | #include // for clock_get_time
64 | #include // for mach_timespec_t, CALENDAR_CLOCK, etc
65 | #include // for KERN_SUCCESS, kern_return_t
66 | #include // for host_get_clock_service
67 | #include // for mach_host_self
68 | #include // for clock_serv_t
69 | #include // for sched_yield
70 | #include // for EINVAL, errno
71 | #include // for getpid
72 |
73 | int clock_gettime(clockid_t clk_id, struct timespec *tp)
74 | {
75 | kern_return_t ret;
76 | clock_serv_t clk;
77 | clock_id_t clk_serv_id;
78 | mach_timespec_t tm;
79 |
80 | uint64_t start, end, delta, nano;
81 |
82 | /*
83 | task_basic_info_data_t tinfo;
84 | task_thread_times_info_data_t ttinfo;
85 | mach_msg_type_number_t tflag;
86 | */
87 |
88 | int retval = -1;
89 | switch (clk_id)
90 | {
91 | case CLOCK_REALTIME:
92 | case CLOCK_MONOTONIC:
93 | clk_serv_id = clk_id == CLOCK_REALTIME ? CALENDAR_CLOCK : SYSTEM_CLOCK;
94 | if (KERN_SUCCESS == (ret = host_get_clock_service(mach_host_self(), clk_serv_id, &clk)))
95 | {
96 | if (KERN_SUCCESS == (ret = clock_get_time(clk, &tm)))
97 | {
98 | tp->tv_sec = tm.tv_sec;
99 | tp->tv_nsec = tm.tv_nsec;
100 | retval = 0;
101 | }
102 | }
103 | if (KERN_SUCCESS != ret)
104 | {
105 | errno = EINVAL;
106 | retval = -1;
107 | }
108 | break;
109 | case CLOCK_PROCESS_CPUTIME_ID:
110 | case CLOCK_THREAD_CPUTIME_ID:
111 | start = mach_absolute_time();
112 | if (clk_id == CLOCK_PROCESS_CPUTIME_ID)
113 | {
114 | getpid();
115 | }
116 | else
117 | {
118 | sched_yield();
119 | }
120 | end = mach_absolute_time();
121 | delta = end - start;
122 | if (0 == __clock_gettime_inf.denom)
123 | {
124 | mach_timebase_info(&__clock_gettime_inf);
125 | }
126 | nano = delta * __clock_gettime_inf.numer / __clock_gettime_inf.denom;
127 | tp->tv_sec = nano * 1e-9;
128 | tp->tv_nsec = nano - (tp->tv_sec * 1e9);
129 | retval = 0;
130 | break;
131 | default:
132 | errno = EINVAL;
133 | retval = -1;
134 | }
135 | return retval;
136 | }
137 |
--------------------------------------------------------------------------------
/stats.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // stats.c: statistics structures and prototypes.
4 | //
5 | // Copyright (c) 2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | // This file incorporates work covered by the following copyright and
21 | // permission notice:
22 | //
23 | // Copyright (C) 2012 by Salvatore Sanfilippo
24 | //
25 | // All rights reserved.
26 | //
27 | // Redistribution and use in source and binary forms, with or without
28 | // modification, are permitted provided that the following conditions are
29 | // met:
30 | //
31 | // * Redistributions of source code must retain the above copyright
32 | // notice, this list of conditions and the following disclaimer.
33 | //
34 | // * Redistributions in binary form must reproduce the above copyright
35 | // notice, this list of conditions and the following disclaimer in the
36 | // documentation and/or other materials provided with the distribution.
37 | //
38 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
39 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
40 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
41 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
42 | // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
44 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
45 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
46 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
47 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
48 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49 |
50 | #ifndef DUMP1090_STATS_H
51 | #define DUMP1090_STATS_H
52 |
53 | struct stats {
54 | uint64_t start;
55 | uint64_t end;
56 |
57 | // Mode S demodulator counts:
58 | uint32_t demod_preambles;
59 | uint32_t demod_rejected_bad;
60 | uint32_t demod_rejected_unknown_icao;
61 | uint32_t demod_accepted[MODES_MAX_BITERRORS+1];
62 |
63 | // Mode A/C demodulator counts:
64 | uint32_t demod_modeac;
65 |
66 | uint64_t samples_processed;
67 | uint64_t samples_dropped;
68 |
69 | // timing:
70 | struct timespec demod_cpu;
71 | struct timespec reader_cpu;
72 | struct timespec background_cpu;
73 |
74 | // noise floor:
75 | double noise_power_sum;
76 | uint64_t noise_power_count;
77 |
78 | // mean signal power:
79 | double signal_power_sum;
80 | uint64_t signal_power_count;
81 |
82 | // peak signal power seen
83 | double peak_signal_power;
84 |
85 | // number of signals with power > -3dBFS
86 | uint32_t strong_signal_count;
87 |
88 | // remote messages:
89 | uint32_t remote_received_modeac;
90 | uint32_t remote_received_modes;
91 | uint32_t remote_rejected_bad;
92 | uint32_t remote_rejected_unknown_icao;
93 | uint32_t remote_accepted[MODES_MAX_BITERRORS+1];
94 |
95 | // total messages:
96 | uint32_t messages_total;
97 |
98 | // network:
99 | uint32_t http_requests;
100 |
101 | // CPR decoding:
102 | unsigned int cpr_surface;
103 | unsigned int cpr_airborne;
104 | unsigned int cpr_global_ok;
105 | unsigned int cpr_global_bad;
106 | unsigned int cpr_global_skipped;
107 | unsigned int cpr_global_range_checks;
108 | unsigned int cpr_global_speed_checks;
109 | unsigned int cpr_local_ok;
110 | unsigned int cpr_local_skipped;
111 | unsigned int cpr_local_range_checks;
112 | unsigned int cpr_local_speed_checks;
113 | unsigned int cpr_local_aircraft_relative;
114 | unsigned int cpr_local_receiver_relative;
115 | unsigned int cpr_filtered;
116 |
117 | // number of altitude messages ignored because
118 | // we had a recent DF17/18 altitude
119 | unsigned int suppressed_altitude_messages;
120 |
121 | // aircraft:
122 | // total "new" aircraft (i.e. not seen in the last 30 or 300s)
123 | unsigned int unique_aircraft;
124 | // we saw only a single message
125 | unsigned int single_message_aircraft;
126 |
127 | // range histogram
128 | #define RANGE_BUCKET_COUNT 76
129 | uint32_t range_histogram[RANGE_BUCKET_COUNT];
130 | };
131 |
132 | void add_stats(const struct stats *st1, const struct stats *st2, struct stats *target);
133 | void display_stats(struct stats *st);
134 | void reset_stats(struct stats *st);
135 |
136 | void add_timespecs(const struct timespec *x, const struct timespec *y, struct timespec *z);
137 |
138 | #endif
139 |
--------------------------------------------------------------------------------
/public_html/config.js:
--------------------------------------------------------------------------------
1 | // --------------------------------------------------------
2 | //
3 | // This file is to configure the configurable settings.
4 | // Load this file before script.js file at gmap.html.
5 | //
6 | // --------------------------------------------------------
7 |
8 | // -- Title Settings --------------------------------------
9 | // Show number of aircraft and/or messages per second in the page title
10 | PlaneCountInTitle = true;
11 | MessageRateInTitle = false;
12 |
13 | // -- Output Settings -------------------------------------
14 | // Show metric values
15 | // The Metric setting controls whether metric (m, km, km/h) or
16 | // imperial (ft, NM, knots) units are used in the plane table
17 | // and in the detailed plane info. If ShowOtherUnits is true,
18 | // then the other unit will also be shown in the detailed plane
19 | // info.
20 | Metric = false;
21 | ShowOtherUnits = true;
22 |
23 | // -- Map settings ----------------------------------------
24 | // These settings are overridden by any position information
25 | // provided by dump1090 itself. All positions are in decimal
26 | // degrees.
27 |
28 | // Default center of the map.
29 | DefaultCenterLat = 45.0;
30 | DefaultCenterLon = 9.0;
31 | // The google maps zoom level, 0 - 16, lower is further out
32 | DefaultZoomLvl = 7;
33 |
34 | // Center marker. If dump1090 provides a receiver location,
35 | // that location is used and these settings are ignored.
36 |
37 | SiteShow = false; // true to show a center marker
38 | SiteLat = 45.0; // position of the marker
39 | SiteLon = 9.0;
40 | SiteName = "My Radar Site"; // tooltip of the marker
41 |
42 | // -- Marker settings -------------------------------------
43 |
44 | // These settings control the coloring of aircraft by altitude.
45 | // All color values are given as Hue (0-359) / Saturation (0-100) / Lightness (0-100)
46 | ColorByAlt = {
47 | // HSL for planes with unknown altitude:
48 | unknown : { h: 0, s: 0, l: 40 },
49 |
50 | // HSL for planes that are on the ground:
51 | ground : { h: 120, s: 100, l: 30 },
52 |
53 | air : {
54 | // These define altitude-to-hue mappings
55 | // at particular altitudes; the hue
56 | // for intermediate altitudes that lie
57 | // between the provided altitudes is linearly
58 | // interpolated.
59 | //
60 | // Mappings must be provided in increasing
61 | // order of altitude.
62 | //
63 | // Altitudes below the first entry use the
64 | // hue of the first entry; altitudes above
65 | // the last entry use the hue of the last
66 | // entry.
67 | h: [ { alt: 2000, val: 20 }, // orange
68 | { alt: 10000, val: 140 }, // light green
69 | { alt: 40000, val: 300 } ], // magenta
70 | s: 85,
71 | l: 50,
72 | },
73 |
74 | // Changes added to the color of the currently selected plane
75 | selected : { h: 0, s: -10, l: +20 },
76 |
77 | // Changes added to the color of planes that have stale position info
78 | stale : { h: 0, s: -10, l: +30 },
79 |
80 | // Changes added to the color of planes that have positions from mlat
81 | mlat : { h: 0, s: -10, l: -10 }
82 | };
83 |
84 | // For a monochrome display try this:
85 | // ColorByAlt = {
86 | // unknown : { h: 0, s: 0, l: 40 },
87 | // ground : { h: 0, s: 0, l: 30 },
88 | // air : { h: [ { alt: 0, val: 0 } ], s: 0, l: 50 },
89 | // selected : { h: 0, s: 0, l: +30 },
90 | // stale : { h: 0, s: 0, l: +30 },
91 | // mlat : { h: 0, s: 0, l: -10 }
92 | // };
93 |
94 | // Outline color for aircraft icons with an ADS-B position
95 | OutlineADSBColor = '#000000';
96 |
97 | // Outline color for aircraft icons with a mlat position
98 | OutlineMlatColor = '#4040FF';
99 |
100 | SiteCircles = true; // true to show circles (only shown if the center marker is shown)
101 | // In nautical miles or km (depending settings value 'Metric')
102 | SiteCirclesDistances = new Array(100,150,200);
103 |
104 | // Show the clocks at the top of the righthand pane? You can disable the clocks if you want here
105 | ShowClocks = true;
106 |
107 | // Controls page title, righthand pane when nothing is selected
108 | PageName = "DUMP1090";
109 |
110 | // Show country flags by ICAO addresses?
111 | ShowFlags = true;
112 |
113 | // Path to country flags (can be a relative or absolute URL; include a trailing /)
114 | FlagPath = "flags-tiny/";
115 |
116 | // Set to true to enable the ChartBundle base layers (US coverage only)
117 | ChartBundleLayers = true;
118 |
119 | // Provide a Bing Maps API key here to enable the Bing imagery layer.
120 | // You can obtain a free key (with usage limits) at
121 | // https://www.bingmapsportal.com/ (you need a "basic key")
122 | //
123 | // Be sure to quote your key:
124 | // BingMapsAPIKey = "your key here";
125 | //
126 | BingMapsAPIKey = null;
127 |
128 | // Provide a Mapzen API key here to enable the Mapzen vector tile layer.
129 | // You can obtain a free key at https://mapzen.com/developers/
130 | // (you need a "vector tiles" key)
131 | //
132 | // Be sure to quote your key:
133 | // MapzenAPIKey = "your key here";
134 | //
135 | MapzenAPIKey = null;
136 |
--------------------------------------------------------------------------------
/track.h:
--------------------------------------------------------------------------------
1 | // Part of dump1090, a Mode S message decoder for RTLSDR devices.
2 | //
3 | // track.h: aircraft state tracking prototypes
4 | //
5 | // Copyright (c) 2014,2015 Oliver Jowett
6 | //
7 | // This file is free software: you may copy, redistribute and/or modify it
8 | // under the terms of the GNU General Public License as published by the
9 | // Free Software Foundation, either version 2 of the License, or (at your
10 | // option) any later version.
11 | //
12 | // This file is distributed in the hope that it will be useful, but
13 | // WITHOUT ANY WARRANTY; without even the implied warranty of
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 | // General Public License for more details.
16 | //
17 | // You should have received a copy of the GNU General Public License
18 | // along with this program. If not, see .
19 |
20 | // This file incorporates work covered by the following copyright and
21 | // permission notice:
22 | //
23 | // Copyright (C) 2012 by Salvatore Sanfilippo
24 | //
25 | // All rights reserved.
26 | //
27 | // Redistribution and use in source and binary forms, with or without
28 | // modification, are permitted provided that the following conditions are
29 | // met:
30 | //
31 | // * Redistributions of source code must retain the above copyright
32 | // notice, this list of conditions and the following disclaimer.
33 | //
34 | // * Redistributions in binary form must reproduce the above copyright
35 | // notice, this list of conditions and the following disclaimer in the
36 | // documentation and/or other materials provided with the distribution.
37 | //
38 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
39 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
40 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
41 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
42 | // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
44 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
45 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
46 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
47 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
48 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49 |
50 | #ifndef DUMP1090_TRACK_H
51 | #define DUMP1090_TRACK_H
52 |
53 | /* Maximum age of tracked aircraft in milliseconds */
54 | #define TRACK_AIRCRAFT_TTL 300000
55 |
56 | /* Maximum age of a tracked aircraft with only 1 message received, in milliseconds */
57 | #define TRACK_AIRCRAFT_ONEHIT_TTL 60000
58 |
59 | /* Maximum validity of an aircraft position */
60 | #define TRACK_AIRCRAFT_POSITION_TTL 60000
61 |
62 | /* Structure used to describe the state of one tracked aircraft */
63 | struct aircraft {
64 | uint32_t addr; // ICAO address
65 | char flight[16]; // Flight number
66 | double signalLevel[8]; // Last 8 Signal Amplitudes
67 | int signalNext; // next index of signalLevel to use
68 | int altitude; // Altitude (Baro)
69 | int altitude_hae; // Altitude (HAE)
70 | int hae_delta; // Difference between HAE and Baro altitudes
71 | int speed; // Velocity
72 | int track; // Angle of flight
73 | int vert_rate; // Vertical rate.
74 |
75 | uint64_t seen; // Time (millis) at which the last packet was received
76 | uint64_t seenLatLon; // Time (millis) at which lat, lon was measured
77 | uint64_t seenAltitude; // Time (millis) at which altitude was measured
78 | uint64_t seenSpeed; // Time (millis) at which speed was measured
79 | uint64_t seenTrack; // Time (millis) at which track was measured
80 |
81 | int mlatFlags; // Data derived from mlat messages
82 | int tisbFlags; // Data derived from TIS-B messages
83 |
84 | long messages; // Number of Mode S messages received
85 | int modeA; // Squawk
86 | int modeC; // Altitude
87 | long modeAcount; // Mode A Squawk hit Count
88 | long modeCcount; // Mode C Altitude hit Count
89 | int modeACflags; // Flags for mode A/C recognition
90 |
91 | int fatsv_emitted_altitude; // last FA emitted altitude
92 | int fatsv_emitted_track; // last FA emitted track
93 | int fatsv_emitted_speed; // last FA emitted speed
94 | uint64_t fatsv_last_emitted; // time (millis) aircraft was last FA emitted
95 |
96 | // Encoded latitude and longitude as extracted by odd and even CPR encoded messages
97 | uint64_t odd_cprtime;
98 | int odd_cprlat;
99 | int odd_cprlon;
100 | unsigned odd_cprnuc;
101 |
102 | uint64_t even_cprtime;
103 | int even_cprlat;
104 | int even_cprlon;
105 | unsigned even_cprnuc;
106 |
107 | double lat, lon; // Coordinated obtained from CPR encoded data
108 | unsigned pos_nuc; // NUCp of last computed position
109 |
110 | unsigned category; // Aircraft category A0 - D7 encoded as a single hex byte
111 |
112 | int bFlags; // Flags related to valid fields in this structure
113 | struct aircraft *next; // Next aircraft in our linked list
114 |
115 | struct modesMessage first_message; // A copy of the first message we received for this aircraft.
116 | };
117 |
118 |
119 |
120 | /* Update aircraft state from data in the provided mesage.
121 | * Return the tracked aircraft.
122 | */
123 | struct modesMessage;
124 | struct aircraft *trackUpdateFromMessage(struct modesMessage *mm);
125 |
126 | /* Call periodically */
127 | void trackPeriodicUpdate();
128 |
129 | #endif
130 |
--------------------------------------------------------------------------------