Rev 2479 | Rev 4236 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2479 | Rev 3905 | ||
---|---|---|---|
Line 38... | Line 38... | ||
38 | 38 | ||
39 | atomic_t keybuffer_futex = FUTEX_INITIALIZER; |
39 | atomic_t keybuffer_futex = FUTEX_INITIALIZER; |
40 | 40 | ||
41 | /** Clear key buffer. |
41 | /** Clear key buffer. |
42 | */ |
42 | */ |
43 | void keybuffer_free(keybuffer_t *keybuffer) |
43 | void keybuffer_free(keybuffer_t *keybuffer) |
44 | { |
44 | { |
45 | futex_down(&keybuffer_futex); |
45 | futex_down(&keybuffer_futex); |
46 | keybuffer->head = 0; |
46 | keybuffer->head = 0; |
47 | keybuffer->tail = 0; |
47 | keybuffer->tail = 0; |
48 | keybuffer->items = 0; |
48 | keybuffer->items = 0; |
Line 73... | Line 73... | ||
73 | int keybuffer_empty(keybuffer_t *keybuffer) |
73 | int keybuffer_empty(keybuffer_t *keybuffer) |
74 | { |
74 | { |
75 | return (keybuffer->items == 0); |
75 | return (keybuffer->items == 0); |
76 | } |
76 | } |
77 | 77 | ||
78 | /** Push key to key buffer. |
78 | /** Push key event to key buffer. |
- | 79 | * |
|
79 | * If buffer is full, character is ignored. |
80 | * If the buffer is full, the event is ignored. |
- | 81 | * |
|
80 | * @param key code of stored key |
82 | * @param keybuffer The keybuffer. |
- | 83 | * @param ev The event to push. |
|
81 | */ |
84 | */ |
82 | void keybuffer_push(keybuffer_t *keybuffer, int key) |
85 | void keybuffer_push(keybuffer_t *keybuffer, const kbd_event_t *ev) |
83 | { |
86 | { |
84 | futex_down(&keybuffer_futex); |
87 | futex_down(&keybuffer_futex); |
85 | if (keybuffer->items < KEYBUFFER_SIZE) { |
88 | if (keybuffer->items < KEYBUFFER_SIZE) { |
86 | keybuffer->fifo[keybuffer->tail] = key; |
89 | keybuffer->fifo[keybuffer->tail] = *ev; |
87 | keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE; |
90 | keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE; |
88 | keybuffer->items++; |
91 | keybuffer->items++; |
89 | } |
92 | } |
90 | futex_up(&keybuffer_futex); |
93 | futex_up(&keybuffer_futex); |
91 | } |
94 | } |
92 | 95 | ||
- | 96 | void keybuffer_push0(keybuffer_t *keybuffer, int c) |
|
- | 97 | { |
|
- | 98 | kbd_event_t ev; |
|
- | 99 | ||
- | 100 | ev.key = c; ev.mods = 0; ev.c = c; |
|
- | 101 | keybuffer_push(keybuffer, &ev); |
|
- | 102 | } |
|
- | 103 | ||
93 | /** Pop character from buffer. |
104 | /** Pop event from buffer. |
- | 105 | * |
|
94 | * @param c pointer to space where to store character from buffer. |
106 | * @param edst Pointer to where the event should be saved. |
95 | * @return zero on empty buffer, nonzero else |
107 | * @return Zero on empty buffer, nonzero otherwise. |
96 | */ |
108 | */ |
97 | int keybuffer_pop(keybuffer_t *keybuffer, int *c) |
109 | int keybuffer_pop(keybuffer_t *keybuffer, kbd_event_t *edst) |
98 | { |
110 | { |
99 | futex_down(&keybuffer_futex); |
111 | futex_down(&keybuffer_futex); |
100 | if (keybuffer->items > 0) { |
112 | if (keybuffer->items > 0) { |
101 | keybuffer->items--; |
113 | keybuffer->items--; |
102 | *c = (keybuffer->fifo[keybuffer->head]) ; |
114 | *edst = (keybuffer->fifo[keybuffer->head]) ; |
103 | keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE; |
115 | keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE; |
104 | futex_up(&keybuffer_futex); |
116 | futex_up(&keybuffer_futex); |
105 | return 1; |
117 | return 1; |
106 | } |
118 | } |
107 | futex_up(&keybuffer_futex); |
119 | futex_up(&keybuffer_futex); |