C MIP-SDK
ring_buffer.h
Go to the documentation of this file.
00001 
00002 //
00006 //
00008 //
00009 // External dependencies:
00010 //
00011 //  
00012 // 
00014 //
00017 //
00027 //
00029 
00030 #ifndef _RING_BUFFER_H
00031 #define _RING_BUFFER_H
00032    
00034 //
00035 //Include Files
00036 //
00038 
00039 #include "mip_types.h"
00040 #include <string.h>
00041 #include <stdlib.h>
00042 
00043 
00044 #ifdef __cplusplus
00045  extern "C" {
00046 #endif
00047 
00049 //
00050 // Defines
00051 //
00054 
00055 #define RING_BUFFER_UNINITIALIZED 0
00056 #define RING_BUFFER_INITIALIZED   1
00057 
00058 #define RING_BUFFER_OK            0
00059 #define RING_BUFFER_ERROR         1
00060 #define RING_BUFFER_MEMORY_ERROR  2
00061 #define RING_BUFFER_SIZE_MISMATCH 3
00062 #define RING_BUFFER_EMPTY         4
00063 #define RING_BUFFER_FULL          5
00064 
00065 #define RING_BUFFER_STATIC_TYPE 0
00066 #define RING_BUFFER_MALLOC_TYPE 1
00067 
00069 //
00070 // Structures
00071 //
00073 
00074 typedef struct _ring_buffer
00075 {
00076  //State
00077  u8 state; 
00078  u8 type;
00079   
00080  //Ring buffer variables
00081  u8 *entries;
00082  u32 max_entries;
00083  u32 entry_size;
00084  
00085  u32 volatile position;
00086  u32 volatile current_count;
00087  
00088  //Stats
00089  u32 volatile total_entries_written;
00090  u32 volatile total_entries_read;
00091  u32 volatile total_overruns; 
00092 }ring_buffer;
00093 
00094 
00096 //
00097 // Function Prototypes
00098 //
00100 
00101 
00102 //External
00103 
00104 u16 ring_buffer_init_static(ring_buffer *buffer, u8 *data_buffer_ptr, u32 max_entries, u32 entry_size);
00105 u16 ring_buffer_init_malloc(ring_buffer *buffer, u32 max_entries, u32 entry_size);
00106 
00107 u32 ring_buffer_count(ring_buffer *buffer);
00108 u32 ring_buffer_remaining_entries(ring_buffer *buffer);
00109 u16 ring_buffer_flush(ring_buffer *buffer);
00110 
00111 u16 ring_buffer_write(ring_buffer *buffer, u8 *entry, u32 num_bytes);
00112 u16 ring_buffer_write_multi(ring_buffer *buffer, u8 *entry_buff, u32 num_entries, u32 *num_written);
00113 
00114 u16 ring_buffer_read(ring_buffer *buffer, u8 *entry, u32 max_bytes);
00115 u16 ring_buffer_read_multi(ring_buffer *buffer, u8 *entry_buff, u32 entry_buff_size, u32 num_requested, u32 *num_read);
00116 
00117 u16 ring_buffer_lookahead_read(ring_buffer *buffer, u32 offset, u8 *entry, u32 max_bytes);
00118 u16 ring_buffer_lookahead_read_multi(ring_buffer *buffer, u32 offset, u8 *entry_buff, u32 entry_buff_size, u32 num_requested, u32 *num_read);
00119 
00120 u32 ring_buffer_copy(ring_buffer *to, ring_buffer *from, u32 num_entries);
00121 u32 ring_buffer_lookahead_copy(ring_buffer *to, u32 offset, ring_buffer *from, u32 num_entries);
00122 u16 ring_buffer_consume_entries(ring_buffer *buffer, u32 num_entries);
00123 
00124 u8 *ring_buffer_get_first_element_ptr(ring_buffer *buffer); 
00125 u16 ring_buffer_remove_first_element(ring_buffer *buffer); 
00126 
00127 u8 *ring_buffer_get_available_element_ptr(ring_buffer *buffer); 
00128 u16 ring_buffer_increment_count(ring_buffer *buffer); 
00129 
00130 u16 ring_buffer_malloc_free(ring_buffer *buffer);
00131 
00132 //Internal
00133 
00134 void __ring_buffer_reset(ring_buffer *buffer);
00135 
00136 
00137 #ifdef __cplusplus
00138 }
00139 #endif
00140 
00141 #endif
 All Data Structures Files Functions Defines