Project

General

Profile

Statistics
| Revision:

root / proj / libs / kbc / include / kbc.h @ 342

History | View | Annotate | Download (4.18 KB)

1
#ifndef KBC_H_INCLUDED
2
#define KBC_H_INCLUDED
3

    
4
/**
5
 * @defgroup    kbc kbc
6
 * @brief   KBC module.
7
 *
8
 * @{
9
 */
10

    
11
/* KBC IRQ Line */
12
/** @brief KBC Controller IRQ Line */
13
#define KBC_IRQ     1
14
/** @brief Mouse IRQ Line */
15
#define MOUSE_IRQ   12
16

    
17
/* Delay for KBC */
18
/** @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

    
23
/* I/O Ports Addresses */
24
/** @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

    
33
/* KBC Commands */
34
/** @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

    
55
/* Status Byte Masking */
56
/** @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

    
73
/* Scancode Constants */
74
/** @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

    
81
/* Command byte masks */
82
/** @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

    
91
/**
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
 *
108
 * 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
 * @param arg argument to be issued
125
 * @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
 *
132
 * Low-level function for reading byte from keyboard. Waits until output buffer
133
 * is full
134
 * @param byte Pointer to variable where byte read from keyboard will be stored
135
 * @return 0 if operation was successful, 1 otherwise
136
 */
137
int (kbc_read_byte)(uint8_t *byte);
138

    
139
/**
140
 * @}
141
 */
142

    
143
#endif //KBC_H_INCLUDED