feat(idt): use new ring_buffer functions
This commit is contained in:
parent
0b394c2c08
commit
1cb57e6a9f
7
k/idt.c
7
k/idt.c
@ -32,14 +32,9 @@ void handle_interrupt(struct int_args *args)
|
|||||||
{
|
{
|
||||||
if (args->int_code >= 32)
|
if (args->int_code >= 32)
|
||||||
{
|
{
|
||||||
int8_t key = getkey();
|
add_key_to_buffer();
|
||||||
if (key >= 0)
|
|
||||||
{
|
|
||||||
printf("%d\r\n", key);
|
|
||||||
}
|
|
||||||
|
|
||||||
outb(MASTER_PORT_A, OCW2_EOI);
|
outb(MASTER_PORT_A, OCW2_EOI);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
k/idt.h
4
k/idt.h
@ -40,8 +40,8 @@ struct idt_r
|
|||||||
uint32_t addr; // base address of the IDT
|
uint32_t addr; // base address of the IDT
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
// FIXME: This struct is used to get int_code and err_code pushed to the stack
|
// This struct is used to get int_code and err_code pushed to the stack
|
||||||
// by the isr. We can refactor this by offsetting esp before pushing it.
|
// by the isr.
|
||||||
struct int_args
|
struct int_args
|
||||||
{
|
{
|
||||||
uint32_t int_code;
|
uint32_t int_code;
|
||||||
|
@ -1,12 +1,20 @@
|
|||||||
#include "pic/keyboard.h"
|
#include "pic/keyboard.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "stdio.h"
|
#include "utils/ring_buffer.h"
|
||||||
|
|
||||||
int8_t getkey(void)
|
static struct ring_buffer keyboard_buffer = { 0 };
|
||||||
|
|
||||||
|
void add_key_to_buffer(void)
|
||||||
{
|
{
|
||||||
uint8_t key = inb(KEYBOARD_IO);
|
uint8_t key = inb(KEYBOARD_IO);
|
||||||
|
write_entry(&keyboard_buffer, key);
|
||||||
|
}
|
||||||
|
|
||||||
if (key & KEYBOARD_RELEASE)
|
int getkey(void)
|
||||||
|
{
|
||||||
|
uint8_t key = read_entry(&keyboard_buffer);
|
||||||
|
|
||||||
|
if (!key)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return key;
|
return key;
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
int8_t getkey(void);
|
void add_key_to_buffer(void);
|
||||||
|
int getkey(void);
|
||||||
|
|
||||||
#endif /* !KEYBOARD_H */
|
#endif /* !KEYBOARD_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user