PatchworkOS
966e257
A non-POSIX operating system.
Theme:
Default
Round
Robot
Loading...
Searching...
No Matches
mouse.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/mouse.h
>
8
9
/**
10
* @brief Mouse driver abstraction.
11
* @defgroup kernel_drivers_abstract_mouse Mouse Abstraction
12
* @ingroup kernel_drivers_abstract
13
*
14
* Mouse devices are exposed as `/dev/mouse/[id]` directories, containing the following files:
15
* - `events`: A read-only pollable file that can be read to receive mouse events as `mouse_event_t` structs.
16
* - `name`: A read-only file that contains the mouse driver specified name (e.g. "PS/2")
17
*
18
* @{
19
*/
20
21
/**
22
* @brief Maximum number of queued mouse events.
23
*/
24
#define MOUSE_MAX_EVENT 32
25
26
/**
27
* @brief Mouse structure.
28
* @struct mouse_t
29
*/
30
typedef
struct
31
{
32
char
*
name
;
33
mouse_event_t
events[
MOUSE_MAX_EVENT
];
34
uint64_t
writeIndex
;
35
wait_queue_t
waitQueue
;
36
lock_t
lock
;
37
dentry_t
*
dir
;
38
dentry_t
*
eventsFile
;
39
dentry_t
*
nameFile
;
40
}
mouse_t
;
41
42
/**
43
* @brief Allocate and initialize a mouse structure.
44
*
45
* Will make the mouse available under `/dev/mouse/[id]`.
46
*
47
* @param name Driver specified name of the mouse device.
48
* @return On success, the new mouse structure. On failure, `NULL` and `errno` is set.
49
*/
50
mouse_t
*
mouse_new
(
const
char
* name);
51
52
/**
53
* @brief Free and deinitialize a mouse structure.
54
*
55
* Removes the mouse from `/dev/mouse/[id]`.
56
*
57
* @param mouse Pointer to the mouse structure to free.
58
*/
59
void
mouse_free
(
mouse_t
*
mouse
);
60
61
/**
62
* @brief Push a new mouse event to the mouse event queue.
63
*
64
* The event will be made available to user space by reading the `stream` file.
65
*
66
* @param mouse Pointer to the mouse structure.
67
* @param buttons The button state.
68
* @param deltaX The change in X position.
69
* @param deltaY The change in Y position.
70
*/
71
void
mouse_push
(
mouse_t
*
mouse
,
mouse_buttons_t
buttons,
int64_t
deltaX,
int64_t
deltaY);
72
73
/** @} */
mouse
static fd_t mouse
Definition
dwm.c:24
mouse_new
mouse_t * mouse_new(const char *name)
Allocate and initialize a mouse structure.
Definition
mouse.c:84
mouse_free
void mouse_free(mouse_t *mouse)
Free and deinitialize a mouse structure.
Definition
mouse.c:150
mouse_push
void mouse_push(mouse_t *mouse, mouse_buttons_t buttons, int64_t deltaX, int64_t deltaY)
Push a new mouse event to the mouse event queue.
Definition
mouse.c:158
MOUSE_MAX_EVENT
#define MOUSE_MAX_EVENT
Maximum number of queued mouse events.
Definition
mouse.h:24
mouse_buttons_t
mouse_buttons_t
Mouse buttons enum.
Definition
mouse.h:31
mouse.h
stdint.h
uint64_t
__UINT64_TYPE__ uint64_t
Definition
stdint.h:17
int64_t
__INT64_TYPE__ int64_t
Definition
stdint.h:16
dentry_t
Directory entry structure.
Definition
dentry.h:84
lock_t
A simple ticket lock implementation.
Definition
lock.h:43
mouse_event_t
Mouse event structure.
Definition
mouse.h:45
mouse_t
Mouse structure.
Definition
mouse.h:31
mouse_t::writeIndex
uint64_t writeIndex
Definition
mouse.h:34
mouse_t::eventsFile
dentry_t * eventsFile
Definition
mouse.h:38
mouse_t::nameFile
dentry_t * nameFile
Definition
mouse.h:39
mouse_t::waitQueue
wait_queue_t waitQueue
Definition
mouse.h:35
mouse_t::dir
dentry_t * dir
Definition
mouse.h:37
mouse_t::name
char * name
Definition
mouse.h:32
mouse_t::lock
lock_t lock
Definition
mouse.h:36
wait_queue_t
The primitive that threads block on.
Definition
wait.h:182
sysfs.h
wait.h
include
kernel
drivers
abstract
mouse.h
Generated on Mon Dec 15 2025 21:55:53 for PatchworkOS by
1.9.8