4.104.114.84.95
Rev | Line | |
---|
[4a6e64d] | 1 | /* |
---|
| 2 | * ringbuf.h |
---|
| 3 | * |
---|
| 4 | * This file provides simple ring buffer functionality. |
---|
| 5 | * |
---|
| 6 | * $Id$ |
---|
| 7 | */ |
---|
| 8 | |
---|
| 9 | #ifndef __RINGBUF_H__ |
---|
| 10 | #define __RINGBUF_H__ |
---|
| 11 | |
---|
| 12 | #ifndef RINGBUF_QUEUE_LENGTH |
---|
[9700578] | 13 | #define RINGBUF_QUEUE_LENGTH 128 |
---|
[4a6e64d] | 14 | #endif |
---|
| 15 | |
---|
| 16 | typedef struct { |
---|
| 17 | char buffer[RINGBUF_QUEUE_LENGTH]; |
---|
[9700578] | 18 | volatile int head; |
---|
| 19 | volatile int tail; |
---|
[4a6e64d] | 20 | } Ring_buffer_t; |
---|
| 21 | |
---|
| 22 | #define Ring_buffer_Initialize( _buffer ) \ |
---|
| 23 | do { \ |
---|
| 24 | (_buffer)->head = (_buffer)->tail = 0; \ |
---|
| 25 | } while ( 0 ) |
---|
| 26 | |
---|
| 27 | #define Ring_buffer_Is_empty( _buffer ) \ |
---|
| 28 | ( (_buffer)->head == (_buffer)->tail ) |
---|
| 29 | |
---|
[9700578] | 30 | #define Ring_buffer_Is_full( _buffer ) \ |
---|
| 31 | ( (_buffer)->head == ((_buffer)->tail + 1) % RINGBUF_QUEUE_LENGTH ) |
---|
| 32 | |
---|
[4a6e64d] | 33 | #define Ring_buffer_Add_character( _buffer, _ch ) \ |
---|
| 34 | do { \ |
---|
[9700578] | 35 | rtems_unsigned32 isrlevel; \ |
---|
| 36 | \ |
---|
| 37 | rtems_interrupt_disable( isrlevel ); \ |
---|
| 38 | (_buffer)->tail = ((_buffer)->tail+1) % RINGBUF_QUEUE_LENGTH; \ |
---|
| 39 | (_buffer)->buffer[ (_buffer)->tail ] = (_ch); \ |
---|
| 40 | rtems_interrupt_enable( isrlevel ); \ |
---|
[4a6e64d] | 41 | } while ( 0 ) |
---|
| 42 | |
---|
| 43 | #define Ring_buffer_Remove_character( _buffer, _ch ) \ |
---|
| 44 | do { \ |
---|
[9700578] | 45 | rtems_unsigned32 isrlevel; \ |
---|
| 46 | \ |
---|
| 47 | rtems_interrupt_disable( isrlevel ); \ |
---|
| 48 | (_buffer)->head = ((_buffer)->head+1) % RINGBUF_QUEUE_LENGTH; \ |
---|
| 49 | (_ch) = (_buffer)->buffer[ (_buffer)->head ]; \ |
---|
| 50 | rtems_interrupt_enable( isrlevel ); \ |
---|
[4a6e64d] | 51 | } while ( 0 ) |
---|
| 52 | |
---|
| 53 | #endif |
---|
Note: See
TracBrowser
for help on using the repository browser.