Rev 4327 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4327 | Rev 4581 | ||
|---|---|---|---|
| Line 42... | Line 42... | ||
| 42 | #include <arch/asm.h> |
42 | #include <arch/asm.h> |
| 43 | #include <arch/drivers/kbd.h> |
43 | #include <arch/drivers/kbd.h> |
| 44 | #include <string.h> |
44 | #include <string.h> |
| 45 | #include <arch.h> |
45 | #include <arch.h> |
| 46 | 46 | ||
| - | 47 | enum { |
|
| - | 48 | /** Interval between polling in microseconds */ |
|
| 47 | #define POLL_INTERVAL 10000 /* 10 ms */ |
49 | POLL_INTERVAL = 10000, /* 0.01 s */ |
| - | 50 | ||
| - | 51 | /** Max. number of characters to pull out at a time */ |
|
| - | 52 | POLL_LIMIT = 30, |
|
| 48 | 53 | ||
| 49 | #define SKI_INIT_CONSOLE 20 |
54 | SKI_INIT_CONSOLE = 20, |
| 50 | #define SKI_GETCHAR 21 |
55 | SKI_GETCHAR = 21, |
| 51 | #define SKI_PUTCHAR 31 |
56 | SKI_PUTCHAR = 31 |
| - | 57 | }; |
|
| 52 | 58 | ||
| 53 | static void ski_putchar(outdev_t *, const wchar_t, bool); |
59 | static void ski_putchar(outdev_t *, const wchar_t, bool); |
| 54 | 60 | ||
| 55 | static outdev_operations_t skiout_ops = { |
61 | static outdev_operations_t skiout_ops = { |
| 56 | .write = ski_putchar |
62 | .write = ski_putchar |
| Line 152... | Line 158... | ||
| 152 | ); |
158 | ); |
| 153 | 159 | ||
| 154 | return (wchar_t) ch; |
160 | return (wchar_t) ch; |
| 155 | } |
161 | } |
| 156 | 162 | ||
| 157 | /** Ask keyboard if a key was pressed. */ |
163 | /** Ask keyboard if a key was pressed. |
| - | 164 | * |
|
| - | 165 | * If so, it will repeat and pull up to POLL_LIMIT characters. |
|
| - | 166 | */ |
|
| 158 | static void poll_keyboard(ski_instance_t *instance) |
167 | static void poll_keyboard(ski_instance_t *instance) |
| 159 | { |
168 | { |
| - | 169 | wchar_t ch; |
|
| - | 170 | int count; |
|
| - | 171 | ||
| 160 | if (kbd_disabled) |
172 | if (kbd_disabled) |
| 161 | return; |
173 | return; |
| - | 174 | ||
| - | 175 | count = POLL_LIMIT; |
|
| 162 | 176 | ||
| - | 177 | while (count > 0) { |
|
| 163 | wchar_t ch = ski_getchar(); |
178 | ch = ski_getchar(); |
| 164 | 179 | ||
| 165 | if (ch != 0) |
180 | if (ch == '\0') |
| - | 181 | break; |
|
| - | 182 | ||
| 166 | indev_push_character(instance->srlnin, ch); |
183 | indev_push_character(instance->srlnin, ch); |
| - | 184 | --count; |
|
| - | 185 | } |
|
| 167 | } |
186 | } |
| 168 | 187 | ||
| 169 | /** Kernel thread for polling keyboard. */ |
188 | /** Kernel thread for polling keyboard. */ |
| 170 | static void kskipoll(void *arg) |
189 | static void kskipoll(void *arg) |
| 171 | { |
190 | { |
| Line 213... | Line 232... | ||
| 213 | sysinfo_set_item_val("kbd.type", NULL, KBD_SKI); |
232 | sysinfo_set_item_val("kbd.type", NULL, KBD_SKI); |
| 214 | } |
233 | } |
| 215 | 234 | ||
| 216 | void ski_kbd_grab(void) |
235 | void ski_kbd_grab(void) |
| 217 | { |
236 | { |
| 218 | kbd_disabled = true; |
237 | kbd_disabled = false; |
| 219 | } |
238 | } |
| 220 | 239 | ||
| 221 | void ski_kbd_release(void) |
240 | void ski_kbd_release(void) |
| 222 | { |
241 | { |
| 223 | kbd_disabled = false; |
242 | kbd_disabled = true; |
| 224 | } |
243 | } |
| 225 | 244 | ||
| 226 | /** @} |
245 | /** @} |
| 227 | */ |
246 | */ |