Example #1
0
//
//=========================================================================
//
// This function is called a few times every second by main in order to
// perform tasks we need to do continuously, like accepting new clients
// from the net, refreshing the screen in interactive mode, and so forth
//
void backgroundTasks(void) {
    static time_t next_stats;

    if (Modes.net) {
        modesReadFromClients();
    }    

    // If Modes.aircrafts is not NULL, remove any stale aircraft
    if (Modes.aircrafts) {
        interactiveRemoveStaleAircrafts();
    }

    // Refresh screen when in interactive mode
    if (Modes.interactive) {
        interactiveShowData();
    }

    if (Modes.stats > 0) {
        time_t now = time(NULL);
        if (now > next_stats) {
            if (next_stats != 0)
                display_stats();
            next_stats = now + Modes.stats;
        }
    }
}
Example #2
0
//
//=========================================================================
//
// This function is called a few times every second by main in order to
// perform tasks we need to do continuously, like accepting new clients
// from the net, refreshing the screen in interactive mode, and so forth
//
void backgroundTasks(void) {
    if (Modes.net) {
        modesReadFromClients();
    }    

    // If Modes.aircrafts is not NULL, remove any stale aircraft
    if (Modes.aircrafts) {
        interactiveRemoveStaleAircrafts();
    }

    // Refresh screen when in interactive mode
    if (Modes.interactive) {
        interactiveShowData();
    }
}
Example #3
0
//
//=========================================================================
//
int main(int argc, char **argv) {
    int j, fd;
    struct client *c;

    // Set sane defaults

    view1090InitConfig();
    signal(SIGINT, sigintHandler); // Define Ctrl/C handler (exit program)

    // Parse the command line options
    for (j = 1; j < argc; j++) {
        int more = ((j + 1) < argc); // There are more arguments

        if        (!strcmp(argv[j],"--net-bo-port") && more) {
            Modes.net_input_beast_port = atoi(argv[++j]);
        } else if (!strcmp(argv[j],"--net-bo-ipaddr") && more) {
            strcpy(View1090.net_input_beast_ipaddr, argv[++j]);
        } else if (!strcmp(argv[j],"--modeac")) {
            Modes.mode_ac = 1;
        } else if (!strcmp(argv[j],"--interactive-rows") && more) {
            Modes.interactive_rows = atoi(argv[++j]);
        } else if (!strcmp(argv[j],"--interactive")) {
            Modes.interactive = 1;
        } else if (!strcmp(argv[j],"--interactive-ttl") && more) {
            Modes.interactive_display_ttl = atoi(argv[++j]);
        } else if (!strcmp(argv[j],"--interactive-rtl1090")) {
            Modes.interactive = 1;
            Modes.interactive_rtl1090 = 1;
        } else if (!strcmp(argv[j],"--lat") && more) {
            Modes.fUserLat = atof(argv[++j]);
        } else if (!strcmp(argv[j],"--lon") && more) {
            Modes.fUserLon = atof(argv[++j]);
        } else if (!strcmp(argv[j],"--metric")) {
            Modes.metric = 1;
        } else if (!strcmp(argv[j],"--no-crc-check")) {
            Modes.check_crc = 0;
        } else if (!strcmp(argv[j],"--fix")) {
            Modes.nfix_crc = 1;
        } else if (!strcmp(argv[j],"--no-fix")) {
            Modes.nfix_crc = 0;
        } else if (!strcmp(argv[j],"--aggressive")) {
            Modes.nfix_crc = MODES_MAX_BITERRORS;
        } else if (!strcmp(argv[j],"--help")) {
            showHelp();
            exit(0);
        } else {
            fprintf(stderr, "Unknown or not enough arguments for option '%s'.\n\n", argv[j]);
            showHelp();
            exit(1);
        }
    }

    // Initialization
    view1090Init();

    // Try to connect to the selected ip address and port. We only support *ONE* input connection which we initiate.here.
    if ((fd = anetTcpConnect(Modes.aneterr, View1090.net_input_beast_ipaddr, Modes.net_input_beast_port)) == ANET_ERR) {
        fprintf(stderr, "Failed to connect to %s:%d\n", View1090.net_input_beast_ipaddr, Modes.net_input_beast_port);
        exit(1);
    }
    //
    // Setup a service callback client structure for a beast binary input (from dump1090)
    // This is a bit dodgy under Windows. The fd parameter is a handle to the internet
    // socket on which we are receiving data. Under Linux, these seem to start at 0 and 
    // count upwards. However, Windows uses "HANDLES" and these don't nececeriy start at 0.
    // dump1090 limits fd to values less than 1024, and then uses the fd parameter to 
    // index into an array of clients. This is ok-ish if handles are allocated up from 0.
    // However, there is no gaurantee that Windows will behave like this, and if Windows 
    // allocates a handle greater than 1024, then dump1090 won't like it. On my test machine, 
    // the first Windows handle is usually in the 0x54 (84 decimal) region.

    if (fd >= MODES_NET_MAX_FD) { // Max number of clients reached
        fprintf(stderr, "Max number of clients exceeded : fd = 0x%X\n", fd);
        close(fd);
        exit(1);
    }

    c = (struct client *) malloc(sizeof(*c));
    c->buflen  = 0;
    c->fd      = 
    c->service =
    Modes.bis  = fd;
    Modes.clients[fd] = c;
    if (Modes.maxfd < fd) {
        Modes.maxfd = fd;
    }

    // Keep going till the user does something that stops us
    while (!Modes.exit) {
        modesReadFromClient(c,"",decodeBinMessage);
        interactiveRemoveStaleAircrafts();
        interactiveShowData();
    }

    // The user has stopped us, so close any socket we opened
    if (fd != ANET_ERR) 
      {close(fd);}

    pthread_exit(0);

    return (0);
}
Example #4
0
//
//=========================================================================
//
int main(int argc, char **argv) {
    int j, fd;
    struct client *c;

    // Set sane defaults

    ppup1090InitConfig();
    signal(SIGINT, sigintHandler); // Define Ctrl/C handler (exit program)

    // Parse the command line options
    for (j = 1; j < argc; j++) {
        int more = ((j + 1) < argc); // There are more arguments

        if        (!strcmp(argv[j],"--net-bo-port") && more) {
            Modes.net_input_beast_port = atoi(argv[++j]);
        } else if (!strcmp(argv[j],"--net-bo-ipaddr") && more) {
            strcpy(ppup1090.net_input_beast_ipaddr, argv[++j]);
        } else if (!strcmp(argv[j],"--quiet")) {
            ppup1090.quiet = 1;
        } else if (!strcmp(argv[j],"--help")) {
            showHelp();
            exit(0);
        } else {
            fprintf(stderr, "Unknown or not enough arguments for option '%s'.\n\n", argv[j]);
            showHelp();
            exit(1);
        }
    }

#ifdef _WIN32
    // Try to comply with the Copyright license conditions for binary distribution
    if (!Modes.quiet) {showCopyright();}
#endif

    // Initialization
    ppup1090Init();

    // Try to connect to the selected ip address and port. We only support *ONE* input connection which we initiate.here.
    if ((fd = anetTcpConnect(Modes.aneterr, ppup1090.net_input_beast_ipaddr, Modes.net_input_beast_port)) == ANET_ERR) {
        fprintf(stderr, "Failed to connect to %s:%d\n", ppup1090.net_input_beast_ipaddr, Modes.net_input_beast_port);
        exit(1);
    }
    //
    // Setup a service callback client structure for a beast binary input (from dump1090)
    // This is a bit dodgy under Windows. The fd parameter is a handle to the internet
    // socket on which we are receiving data. Under Linux, these seem to start at 0 and 
    // count upwards. However, Windows uses "HANDLES" and these don't nececeriy start at 0.
    // dump1090 limits fd to values less than 1024, and then uses the fd parameter to 
    // index into an array of clients. This is ok-ish if handles are allocated up from 0.
    // However, there is no gaurantee that Windows will behave like this, and if Windows 
    // allocates a handle greater than 1024, then dump1090 won't like it. On my test machine, 
    // the first Windows handle is usually in the 0x54 (84 decimal) region.

    c = (struct client *) malloc(sizeof(*c));
    c->next    = NULL;
    c->buflen  = 0;
    c->fd      = 
    c->service =
    Modes.bis  = fd;
    Modes.clients = c;

    // Keep going till the user does something that stops us
    while (!Modes.exit) {
        modesReadFromClient(c,"",decodeBinMessage);
        interactiveRemoveStaleAircrafts();
        postCOAA ();
    }

    // The user has stopped us, so close any socket we opened
    if (fd != ANET_ERR) 
      {close(fd);}

    closeCOAA ();
#ifndef _WIN32
    pthread_exit(0);
#else
    return (0);
#endif
}