ring buffer

Revision:
4:192672304400
Parent:
3:c9c7c8e20336
Child:
5:ddc33cb62d27
--- a/rbuf.c	Thu Jun 23 20:30:46 2011 +0000
+++ b/rbuf.c	Thu Jun 23 21:11:06 2011 +0000
@@ -1,21 +1,11 @@
-#ifndef  __charbuf_c_
- #define __charbuf_c_
+#ifndef  __rbuf_c_
+ #define __rbuf_c_
 
 #include "mbed.h"
-
-#include "globals.h"            // Wegen g_display_error 
 #include "rbuf.h" 
-#include "eprintf.h"
 
-// int debug_create_charbuffer           = 0; 
-int display_receive_io                   = 0; 
-int display_send_io                      = 0; 
-//int debug_add_pointer_Klartext         = 0; 
-int debug_display_charbuffer_header      = 0; 
-
-void init_header    (buffer_header_t *h, void *buf, uint16_t objektanzahl, uint16_t Schwelle, uint16_t objektgroesse)
+void init_header    (rbuf_t *h, void *buf, uint16_t objektanzahl, uint16_t Schwelle, uint16_t objektgroesse)
    {
-    if (g_display_Funktion) {eprintf ("In init_header: \r\n"); }
     h->buflen           = objektanzahl; 
     h->bufcnt           = 0;
     h->in               = buf;
@@ -29,24 +19,19 @@
     h->blockgroesse     = objektgroesse; 
    } 
 
-buffer_header_t *charbuffer_init (uint16_t b_size, uint16_t b_schwelle, uint16_t blockgroesse) 
+rbuf_t *rbuf_init (uint16_t b_size, uint16_t b_schwelle, uint16_t blockgroesse) 
  { 
-  void                   *buffer_p; 
-  buffer_header_t        *kopf_p; 
+  void   *buffer_p; 
+  rbuf_t *kopf_p; 
   
-  if (g_display_Funktion) {eprintf ("In create_charbuffer: \r\n"); } 
-
     // Zuerst mal Speicher fuer die Verwaltungsstruktur holen  
-  kopf_p = (buffer_header_t *) calloc (1, (sizeof(buffer_header_t))); 
+  kopf_p = (rbuf_t *) calloc (1, (sizeof(rbuf_t))); 
   if (kopf_p > 0x00) 
    { 
-     memset (kopf_p, 0x00, (sizeof(buffer_header_t))); 
+     memset (kopf_p, 0x00, (sizeof(rbuf_t))); 
    } 
   else 
    { 
-     // Fehler! 
-     eprintf ("Error: Kein Speicher mehr bei create_charbuffer-Verwaltungs-Strukt -> stop\n\r"); 
-     stop++; 
      return 0x00; 
    }  
   
@@ -59,9 +44,7 @@
    } 
   else 
    { 
-     // gibt es noch nichts! -> evtl. Fehlemeldung, dass nciht mehr genuegend Speicher vorhanden ist. 
-     eprintf ("Error: Kein Speicher mehr bei create_charbuffer, r_buffer -> stop\n\r"); 
-     stop++; 
+     // gibt es noch nichts! -> evtl. Fehlemeldung, dass nicht mehr genuegend Speicher vorhanden ist. 
      return 0x00; 
    } 
   
@@ -71,68 +54,9 @@
   return kopf_p; 
  } 
  
