2 * YAFFS: Yet another FFS. A NAND-flash specific file system.
4 * Copyright (C) 2002-2010 Aleph One Ltd.
5 * for Toby Churchill Ltd and Brightstar Engineering
7 * Created by Timothy Manning <timothy@yaffs.net>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
15 * message_buffer.c contains code for a message buffer .
18 #include "message_buffer.h"
20 void append_to_buffer(buffer *p_Buffer, char *message,char message_level,char print){
21 /*wrapper function for add_to_buffer_root_function*/
22 add_to_buffer_root_function(p_Buffer,message, message_level,APPEND_MESSAGE,print);
25 void add_to_buffer(buffer *p_Buffer, char *message,char message_level,char print){
26 /*wrapper function for add_to_buffer_root_function*/
27 add_to_buffer_root_function(p_Buffer,message, message_level,DO_NOT_APPEND_MESSAGE,print);
30 void add_to_buffer_root_function(buffer *p_Buffer, char *message,char message_level,char append,char print){
32 if (append==APPEND_MESSAGE){ /* append current message*/
33 strncat(p_Buffer->message[p_Buffer->head],message,BUFFER_MESSAGE_LENGTH);
37 /*move the head up one. the head always points at the last written data*/
40 /*printf("p_Buffer->tail=%d\n",p_Buffer->tail);*/
41 /*printf("p_Buffer->head=%d\n",p_Buffer->head);*/
42 if (p_Buffer->head >=BUFFER_SIZE-1) {
43 /*printf("buffer overflow\n");*/
44 p_Buffer->head -= (BUFFER_SIZE-1); /*wrap the head around the buffer*/
45 /*printf("new p_Buffer->head=%d\n",p_Buffer->head);*/
47 /*if the buffer is full then delete last entry by moving the tail*/
48 if (p_Buffer->head==p_Buffer->tail){
49 /*printf("moving buffer tail from %d to ",p_Buffer->tail);*/
51 if (p_Buffer->tail >=BUFFER_SIZE) p_Buffer->tail -= BUFFER_SIZE;/*wrap the tail around the buffer*/
52 /*printf("%d\n",p_Buffer->tail);*/
56 p_Buffer->message_level[p_Buffer->head]=message_level; /*copy the message level*/
57 strncpy(p_Buffer->message[p_Buffer->head],message,BUFFER_MESSAGE_LENGTH); /*copy the message*/
58 /*printf("copied %s into p_Buffer->message[p_Buffer->head]: %s\n",message,p_Buffer->message[p_Buffer->head]);
59 printf("extra %s\n",p_Buffer->message[p_Buffer->head]);*/
61 if ((p_Buffer->message_level[p_Buffer->head]<=DEBUG_LEVEL)&& (print==PRINT)){
62 /*printf("printing buffer 1\n");
63 // the print buffer function is not working this is just a quick fix
64 print_buffer(p_Buffer,1); //if the debug level is higher enough then print the new message
66 printf("%s\n",p_Buffer->message[p_Buffer->head]);
72 void print_buffer(buffer *p_Buffer, int number_of_messages_to_print){
75 printf("print buffer\n");
76 printf("buffer head:%d\n",p_Buffer->head);
77 printf("buffer tail:%d\n",p_Buffer->tail);
79 if (number_of_messages_to_print==PRINT_ALL) number_of_messages_to_print=BUFFER_SIZE;
80 // printf("number_of_messages_to_print=%d\n",number_of_messages_to_print);
81 for (i=0,x=0; (x>=p_Buffer->tail) && (i<number_of_messages_to_print); i++, x--){
82 // printf("printing buffer\n");
83 // printf("x:%d\n",x);
84 if (x<0) x = BUFFER_SIZE-1; /*wrap x around buffer*/
85 printf("%s\n",p_Buffer->message[p_Buffer->head]);
86 printf("printed buffer\n");