37 signal(SIGINT, SIG_DFL);
58 Modes.interactive = 1;
68 fprintf(stderr,
"Out of memory allocating data buffer.\n");
73 memset(
Modes.icao_cache, 0,
sizeof(uint32_t) * MODES_ICAO_CACHE_LEN * 2);
76 if ( (
Modes.fUserLat > 90.0)
77 || (
Modes.fUserLat < -90.0)
78 || (
Modes.fUserLon > 360.0)
79 || (
Modes.fUserLon < -180.0) ) {
81 }
else if (
Modes.fUserLon > 180.0) {
82 Modes.fUserLon -= 360.0;
90 if ((
Modes.fUserLat != 0.0) || (
Modes.fUserLon != 0.0)) {
102 "-----------------------------------------------------------------------------\n"
104 "-----------------------------------------------------------------------------\n"
105 "--interactive Interactive mode refreshing data on screen\n"
106 "--interactive-rows <num> Max number of rows in interactive mode (default: 15)\n"
107 "--interactive-ttl <sec> Remove from list if idle for <sec> (default: 60)\n"
108 "--interactive-rtl1090 Display flight table in RTL1090 format\n"
109 "--modeac Enable decoding of SSR modes 3/A & 3/C\n"
110 "--net-bo-ipaddr <IPv4> TCP Beast output listen IPv4 (default: 127.0.0.1)\n"
111 "--net-bo-port <port> TCP Beast output listen port (default: 30005)\n"
112 "--lat <latitude> Reference/receiver latitide for surface posn (opt)\n"
113 "--lon <longitude> Reference/receiver longitude for surface posn (opt)\n"
114 "--no-crc-check Disable messages with broken CRC (discouraged)\n"
115 "--no-fix Disable single-bits error correction using CRC\n"
116 "--fix Enable single-bits error correction using CRC\n"
117 "--aggressive More CPU for more messages (two bits fixes, ...)\n"
118 "--metric Use metric units (meters, km/h, ...)\n"
119 "--help Show this help\n"
125 int main(
int argc,
char **argv) {
135 for (j = 1; j < argc; j++) {
136 int more = ((j + 1) < argc);
138 if (!strcmp(argv[j],
"--net-bo-port") && more) {
139 Modes.net_input_beast_port = atoi(argv[++j]);
140 }
else if (!strcmp(argv[j],
"--net-bo-ipaddr") && more) {
141 strcpy(
View1090.net_input_beast_ipaddr, argv[++j]);
142 }
else if (!strcmp(argv[j],
"--modeac")) {
144 }
else if (!strcmp(argv[j],
"--interactive-rows") && more) {
145 Modes.interactive_rows = atoi(argv[++j]);
146 }
else if (!strcmp(argv[j],
"--interactive")) {
147 Modes.interactive = 1;
148 }
else if (!strcmp(argv[j],
"--interactive-ttl") && more) {
149 Modes.interactive_display_ttl = atoi(argv[++j]);
150 }
else if (!strcmp(argv[j],
"--interactive-rtl1090")) {
151 Modes.interactive = 1;
152 Modes.interactive_rtl1090 = 1;
153 }
else if (!strcmp(argv[j],
"--lat") && more) {
154 Modes.fUserLat = atof(argv[++j]);
155 }
else if (!strcmp(argv[j],
"--lon") && more) {
156 Modes.fUserLon = atof(argv[++j]);
157 }
else if (!strcmp(argv[j],
"--metric")) {
159 }
else if (!strcmp(argv[j],
"--no-crc-check")) {
161 }
else if (!strcmp(argv[j],
"--fix")) {
163 }
else if (!strcmp(argv[j],
"--no-fix")) {
165 }
else if (!strcmp(argv[j],
"--aggressive")) {
167 }
else if (!strcmp(argv[j],
"--help")) {
171 fprintf(stderr,
"Unknown or not enough arguments for option '%s'.\n\n", argv[j]);
182 fprintf(stderr,
"Failed to connect to %s:%d\n",
View1090.net_input_beast_ipaddr,
Modes.net_input_beast_port);
197 fprintf(stderr,
"Max number of clients exceeded : fd = 0x%X\n", fd);
202 c = (
struct client *) malloc(
sizeof(*c));
208 if (
Modes.maxfd < fd) {
213 while (!
Modes.exit) {
void interactiveRemoveStaleAircrafts(void)
int anetTcpConnect(char *err, char *addr, int port)
void sigintHandler(int dummy)
void interactiveShowData(void)
#define MODES_ICAO_CACHE_LEN
void view1090InitConfig(void)
int decodeBinMessage(struct client *c, char *p)
#define MODES_USER_LATITUDE_DFLT
void modesInitErrorInfo()
void modesReadFromClient(struct client *c, char *sep, int(*handler)(struct client *, char *))
#define MODES_USER_LONGITUDE_DFLT
#define MODES_INTERACTIVE_DISPLAY_TTL
int main(int argc, char *argv[])
#define MODES_MAX_BITERRORS
#define MODES_INTERACTIVE_DELETE_TTL
#define VIEW1090_NET_OUTPUT_IP_ADDRESS
#define MODES_DUMP1090_VERSION
#define MODES_USER_LATLON_VALID
#define MODES_NET_OUTPUT_BEAST_PORT
#define MODES_INTERACTIVE_ROWS