GE

From GIMX

Revision as of 23:33, 25 November 2013 by Matlo (talk | contribs) (Build the static library)

Jump to: navigation, search

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.