#include #include #include #include #include #include #include int main(int argc, char* argv[]) { Display *display; Window root, window; int screennumber,width,height; XSizeHints *sizehints; XWMHints *wmhints; XClassHint *classhints; char *WinName = "Magellan 3D Controller"; XTextProperty WindowName; GC wingc; XGCValues xgcvalues; XEvent report; XComposeStatus compose; KeySym keysym; sizehints = XAllocSizeHints(); wmhints = XAllocWMHints(); classhints = XAllocClassHint(); if ( (sizehints==NULL) || (wmhints==NULL) || (classhints==NULL) ) { fprintf( stderr, "Can't allocate memory! Exit ... \n" ); exit( -1 ); }; display = XOpenDisplay( NULL ); if ( display == NULL ) { fprintf( stderr, "Can't open display! Exit ... \n"); exit( -1 ); }; screennumber = DefaultScreen(display); width = DisplayWidth(display,screennumber); height = DisplayHeight(display,screennumber); root = DefaultRootWindow(display); window = XCreateSimpleWindow( display, root, 0,0, width/5*3,height/8, 20, BlackPixel(display,screennumber), WhitePixel(display,screennumber) ); XStringListToTextProperty( &WinName, 1, &WindowName ); XDeviceInfoPtr device_info, device; int num_dev; device_info = XListInputDevices(display, &num_dev); if (device_info) { for (int i = 0; i < num_dev; i++) { device=&device_info[i]; std::cout << device->name << std::endl; if(!strcmp(device->name, "spaceball")) { XAnyClassPtr any; any = (XAnyClassPtr) device->inputclassinfo; XButtonInfoPtr b; XValuatorInfoPtr v; v = NULL; b = NULL; int btns; for (int j = 0; j < device->num_classes; j++) { #if defined(__cplusplus) || defined(c_plusplus) switch (any->c_class) { #else switch (any->class) { #endif case ButtonClass: b = (XButtonInfoPtr) any; btns = b->num_buttons; std::cout << "num buttons: " << btns << std::endl; break; case ValuatorClass: v = (XValuatorInfoPtr) any; /* Sanity check: at least 6 valuators? */ std::cout << "num axes: " << v->num_axes << std::endl; if (v->num_axes < 6) { std::cout << "Insufficient number of axes\n"; exit(0); } XAxisInfoPtr a; a = (XAxisInfoPtr) ((char *) v + sizeof(XValuatorInfo)); break; } any = (XAnyClassPtr) ((char *) any + any->length); } if (v) { std::cout << "GLUT should be happy\n"; //__glutSpaceball = XOpenDevice(__glutDisplay, device->id); } } } } }