snickerdoodle Platform Controller
firmware for STM32F0 platform controller
Buffer Functions

Functions

enum sd_buff_err sd_char_buff_init (struct sd_cbuf *buff, uint32_t size, uint8_t *pbuff)
 Initialize Character Buffer. More...
 
enum sd_buff_err sd_doub_buff_init (struct sd_doub_buff *buff, uint32_t size, uint8_t **pbuff)
 Initialize Double Buffer. More...
 
enum sd_buff_err sd_char_buff_putc (struct sd_cbuf *buffer, uint8_t data)
 Put Character in Buffer Write a character to the buffer. More...
 
enum sd_buff_err sd_char_buff_putc_to (struct sd_cbuf *buffer, uint8_t data, uint32_t timeout)
 Put Character in Buffer with Timeout Write a character to the buffer with a timeout. More...
 
enum sd_buff_err sd_char_buff_write (struct sd_cbuf *buffer, uint8_t *data, uint32_t len)
 Write Data to Buffer Write a specified length of characters from a data pointer to the buffer. More...
 
enum sd_buff_err sd_char_buff_read (struct sd_cbuf *buff, uint8_t *data, uint32_t *len)
 Read Length of Characters from Buffer Copy a specified length of the buffer to a pointer. More...
 
enum sd_buff_err sd_char_buff_getc (struct sd_cbuf *buff, uint8_t *data)
 Get Character from Buffer Get a single character from the buffer. More...
 
enum sd_buff_err sd_char_buff_getc_to (struct sd_cbuf *buff, uint8_t *data, uint32_t timeout)
 Get Character from Buffer with Timeout Get a single character from the buffer with a timeout if the buffer is locked. More...
 
enum sd_buff_err sd_buff_reset (struct sd_cbuf *buff)
 Reset buffer Resets the in and out indexes of the buffer (without removing contents of the buffer) to the start of the buffer. More...
 
__weak void sd_char_write_end_cb (struct sd_cbuf *buff)
 Write Command End Callback User defined function executed when a write operation is completed. More...
 
__weak void sd_char_read_end_cb (struct sd_cbuf *buff)
 Read Command End Callback User defined function executed when a read operation is completed. More...
 
enum sd_buff_err sd_doub_buff_init (struct sd_doub_buff *buff, uint32_t size, uint8_t *pbuff[])
 

Detailed Description

Function Documentation

◆ sd_buff_reset()

enum sd_buff_err sd_buff_reset ( struct sd_cbuf buff)

#include <Src/sd_buffer.c>

Reset buffer Resets the in and out indexes of the buffer (without removing contents of the buffer) to the start of the buffer.

Parameters
buffThe buffer to reset
Return values
SD_BUFF_SUCCESSon success, error state otherwise
448 {
449 
450  return SD_BUFF_SUCCESS;
451 }
Definition: sd_buffer.h:66

◆ sd_char_buff_getc()

enum sd_buff_err sd_char_buff_getc ( struct sd_cbuf buff,
uint8_t *  data 
)

#include <Src/sd_buffer.c>

Get Character from Buffer Get a single character from the buffer.

Parameters
buffThe buffer to read from
dataPointer to character to write to
Return values
SD_BUFF_SUCCESSon success, error status otherwise
Warning
This does not destroy the contents of the buffer. The circular nature of the buffer will allow any characters to be written over, including characters that have not been read yet (buffer overflow condition).
325 {
326 
327  if (buff == NULL)
328  return SD_BUFF_NULL_ERROR;
329 
330  /* Check if the buffer was newly initialized */
331  if (buff->state == SD_BUFF_INITIALIZED)
332  buff->state = SD_BUFF_READY;
333 
334  /* Wait until the buffer is available */
335  if (buff->state != SD_BUFF_READY)
336  return SD_BUFF_LOCKED;
337 
338  /* Set the state to busy */
339  buff->state = SD_BUFF_BUSY;
340 
341  /* If the buffer is at the end, wrap around */
342  if (buff->out >= buff->size)
343  buff->out = 0;
344 
345  if (buff->len) {
352  *data = buff->buff[buff->out++];
353 
354  /* Check for end of buffer and wrap around */
355  if (buff->out >= buff->size)
356  buff->out = 0;
357 
358  /* Decrement length */
359  if (buff->len-- <= 0)
360  buff->len = 0;
361  } else {
362  return SD_BUFF_EMPTY;
363  }
364 
365  /* Release the buffer */
366  buff->state = SD_BUFF_READY;
367 
368  /* Execute user-defined callback */
370 
371  return SD_BUFF_SUCCESS;
372 }
Definition: sd_buffer.h:80
uint8_t * buff
Definition: sd_buffer.h:103
Definition: sd_buffer.h:66
Definition: sd_buffer.h:68
Definition: sd_buffer.h:69
Definition: sd_buffer.h:79
Definition: sd_buffer.h:81
__weak void sd_char_read_end_cb(struct sd_cbuf *buff)
Read Command End Callback User defined function executed when a read operation is completed...
Definition: sd_buffer.c:484
Definition: sd_buffer.h:67

