Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1476 → Rev 1451

/uspace/trunk/kbd/include/key_buffer.h
31,8 → 31,7
 
#include <types.h>
 
/** Size of buffer for pressed keys */
#define KEYBUFFER_SIZE 128
#define KEYBUFFER_SIZE 128 /**< Size of buffer for pressed keys */
 
typedef struct {
char fifo[KEYBUFFER_SIZE];
/uspace/trunk/kbd/generic/key_buffer.c
27,19 → 27,14
*/
 
#include <key_buffer.h>
#include <futex.h>
 
atomic_t keybuffer_futex = FUTEX_INITIALIZER;
 
/** Clear key buffer.
*/
void keybuffer_free(keybuffer_t *keybuffer)
{
futex_down(&keybuffer_futex);
keybuffer->head = 0;
keybuffer->tail = 0;
 
keybuffer->items = 0;
futex_up(&keybuffer_futex);
keybuffer->head = keybuffer->tail = keybuffer->items = 0;
}
 
/** Key buffer initialization.
74,13 → 69,10
*/
void keybuffer_push(keybuffer_t *keybuffer, char key)
{
futex_down(&keybuffer_futex);
if (keybuffer->items < KEYBUFFER_SIZE) {
keybuffer->fifo[keybuffer->tail] = key;
keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE;
keybuffer->fifo[keybuffer->tail = (keybuffer->tail + 1) < keybuffer->items ? (keybuffer->tail + 1) : 0] = (key);
keybuffer->items++;
}
futex_up(&keybuffer_futex);
}
 
/** Pop character from buffer.
89,15 → 81,11
*/
int keybuffer_pop(keybuffer_t *keybuffer, char *c)
{
futex_down(&keybuffer_futex);
if (keybuffer->items > 0) {
keybuffer->items--;
*c = keybuffer->fifo[keybuffer->head];
keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE;
futex_up(&keybuffer_futex);
*c = keybuffer->fifo[keybuffer->head = (keybuffer->head + 1) < keybuffer->items ? (keybuffer->head + 1) : 0];
return 1;
}
futex_up(&keybuffer_futex);
return 0;
}