"org.fortiss.af3.rcp.help/git@git.fortiss.org:af3/af3-rcp.git" did not exist on "d7359f60d5879043d5280aa927b1d3efac0adb1c"
-
fortissBot authored
refs 7890
fortissBot authoredrefs 7890
Gamepad.c 3.37 KiB
#include "inc/Gamepad.h"
// constants
const char* GP_DEVICE_NAME = "/dev/input/js0";
// variables
volatile union input_events ie; // stores the button values
// worker
GEN_TYPE_boolean gp_is_running = true;
void* gp_worker(void* pt_args) {
int fd;
fd = open(GP_DEVICE_NAME, O_RDONLY);
if(fd <= 0) {
perror("Error while connecting to gamepad device");
return NULL;
}
struct timeval timeout;
struct js_event jse;
fd_set read_fds, write_fds, except_fds;
// loop until terminated...
while(gp_is_running) {
FD_ZERO(&read_fds);
FD_ZERO(&write_fds);
FD_ZERO(&except_fds);
FD_SET(fd, &read_fds);
timeout.tv_sec = 0;
timeout.tv_usec = 25000;
if (select(fd + 1, &read_fds, &write_fds, &except_fds, &timeout) == 1) {
if(read(fd,&jse,sizeof(jse)) == sizeof(jse)) {
jse.type &= ~JS_EVENT_INIT;
if(jse.type == JS_EVENT_AXIS) {
ie.inps[jse.number] = jse.value;
#ifdef DEBUG
printf("Axis %d %d\n", jse.number, jse.value);
#endif // DEBUG
}
if(jse.type == JS_EVENT_BUTTON) {
ie.inps[jse.number + 6] = jse.value;
#ifdef DEBUG
printf("Button %d %d\n",jse.number, jse.value);
#endif // DEBUG
}
}
}
}
close(fd);
return NULL;
}
// init, term
GEN_TYPE_boolean gp_initialized = false;
GEN_TYPE_boolean gp_terminated = false;
void gp_init() {
// important, since all btns are accessing the same method
if(gp_initialized) return;
gp_initialized = true;
// TODO initialize...
}
void gp_term() {
// important, since all btns are accessing the same method
if(gp_terminated) return;
gp_terminated = false;
gp_is_running = false;
}
// readers
GEN_TYPE_boolean gp_btn1_read() {
return ie.btns.bt_tri;
}
GEN_TYPE_boolean gp_btn2_read() {
return ie.btns.bt_cir;
}
GEN_TYPE_boolean gp_btn3_read() {
return ie.btns.bt_x;
}
GEN_TYPE_boolean gp_btn4_read() {
return ie.btns.bt_sqr;
}
GEN_TYPE_boolean gp_btnL1_read() {
return ie.btns.bt_l1;
}
GEN_TYPE_boolean gp_btnL2_read() {
return ie.btns.bt_l2;
}
GEN_TYPE_boolean gp_btnR1_read() {
return ie.btns.bt_r1;
}
GEN_TYPE_boolean gp_btnR2_read() {
return ie.btns.bt_r2;
}
GEN_TYPE_double gp_btnLX_read() {
return ie.btns.js1_lr;
}
GEN_TYPE_double gp_btnLY_read() {
return ie.btns.js1_ud;
}
GEN_TYPE_double gp_btnRX_read() {
return ie.btns.js2_lr;
}
GEN_TYPE_double gp_btnRY_read() {
return ie.btns.js1_ud;
}
// noval
GEN_TYPE_boolean gp_btn1_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btn2_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btn3_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btn4_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btnL1_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btnL2_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btnR1_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btnR2_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btnLX_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btnLY_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btnRX_is_noval() {
return false;
}
GEN_TYPE_boolean gp_btnRY_is_noval() {
return false;
}