aboutsummaryrefslogtreecommitdiff
path: root/marsond.c
diff options
context:
space:
mode:
Diffstat (limited to 'marsond.c')
-rw-r--r--marsond.c42
1 files changed, 19 insertions, 23 deletions
diff --git a/marsond.c b/marsond.c
index d936569..8ce061c 100644
--- a/marsond.c
+++ b/marsond.c
@@ -352,6 +352,14 @@ void release_key(int code) {
write_event(&ev);
}
+void shift_timing(long long *last, const char *name, int code) {
+ if(*last && (gettime_millis() < (*last + shift_ms))) {
+ debug_fg("!!! Enter pressed; last %s shift press < %dms ago, sending %s shift release", name, shift_ms, name);
+ release_key(code);
+ *last = 0;
+ }
+}
+
int main(int argc, char **argv) {
int i;
long long last_l_shift = 0, last_r_shift = 0;
@@ -456,32 +464,20 @@ int main(int argc, char **argv) {
debug_fg("got event: type %d, code 0x%02x, value %d",
ev.type, ev.code, ev.value);
- if(ev.type == EV_KEY && ev.value == 1) {
- if(ev.code == KEY_RIGHTSHIFT) {
- last_r_shift = (ev.value ? gettime_millis() : 0);
- debug_fg("last_r_shift %lld", last_r_shift);
- } else if(ev.code == KEY_LEFTSHIFT) {
- last_l_shift = (ev.value ? gettime_millis() : 0);
- debug_fg("last_l_shift %lld", last_l_shift);
- }
- }
-
/* ev.value: 0 == release, 1 == initial press, 2 == repeat */
if(ev.type == EV_KEY) {
- if(ev.code == KEY_ENTER && ev.value == 1) {
- if(last_r_shift && (gettime_millis() < (last_r_shift + shift_ms))) {
- debug_fg("!!! Enter pressed; last right shift press < %dms ago, sending right shift release", shift_ms);
- release_key(KEY_RIGHTSHIFT);
- last_r_shift = 0;
- }
- if(last_l_shift && (gettime_millis() < (last_l_shift + shift_ms))) {
- debug_fg("!!! Enter pressed; last left shift press < %dms ago, sending left shift release", shift_ms);
- release_key(KEY_LEFTSHIFT);
- last_l_shift = 0;
+ if(ev.value == 1) {
+ if(ev.code == KEY_RIGHTSHIFT) {
+ last_r_shift = (ev.value ? gettime_millis() : 0);
+ debug_fg("last_r_shift %lld", last_r_shift);
+ } else if(ev.code == KEY_LEFTSHIFT) {
+ last_l_shift = (ev.value ? gettime_millis() : 0);
+ debug_fg("last_l_shift %lld", last_l_shift);
+ } else if(ev.code == KEY_ENTER) {
+ shift_timing(&last_r_shift, "right", KEY_RIGHTSHIFT);
+ shift_timing(&last_l_shift, "left", KEY_LEFTSHIFT);
}
- }
-
- if(ev.code == KEY_ENTER && ev.value == 0) {
+ } else if(ev.code == KEY_ENTER && ev.value == 0) {
debug_fg("!!! got Enter key release, delaying %dms", delay_ms);
usleep(delay_ms * 1000);
}