Changeset 79460ae in mainline for kbd/generic/key_buffer.c


Ignore:
Timestamp:
2006-05-30T10:40:17Z (19 years ago)
Author:
Josef Cejka <malyzelenyhnus@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
44c6d88d
Parents:
f25b73d6
Message:

Basic support for console driver.
Does not provide separate screens yet.
TODO fix many unhandled states.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kbd/generic/key_buffer.c

    rf25b73d6 r79460ae  
    2828
    2929#include <key_buffer.h>
    30 #include <libadt/fifo.h>
    31 
    32 #define KBD_BUFFER_SIZE 128 /**< Size of buffer for pressed keys */
    33 
    34 FIFO_INITIALIZE_STATIC(buffer, char, KBD_BUFFER_SIZE);  /**< Fifo for storing pressed keys */
    35 fifo_count_t buffer_items;      /**< Counter of used items for prevent fifo overflow */
    3630
    3731/** Clear key buffer.
    3832 */
    39 void key_buffer_free(void)
     33void keybuffer_free(keybuffer_t *keybuffer)
    4034{
    41         buffer_items = 0;
    42         buffer.head = buffer.tail = 0;
     35
     36        keybuffer->items = 0;
     37        keybuffer->head = keybuffer->tail = keybuffer->items = 0;
    4338}
    4439
     
    4641 *
    4742 */
    48 void key_buffer_init(void)
     43void keybuffer_init(keybuffer_t *keybuffer)
    4944{
    50         key_buffer_free();
     45        keybuffer_free(keybuffer);
    5146}
    5247
     
    5651 * @return empty buffer space
    5752 */
    58 int key_buffer_available(void)
     53int keybuffer_available(keybuffer_t *keybuffer)
    5954{
    60         return KBD_BUFFER_SIZE - buffer_items;
     55        return KEYBUFFER_SIZE - keybuffer->items;
    6156}
    6257
     
    6459 * @return nonzero, if buffer is not empty.
    6560 */
    66 int key_buffer_empty(void)
     61int keybuffer_empty(keybuffer_t *keybuffer)
    6762{
    68         return (buffer_items == 0);
     63        return (keybuffer->items == 0);
    6964}
    7065
     
    7368 * @param key code of stored key
    7469 */
    75 void key_buffer_push(char key)
     70void keybuffer_push(keybuffer_t *keybuffer, char key)
    7671{
    77         if (buffer_items < KBD_BUFFER_SIZE) {
    78                 fifo_push(buffer, key);
    79                 buffer_items++;
     72        if (keybuffer->items < KEYBUFFER_SIZE) {
     73                keybuffer->fifo[keybuffer->tail = (keybuffer->tail + 1) < keybuffer->items ? (keybuffer->tail + 1) : 0] = (key);
     74                keybuffer->items++;
    8075        }
    8176}
     
    8580 * @return zero on empty buffer, nonzero else
    8681 */
    87 int key_buffer_pop(char *c)
     82int keybuffer_pop(keybuffer_t *keybuffer, char *c)
    8883{
    89         if (buffer_items > 0) {
    90                 buffer_items--;
    91                 *c = fifo_pop(buffer);
     84        if (keybuffer->items > 0) {
     85                keybuffer->items--;
     86                *c = keybuffer->fifo[keybuffer->head = (keybuffer->head + 1) < keybuffer->items ? (keybuffer->head + 1) : 0];
    9287                return 1;
    9388        }
Note: See TracChangeset for help on using the changeset viewer.