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(); }
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; }