-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) 
- { 
-  io_buf_s       *rbio;            // Ring-Bufferpaar I/O 
-  void              *r_buffer_p; 
-  void              *s_buffer_p; 
-  if (g_display_Funktion) {eprintf ("In create_charbuffer: \r\n"); } 
-
-    // Zuerst mal Speicher fuer die 2 I/O-Verwaltungsstrukturen holen  
-  
-   rbio = (io_buf_s *) calloc (1, (sizeof(io_buf_s))); 
-  if (rbio > 0x00) 
+void *rbuf_look (rbuf_t * r)    // Nur schauen, ob im Buffer neue Ojekte drin sind. 
    {
-     memset (rbio, 0x00, (sizeof(io_buf_s))); 
-   } 
-  else 
-   { 
-     // Fehler! 
-     eprintf ("Error: Kein Speicher mehr bei create_charbuffer-Verwaltungs-Strukt -> stop\n\r"); 
-     stop++; 
-     return 0x00; 
-   }  
-    // Jetzt noch die eigentlichen Receive- und send-char-Speicher 
-  size_t blen = r_size * blockgroesse; 
-  r_buffer_p    = calloc (1, blen); 
-  if (r_buffer_p > 0x00) 
-   { 
-     memset (r_buffer_p, 0x00, blen); 
-   } 
-  else 
-   { 
-     // gibt es noch nichts! -> evtl. Fehlemeldung, dass nciht mehr genuegend Speicher vorhanden ist. 
-     eprintf ("Error: Kein Speicher mehr bei create_charbuffer, r_buffer -> stop\n\r"); 
-     stop++; 
-     return 0x00; 
-   } 
-  
-    // pointer_add_check_null (r_buffer, "create_charbuffer receive_buffer"); 
-  size_t slen = s_size * blockgroesse; 
-  s_buffer_p  = (char *) calloc (1, blockgroesse); 
-  if (s_buffer_p > 0x00) 
-   { 
-     memset (s_buffer_p, 0x00, slen); 
-   } 
-  else 
-   { 
-     // evtl. Fehlermeldung, dass nicht genuegend Speicher vorhanden ist. 
-     eprintf ("Error: Kein Speicher mehr bei create_charbuffer, s_buffer -> stop\n\r"); 
-     stop++; 
-     return 0x00; 
-   } 
-  // Jetzt noch die Bufferzeiger in die Verwaltungsstrukturen eintragen 
-  // Und die Buffer-Verwaltung noch initialisieren 
-  
-  init_header    (&(rbio->in),  r_buffer_p, r_size, r_schwelle, blockgroesse); 
-  init_header    (&(rbio->out), s_buffer_p, s_size, s_schwelle, blockgroesse); 
-  return rbio; 
- } 
- 
-void *charbuffer_readable    (buffer_header_t * r)    // Nur schauen, ob im Buffer neue Ojekte drin sind. 
-   {
-     return r->bufcnt; 
-/*
+     // return r->bufcnt; 
      if (r->bufcnt == 0) 
        { 
           return 0;
@@ -141,23 +65,19 @@
        {
           return r->out;  // ?!? 
        } 
-*/
    } 
 
