ring buffer

Revision:
0:eae8cffdd121
Child:
1:cebd379d1139
diff -r 000000000000 -r eae8cffdd121 rbuf.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rbuf.h	Thu Jun 23 19:44:23 2011 +0000
@@ -0,0 +1,131 @@
+#ifndef __ringbuffer_h_
+ #define __ringbuffer_h_
+
+#include "can.h"
+
+#define NOT_EMPTY           0x01    // Bit fuer mindestens 1 Frame im Buffer 
+#define FAST_VOLL           0x02    // Bit fuer Fuellstandsschwelle ueberschritten 
+#define FEHLER              0x04    // Bit fuer Fehler aufgetreten 
+
+typedef struct 
+  { 
+     uint16_t   buflen;        // Max. Objektanzahl fuer den Buffer 
+     uint16_t   bufcnt;        // Bufferfuellstand in Objekten 
+     void       * in;          // Zeiger auf char zum Schreiben (Schreibzeiger) 
+     void       * out;         // Zeiger auf char zum Lesen     (Lesezeiger) 
+     void       * buf;         // Zeiger auf char[LEN]-Buffer   (Buffer an sich) 
+     uint32_t   anzahl;        // Anzahl aller geschriebenen Elemente (Absolutanzahl Elementz�hler) 
+     uint32_t   fehleranzahl;  // Anzahl aufgetretener Fehler 
+     uint16_t   Schwelle;      // Schwelle fuer "fast voll" 
+     uint16_t   flags;         // Status-Flags 
+     uint16_t   peak_max;      // Schleppzeiger ueber den max. Fuellstand an Elementen 
+     uint16_t   blockgroesse;  // Groesse eines Datenobjekts (1 Byte bis Frames) = Objektgroesse 
+   } buffer_header_t;          // 
+
+typedef struct 
+   { 
+     buffer_header_t in; 
+     buffer_header_t out; 
+   } io_buf_s; 
+/**
+
+typedef struct 
+  { 
+     uint16_t   buflen;        // Max. Objektanzahl fuer den Buffer 
+     uint16_t   bufcnt;        // Bufferfuellstand in Objekten 
+     void       * in;          // Zeiger auf char zum Schreiben (Schreibzeiger) 
+     void       * out;         // Zeiger auf char zum Lesen     (Lesezeiger) 
+     void       * buf;         // Zeiger auf char[LEN]-Buffer   (Buffer an sich) 
+     uint32_t   anzahl;        // Anzahl aller geschriebenen Elemente (Absolutanzahl Elementz�hler) 
+     uint32_t   fehleranzahl;  // Anzahl aufgetretener Fehler 
+     uint16_t   Schwelle;      // Schwelle fuer "fast voll" 
+     uint16_t   flags;         // Status-Flags 
+     uint16_t   peak_max;      // Schleppzeiger ueber den max. Fuellstand an Elementen 
+     uint16_t   blockgroesse;  // Groesse eines Datenobjekts (1 Byte bis Frames) = Objektgroesse 
+   } buffer_header_t;          // 
+
+typedef struct 
+   { 
+     buffer_header_t in; 
+     buffer_header_t out; 
+   } io_buf_s; 
+
+
+*/ 
+
+#define   rbuf_t                  buffer_header_t 
+
+#define   rbuffer_init            charbuffer_init 
+#define   rbuffer_get             charbuffer_get 
+#define   rbuffer_put             charbuffer_put 
+#define   rbuffer_look            charbuffer_look 
+
+#define   rbuf_init               charbuffer_init 
+#define   rbuf_get                charbuffer_get 
+#define   rbuf_put                charbuffer_put 
+#define   rbuf_look               charbuffer_look 
+#define   rbuf_print_header       print_verwaltung 
+
+#define   charbuffer_lock         charbuffer_readable 
+
+  // create und init von einer doppelten Bufferstruktur, also einen I/O-Buffer 
+io_buf_s *create_charbuffer_io   (uint16_t r_size, uint16_t s_size, uint16_t r_schwelle, uint16_t s_schwelle, uint16_t blockgroesse); 
+
+  // create und init einen einzigen Ring-Buffer
+buffer_header_t *charbuffer_init (uint16_t b_size, uint16_t b_schwelle, uint16_t blockgroesse); 
+
+void     *charbuffer_readable    (buffer_header_t *r);                         // Nur nachschauen, ob ein Frame da ist 
+void     *charbuffer_get         (buffer_header_t *r, void *target);           // Einen char/Block rausholen mit Readzeiger++ 
+char     *charbuffer_put         (buffer_header_t *r, void *f);                // Einen Frame in den Buffer tun  mit anzahl++
+
+void      charbuffer_copy        (void *quelle, void *ziel, uint16_t size);    // Quelle -> Ziel kopieren 
+void      charbuffer_move        (void *quelle, void *ziel, uint16_t size);    // Quelle -> Ziel (Move mit anschliessendem loeschen der Quelle) 
+
+void      print_verwaltung       (buffer_header_t *rbk_p); 
+void      display_rbuffer_header (io_buf_s *rb); 
+
+
+/*
+ * Copyright (c) 2002, 2003  Brian S. Dean <bsd@bsdhome.com>
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BRIAN S. DEAN ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL BRIAN S. DEAN BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ * 
+ *
+ * 20060206 Kschwi:     Type change of return parameter from uint8_t to unit16_t
+ * 20060319 Kschwi:     ringbuffer_read added (read without remove)
+ * 20070423 Kschwi:     ringbuffer becomes voltile
+ * 20070508 est2fe:     adjusted to CAN frames
+ *             Alles sind nur Zeiger auf CANframe-Buffer 
+ *             Wenn es geklappt hat dann kommt ein Zeiger <> 0 zurueck
+ *             Hat es nicht geklappt, dann kommt ein Null-Pointer zurueck!
+ *             Es wird davon ausgegangen, dass im ringbuffer 
+ *            nicht mehr als 255 Frames Platz haben -> len + cnt als uint_t. 
+ *     20110609 est2fe:    Umgebaut auf character ringbuffer 
+ *             
+ *
+ */
+
+
+#endif