diff options
Diffstat (limited to 'src/js_raw.c')
-rw-r--r-- | src/js_raw.c | 77 |
1 files changed, 68 insertions, 9 deletions
diff --git a/src/js_raw.c b/src/js_raw.c index 5541162..9cdc168 100644 --- a/src/js_raw.c +++ b/src/js_raw.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 TOYOTA MOTOR CORPORATION + * Copyright (c) 2017-2019 TOYOTA MOTOR CORPORATION * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,7 @@ #include <linux/input.h> #include <linux/joystick.h> -#include "af-steering-wheel-binding.h" +#include "wheel-service.h" #include "js_raw.h" #include "js_signal_event.h" @@ -34,6 +34,8 @@ static int *axis; static char *button; +static timer_t tid; +static struct sigaction oldact; int js_signal_read(int fd) { @@ -44,16 +46,22 @@ int js_signal_read(int fd) size = read(fd, &jsEvent, sizeof(struct js_event)); if(size != 0) { - switch (jsEvent.type & ~JS_EVENT_INIT) + switch (jsEvent.type) //& ~JS_EVENT_INIT don't deal with init state. { + case JS_EVENT_BUTTON | JS_EVENT_INIT: + DBG_NOTICE("This is JS_EVENT_BUTTON init state [%d] : %d.", jsEvent.number, button[jsEvent.number]); + break; + case JS_EVENT_AXIS | JS_EVENT_INIT: + DBG_NOTICE("This is JS_EVENT_AXIS init state [%d] : %d.", jsEvent.number, axis[jsEvent.number]); + break; case JS_EVENT_BUTTON: button[jsEvent.number] = (char)jsEvent.value; - //NOTICEMSG("JS_EVENT_BUTTON %d\n", button[jsEvent.number]); + DBG_NOTICE("JS_EVENT_BUTTON [%d] : %d.", jsEvent.number, button[jsEvent.number]); newButtonValue(jsEvent.number, jsEvent.value); break; case JS_EVENT_AXIS: axis[jsEvent.number] = jsEvent.value; - //NOTICEMSG("JS_EVENT_AXIS %d\n", axis[jsEvent.number]); + DBG_NOTICE("JS_EVENT_AXIS [%d] : %d.", jsEvent.number, axis[jsEvent.number]); newAxisValue(jsEvent.number, jsEvent.value); break; default: @@ -80,7 +88,7 @@ int on_event(sd_event_source *s, int fd, uint32_t revents, void *userdata) rc = js_signal_read(fd); if(rc == -1) { - ERRMSG("JS Frame Read failed"); + DBG_ERROR("JS Frame Read failed"); return -1; } @@ -89,19 +97,20 @@ int on_event(sd_event_source *s, int fd, uint32_t revents, void *userdata) { /* T.B.D * if error or hungup */ - ERRMSG("Error or Hunup: rvent=%08x", revents); + DBG_ERROR("Error or Hunup: rvent=%08x", revents); } return 0; } -int js_open(const char *devname) +int js_open(const char *devname) { unsigned char numAxes = 0; unsigned char numButtons = 0; int version = 0; int fd; char name[JSNAMELEN] = "Unknown"; + char steering_name[JSNAMELEN] = "Logitech G29 Driving Force Racing Wheel"; struct js_corr cal[6]; int i, j; @@ -125,6 +134,17 @@ int js_open(const char *devname) ioctl(fd, JSIOCGBUTTONS, &numButtons); ioctl(fd, JSIOCGNAME(JSNAMELEN), name); + if (strcmp(name, steering_name) == 0) + { + setJsType(JS_TYPE_STEERING); + DBG_NOTICE("JS_TYPE_STEERING type!"); + } + else + { + setJsType(JS_TYPE_GAME_CTL); + DBG_NOTICE("JS_TYPE_GAME_CTL type!"); + } + for (i = 0; i < 6; i++) { int k = 0; @@ -151,7 +171,7 @@ int js_open(const char *devname) gis = g_unix_input_stream_new(fd, TRUE); if(gis == NULL) { - ERRMSG("g_unix_input_stream_new() failed!"); + DBG_ERROR("g_unix_input_stream_new() failed!"); } else { @@ -172,3 +192,42 @@ void js_close(int js) close(js); } + +int init_timer() +{ + struct sigaction act; + struct itimerspec itval; + + memset(&act, 0, sizeof(struct sigaction)); + memset(&oldact, 0, sizeof(struct sigaction)); + + act.sa_handler = updateTimerHandler; + act.sa_flags = SA_RESTART; + if(sigaction(SIGALRM, &act, &oldact) < 0) { + DBG_ERROR("sigaction failed."); + return -1; + } + + itval.it_value.tv_sec = 0; + itval.it_value.tv_nsec = 200000000; + itval.it_interval.tv_sec = 0; + itval.it_interval.tv_nsec = 200000000; + + if(timer_create(CLOCK_REALTIME, NULL, &tid) < 0) { + DBG_ERROR("timer_create failed."); + return -1; + } + + if(timer_settime(tid, 0, &itval, NULL) < 0) { + DBG_ERROR("timer_settime failed."); + return -1; + } + + return 0; +} + +void deinit_timer() +{ + timer_delete(tid); + sigaction(SIGALRM, &oldact, NULL); +}
\ No newline at end of file |