├── 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 | --------------------------------------------------------------------------------