Esempio n. 1
0
int acquire_tracker(int t_key, int c_key, int port)
{
    new_tracker_transforms(1);

    onitcs_init(0, 0, 0);

    if ((buttons = onitcs_nbuttons()))
        button = (int *) calloc(buttons, sizeof (int));

    printf("ONIT %d %d %d\n", onitcs_naxes(),
                              onitcs_nbuttons(),
                              onitcs_npoints());

    return get_tracker_status();
}
Esempio n. 2
0
int acquire_tracker(int t_key, int c_key, int port)
{
    /* Acquire the tracker and controller shared memory segments. */

#ifndef _WIN32
    if ((tracker_id = shmget(t_key, sizeof (struct tracker_header), 0)) >= 0)
        tracker = (struct tracker_header *) shmat(tracker_id, 0, 0);

    if ((control_id = shmget(c_key, sizeof (struct control_header), 0)) >= 0)
        control = (struct control_header *) shmat(control_id, 0, 0);
#else
    wchar_t shmkey[256];

    swprintf(shmkey, 256, L"%d", t_key);
    if ((tracker_id = OpenFileMapping(FILE_MAP_WRITE, FALSE, shmkey)))
        tracker = (struct tracker_header *)
                  MapViewOfFile(tracker_id, FILE_MAP_WRITE, 0, 0, 0);
    else
        tracker = (struct tracker_header *) (-1);

    swprintf(shmkey, 256, L"%d", c_key);
    if ((control_id = OpenFileMapping(FILE_MAP_WRITE, FALSE, shmkey)))
        control = (struct control_header *)
                  MapViewOfFile(control_id, FILE_MAP_WRITE, 0, 0, 0);
    else
        control = (struct control_header *) (-1);
#endif

    /* Allocate storage for button states. */

    if (control != (struct control_header *) (-1))
        buttons = (uint32_t *) calloc(control->but_count, sizeof (uint32_t));

    /* Open a UDP socket for receiving. */

    if (port)
    {
        if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) >= 0)
        {
            sockaddr_t addr;

            /* Accept connections from any address on the given port. */

            addr.sin_family      = AF_INET;
            addr.sin_port        = htons((short) port);
            addr.sin_addr.s_addr = htonl(INADDR_ANY);

            /* Bind the socket to this address. */

            if (bind(sock, (struct sockaddr *) &addr, sizeof (sockaddr_t))>= 0)
            {
                transforms = 1;
            }
            else error("bind %d : %s", port, system_error());
        }
        else error("socket : %s", system_error());
    }

    /* Initialize the tracker transform. */

    if (tracker != (struct tracker_header *) (-1))
        new_tracker_transforms((int) tracker->count);

    return 1;
}