summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/buffer/ringbuffer.c46
-rw-r--r--lib/logger/log.c20
2 files changed, 18 insertions, 48 deletions
diff --git a/lib/buffer/ringbuffer.c b/lib/buffer/ringbuffer.c
index 9e3adaf..dcf7bc2 100644
--- a/lib/buffer/ringbuffer.c
+++ b/lib/buffer/ringbuffer.c
@@ -3,45 +3,37 @@
// todo: syncing access to buffer.
#define FOOLOS_MODULE_NAME "ringbuffer"
+
#include "lib/bool/bool.h"
#include "lib/logger/log.h"
#include "kernel/spinlock.h"
-static volatile int front;
-static volatile int back;
-static volatile int size;
-
#define RINGBUFFER_SIZE 10
+static volatile int size=RINGBUFFER_SIZE;
+static volatile int front=RINGBUFFER_SIZE-1;
+static volatile int back=RINGBUFFER_SIZE-1;
static volatile char buf[RINGBUFFER_SIZE];
-bool ringbuffer_selftest();
-
-void ringbuffer_init()
-{
- size=RINGBUFFER_SIZE;
- front=size-1;
- back=size-1;
-
-// ringbuffer_selftest();
-// while(1);
-}
-
bool ringbuffer_put(char c)
{
+
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"put wants lock)");
lock_spin(3);
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"locked by put)");
+
if((back-1+size)%size==front)
{
lock_release(3);
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"unlocked by put)");
return false;
}
+
buf[back]=c;
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"put %d %d (%c)", back, front,c);
back--;
back+=size;
back%=size;
+
lock_release(3);
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"unlocked by put)");
@@ -51,7 +43,6 @@ bool ringbuffer_put(char c)
bool ringbuffer_get(char *c)
{
-
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"get wants lock)");
lock_spin(3);
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_FINE,"locked by get)");
@@ -74,24 +65,3 @@ bool ringbuffer_get(char *c)
return true;
}
-
-bool ringbuffer_selftest()
-{
- log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"ringbuffer selftest");
- char c;
-
- ringbuffer_put('a');
- ringbuffer_put('b');
- ringbuffer_put('c');
- ringbuffer_put('d');
- ringbuffer_put('e');
-
- ringbuffer_get(&c);
- ringbuffer_get(&c);
- ringbuffer_get(&c);
- ringbuffer_get(&c);
- ringbuffer_get(&c);
- ringbuffer_get(&c);
- ringbuffer_get(&c);
-
-}
diff --git a/lib/logger/log.c b/lib/logger/log.c
index 703658a..d58d2d6 100644
--- a/lib/logger/log.c
+++ b/lib/logger/log.c
@@ -14,23 +14,16 @@
static char buffer[LOG_BUF_SIZE];
static int first=0;
static int last=0;
-static bool init=false;
void log(char *module_name, int log_level, char *format_string, ...)
{
-#ifdef FOOLOS_LOG_OFF
+ #ifdef FOOLOS_LOG_OFF
return;
-#endif
+ #endif
if(log_level<FOOLOS_LOG_INFO)return;
- if(!init)
- {
- init=true;
- log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"buffer: 0x%08X, first=%08X, last=%08X",buffer,&first,&last);
- }
-
char buf_info[256];
char buf_log[256];
char buf_time[20];
@@ -39,7 +32,7 @@ void log(char *module_name, int log_level, char *format_string, ...)
uint32_t s=t/25;
uint32_t ms=t*1000/25-1000*s;
- tfp_sprintf(buf_time,"[%3d.%05d] ",s,ms);
+ tfp_sprintf(buf_time,"[%3d.%05d]",s,ms);
va_list va;
va_start(va,format_string);
@@ -71,6 +64,13 @@ void panic(char *module_name, char *message)
void log_log()
{
+ #ifdef FOOLOS_LOG_OFF
+ return;
+ #endif
+
+ char buf_log[256];
+ tfp_sprintf(buf_log,"[ 0.00000] log: buffer state: first=%d, last=%d, buf_size=%d\n",first,last,LOG_BUF_SIZE);
+ console_put_str(buf_log);
for(int i=first;i!=last;i++)
{
console_put_char(buffer[i]);