PatchworkOS
966e257
A non-POSIX operating system.
Theme:
Default
Round
Robot
Loading...
Searching...
No Matches
kbd.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <
kernel/fs/sysfs.h
>
4
#include <
kernel/sched/wait.h
>
5
6
#include <
stdint.h
>
7
#include <
sys/kbd.h
>
8
9
/**
10
* @brief Keyboard abstraction.
11
* @defgroup kernel_drivers_abstract_kbd Keyboard Abstraction
12
* @ingroup kernel_drivers_abstract
13
*
14
* Keyboard devices are exposed as `/dev/kbd/[id]` directories, containing the following files:
15
* - `events`: A read-only pollable file that can be read to receive keyboard events as `kbd_event_t` structs.
16
* - `name`: A read-only file that contains the keyboard driver specified name (e.g. "PS/2")
17
*
18
* @{
19
*/
20
21
/**
22
* @brief Maximum number of queued keyboard events.
23
*/
24
#define KBD_MAX_EVENT 32
25
26
/**
27
* @brief Keyboard structure.
28
* @struct kbd_t
29
*/
30
typedef
struct
31
{
32
char
*
name
;
33
kbd_event_t
events[
KBD_MAX_EVENT
];
34
uint64_t
writeIndex
;
35
kbd_mods_t
mods
;
36
wait_queue_t
waitQueue
;
37
lock_t
lock
;
38
dentry_t
*
dir
;
39
dentry_t
*
eventsFile
;
40
dentry_t
*
nameFile
;
41
}
kbd_t
;
42
43
/**
44
* @brief Allocate and initialize a keyboard structure.
45
*
46
* Will make the keyboard available under `/dev/kbd/[id]`.
47
*
48
* @param name Driver specified name of the keyboard device.
49
* @return On success, the new keyboard structure. On failure, `NULL` and `errno` is set.
50
*/
51
kbd_t
*
kbd_new
(
const
char
* name);
52
53
/**
54
* @brief Free and deinitialize a keyboard structure.
55
*
56
* Removes the keyboard from `/dev/kbd/[id]`.
57
*
58
* @param kbd Pointer to the keyboard structure to free.
59
*/
60
void
kbd_free
(
kbd_t
*
kbd
);
61
62
/**
63
* @brief Push a keyboard event to the keyboard event queue.
64
*
65
* The event will be made available to user space by reading the `stream` file.
66
*
67
* @param kbd Pointer to the keyboard structure.
68
* @param type The type of the keyboard event.
69
* @param code The keycode of the keyboard event.
70
*/
71
void
kbd_push
(
kbd_t
*
kbd
,
kbd_event_type_t
type,
keycode_t
code);
72
73
/** @} */
kbd
static fd_t kbd
Definition
dwm.c:23
KBD_MAX_EVENT
#define KBD_MAX_EVENT
Maximum number of queued keyboard events.
Definition
kbd.h:24
kbd_push
void kbd_push(kbd_t *kbd, kbd_event_type_t type, keycode_t code)
Push a keyboard event to the keyboard event queue.
Definition
kbd.c:179
kbd_free
void kbd_free(kbd_t *kbd)
Free and deinitialize a keyboard structure.
Definition
kbd.c:154
kbd_new
kbd_t * kbd_new(const char *name)
Allocate and initialize a keyboard structure.
Definition
kbd.c:87
keycode_t
keycode_t
Keyboard keycode type.
Definition
kbd.h:27
kbd_mods_t
kbd_mods_t
Keyboard modifiers type.
Definition
kbd.h:297
kbd_event_type_t
kbd_event_type_t
Keyboard event type.
Definition
kbd.h:286
kbd.h
stdint.h
uint64_t
__UINT64_TYPE__ uint64_t
Definition
stdint.h:17
dentry_t
Directory entry structure.
Definition
dentry.h:84
kbd_event_t
Keyboard event structure.
Definition
kbd.h:313
kbd_t
Keyboard structure.
Definition
kbd.h:31
kbd_t::lock
lock_t lock
Definition
kbd.h:37
kbd_t::eventsFile
dentry_t * eventsFile
Definition
kbd.h:39
kbd_t::dir
dentry_t * dir
Definition
kbd.h:38
kbd_t::writeIndex
uint64_t writeIndex
Definition
kbd.h:34
kbd_t::waitQueue
wait_queue_t waitQueue
Definition
kbd.h:36
kbd_t::nameFile
dentry_t * nameFile
Definition
kbd.h:40
kbd_t::mods
kbd_mods_t mods
Definition
kbd.h:35
kbd_t::name
char * name
Definition
kbd.h:32
lock_t
A simple ticket lock implementation.
Definition
lock.h:43
wait_queue_t
The primitive that threads block on.
Definition
wait.h:182
sysfs.h
wait.h
include
kernel
drivers
abstract
kbd.h
Generated on Mon Dec 15 2025 21:55:53 for PatchworkOS by
1.9.8