Skip to content

Commit 43015c4

Browse files
author
Robin Müller
committed
Create complete input_event sequence to send within the gesture detection
- do not create the EV_SYN events inside the send_events method so also EV_REL events can be send with this method
1 parent 021cd14 commit 43015c4

File tree

3 files changed

+22
-56
lines changed

3 files changed

+22
-56
lines changed

src/gesture_detection.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,19 @@ static void process_abs_event(struct input_event event,
116116
}
117117
}
118118

119+
static void set_syn_event(struct input_event *syn_event) {
120+
memset(syn_event, 0, sizeof(struct input_event));
121+
syn_event->type = EV_SYN;
122+
syn_event->code = SYN_REPORT;
123+
}
124+
125+
static void set_key_event(struct input_event *key_event, int code, int value) {
126+
memset(key_event, 0, sizeof(struct input_event));
127+
key_event->type = EV_KEY;
128+
key_event->code = code;
129+
key_event->value = value;
130+
}
131+
119132
static input_event_array_t *process_syn_event(struct input_event event,
120133
configuration_t config,
121134
gesture_start_t gesture_start,
@@ -148,11 +161,16 @@ static input_event_array_t *process_syn_event(struct input_event event,
148161
int key = config.swipe_keys[FINGER_TO_INDEX(*finger_count)][direction].keys[i - 1];
149162
if (key > 0) {
150163
if (!result) {
151-
result = new_input_event_array(i);
164+
// i is the number of keys to press
165+
// therefore i input_events with value 1 + 1 EV_SYN event and i input_events with value 0 + EV_SYN event are needed
166+
result = new_input_event_array((i + 1) * 2);
167+
set_syn_event(&result->data[i]);
168+
set_syn_event(&result->data[result->length - 1]);
152169
}
153-
memset(&result->data[i - 1], 0, sizeof(struct input_event));
154-
result->data[i - 1].type = EV_KEY;
155-
result->data[i - 1].code = key;
170+
// press event
171+
set_key_event(&result->data[i - 1], key, 1);
172+
// release event
173+
set_key_event(&result->data[result->length / 2 + i - 1], key, 0);
156174
}
157175
}
158176
*finger_count = 0;

src/gestures_device.c

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -83,64 +83,13 @@ int destroy_uinput(int fd) {
8383
close(fd);
8484
}
8585

86-
void send_key(int fd, int key) {
87-
struct input_event key_ev, syn_ev;
88-
89-
memset(&key_ev, 0, sizeof(struct input_event));
90-
key_ev.type = EV_KEY;
91-
key_ev.code = key;
92-
// press the key
93-
key_ev.value = 1;
94-
if (write(fd, &key_ev, sizeof(struct input_event)) < 0) {
95-
die("error: write");
96-
}
97-
98-
memset(&syn_ev, 0, sizeof(struct input_event));
99-
syn_ev.type = EV_SYN;
100-
syn_ev.code = 0;
101-
syn_ev.value = 0;
102-
if (write(fd, &syn_ev, sizeof(struct input_event)) < 0) {
103-
die("error: write");
104-
}
105-
106-
// release the key
107-
key_ev.value = 0;
108-
if (write(fd, &key_ev, sizeof(struct input_event)) < 0) {
109-
die("error: write");
110-
}
111-
if (write(fd, &syn_ev, sizeof(struct input_event)) < 0) {
112-
die("error: write");
113-
}
114-
}
115-
11686
void send_events(int fd, input_event_array_t *input_events) {
117-
struct input_event syn_ev;
11887
uint8_t i;
11988
if (input_events->length > 0) {
12089
for (i = 0; i < input_events->length; i++) {
121-
input_events->data[i].value = 1;
12290
if (write(fd, &input_events->data[i], sizeof(struct input_event)) < 0) {
12391
die("error: write");
12492
}
12593
}
126-
127-
memset(&syn_ev, 0, sizeof(struct input_event));
128-
syn_ev.type = EV_SYN;
129-
syn_ev.code = SYN_REPORT;
130-
syn_ev.value = 0;
131-
if (write(fd, &syn_ev, sizeof(struct input_event)) < 0) {
132-
die("error: write");
133-
}
134-
135-
for (i = 0; i < input_events->length; i++) {
136-
input_events->data[i].value = 0;
137-
if (write(fd, &input_events->data[i], sizeof(struct input_event)) < 0) {
138-
die("error: write");
139-
}
140-
}
141-
142-
if (write(fd, &syn_ev, sizeof(struct input_event)) < 0) {
143-
die("error: write");
144-
}
14594
}
14695
}

src/gestures_device.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
int init_uinput(int_array_t *keys);
3232
int destroy_uinput(int fd);
33-
void send_key(int fd, int key);
3433
void send_events(int fd, input_event_array_t *input_events);
3534

3635
#endif // GESTURES_DEVICE_H_

0 commit comments

Comments
 (0)