|
|
(32 intermediate revisions by the same user not shown)
|
Line 1: |
Line 1: |
| + | '''Warning: this page is outdated. The GIMX Event Library is superseded by the [[gasync]] library.''' |
| + | |
| =The GIMX Event Library= | | =The GIMX Event Library= |
| | | |
− | GE is a cross-platform event library that can be used in Windows or Linux.<br /> | + | GE is a cross-platform event library for handling input from keyboards, mice, and joysticks.<br /> |
− | In Linux, it directly interfaces with [http://en.wikipedia.org/wiki/Evdev evdev].<br /> | + | It can be used in Windows or Linux.<br /> |
− | In Windows, it uses a modified SDL library.<br /> | + | It is released under the [http://www.gnu.org/licenses/gpl.html GPLv3 license] and is available in the [https://github.com/matlo/GIMX GIMX git repository].<br /> |
| + | GE supports multiple mice, keyboards and joysticks, which means the source of each event can be identified.<br /> |
| + | In Linux, it interfaces with [http://en.wikipedia.org/wiki/Evdev evdev] or [http://en.wikipedia.org/wiki/X.Org_Server X], and allows to write "interrupt-based" event processing.<br /> |
| + | In Windows, it interfaces with the RawInput API or the SDL library to get keyboard and mouse events. To get joystick events it uses the SDL 2.0 library, which handles standard joysticks and Xinput gamepads. RawInput event processing is "interrupt-based", whereas SDL 2.0 event processing is "polling-based".<br /> |
| | | |
− | This page shows how to use it. | + | This page only gives a pseudo-code example. Check the [https://github.com/matlo/GIMX/tree/master/shared/event/test/ test directory] for a complete example. |
| | | |
− | =Linux=
| + | To use GE in Linux, make sure to have [[Development_on_Linux#Set_Input_Device_Permissions_.28required_since_r1277.29|read access to the input devices]]. |
| | | |
− | ==Interrupt-driven, with periodic task== | + | =Example= |
| | | |
| #include <GE.h> | | #include <GE.h> |
Line 20: |
Line 25: |
| int main(int argc, char* argv[]) | | int main(int argc, char* argv[]) |
| { | | { |
− | if (!GE_initialize()) | + | if (!GE_initialize(GE_MKB_SOURCE_PHYSICAL)) //or GE_MKB_SOURCE_WINDOW_SYSTEM |
| { | | { |
| //handle the error | | //handle the error |
| } | | } |
| | | |
− | struct timespec period = {.tv_sec = 0, .tv_nsec = 10000000}; | + | GE_TimerStart(10000); //microseconds |
| | | |
− | GE_TimerStart(&period); | + | GE_SetCallback(process_event); |
| | | |
− | GE_SetCallback(process_event); | + | GE_grab(); //grab the mouse pointer |
| | | |
| while(!done) | | while(!done) |
| { | | { |
− | GE_PumpEvents();//blocks until timer fires | + | GE_PumpEvents();//returns when timer fires |
| | | |
| //do something periodically | | //do something periodically |
Line 43: |
Line 48: |
| } | | } |
| | | |
− | ==Interrupt-driven, without periodic task== | + | =Build and test= |
| | | |
− | #include <GE.h>
| + | ==Build the static library== |
− |
| + | cd ~ |
− | int process_event(GE_Event* event)
| + | git clone -b master --single-branch --depth 1 <nowiki>https://github.com/matlo/GIMX.git</nowiki> |
− | {
| + | cd GIMX/shared/event |
− | //process the event
| + | make |
− | }
| |
− |
| |
− | 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= | + | ==Build the test== |
| + | cd ~/GIMX/shared/event/test |
| + | make |
| | | |
− | ==Polling-driven== | + | ==Run the test== |
| + | cd ~/GIMX/shared/event/test |
| + | ./GE_test |
| | | |
− | #include <GE.h>
| + | The test displays all keyboards, mice and joysticks, and it then displays all input events. |
− |
| + | Press Escape or Ctrl+c to exit. |
− | int main(int argc, char* argv[])
| |
− | {
| |
− | if (!GE_initialize())
| |
− | {
| |
− | //handle the error
| |
− | }
| |
− |
| |
− | while(!done)
| |
− | {
| |
− | 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
| |
− |
| |
− | usleep(1000);//sleep some time
| |
− | }
| |
− |
| |
− | GE_quit();
| |
− |
| |
− | return 0;
| |
− | }
| |
Warning: this page is outdated. The GIMX Event Library is superseded by the gasync library.
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 git repository.
GE supports multiple mice, keyboards and joysticks, which means the source of each event can be identified.
In Linux, it interfaces with evdev or X, and allows to write "interrupt-based" event processing.
In Windows, it interfaces with the RawInput API or the SDL library to get keyboard and mouse events. To get joystick events it uses the SDL 2.0 library, which handles standard joysticks and Xinput gamepads. RawInput event processing is "interrupt-based", whereas SDL 2.0 event processing is "polling-based".
This page only gives a pseudo-code example. Check the test directory for a complete example.
To use GE in Linux, make sure to have read access to the input devices.
Example
#include <GE.h>
int process_event(GE_Event* event)
{
//handle the event
}
int main(int argc, char* argv[])
{
if (!GE_initialize(GE_MKB_SOURCE_PHYSICAL)) //or GE_MKB_SOURCE_WINDOW_SYSTEM
{
//handle the error
}
GE_TimerStart(10000); //microseconds
GE_SetCallback(process_event);
GE_grab(); //grab the mouse pointer
while(!done)
{
GE_PumpEvents();//returns when timer fires
//do something periodically
}
GE_quit();
return 0;
}
Build and test
Build the static library
cd ~
git clone -b master --single-branch --depth 1 https://github.com/matlo/GIMX.git
cd GIMX/shared/event
make
Build the test
cd ~/GIMX/shared/event/test
make
Run the test
cd ~/GIMX/shared/event/test
./GE_test
The test displays all keyboards, mice and joysticks, and it then displays all input events.
Press Escape or Ctrl+c to exit.