◆ sd_char_buff_getc_to()

enum sd_buff_err sd_char_buff_getc_to ( struct sd_cbuf buff,
uint8_t *  data,
uint32_t  timeout 
)

#include <Src/sd_buffer.c>

Get Character from Buffer with Timeout Get a single character from the buffer with a timeout if the buffer is locked.

Parameters
buffThe buffer to read from
dataPointer to character to write to
timeoutTimeout value to use for read
Return values
SD_BUFF_SUCCESSon success, error status otherwise
Warning
This does not destroy the contents of the buffer. The circular nature of the buffer will allow any characters to be written over, including characters that have not been read yet (buffer overflow condition).
389 {
390  uint32_t time = HAL_GetTick();
391 
392  if (buff == NULL)
393  return SD_BUFF_NULL_ERROR;
394 
395  /* Check if the buffer is ready to be used */
396  while (buff->state != SD_BUFF_READY) {
397  /* Check for timeout */
398  if ((timeout == 0) || (HAL_GetTick() - time) > timeout)
399  return SD_BUFF_TIMEOUT;
400  }
401 
402  /* Set the state to busy */
403  buff->state = SD_BUFF_BUSY;
404 
405  /* If the buffer is at the end, wrap around */
406  if (buff->out >= buff->size)
407  buff->out = 0;
408 
409  if (buff->len) {
416  *data = buff->buff[buff->out++];
417 
418  /* Check for end of buffer and wrap around */
419  if (buff->out >= buff->size)
420  buff->out = 0;
421 
422  /* Decrement length */
423  if (buff->len-- <= 0)
424  buff->len = 0;
425  } else {
426  return SD_BUFF_EMPTY;
427  }
428 
429  /* Release the buffer */
430  buff->state = SD_BUFF_READY;
431 
432  /* Execute user-defined callback */
434 
435  return SD_BUFF_SUCCESS;
436 }
Definition: sd_buffer.h:80
uint8_t * buff
Definition: sd_buffer.h:103
Definition: sd_buffer.h:66
Definition: sd_buffer.h:69
Definition: sd_buffer.h:70
Definition: sd_buffer.h:81
__weak void sd_char_read_end_cb(struct sd_cbuf *buff)
Read Command End Callback User defined function executed when a read operation is completed...
Definition: sd_buffer.c:484
Definition: sd_buffer.h:67

◆ sd_char_buff_init()

enum sd_buff_err sd_char_buff_init ( struct sd_cbuf buff,
uint32_t  size,
uint8_t *  pbuff 
)

#include <Src/sd_buffer.c>

Initialize Character Buffer.

Parameters
bufferThe buffer to initialize
sizeThe length of the buffer
pbuffPointer to location of character array to hold buffer data
Return values
SD_BUFF_SUCCESSon success, error status otherwise
75 {
76  /* Initialize the buffer to all zeros */
77  memset(buff, 0, sizeof(struct sd_cbuf));
78 
79  /* Set the default values of the buffer */
80  buff->size = size;
81  buff->buff = pbuff;
82 
83  /* Buffer has been initialized */
84  buff->state = SD_BUFF_READY;
85 
86  return SD_BUFF_SUCCESS;
87 }
uint32_t size
Definition: sd_buffer.h:107
Definition: sd_buffer.h:80
uint8_t * buff
Definition: sd_buffer.h:103
Definition: sd_buffer.h:66
Character buffer structure.
Definition: sd_buffer.h:102

◆ sd_char_buff_putc()

enum sd_buff_err sd_char_buff_putc ( struct sd_cbuf buffer,
uint8_t  data 
)

#include <Src/sd_buffer.c>

Put Character in Buffer Write a character to the buffer.

