Compare commits

..

No commits in common. "634c8a1727bf6ab13bfb01400aa7be64e2db4023" and "13275a969bef8787a0c6a0e385673ce88a30c161" have entirely different histories.

3 changed files with 27 additions and 30 deletions

View File

@ -9049,3 +9049,5 @@ void sormfmtd(char *csv) {
} }
#endif #endif

BIN
tikker

Binary file not shown.

View File

@ -1,18 +1,19 @@
#include "sormc.h"
#include <fcntl.h>
#include <linux/input.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/ioctl.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h>
#include <linux/input.h>
#include <sys/ioctl.h>
#include "sormc.h"
#define MAX_DEVICES 32 #define MAX_DEVICES 32
#define DEVICE_PATH "/dev/input/event" #define DEVICE_PATH "/dev/input/event"
int is_keyboard(int fd) { int is_keyboard(int fd) {
char device_name[256] = {0}; char device_name[256] = {0};
if (ioctl(fd, EVIOCGNAME(sizeof(device_name)), device_name) < 0) { if (ioctl(fd, EVIOCGNAME(sizeof(device_name)), device_name) < 0) {
return 0; return 0;
} }
@ -22,26 +23,23 @@ int is_keyboard(int fd) {
int main() { int main() {
db = sormc("tikker.db"); db = sormc("tikker.db");
ulonglong times_repeated = 0; sormq(db,"CREATE TABLE IF NOT EXISTS kevent (id INTEGER PRIMARY KEY AUTOINCREMENT, code,event,name,timestamp)");
ulonglong times_pressed = 0;
ulonglong times_released = 0;
sormq(db, "CREATE TABLE IF NOT EXISTS kevent (id INTEGER PRIMARY KEY AUTOINCREMENT, code,event,name,timestamp)");
int keyboard_fds[MAX_DEVICES]; int keyboard_fds[MAX_DEVICES];
int num_keyboards = 0; int num_keyboards = 0;
for (int i = 0; i < MAX_DEVICES; i++) { for (int i = 0; i < MAX_DEVICES; i++) {
char device_path[32]; char device_path[32];
snprintf(device_path, sizeof(device_path), "%s%d", DEVICE_PATH, i); snprintf(device_path, sizeof(device_path), "%s%d", DEVICE_PATH, i);
int fd = open(device_path, O_RDONLY); int fd = open(device_path, O_RDONLY);
if (fd < 0) { if (fd < 0) {
continue; continue;
} }
if (is_keyboard(fd)) { if (is_keyboard(fd)) {
keyboard_fds[num_keyboards++] = fd; keyboard_fds[num_keyboards++] = fd;
printf("Found keyboard: %s\n", device_path); printf("Found keyboard: %s\n", device_path);
@ -59,11 +57,11 @@ int main() {
struct input_event ev; struct input_event ev;
fd_set read_fds; fd_set read_fds;
while (1) { while (1) {
FD_ZERO(&read_fds); FD_ZERO(&read_fds);
int max_fd = -1; int max_fd = -1;
for (int i = 0; i < num_keyboards; i++) { for (int i = 0; i < num_keyboards; i++) {
FD_SET(keyboard_fds[i], &read_fds); FD_SET(keyboard_fds[i], &read_fds);
if (keyboard_fds[i] > max_fd) { if (keyboard_fds[i] > max_fd) {
@ -79,30 +77,27 @@ int main() {
for (int i = 0; i < num_keyboards; i++) { for (int i = 0; i < num_keyboards; i++) {
if (FD_ISSET(keyboard_fds[i], &read_fds)) { if (FD_ISSET(keyboard_fds[i], &read_fds)) {
ssize_t bytes = read(keyboard_fds[i], &ev, sizeof(struct input_event)); ssize_t bytes = read(keyboard_fds[i], &ev, sizeof(struct input_event));
if (bytes == sizeof(struct input_event)) { if (bytes == sizeof(struct input_event)) {
if (ev.type == EV_KEY) { if (ev.type == EV_KEY) {
char key_name[256]; char key_name[256];
ioctl(keyboard_fds[i], EVIOCGNAME(sizeof(key_name)), key_name); ioctl(keyboard_fds[i], EVIOCGNAME(sizeof(key_name)), key_name);
printf("Keyboard: %s, ", key_name); printf("Keyboard: %s, ", key_name);
char *event_name = NULL; char * event_name = NULL;
if (ev.value == 1) { if(ev.value == 1){
event_name = "PRESSED"; event_name = "PRESSED";
times_pressed++; }else if(ev.value == 0){
} else if (ev.value == 0) {
event_name = "RELEASED"; event_name = "RELEASED";
times_released++; }else {
} else {
event_name = "REPEATED"; event_name = "REPEATED";
times_repeated++;
} }
sormq(db, "INSERT INTO kevent (code, event, name,timestamp) VALUES (%d, %s, %s, DATETIME('now'))", ev.code, sormq(db, "INSERT INTO kevent (code, event, name,timestamp) VALUES (%d, %s, %s, DATETIME('now'))",ev.code,event_name,key_name);
event_name, key_name); printf("Event: %s, ",
printf("Event: %s, ", ev.value == 1 ? "PRESSED" : ev.value == 0 ? "RELEASED" : "REPEATED"); ev.value == 1 ? "PRESSED" :
printf("Key Code: %d ", ev.code); ev.value == 0 ? "RELEASED" : "REPEATED");
printf("Pr: %lld Rel: %lld Rep: %lld\n", times_pressed, times_released, times_repeated); printf("Key Code: %d\n", ev.code);
} }
} }
} }