Project

General

Profile

Statistics
| Revision:

root / lab3 / kbc_func.h @ 383

History | View | Annotate | Download (3.52 KB)

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