root / proj / libs / kbc / include / kbc.h @ 334
History | View | Annotate | Download (4.18 KB)
1 | 334 | up20180642 | #ifndef KBC_H_INCLUDED
|
---|---|---|---|
2 | #define KBC_H_INCLUDED
|
||
3 | |||
4 | 145 | up20180655 | /**
|
5 | 334 | up20180642 | * @defgroup kbc kbc
|
6 | * @brief KBC module.
|
||
7 | *
|
||
8 | * @{
|
||
9 | 145 | up20180655 | */
|
10 | |||
11 | 257 | up20180642 | /* KBC IRQ Line */
|
12 | 334 | up20180642 | /** @brief KBC Controller IRQ Line */
|
13 | #define KBC_IRQ 1 |
||
14 | /** @brief Mouse IRQ Line */
|
||
15 | #define MOUSE_IRQ 12 |
||
16 | 257 | up20180642 | |
17 | /* Delay for KBC */
|
||
18 | 334 | up20180642 | /** @brief KBC Response Delay */
|
19 | #define DELAY 20000 |
||
20 | /** @brief Number of tries to issue command before timeout */
|
||
21 | #define KBC_NUM_TRIES 20 |
||
22 | 257 | up20180642 | |
23 | /* I/O Ports Addresses */
|
||
24 | 334 | up20180642 | /** @brief Address to send commands to KBC */
|
25 | #define KBC_CMD 0x64 |
||
26 | /** @brief Address to write KBC Command Arguments */
|
||
27 | #define KBC_CMD_ARG 0x60 |
||
28 | /** @brief KBC Status Register address */
|
||
29 | #define STATUS_REG 0x64 |
||
30 | /** @brief Address of Output Buffer of KBC */
|
||
31 | #define OUTPUT_BUF 0x60 |
||
32 | 257 | up20180642 | |
33 | /* KBC Commands */
|
||
34 | 334 | up20180642 | /** @brief Read KBC Command Byte */
|
35 | #define READ_KBC_CMD 0x20 |
||
36 | /** @brief Write KBC Command Byte */
|
||
37 | #define WRITE_KBC_CMD 0x60 |
||
38 | /** @brief KBC Diagnostic Tests */
|
||
39 | #define KBC_SELF_TEST 0xAA |
||
40 | /** @brief Tests Keyboard Clock and Data lines */
|
||
41 | #define KBC_INT_TEST 0xAB |
||
42 | /** @brief Disable KBC Interface */
|
||
43 | #define KBC_INT_DISABLE 0xAD |
||
44 | /** @brief Enable KBC Interface */
|
||
45 | #define KBC_INT_ENABLE 0xAE |
||
46 | /** @brief Disable Mouse */
|
||
47 | #define MOUSE_DISABLE 0xA7 |
||
48 | /** @brief Enable Mouse */
|
||
49 | #define MOUSE_ENABLE 0xA8 |
||
50 | /** @brief Tests Mouse data line */
|
||
51 | #define MOUSE_INT_TEST 0xA9 |
||
52 | /** @brief Write a byte directly to the mouse */
|
||
53 | #define MOUSE_WRITE_B 0xD4 |
||
54 | 257 | up20180642 | |
55 | /* Status Byte Masking */
|
||
56 | 334 | up20180642 | /** @brief Output Buffer State */
|
57 | #define OUT_BUF_FUL BIT(0) |
||
58 | /** @brief Input Buffer State */
|
||
59 | #define IN_BUF_FULL BIT(1) |
||
60 | /** @brief System Flag */
|
||
61 | #define SYS_FLAG BIT(2) |
||
62 | /** @brief Identifier of type of byte in input buffer */
|
||
63 | #define DATA_CMD_WRITE BIT(3) |
||
64 | /** @brief Keyboard inihibited */
|
||
65 | #define INH_FLAG BIT(4) |
||
66 | /** @brief Mouse Data */
|
||
67 | #define AUX_MOUSE BIT(5) |
||
68 | /** @brief Time Out Error - Invalid Data */
|
||
69 | #define TIME_OUT_REC BIT(6) |
||
70 | /** @brief Parity Error - Invalid Data */
|
||
71 | #define PARITY_ERROR BIT(7) |
||
72 | 257 | up20180642 | |
73 | /* Scancode Constants */
|
||
74 | 334 | up20180642 | /** @brief ESC Break Code */
|
75 | #define ESC_BREAK_CODE 0x81 |
||
76 | /** @brief First byte of a two byte Scancode */
|
||
77 | #define TWO_BYTE_CODE 0xE0 |
||
78 | /** @brief Bit to distinguish between Make code and Break code */
|
||
79 | #define BREAK_CODE_BIT BIT(7) |
||
80 | 257 | up20180642 | |
81 | /* Command byte masks */
|
||
82 | 334 | up20180642 | /** @brief Enable Keyboard Interrupts */
|
83 | #define INT_KBD BIT(0) |
||
84 | /** @brief Enable Mouse Interrupts */
|
||
85 | #define INT_MOU BIT(1) |
||
86 | /** @brief Disable Keyboard */
|
||
87 | #define DIS_KBD BIT(4) |
||
88 | /** @brief Disable Mouse */
|
||
89 | #define DIS_MOU BIT(5) |
||
90 | 257 | up20180642 | |
91 | 145 | up20180655 | /**
|
92 | * @brief High-level function that reads the command byte of the KBC
|
||
93 | * @param cmd Pointer to variable where command byte read from KBC will be stored
|
||
94 | * @return 0 if operation was successful, 1 otherwise
|
||
95 | */
|
||
96 | int (kbc_read_cmd)(uint8_t *cmd);
|
||
97 | |||
98 | /**
|
||
99 | * @brief High-level function that changes the command byte of the KBC
|
||
100 | * @param cmd New value for command byte of KBC
|
||
101 | * @return 0 if operation was successful, 1 otherwise
|
||
102 | */
|
||
103 | int (kbc_change_cmd)(uint8_t cmd);
|
||
104 | |||
105 | /**
|
||
106 | * @brief High-level function that restores KBC to normal state
|
||
107 | 334 | up20180642 | *
|
108 | 145 | up20180655 | * High-level function that restores KBC to normal state, because lcf_start
|
109 | * changes the command byte of KBC. If this function is not used, there is a
|
||
110 | * chance that the keyboard and keyboard interrupts remain disabled.
|
||
111 | * @return 0 if operation was successful, 1 otherwise
|
||
112 | */
|
||
113 | int (kbc_restore_keyboard)();
|
||
114 | |||
115 | /**
|
||
116 | * @brief Low-level function to issue a command to keyboard
|
||
117 | * @param cmd command to be issued
|
||
118 | * @return 0 if operation was successful, 1 otherwise
|
||
119 | */
|
||
120 | int (kbc_issue_cmd)(uint8_t cmd);
|
||
121 | |||
122 | /**
|
||
123 | * @brief Low-level function to issue an argument of a command
|
||
124 | 321 | up20180642 | * @param arg argument to be issued
|
125 | 145 | up20180655 | * @return 0 if operation was successful, 1 otherwise
|
126 | */
|
||
127 | int (kbc_issue_arg)(uint8_t arg);
|
||
128 | |||
129 | /**
|
||
130 | * @brief Low-level function for reading byte from keyboard
|
||
131 | 334 | up20180642 | *
|
132 | 145 | up20180655 | * Low-level function for reading byte from keyboard. Waits until output buffer
|
133 | * is full
|
||
134 | 321 | up20180642 | * @param byte Pointer to variable where byte read from keyboard will be stored
|
135 | 145 | up20180655 | * @return 0 if operation was successful, 1 otherwise
|
136 | */
|
||
137 | int (kbc_read_byte)(uint8_t *byte);
|
||
138 | |||
139 | 334 | up20180642 | /**
|
140 | * @}
|
||
141 | */
|
||
142 | |||
143 | 145 | up20180655 | #endif //KBC_H_INCLUDED |