GE
Contents
The GIMX Event Library
GE is a cross-platform event library for handling input from keyboards, mice, and joysticks.
It can be used in Windows or Linux.
It is released under the GPLv3 license and is available in the GIMX svn repository.
GE supports multiple mice, keyboards and joysticks, which means the source of each event can be identified.
In Linux, it directly interfaces with evdev, and allows to write "interrupt-based" event processing.
In Windows, it uses a modified SDL library, and allows to write "polling-based" event processing.
This page only gives pseudo-code examples. Check the test directory to read complete examples.
Linux
To use GE in Linux, make sure to have read access to the input devices.
Interrupt-driven, with periodic task
#include <GE.h> int process_event(GE_Event* event) { //handle the event } int main(int argc, char* argv[]) { if (!GE_initialize()) { //handle the error } struct timespec period = {.tv_sec = 0, .tv_nsec = 10000000}; GE_TimerStart(&period); GE_SetCallback(process_event); while(!done) { GE_PumpEvents();//blocks until timer fires //do something periodically } GE_quit(); return 0; }
Interrupt-driven, without periodic task
#include <GE.h> int process_event(GE_Event* event) { //process the event } int main(int argc, char* argv[]) { if (!GE_initialize()) { //handle the error } GE_SetCallback(GE_PushEvent); while(!done) { GE_PumpEvents();//retrieve 1 event and return (blocks until event reception) num_evt = GE_PeepEvents(events, 1); if (num_evt > 0) { //process the event } } GE_quit(); return 0; }
Windows
Polling-driven
#include <GE.h> int main(int argc, char* argv[]) { if (!GE_initialize()) { //handle the error } while(!done) { t0 = get_time(); GE_PumpEvents();//retrieve all pending events and return (does not block) num_evt = GE_PeepEvents(events, sizeof(events) / sizeof(events[0])); if (num_evt > 0) { for (event = events; event < events + num_evt; ++event) { //process the event } } //do something periodically t1 = get_time(); time_to_sleep = PERIOD - (t1-t0);//avoid the period to drift usleep(time_to_sleep);//sleep some time (removing this would hug the cpu...) } GE_quit(); return 0; }
Build and test
Build the static library
cd ~ svn checkout http://diyps3controller.googlecode.com/svn/trunk/GIMX/shared/event cd event make
Build the test
cd ~/event/test make
Run the test
On Linux:
cd ~/event/test ./linux_test
On Windows:
cd ~/event/test ./windows_test
The test displays all keyboards, mice and joysticks, and it then displays all input events. Press Escape or Ctrl+c to exit.