-void *charbuffer_get    (buffer_header_t *r, void *target)    // Einen char/Block rausholen mit Readzeiger++ 
+void *rbuf_get    (rbuf_t *r, void *target)    // Einen char/Block rausholen mit Readzeiger++ 
   { 
    void *p_b;  // Pointer block 
-   if (g_display_Funktion) {eprintf ("In charbuffer_get: \r\n"); }
    if (r->bufcnt == 0)
       {
        r->flags = r->flags & ((uint8_t) (~NOT_EMPTY)); 
        return 0; 
       }
-    // else 
-   // p_b = r->out++;    // ?!?        // zuerst rausholen, dann Read-Zeiger versetzen
    p_b = r->out;
    r->out = (void *) (((char *) r->out) + r->blockgroesse ); 
-   r->bufcnt--;                  // Ein char weniger im Buffer 
+   r->bufcnt--;                  // Ein Objekt weniger im Buffer 
    if (r->bufcnt >= r->Schwelle)
       { 
          r->flags = r->flags | ((uint8_t) (FAST_VOLL));
@@ -182,27 +102,9 @@
    return p_b;  // ?!? 
    } 
 
-void charbuffer_copy (void *qf, void *zf, uint16_t groesse) // Quelle -> Ziel kopieren   // ?!? noch ben�tigt? 
-  { 
-    // 
-    if (g_display_Funktion) {eprintf ("In charbuffer_copy: \r\n"); }
-    memcpy (zf, qf, groesse);
-    return; 
-  } 
-
-void charbuffer_move (void *qf, void *zf, uint16_t groesse) // Quelle -> Ziel (Move char mit anschliessendem loeschen der Quelle) 
+void *rbuf_put    (rbuf_t *r, void *b_p)    // Ein Zeichen/Block einstellen 
   { 
-    if (g_display_Funktion) {eprintf ("In charbuffer_move: \r\n"); }  
-    charbuffer_copy (qf, zf, groesse); 
-    memset (qf, 0x00, groesse); 
-     //?!? evtl. noch get machen? 
-  } 
- 
-void *charbuffer_put    (buffer_header_t *r, void *b_p)    // Ein Zeichen/Block einstellen 
-  { 
-    // b_p = Block-Pointer 
    void *target; 
-   if (g_display_Funktion) {eprintf ("In charbuffer_put: \r\n"); }
    if (r->bufcnt >= r->buflen)
       {
         r->fehleranzahl++;
@@ -234,84 +136,4 @@
    return target; 
    } 
 
-void print_verwaltung (buffer_header_t *rbk_p) 
- { 
-  if (rbk_p > 0x00)
-   {
-     eprintf ("  charbufferverwaltung Zeiger = 0x%08X\r\n", rbk_p);
-     eprintf ("   buflen       = %d\r\n",                      rbk_p->buflen);
-     eprintf ("   bufcnt       = %d\r\n",                      rbk_p->bufcnt);
-     eprintf ("   Zeiger *in   = 0x%08X\r\n",                  rbk_p->in);
-     eprintf ("   Zeiger *out  = 0x%08X\r\n",                  rbk_p->out);
-     eprintf ("   Zeiger *buf  = 0x%08X\r\n",                  rbk_p->buf);
-     eprintf ("   charanzahl  = %d\r\n",                       rbk_p->anzahl);
-     eprintf ("   Fehleranzahl = %d\r\n",                      rbk_p->fehleranzahl);
-     eprintf ("   Schwelle     = %d\r\n",                      rbk_p->Schwelle);
-     eprintf ("   Flags        = 0x%08X\r\n",                  rbk_p->flags);
-     eprintf ("   Max.Fuellst. = %d\r\n",                      rbk_p->peak_max);
-     eprintf ("   Blockgroesse = %d\r\n",                      rbk_p->blockgroesse);
-   } 
-  else 
-   { 
-    if (g_display_error) 
-     {
-      eprintf ("Error: In print_verwaltung: Zeiger rbk_p ist ungueltig! \r\n"); 
-     }          
-   }   
-  return;
- }
- 
-void display_rbuffer_header (io_buf_s *rb) 
-  {
-   buffer_header_t *rbk_p; 
-   if (g_display_Funktion) {eprintf ("In print_verwaltung: \r\n"); } 
-   if (rb > 0x00) 
-    { 
-      if (debug_display_charbuffer_header)
-       {
-        eprintf ("In display charbuffer charbufferspeicherzeiger = 0x%08X\r\n", rb);
-       }
-      if (display_receive_io)
-       {
-        rbk_p = &rb->in;
-        if (rbk_p > 0x00)
-         {
-          eprintf ("  Receive Struktur:     rbk_p = 0x%08X\r\n", rbk_p);
-          print_verwaltung (rbk_p);
-         } 
-        else 
-         {
-          if (g_display_error)
-           {
-            eprintf ("Error: In display_charbuffer_verwaltung: *rbk_p ist ungueltig! \r\n");                
-           }       
-         }
-       }
-      if (display_send_io)
-       {
-        rbk_p = &rb->out;
-        if (rbk_p > 0x00)
-         {
-          eprintf ("  Send Struktur:        rbk_p = 0x%08X\r\n", rbk_p);
-          print_verwaltung (rbk_p);
-         }
-        else 
-         {
-         if (g_display_error)
-          {
-           eprintf ("Error: In display_charbuffer_verwaltung display_send: *rbk_p ist ungueltig! \r\n");                
-          }       
-         } 
-       }
-    }
-   else 
-    {
-     if (g_display_error)
-      {
-       eprintf ("Eror: In display_charbuffer_verwaltung: *rb ist ungueltig! \r\n");                
-      }       
-    } 
-   return;
-  }
-
-#endif // von  __charbuf_c_
+#endif // von  __rbuf_c_