Parameters
bufferThe buffer to write to
dataThe character to write
Return values
SD_BUFF_SUCCESSon success, error status otherwise
122 {
123  if (buffer == NULL)
124  return SD_BUFF_NULL_ERROR;
125 
126  /* Check if the buffer is ready to be used */
127  if (buffer->state != SD_BUFF_READY)
128  return SD_BUFF_LOCKED;
129 
130  /* Set the state to busy */
131  buffer->state = SD_BUFF_BUSY;
132 
133  buffer->buff[buffer->in++] = data;
134 
135  /* Check for end of buffer and wrap around */
136  if (++buffer->in >= buffer->size)
137  buffer->in = 0;
138 
139  /* Increase the length of the buffer */
140  buffer->len++;
141 
142  /* Release the buffer */
143  buffer->state = SD_BUFF_READY;
144 
145  return SD_BUFF_SUCCESS;
146 }
uint32_t size
Definition: sd_buffer.h:107
Definition: sd_buffer.h:80
uint8_t * buff
Definition: sd_buffer.h:103
uint32_t in
Definition: sd_buffer.h:104
Definition: sd_buffer.h:66
enum sd_buff_state state
Definition: sd_buffer.h:108
Definition: sd_buffer.h:68
Definition: sd_buffer.h:81
Definition: sd_buffer.h:67
uint32_t len
Definition: sd_buffer.h:106

◆ sd_char_buff_putc_to()

enum sd_buff_err sd_char_buff_putc_to ( struct sd_cbuf buffer,
uint8_t  data,
uint32_t  timeout 
)

#include <Src/sd_buffer.c>

Put Character in Buffer with Timeout Write a character to the buffer with a timeout.

Parameters
bufferThe buffer to write to
dataThe character to write
timeoutThe timeout used to write the character
Return values
SD_BUFF_SUCCESSon success, error status otherwise
161 {
162  uint32_t time = HAL_GetTick();
163 
164  if (buffer == NULL)
165  return SD_BUFF_NULL_ERROR;
166 
167  /* Check if the buffer is ready to be used */
168  while (buffer->state != SD_BUFF_READY) {
169  /* Check for timeout */
170  if ((timeout == 0) || (HAL_GetTick() - time) > timeout)
171  return SD_BUFF_TIMEOUT;
172  }
173 
174  /* Set the state to busy */
175  buffer->state = SD_BUFF_BUSY;
176 
177  buffer->buff[buffer->in++] = data;
178 
179  /* Check for end of buffer and wrap around */
180  if (++buffer->in >= buffer->size)
181  buffer->in = 0;
182 
183  /* Increase the length of the buffer */
184  buffer->len++;
185 
186  /* Release the buffer */
187  buffer->state = SD_BUFF_READY;
188 
189  return SD_BUFF_SUCCESS;
190 }
uint32_t size
Definition: sd_buffer.h:107
Definition: sd_buffer.h:80
uint8_t * buff
Definition: sd_buffer.h:103
uint32_t in
Definition: sd_buffer.h:104
Definition: sd_buffer.h:66
enum sd_buff_state state
Definition: sd_buffer.h:108
Definition: sd_buffer.h:70
Definition: sd_buffer.h:81
Definition: sd_buffer.h:67
uint32_t len
Definition: sd_buffer.h:106

◆ sd_char_buff_read()

enum sd_buff_err sd_char_buff_read ( struct sd_cbuf buff,
uint8_t *  data,
uint32_t *  len 
)

#include <Src/sd_buffer.c>

Read Length of Characters from Buffer Copy a specified length of the buffer to a pointer.

Parameters
buffThe buffer to read from
dataThe data pointer to write the buffer to
lenThe length of the buffer to read
Return values
SD_BUFF_SUCCESSon success, error status otherwise
Warning
This does not destroy the contents of the buffer. The circular nature of the buffer will allow any characters to be written over, including characters that have not been read yet (buffer overflow condition).
259 {
260  uint32_t tmp_len;
261 
262  if (buff == NULL)
263  return SD_BUFF_NULL_ERROR;
264  if (len == NULL)
265  return SD_BUFF_ERROR;
266 
267  /* Check if the buffer was newly initialized */
268  if (buff->state == SD_BUFF_INITIALIZED)
269  buff->state = SD_BUFF_READY;
270 
271  /* Wait until the buffer is available */
272  if (buff->state != SD_BUFF_READY)
273  return SD_BUFF_LOCKED;
274 
275  /* Set the state to busy */
276  buff->state = SD_BUFF_BUSY;
277 
278  /* If the buffer is at the end, wrap around */
279  if (buff->out >= buff->len)
280  buff->out = 0;
281 
282  while (buff->len) {
289  *data++ = buff->buff[buff->out++];
290 
291  /* Increase the length of the buffer read */
292  tmp_len++;
293 
294  /* Check for end of buffer and wrap around */
295  if (buff->out >= buff->size )
296  buff->out = 0;
297 
298  if (buff->len-- <= 0 )
299  buff->len = 0;
300  }
301 
302  /* Set the length of the buffer that was read */
303  *len = tmp_len;
304 
305  /* Release the buffer */
306  buff->state = SD_BUFF_READY;
307 
308  /* Execute user-defined callback */
310 
311  return SD_BUFF_SUCCESS;
312 }
Definition: sd_buffer.h:80
uint8_t * buff
Definition: sd_buffer.h:103
Definition: sd_buffer.h:66
Definition: sd_buffer.h:68
Definition: sd_buffer.h:79
Definition: sd_buffer.h:81
__weak void sd_char_read_end_cb(struct sd_cbuf *buff)
Read Command End Callback User defined function executed when a read operation is completed...
Definition: sd_buffer.c:484
Definition: sd_buffer.h:71
Definition: sd_buffer.h:67
uint32_t len
Definition: sd_buffer.h:106

