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