Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
input.c
Go to the documentation of this file.
1#include "init/init.h"
2#include "input/keymap.h"
4#include "notify.h"
5#include "type.h"
6#include <input.h>
7#include <ioforge/ioforge.h>
8
9static struct input_event_data* __event_data = 0;
10INIT(Input) {
11 notify_dev_create(str("/input/trigered"));
13 (struct input_event_data*)kalloc(sizeof(struct input_event_data));
14}
15
17 if (dev->type == IOFORGE_USB_DEVICE) {
18 struct ioforge_usb_device* usb_dev = (struct ioforge_usb_device*)dev;
19 if (usb_dev->class_code != 0x3)
20 return;
21 }
22
23 static boolean_t shift = false;
24
25 if (code == LEFT_SHIFT || code == RIGHT_SHIFT || code == KEY_CAPS_LOCK) {
26 shift = (value == 1);
27 return;
28 }
29
30 if (value != 1)
31 return;
32
33 uint16_t ascii = 0;
35 ascii = scancode_to_ascii(code, shift);
36
37 if (ascii == 0)
38 return;
39
40 // serial2_printf("input: code=%x ascii=%x\n", code, ascii);
41
42 __atomic_store_n(&__event_data->code, ascii, __ATOMIC_RELAXED);
43 __atomic_store_n(&__event_data->input_active, 1, __ATOMIC_RELAXED);
44
45 notify_call("/input/trigered", 0, __event_data);
46}
#define INIT(fn)
Definition init.h:26
void input_report_key(struct ioforge_device *dev, uint16_t code, int value)
Definition input.c:16
static struct input_event_data * __event_data
Definition input.c:9
@ LEFT_SHIFT
Definition input.h:76
@ KEY_CAPS_LOCK
Definition input.h:133
@ RIGHT_SHIFT
Definition input.h:80
@ IOFORGE_USB_DEVICE
Definition ioforge.h:15
void * kalloc(size_t size)
uint16_t scancode_to_ascii(uint16_t scancode, boolean_t shift)
Definition keymap.c:62
uint8_t code
Definition icmp.h:1
void notify_dev_create(kstring name)
Definition notify.c:41
int notify_call(char *name, uint32_t event, void *data)
Definition notify.c:110
return value
Definition oct2bin.h:22
kstring str(const char *str)
IoForgeType type
Definition ioforge.h:31
unsigned short uint16_t
Definition type.h:13
uint8_t boolean_t
Definition type.h:89