PatchworkOS  966e257
A non-POSIX operating system.
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 */
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 */
50mouse_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 */
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 */
71void mouse_push(mouse_t* mouse, mouse_buttons_t buttons, int64_t deltaX, int64_t deltaY);
72
73/** @} */
static fd_t mouse
Definition dwm.c:24
mouse_t * mouse_new(const char *name)
Allocate and initialize a mouse structure.
Definition mouse.c:84
void mouse_free(mouse_t *mouse)
Free and deinitialize a mouse structure.
Definition mouse.c:150
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
#define MOUSE_MAX_EVENT
Maximum number of queued mouse events.
Definition mouse.h:24
mouse_buttons_t
Mouse buttons enum.
Definition mouse.h:31
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
__INT64_TYPE__ int64_t
Definition stdint.h:16
Directory entry structure.
Definition dentry.h:84
A simple ticket lock implementation.
Definition lock.h:43
Mouse event structure.
Definition mouse.h:45
Mouse structure.
Definition mouse.h:31
uint64_t writeIndex
Definition mouse.h:34
dentry_t * eventsFile
Definition mouse.h:38
dentry_t * nameFile
Definition mouse.h:39
wait_queue_t waitQueue
Definition mouse.h:35
dentry_t * dir
Definition mouse.h:37
char * name
Definition mouse.h:32
lock_t lock
Definition mouse.h:36
The primitive that threads block on.
Definition wait.h:182