ESP8266 ILI9341 display support code with printf sources, wire-frame viewer and custom fonts  1.0
ESP8266ILI9341DisplayProject
buffer.c
Go to the documentation of this file.
1 
30 #include "user_config.h"
31 #include "fatfs.h"
32 #include "posix.h"
33 #include "buffer.h"
34 
37 
38 
44 buffer_t *buffer_read_open(char *name, uint8_t *buf, int size)
45 {
46  static buffer_t _buff;
47  buffer_t *p = (buffer_t *) &_buff;
48 
49  memset(p,0,(int) sizeof(buffer_t));
50 
51  p->buf = buf;
52 
54  p->fp = fopen(name,"rb");
55  if(p->fp == NULL)
56  {
57  printf("buffer_read_open: Can not open:[%s]\n", name);
59  return(0);
60  }
61 
62  p->size = size;
63  p->ind = 0;
64  p->len = 0;
65  p->ungetf = 0;
66  p->ungetc = 0;
67  return(p);
68 }
69 
70 
76 {
77  if(p->fp)
78  fclose(p->fp);
79  p->size = 0;
80  p->len = 0;
81  p->ind = 0;
82  p->ungetf = 0;
83  p->ungetc = 0;
84 }
85 
90 void buffer_ungetc(buffer_t *p, int c)
91 {
92  p->ungetf = 1;
93  p->ungetc = c;
94 }
95 
96 
101 {
102  int size;
103  int c;
104 
105  if(p->ungetf)
106  {
107  p->ungetf = 0;
108  return(p->ungetc);
109  }
110  // Read a new block
111  if(p->len < 1)
112  {
113  p->ind = 0;
114  size = fread(p->buf, 1, p->size, p->fp);
115  if(size <= 0)
116  {
117  p->len = 0;
118  return(EOF);
119  }
120  p->len = size;
121  }
122  c = p->buf[p->ind];
123  p->len--;
124  p->ind++;
125  return( c );
126 }
127 
128 
134 uint8_t *buffer_gets(uint8_t *str, int size, buffer_t *p)
135 {
136  int c;
137  int next;
138  int ind = 0;
139 
140  // leave room for EOS
141  while(ind < size)
142  {
143  c = buffer_getc(p);
144  if(c == EOF)
145  {
146  if(ind == 0)
147  {
148  str[ind] = 0;
149  return(NULL);
150  }
151  break;
152  }
153  // CR NL is end of line
154  if(c == '\r')
155  {
156  next = buffer_getc(p);
157  if(next == '\n')
158  break;
159  buffer_ungetc(p,next);
160  break;
161  }
162  // NL is end of line
163  if(c == '\n')
164  break;
165  str[ind++] = c;
166  }
167  str[ind] = 0;
168  return(str);
169 }
Master include file for project Includes all project includes and defines here.
int ungetc
Definition: buffer.h:39
FILE * fp
Definition: buffer.h:34
MEMSPACE FILE * fopen(const char *path, const char *mode)
POSIX Open a file with path name and ascii file mode string.
Definition: posix.c:782
int ind
Definition: buffer.h:35
int size
Definition: buffer.h:36
MEMSPACE size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
POSIX read nmemb elements from buf, size bytes each, to the stream fd.
Definition: posix.c:803
uint8_t * buffer_gets(uint8_t *str, int size, buffer_t *p)
buffered getc
Definition: buffer.c:134
int len
Definition: buffer.h:37
#define EOF
End of file or device read.
Definition: posix.h:248
#define NULL
Definition: cpu.h:55
int ind
Definition: ili9341.c:373
MEMSPACE int fclose(FILE *stream)
POSIX close a file stream.
Definition: posix.c:1239
void buffer_ungetc(buffer_t *p, int c)
buffered ungetc
Definition: buffer.c:90
void buffer_read_close(buffer_t *p)
buffered read close FatFS does not have a f_fgetc() and using f_read() of just 1 byte is VERY SLOW ...
Definition: buffer.c:75
character read buffering wrappers for FatFS WHY? Character at a time operation is in FatFS are VERY s...
MEMSPACE int printf(const char *format,...)
uint8_t * buf
Definition: buffer.h:40
POSIX wrapper for FatFS.
buffer_t * buffer_read_open(char *name, uint8_t *buf, int size)
FatFS does not have a f_fgetc() function Using f_read() of just 1 byte is VERY VERY SLOW...
Definition: buffer.c:44
unsigned char uint8_t
Definition: send.c:17
int buffer_getc(buffer_t *p)
buffered getc
Definition: buffer.c:100
int ungetf
Definition: buffer.h:38