Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions includes/driver/keyboard/event_queue.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#ifndef EVENT_QUEUE_H
#define EVENT_QUEUE_H

#include "keyboard.h"
#include "keyboard_keys.h"
#include "ps2.h"
#include "types.h"

#define KEYBOARD_EVENT_QUEUE_SIZE 256

typedef struct {
key_event_t events[KEYBOARD_EVENT_QUEUE_SIZE];
uint32_t head;
uint32_t tail;
} keyboard_event_queue_t;

extern keyboard_event_queue_t keyboard_queue;

typedef enum {
INPUT_CHAR,
INPUT_ENTER,
INPUT_BACKSPACE,
INPUT_TAB,
INPUT_UP,
INPUT_DOWN,
INPUT_LEFT,
INPUT_RIGHT,
} input_type_t;

typedef struct {
input_type_t type;
char character;
} input_event_t;

void input_queue_push(input_event_t event);
void input_queue_pop(input_event_t *event);
void input_queue_print();
void input_queue_print_last();
void input_queue_clear();

extern input_event_t input_queue[KEYBOARD_EVENT_QUEUE_SIZE];

#endif
20 changes: 20 additions & 0 deletions includes/driver/keyboard/handler.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef HANDLER_H
#define HANDLER_H

#include "keyboard.h"
#include "keyboard_keys.h"
#include "ps2.h"
#include "stdio.h"
#include "types.h"

extern scancode_state_t scan_state;

void keyboard_irq_handler(void);

void keyboard_process_scancode(uint8_t data);
void keyboard_handle_key(keycode_t key, key_action_t action);
void keyboard_update_state(keycode_t key, key_action_t action);

// queue for keyboard events

#endif
28 changes: 28 additions & 0 deletions includes/driver/keyboard/keyboard.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#ifndef keyboard_H
#define keyboard_H

#include "keyboard_keys.h"
#include "keyboard_layout.h"
#include "ps2.h"
#include "types.h"

typedef enum {
K_ACK = 0xFA,
K_RESEND = 0xFE,
K_ERROR = 0xFC,
k_BAT = 0xAA, // Basic Assurance Test
} k_response_t;

void init_keyboard(void);

void reset_keyboard(void);
void set_scaning(bool state);
void select_scancode_set(uint8_t set);
void keyboard_set_layout(const keyboard_layout_t *layout);
char keyboard_translate(keycode_t key, const keyboard_state_t *state);

uint8_t keyboard_get_scan_code_set(void);

void keyboard_irq_handler(void);

#endif
Loading
Loading