/*======================================================================== * This is a small test application for GLFW. * joystick input test. *========================================================================*/ #include #include #include #include #define MAX_AXES 10 #define MAX_BUTTONS 30 struct JoystickState { int present; int num_axes; int num_buttons; float axes[MAX_AXES]; unsigned char buttons[MAX_BUTTONS]; }; static struct JoystickState states[GLFW_JOYSTICK_LAST + 1]; int running; int keyrepeat = 0; int systemkeys = 1; /*======================================================================== * Retrieve joystick states *========================================================================*/ static void updateJoysticksState(void) { int joy; for (joy = GLFW_JOYSTICK_1; joy < GLFW_JOYSTICK_LAST + 1; joy++) { printf("Updating information for joystick %d\n", joy); states[joy].present = glfwGetJoystickParam(joy, GLFW_PRESENT); if (states[joy].present == GL_TRUE) { states[joy].num_axes = glfwGetJoystickPos(joy, states[joy].axes, MAX_AXES); states[joy].num_buttons = glfwGetJoystickButtons(joy, states[joy].buttons, MAX_BUTTONS); } } } /*======================================================================== * Print out the state of all joysticks on the standard output *========================================================================*/ static void displayJoysticksState(void) { int joy; int i; for (joy = GLFW_JOYSTICK_1; joy < GLFW_JOYSTICK_LAST + 1; joy++) { printf("Joystick %d: %s\n", joy, (states[joy].present == GL_TRUE ? "present" : "not connected")); if (states[joy].present == GL_TRUE) { if (states[joy].num_axes > 0) { printf(" axes: %.3f", states[joy].axes[0]); for (i = 1; i < states[joy].num_axes; i++) printf(", %.3f", states[joy].axes[i]); printf("\n"); } else printf(" axes: none\n"); if (states[joy].num_buttons > 0) { printf(" buttons: 00 => %c", ((states[joy].buttons[0] == GLFW_PRESS) ? 'P' : 'R')); for (i = 1; i < states[joy].num_buttons; i++) printf(", %02d => %c", i, ((states[joy].buttons[i] == GLFW_PRESS) ? 'P' : 'R')); printf("\n"); } else printf(" buttons: none\n"); } } } int main(void) { double start; double t; double update; /* Initialise GLFW */ if (!glfwInit(NULL)) { fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError())); exit(EXIT_FAILURE); } printf("The program will work for 20 seconds and display every seconds the state of the joysticks\n"); printf("Your computer is going to be very slow as the program is doing an active loop .....\n"); start = glfwGetTime(); update = start; /* print the initial state of all joysticks */ updateJoysticksState(); printf("\n"); displayJoysticksState(); running = GL_TRUE; /* Main loop */ while (running) { /* Get time */ t = glfwGetTime(); /* Display the state of all connected joysticks every secons */ if ((t - update) > 1.0) { update = t; printf("\n"); updateJoysticksState(); printf("\n"); displayJoysticksState(); } /* Check if the window was closed */ if ((t - start) > 20.0) running = GL_FALSE; } /* Close OpenGL window and terminate GLFW */ glfwTerminate(); return 0; }