Add ICAO registration country
This commit is contained in:
parent
823631979b
commit
0f582ecc3a
207
country_list.h
Normal file
207
country_list.h
Normal file
@ -0,0 +1,207 @@
|
||||
enum blockSize {
|
||||
BLK_1024 = 1024,
|
||||
BLK_4096 = 4096,
|
||||
BLK_32768 = 32768,
|
||||
BLK_262144 = 262144,
|
||||
BLK_1048576= 1048576
|
||||
};
|
||||
|
||||
|
||||
struct countryCodes {
|
||||
char *code;
|
||||
uint32_t len;
|
||||
uint32_t icao_addr;
|
||||
uint32_t icao_mask;
|
||||
} countryList[] = {
|
||||
{"ZW",BLK_1024,0x4000,0xfffc00},
|
||||
{"BW",BLK_1024,0x30000,0xfffc00},
|
||||
{"KM",BLK_1024,0x35000,0xfffc00},
|
||||
{"GW",BLK_1024,0x48000,0xfffc00},
|
||||
{"LS",BLK_1024,0x4a000,0xfffc00},
|
||||
{"MV",BLK_1024,0x5a000,0xfffc00},
|
||||
{"MR",BLK_1024,0x5e000,0xfffc00},
|
||||
{"MU",BLK_1024,0x60000,0xfffc00},
|
||||
{"QA",BLK_1024,0x6a000,0xfffc00},
|
||||
{"SC",BLK_1024,0x74000,0xfffc00},
|
||||
{"SL",BLK_1024,0x76000,0xfffc00},
|
||||
{"SZ",BLK_1024,0x7a000,0xfffc00},
|
||||
{"BJ",BLK_1024,0x94000,0xfffc00},
|
||||
{"CV",BLK_1024,0x96000,0xfffc00},
|
||||
{"DJ",BLK_1024,0x98000,0xfffc00},
|
||||
{"ST",BLK_1024,0x9e000,0xfffc00},
|
||||
{"BB",BLK_1024,0xaa000,0xfffc00},
|
||||
{"BZ",BLK_1024,0xab000,0xfffc00},
|
||||
{"VC",BLK_1024,0xbc000,0xfffc00},
|
||||
{"AG",BLK_1024,0xca000,0xfffc00},
|
||||
{"GD",BLK_1024,0xcc000,0xfffc00},
|
||||
{"NA",BLK_1024,0x201000,0xfffc00},
|
||||
{"ER",BLK_1024,0x202000,0xfffc00},
|
||||
{"CY",BLK_1024,0x4c8000,0xfffc00},
|
||||
{"LU",BLK_1024,0x4d0000,0xfffc00},
|
||||
{"MT",BLK_1024,0x4d2000,0xfffc00},
|
||||
{"MC",BLK_1024,0x4d4000,0xfffc00},
|
||||
{"SM",BLK_1024,0x500000,0xfffc00},
|
||||
{"AL",BLK_1024,0x501000,0xfffc00},
|
||||
{"HR",BLK_1024,0x501c00,0xfffc00},
|
||||
{"LV",BLK_1024,0x502c00,0xfffc00},
|
||||
{"LT",BLK_1024,0x503c00,0xfffc00},
|
||||
{"MD",BLK_1024,0x504c00,0xfffc00},
|
||||
{"SK",BLK_1024,0x505c00,0xfffc00},
|
||||
{"SI",BLK_1024,0x506c00,0xfffc00},
|
||||
{"UZ",BLK_1024,0x507c00,0xfffc00},
|
||||
{"BY",BLK_1024,0x510000,0xfffc00},
|
||||
{"EE",BLK_1024,0x511000,0xfffc00},
|
||||
{"MK",BLK_1024,0x512000,0xfffc00},
|
||||
{"BA",BLK_1024,0x513000,0xfffc00},
|
||||
{"GE",BLK_1024,0x514000,0xfffc00},
|
||||
{"TJ",BLK_1024,0x515000,0xfffc00},
|
||||
{"AM",BLK_1024,0x600000,0xfffc00},
|
||||
{"AZ",BLK_1024,0x600800,0xfffc00},
|
||||
{"KG",BLK_1024,0x601000,0xfffc00},
|
||||
{"TM",BLK_1024,0x601800,0xfffc00},
|
||||
{"BT",BLK_1024,0x680000,0xfffc00},
|
||||
{"FM",BLK_1024,0x681000,0xfffc00},
|
||||
{"MN",BLK_1024,0x682000,0xfffc00},
|
||||
{"KZ",BLK_1024,0x683000,0xfffc00},
|
||||
{"PW",BLK_1024,0x684000,0xfffc00},
|
||||
{"OM",BLK_1024,0x70c000,0xfffc00},
|
||||
{"BN",BLK_1024,0x895000,0xfffc00},
|
||||
{"SB",BLK_1024,0x897000,0xfffc00},
|
||||
{"00",BLK_1024,0x899000,0xfffc00},
|
||||
{"MH",BLK_1024,0x900000,0xfffc00},
|
||||
{"CK",BLK_1024,0x901000,0xfffc00},
|
||||
{"WS",BLK_1024,0x902000,0xfffc00},
|
||||
{"NR",BLK_1024,0xc8a000,0xfffc00},
|
||||
{"LC",BLK_1024,0xc8c000,0xfffc00},
|
||||
{"TO",BLK_1024,0xc8d000,0xfffc00},
|
||||
{"KI",BLK_1024,0xc8e000,0xfffc00},
|
||||
{"VU",BLK_1024,0xc90000,0xfffc00},
|
||||
{"00",BLK_1024,0xf09000,0xfffc00},
|
||||
{"MZ",BLK_4096,0x6000,0xfff000},
|
||||
{"BI",BLK_4096,0x32000,0xfff000},
|
||||
{"CM",BLK_4096,0x34000,0xfff000},
|
||||
{"CG",BLK_4096,0x36000,0xfff000},
|
||||
{"CI",BLK_4096,0x38000,0xfff000},
|
||||
{"GA",BLK_4096,0x3e000,0xfff000},
|
||||
{"ET",BLK_4096,0x40000,0xfff000},
|
||||
{"GQ",BLK_4096,0x42000,0xfff000},
|
||||
{"GH",BLK_4096,0x44000,0xfff000},
|
||||
{"GN",BLK_4096,0x46000,0xfff000},
|
||||
{"KE",BLK_4096,0x4c000,0xfff000},
|
||||
{"LR",BLK_4096,0x50000,0xfff000},
|
||||
{"MG",BLK_4096,0x54000,0xfff000},
|
||||
{"MW",BLK_4096,0x58000,0xfff000},
|
||||
{"ML",BLK_4096,0x5c000,0xfff000},
|
||||
{"NE",BLK_4096,0x62000,0xfff000},
|
||||
{"NG",BLK_4096,0x64000,0xfff000},
|
||||
{"UG",BLK_4096,0x68000,0xfff000},
|
||||
{"CF",BLK_4096,0x6c000,0xfff000},
|
||||
{"RW",BLK_4096,0x6e000,0xfff000},
|
||||
{"SN",BLK_4096,0x70000,0xfff000},
|
||||
{"SO",BLK_4096,0x78000,0xfff000},
|
||||
{"SD",BLK_4096,0x7c000,0xfff000},
|
||||
{"TZ",BLK_4096,0x80000,0xfff000},
|
||||
{"TD",BLK_4096,0x84000,0xfff000},
|
||||
{"TG",BLK_4096,0x88000,0xfff000},
|
||||
{"ZM",BLK_4096,0x8a000,0xfff000},
|
||||
{"CD",BLK_4096,0x8c000,0xfff000},
|
||||
{"AO",BLK_4096,0x90000,0xfff000},
|
||||
{"GM",BLK_4096,0x9a000,0xfff000},
|
||||
{"BF",BLK_4096,0x9c000,0xfff000},
|
||||
{"BS",BLK_4096,0xa8000,0xfff000},
|
||||
{"CO",BLK_4096,0xac000,0xfff000},
|
||||
{"CR",BLK_4096,0xae000,0xfff000},
|
||||
{"CU",BLK_4096,0xb0000,0xfff000},
|
||||
{"SV",BLK_4096,0xb2000,0xfff000},
|
||||
{"GT",BLK_4096,0xb4000,0xfff000},
|
||||
{"GY",BLK_4096,0xb6000,0xfff000},
|
||||
{"HT",BLK_4096,0xb8000,0xfff000},
|
||||
{"HN",BLK_4096,0xba000,0xfff000},
|
||||
{"JM",BLK_4096,0xbe000,0xfff000},
|
||||
{"NI",BLK_4096,0xc0000,0xfff000},
|
||||
{"PA",BLK_4096,0xc2000,0xfff000},
|
||||
{"DO",BLK_4096,0xc4000,0xfff000},
|
||||
{"TT",BLK_4096,0xc6000,0xfff000},
|
||||
{"SR",BLK_4096,0xc8000,0xfff000},
|
||||
{"IE",BLK_4096,0x4ca000,0xfff000},
|
||||
{"IS",BLK_4096,0x4cc000,0xfff000},
|
||||
{"AF",BLK_4096,0x700000,0xfff000},
|
||||
{"BD",BLK_4096,0x702000,0xfff000},
|
||||
{"MM",BLK_4096,0x704000,0xfff000},
|
||||
{"KW",BLK_4096,0x706000,0xfff000},
|
||||
{"LA",BLK_4096,0x708000,0xfff000},
|
||||
{"NP",BLK_4096,0x70a000,0xfff000},
|
||||
{"KH",BLK_4096,0x70e000,0xfff000},
|
||||
{"YE",BLK_4096,0x890000,0xfff000},
|
||||
{"BH",BLK_4096,0x894000,0xfff000},
|
||||
{"AE",BLK_4096,0x896000,0xfff000},
|
||||
{"PG",BLK_4096,0x898000,0xfff000},
|
||||
{"FJ",BLK_4096,0xc88000,0xfff000},
|
||||
{"CL",BLK_4096,0xe80000,0xfff000},
|
||||
{"EC",BLK_4096,0xe84000,0xfff000},
|
||||
{"PY",BLK_4096,0xe88000,0xfff000},
|
||||
{"PE",BLK_4096,0xe8c000,0xfff000},
|
||||
{"UY",BLK_4096,0xe90000,0xfff000},
|
||||
{"BO",BLK_4096,0xe94000,0xfff000},
|
||||
{"ZA",BLK_32768,0x8000,0xff8000},
|
||||
{"EG",BLK_32768,0x10000,0xff8000},
|
||||
{"LY",BLK_32768,0x18000,0xff8000},
|
||||
{"MA",BLK_32768,0x20000,0xff8000},
|
||||
{"TN",BLK_32768,0x28000,0xff8000},
|
||||
{"DZ",BLK_32768,0xa0000,0xff8000},
|
||||
{"MX",BLK_32768,0xd0000,0xff8000},
|
||||
{"VE",BLK_32768,0xd8000,0xff8000},
|
||||
{"AT",BLK_32768,0x440000,0xff8000},
|
||||
{"BE",BLK_32768,0x448000,0xff8000},
|
||||
{"BG",BLK_32768,0x450000,0xff8000},
|
||||
{"DK",BLK_32768,0x458000,0xff8000},
|
||||
{"FI",BLK_32768,0x460000,0xff8000},
|
||||
{"GR",BLK_32768,0x468000,0xff8000},
|
||||
{"HU",BLK_32768,0x470000,0xff8000},
|
||||
{"NO",BLK_32768,0x478000,0xff8000},
|
||||
{"NL",BLK_32768,0x480000,0xff8000},
|
||||
{"PL",BLK_32768,0x488000,0xff8000},
|
||||
{"PT",BLK_32768,0x490000,0xff8000},
|
||||
{"CZ",BLK_32768,0x498000,0xff8000},
|
||||
{"RO",BLK_32768,0x4a0000,0xff8000},
|
||||
{"SE",BLK_32768,0x4a8000,0xff8000},
|
||||
{"CH",BLK_32768,0x4b0000,0xff8000},
|
||||
{"TR",BLK_32768,0x4b8000,0xff8000},
|
||||
{"YU",BLK_32768,0x4c0000,0xff8000},
|
||||
{"UA",BLK_32768,0x508000,0xff8000},
|
||||
{"SA",BLK_32768,0x710000,0xff8000},
|
||||
{"KR",BLK_32768,0x718000,0xff8000},
|
||||
{"KP",BLK_32768,0x720000,0xff8000},
|
||||
{"IQ",BLK_32768,0x728000,0xff8000},
|
||||
{"IR",BLK_32768,0x730000,0xff8000},
|
||||
{"IL",BLK_32768,0x738000,0xff8000},
|
||||
{"JO",BLK_32768,0x740000,0xff8000},
|
||||
{"LB",BLK_32768,0x748000,0xff8000},
|
||||
{"MY",BLK_32768,0x750000,0xff8000},
|
||||
{"PH",BLK_32768,0x758000,0xff8000},
|
||||
{"PK",BLK_32768,0x760000,0xff8000},
|
||||
{"SG",BLK_32768,0x768000,0xff8000},
|
||||
{"LK",BLK_32768,0x770000,0xff8000},
|
||||
{"SY",BLK_32768,0x778000,0xff8000},
|
||||
{"TH",BLK_32768,0x880000,0xff8000},
|
||||
{"VN",BLK_32768,0x888000,0xff8000},
|
||||
{"ID",BLK_32768,0x8a0000,0xff8000},
|
||||
{"NZ",BLK_32768,0xc80000,0xff8000},
|
||||
{"00",BLK_32768,0xf00000,0xff8000},
|
||||
{"IT",BLK_262144,0x300000,0xfc0000},
|
||||
{"ES",BLK_262144,0x340000,0xfc0000},
|
||||
{"FR",BLK_262144,0x380000,0xfc0000},
|
||||
{"DE",BLK_262144,0x3c0000,0xfc0000},
|
||||
{"GB",BLK_262144,0x400000,0xfc0000},
|
||||
{"CN",BLK_262144,0x780000,0xfc0000},
|
||||
{"AU",BLK_262144,0x7c0000,0xfc0000},
|
||||
{"IN",BLK_262144,0x800000,0xfc0000},
|
||||
{"JP",BLK_262144,0x840000,0xfc0000},
|
||||
{"CA",BLK_262144,0xc00000,0xfc0000},
|
||||
{"AR",BLK_262144,0xe00000,0xfc0000},
|
||||
{"BR",BLK_262144,0xe40000,0xfc0000},
|
||||
{"RU",BLK_1048576,0x100000,0xf00000},
|
||||
{"US",BLK_1048576,0xa00000,0xf00000},
|
||||
};
|
||||
|
||||
#define CTALEN() (sizeof(countryList) / sizeof(struct countryCodes))
|
30
dump1090.c
30
dump1090.c
@ -45,6 +45,7 @@
|
||||
#include <sys/select.h>
|
||||
#include "rtl-sdr.h"
|
||||
#include "anet.h"
|
||||
#include "country_list.h"
|
||||
|
||||
#define MODES_DEFAULT_RATE 2000000
|
||||
#define MODES_DEFAULT_FREQ 1090000000
|
||||
@ -120,6 +121,7 @@ struct aircraft {
|
||||
double lat, lon; /* Coordinated obtained from CPR encoded data. */
|
||||
long long odd_cprtime, even_cprtime;
|
||||
struct aircraft *next; /* Next aircraft in our linked list. */
|
||||
struct countryCodes * reg; /* aircraft registretion country */
|
||||
};
|
||||
|
||||
/* Program global state. */
|
||||
@ -1107,6 +1109,17 @@ void decodeModesMessage(struct modesMessage *mm, unsigned char *msg) {
|
||||
mm->phase_corrected = 0; /* Set to 1 by the caller if needed. */
|
||||
}
|
||||
|
||||
/* Extract the country code from the ICAO adress. */
|
||||
struct countryCodes * icaoToCountyCode(uint32_t addr)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i=0; i < CTALEN(); i++) {
|
||||
if((addr & countryList[i].icao_mask) == countryList[i].icao_addr)
|
||||
return &countryList[i];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* This function gets a decoded Mode S Message and prints it on the screen
|
||||
* in a human readable format. */
|
||||
void displayModesMessage(struct modesMessage *mm) {
|
||||
@ -1582,6 +1595,7 @@ struct aircraft *interactiveCreateAircraft(uint32_t addr) {
|
||||
a->lon = 0;
|
||||
a->seen = time(NULL);
|
||||
a->messages = 0;
|
||||
a->reg = icaoToCountyCode(addr);
|
||||
a->next = NULL;
|
||||
return a;
|
||||
}
|
||||
@ -1807,8 +1821,8 @@ void interactiveShowData(void) {
|
||||
|
||||
printf("\x1b[H\x1b[2J"); /* Clear the screen */
|
||||
printf(
|
||||
"Hex Flight Altitude Speed Lat Lon Track Messages Seen %s\n"
|
||||
"--------------------------------------------------------------------------------\n",
|
||||
"Hex Reg Flight Altitude Speed Lat Lon Track Messages Seen %s\n"
|
||||
"-----------------------------------------------------------------------------------\n",
|
||||
progress);
|
||||
|
||||
while(a && count < Modes.interactive_rows) {
|
||||
@ -1820,8 +1834,10 @@ void interactiveShowData(void) {
|
||||
speed *= 1.852;
|
||||
}
|
||||
|
||||
printf("%-6s %-8s %-9d %-7d %-7.03f %-7.03f %-3d %-9ld %d sec\n",
|
||||
a->hexaddr, a->flight, altitude, speed,
|
||||
printf("%-6s %-3s %-8s %-9d %-7d %-7.03f %-7.03f %-3d %-9ld %d sec\n",
|
||||
a->hexaddr,
|
||||
a->reg?a->reg->code:" ",
|
||||
a->flight, altitude, speed,
|
||||
a->lat, a->lon, a->track, a->messages,
|
||||
(int)(now - a->seen));
|
||||
a = a->next;
|
||||
@ -2152,10 +2168,12 @@ char *aircraftsToJson(int *len) {
|
||||
|
||||
if (a->lat != 0 && a->lon != 0) {
|
||||
l = snprintf(p,buflen,
|
||||
"{\"hex\":\"%s\", \"flight\":\"%s\", \"lat\":%f, "
|
||||
"{\"hex\":\"%s\", \"reg\":\"%s\",\"flight\":\"%s\", \"lat\":%f, "
|
||||
"\"lon\":%f, \"altitude\":%d, \"track\":%d, "
|
||||
"\"speed\":%d},\n",
|
||||
a->hexaddr, a->flight, a->lat, a->lon, a->altitude, a->track,
|
||||
a->hexaddr,
|
||||
a->reg?a->reg->code:"",
|
||||
a->flight, a->lat, a->lon, a->altitude, a->track,
|
||||
a->speed);
|
||||
p += l; buflen -= l;
|
||||
/* Resize if needed. */
|
||||
|
Loading…
Reference in New Issue
Block a user