◆ sd_char_buff_write()

enum sd_buff_err sd_char_buff_write ( struct sd_cbuf buffer,
uint8_t *  data,
uint32_t  len 
)

#include <Src/sd_buffer.c>

Write Data to Buffer Write a specified length of characters from a data pointer to the buffer.

Parameters
bufferThe buffer to write to
dataThe data pointer to data to write to buffer
lenThe length of the buffer to write
Return values
SD_BUFF_SUCCESSon success, error status otherwise
206 {
207  if (buffer == NULL)
208  return SD_BUFF_NULL_ERROR;
209  if (len == 0)
210  return SD_BUFF_ERROR;
211 
212  /* Check if the buffer was newly initialized */
213  if (buffer->state == SD_BUFF_INITIALIZED )
214  buffer->state = SD_BUFF_READY;
215 
216  if (buffer->state != SD_BUFF_READY)
217  return SD_BUFF_LOCKED;
218 
219  /* Set the state to busy */
220  buffer->state = SD_BUFF_BUSY;
221 
222  /* If the buffer is at the end, wrap around */
223  if (buffer->in >= buffer->size)
224  buffer->in = 0;
225 
226  while (len--) {
227  /* Add the data to the buffer */
228  buffer->buff[buffer->in] = *data++;
229 
230  /* Check for end of buffer and wrap around */
231  if (++buffer->in >= buffer->size ) buffer->in = 0;
232 
233  /* Increase count (length) of buffer */
234  buffer->len++;
235  }
236 
237  /* Release the buffer */
238  buffer->state = SD_BUFF_READY;
239 
240  /* Execute user-defined callback */
241  sd_char_write_end_cb(buffer);
242 
243  return SD_BUFF_SUCCESS;
244 }
uint32_t size
Definition: sd_buffer.h:107
Definition: sd_buffer.h:80
uint8_t * buff
Definition: sd_buffer.h:103
uint32_t in
Definition: sd_buffer.h:104
Definition: sd_buffer.h:66
enum sd_buff_state state
Definition: sd_buffer.h:108
Definition: sd_buffer.h:68
Definition: sd_buffer.h:79
__weak void sd_char_write_end_cb(struct sd_cbuf *buff)
Write Command End Callback User defined function executed when a write operation is completed...
Definition: sd_buffer.c:466
Definition: sd_buffer.h:81
Definition: sd_buffer.h:71
Definition: sd_buffer.h:67
uint32_t len
Definition: sd_buffer.h:106

◆ sd_char_read_end_cb()

void sd_char_read_end_cb ( struct sd_cbuf buff)

#include <Src/sd_buffer.c>

Read Command End Callback User defined function executed when a read operation is completed.

Note
This function should not be modified, when the callback is needed, the sd_char_read_end_cb can be implemented in the user file.
Parameters
buffThe buffer that was read
Return values
none
485 {
486 
487 }

◆ sd_char_write_end_cb()

void sd_char_write_end_cb ( struct sd_cbuf buff)

#include <Src/sd_buffer.c>

Write Command End Callback User defined function executed when a write operation is completed.

Note
This function should not be modified, when the callback is needed, the sd_char_write_end_cb can be implemented in the user file.
Parameters
buffThe buffer that was written
Return values
None
467 {
468 
469 }

◆ sd_doub_buff_init()

enum sd_buff_err sd_doub_buff_init ( struct sd_doub_buff buff,
uint32_t  size,
uint8_t **  pbuff 
)

#include <Src/sd_buffer.c>

Initialize Double Buffer.

Parameters
buffThe buffer to initialize
sizeLength of the buffer
pbuffPointer to buffer array
Return values
SD_BUFF_SUCCESSon success, error status otherwise
102 {
103  memset(buff, 0, sizeof(struct sd_doub_buff));
104 
105  buff->size = size;
106  buff->buff = pbuff;
107 
108  return SD_BUFF_SUCCESS;
109 }
uint32_t size
Definition: sd_buffer.h:107
uint8_t * buff
Definition: sd_buffer.h:103
Definition: sd_buffer.h:66
Double character buffer structure.
Definition: sd_buffer.h:89