Changeset ad123964 in mainline for kbd/generic/key_buffer.c
- Timestamp:
- 2006-06-01T00:21:19Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- cf28036
- Parents:
- c594489
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kbd/generic/key_buffer.c
rc594489 rad123964 28 28 29 29 #include <key_buffer.h> 30 #include <futex.h> 31 32 atomic_t keybuffer_futex = FUTEX_INITIALIZER; 30 33 31 34 /** Clear key buffer. … … 33 36 void keybuffer_free(keybuffer_t *keybuffer) 34 37 { 35 38 futex_down(&keybuffer_futex); 39 keybuffer->head = 0; 40 keybuffer->tail = 0; 36 41 keybuffer->items = 0; 37 keybuffer->head = keybuffer->tail = keybuffer->items = 0;42 futex_up(&keybuffer_futex); 38 43 } 39 44 … … 70 75 void keybuffer_push(keybuffer_t *keybuffer, char key) 71 76 { 77 futex_down(&keybuffer_futex); 72 78 if (keybuffer->items < KEYBUFFER_SIZE) { 73 keybuffer->fifo[keybuffer->tail = (keybuffer->tail + 1) < keybuffer->items ? (keybuffer->tail + 1) : 0] = (key); 79 keybuffer->fifo[keybuffer->tail] = key; 80 keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE; 74 81 keybuffer->items++; 75 82 } 83 futex_up(&keybuffer_futex); 76 84 } 77 85 … … 82 90 int keybuffer_pop(keybuffer_t *keybuffer, char *c) 83 91 { 92 futex_down(&keybuffer_futex); 84 93 if (keybuffer->items > 0) { 85 94 keybuffer->items--; 86 *c = keybuffer->fifo[keybuffer->head = (keybuffer->head + 1) < keybuffer->items ? (keybuffer->head + 1) : 0]; 95 *c = keybuffer->fifo[keybuffer->head]; 96 keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE; 97 futex_up(&keybuffer_futex); 87 98 return 1; 88 99 } 100 futex_up(&keybuffer_futex); 89 101 return 0; 90 102 }
Note:
See TracChangeset
for help on using the changeset viewer.