C MIP-SDK
|
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