Project

General

Profile

Statistics
| Revision:

root / lab4 / kbc.h @ 64

History | View | Annotate | Download (2.75 KB)

1 58 up20180642
#ifndef _KBC_FUNC_H_
2
#define _KBC_FUNC_H_
3 53 up20180655
4 58 up20180642
#include <stdint.h>
5 53 up20180655
6 58 up20180642
#define GET         0 /* @brief Argument to get counter without incrementing */
7
#define INCREMENT   1 /* @brief Argument for incrementing counter */
8 53 up20180655
9 58 up20180642
/**
10
 * @brief Subscribes KBC Interrupts and disables Minix Default Keyboard IH
11
 * @param interrupt_bit Bit of Interrupt Vector that will be set when KBC Interrupt is pending
12
 * @param interrupt_id KBC Interrupt ID to specify the KBC Interrupt in other calls
13
 * @return Whether operation was sucessful or not
14
 */
15
int (subscribe_kbc_interrupt)(uint8_t interrupt_bit, int *interrupt_id);
16 53 up20180655
17 58 up20180642
/**
18
 * @brief Unsubcribes Interrupts
19
 * @param interrupt_id Interrupt ID, value via arguments on subscription of the interrupt_id
20
 * @see subscribe_kbc_interrupt, subscribe_timer_interrupt
21
 * @return Whether operation was sucessful or not
22
 */
23
int (unsubscribe_interrupt)(int *interrupt_id);
24 53 up20180655
25 58 up20180642
/**
26
 * @brief KBC Interrupt Handler
27
 */
28
void (kbc_ih)(void);
29 53 up20180655
30 58 up20180642
/**
31
 * @brief High-level function that polls keyboard for scancode
32
 * High-level function that polls keyboard for scancode of up to 2 bytes. If
33
 * scancode has only 1 byte, the second byte is set to 0x00.
34
 * @param bytes Array of at least 2 bytes to store scancode
35
 * @param size Size of scancode in bytes
36
 * @return 0 if operation was successful, 1 otherwise
37
 */
38
int (kbd_poll)(uint8_t bytes[], uint8_t *size);
39 53 up20180655
40 58 up20180642
/**
41
 * @brief High-level function that reads the command byte of the KBC
42
 * @param cmd Pointer to variable where command byte read from KBC will be stored
43
 * @return 0 if operation was successful, 1 otherwise
44
 */
45
int (kbc_read_cmd)(uint8_t *cmd);
46 53 up20180655
47 58 up20180642
/**
48
 * @brief High-level function that changes the command byte of the KBC
49
 * @param cmd New value for command byte of KBC
50
 * @return 0 if operation was successful, 1 otherwise
51
 */
52
int (kbc_change_cmd)(uint8_t cmd);
53 53 up20180655
54 58 up20180642
/**
55
 * @brief High-level function that restores KBC to normal state
56
 * High-level function that restores KBC to normal state, because lcf_start
57
 * changes the command byte of KBC. If this function is not used, there is a
58
 * chance that the keyboard and keyboard interrupts remain disabled.
59
 * @return 1 if operation was successful, 1 otherwise
60
 */
61
int (kbc_restore_kbd)();
62 53 up20180655
63 58 up20180642
/**
64
 * @brief Low-level function to issue a command to keyboard
65
 * @param cmd command to be issued
66
 * @return 0 if operation was successful, 1 otherwise
67
 */
68
int (kbc_issue_cmd)(uint8_t cmd);
69 53 up20180655
70 58 up20180642
/**
71
 * @brief Low-level function for reading byte from keyboard
72
 * Low-level function for reading byte from keyboard. Waits until output buffer
73
 * is full
74
 * @param value Pointer to variable where byte read from keyboard will be stored
75
 * @return 0 if operation was successful, 1 otherwise
76
 */
77
int (kbc_read_byte)(uint8_t *byte);
78 53 up20180655
79
80
#endif