From d23e13716bd274e0984cc0258ef069c33c6645be Mon Sep 17 00:00:00 2001 From: James Cotton Date: Mon, 8 Aug 2011 08:37:14 -0500 Subject: [PATCH] dos2unix: fifo_buffer --- flight/Libraries/fifo_buffer.c | 532 ++++++++++++++--------------- flight/Libraries/inc/fifo_buffer.h | 130 +++---- 2 files changed, 331 insertions(+), 331 deletions(-) diff --git a/flight/Libraries/fifo_buffer.c b/flight/Libraries/fifo_buffer.c index 7c5262c7d..7b68fcf09 100644 --- a/flight/Libraries/fifo_buffer.c +++ b/flight/Libraries/fifo_buffer.c @@ -1,266 +1,266 @@ -/** - ****************************************************************************** - * - * @file fifo_buffer.c - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief GPIO input functions - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include - -#include "fifo_buffer.h" - -// ***************************************************************************** -// circular buffer functions - -uint16_t fifoBuf_getSize(t_fifo_buffer *buf) -{ // return the usable size of the buffer - - uint16_t buf_size = buf->buf_size; - - if (buf_size > 0) - return (buf_size - 1); - else - return 0; -} - -uint16_t fifoBuf_getUsed(t_fifo_buffer *buf) -{ // return the number of bytes available in the rx buffer - - uint16_t rd = buf->rd; - uint16_t wr = buf->wr; - uint16_t buf_size = buf->buf_size; - - uint16_t num_bytes = wr - rd; - if (wr < rd) - num_bytes = (buf_size - rd) + wr; - - return num_bytes; -} - -uint16_t fifoBuf_getFree(t_fifo_buffer *buf) -{ // return the free space size in the buffer - - uint16_t buf_size = buf->buf_size; - - uint16_t num_bytes = fifoBuf_getUsed(buf); - - return ((buf_size - num_bytes) - 1); -} - -void fifoBuf_clearData(t_fifo_buffer *buf) -{ // remove all data from the buffer - buf->rd = buf->wr; -} - -void fifoBuf_removeData(t_fifo_buffer *buf, uint16_t len) -{ // remove a number of bytes from the buffer - - uint16_t rd = buf->rd; - uint16_t buf_size = buf->buf_size; - - // get number of bytes available - uint16_t num_bytes = fifoBuf_getUsed(buf); - - if (num_bytes > len) - num_bytes = len; - - if (num_bytes < 1) - return; // nothing to remove - - rd += num_bytes; - if (rd >= buf_size) - rd -= buf_size; - - buf->rd = rd; -} - -int16_t fifoBuf_getBytePeek(t_fifo_buffer *buf) -{ // get a data byte from the buffer without removing it - - uint16_t rd = buf->rd; - - // get number of bytes available - uint16_t num_bytes = fifoBuf_getUsed(buf); - - if (num_bytes < 1) - return -1; // no byte retuened - - return buf->buf_ptr[rd]; // return the byte -} - -int16_t fifoBuf_getByte(t_fifo_buffer *buf) -{ // get a data byte from the buffer - - uint16_t rd = buf->rd; - uint16_t buf_size = buf->buf_size; - uint8_t *buff = buf->buf_ptr; - - // get number of bytes available - uint16_t num_bytes = fifoBuf_getUsed(buf); - - if (num_bytes < 1) - return -1; // no byte returned - - uint8_t b = buff[rd]; - if (++rd >= buf_size) - rd = 0; - - buf->rd = rd; - - return b; // return the byte -} - -uint16_t fifoBuf_getDataPeek(t_fifo_buffer *buf, void *data, uint16_t len) -{ // get data from the buffer without removing it - - uint16_t rd = buf->rd; - uint16_t buf_size = buf->buf_size; - uint8_t *buff = buf->buf_ptr; - - // get number of bytes available - uint16_t num_bytes = fifoBuf_getUsed(buf); - - if (num_bytes > len) - num_bytes = len; - - if (num_bytes < 1) - return 0; // return number of bytes copied - - uint8_t *p = (uint8_t *)data; - uint16_t i = 0; - - while (num_bytes > 0) - { - uint16_t j = buf_size - rd; - if (j > num_bytes) - j = num_bytes; - memcpy(p + i, buff + rd, j); - i += j; - num_bytes -= j; - rd += j; - if (rd >= buf_size) - rd = 0; - } - - return i; // return number of bytes copied -} - -uint16_t fifoBuf_getData(t_fifo_buffer *buf, void *data, uint16_t len) -{ // get data from our rx buffer - - uint16_t rd = buf->rd; - uint16_t buf_size = buf->buf_size; - uint8_t *buff = buf->buf_ptr; - - // get number of bytes available - uint16_t num_bytes = fifoBuf_getUsed(buf); - - if (num_bytes > len) - num_bytes = len; - - if (num_bytes < 1) - return 0; // return number of bytes copied - - uint8_t *p = (uint8_t *)data; - uint16_t i = 0; - - while (num_bytes > 0) - { - uint16_t j = buf_size - rd; - if (j > num_bytes) - j = num_bytes; - memcpy(p + i, buff + rd, j); - i += j; - num_bytes -= j; - rd += j; - if (rd >= buf_size) - rd = 0; - } - - buf->rd = rd; - - return i; // return number of bytes copied -} - -uint16_t fifoBuf_putByte(t_fifo_buffer *buf, const uint8_t b) -{ // add a data byte to the buffer - - uint16_t wr = buf->wr; - uint16_t buf_size = buf->buf_size; - uint8_t *buff = buf->buf_ptr; - - uint16_t num_bytes = fifoBuf_getFree(buf); - if (num_bytes < 1) - return 0; - - buff[wr] = b; - if (++wr >= buf_size) - wr = 0; - - buf->wr = wr; - - return 1; // return number of bytes copied -} - -uint16_t fifoBuf_putData(t_fifo_buffer *buf, const void *data, uint16_t len) -{ // add data to the buffer - - uint16_t wr = buf->wr; - uint16_t buf_size = buf->buf_size; - uint8_t *buff = buf->buf_ptr; - - uint16_t num_bytes = fifoBuf_getFree(buf); - if (num_bytes > len) - num_bytes = len; - - if (num_bytes < 1) - return 0; // return number of bytes copied - - uint8_t *p = (uint8_t *)data; - uint16_t i = 0; - - while (num_bytes > 0) - { - uint16_t j = buf_size - wr; - if (j > num_bytes) - j = num_bytes; - memcpy(buff + wr, p + i, j); - i += j; - num_bytes -= j; - wr += j; - if (wr >= buf_size) - wr = 0; - } - - buf->wr = wr; - - return i; // return number of bytes copied -} - -void fifoBuf_init(t_fifo_buffer *buf, const void *buffer, const uint16_t buffer_size) -{ - buf->buf_ptr = (uint8_t *)buffer; - buf->rd = 0; - buf->wr = 0; - buf->buf_size = buffer_size; -} - -// ***************************************************************************** +/** + ****************************************************************************** + * + * @file fifo_buffer.c + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * @brief GPIO input functions + * @see The GNU Public License (GPL) Version 3 + * + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include + +#include "fifo_buffer.h" + +// ***************************************************************************** +// circular buffer functions + +uint16_t fifoBuf_getSize(t_fifo_buffer *buf) +{ // return the usable size of the buffer + + uint16_t buf_size = buf->buf_size; + + if (buf_size > 0) + return (buf_size - 1); + else + return 0; +} + +uint16_t fifoBuf_getUsed(t_fifo_buffer *buf) +{ // return the number of bytes available in the rx buffer + + uint16_t rd = buf->rd; + uint16_t wr = buf->wr; + uint16_t buf_size = buf->buf_size; + + uint16_t num_bytes = wr - rd; + if (wr < rd) + num_bytes = (buf_size - rd) + wr; + + return num_bytes; +} + +uint16_t fifoBuf_getFree(t_fifo_buffer *buf) +{ // return the free space size in the buffer + + uint16_t buf_size = buf->buf_size; + + uint16_t num_bytes = fifoBuf_getUsed(buf); + + return ((buf_size - num_bytes) - 1); +} + +void fifoBuf_clearData(t_fifo_buffer *buf) +{ // remove all data from the buffer + buf->rd = buf->wr; +} + +void fifoBuf_removeData(t_fifo_buffer *buf, uint16_t len) +{ // remove a number of bytes from the buffer + + uint16_t rd = buf->rd; + uint16_t buf_size = buf->buf_size; + + // get number of bytes available + uint16_t num_bytes = fifoBuf_getUsed(buf); + + if (num_bytes > len) + num_bytes = len; + + if (num_bytes < 1) + return; // nothing to remove + + rd += num_bytes; + if (rd >= buf_size) + rd -= buf_size; + + buf->rd = rd; +} + +int16_t fifoBuf_getBytePeek(t_fifo_buffer *buf) +{ // get a data byte from the buffer without removing it + + uint16_t rd = buf->rd; + + // get number of bytes available + uint16_t num_bytes = fifoBuf_getUsed(buf); + + if (num_bytes < 1) + return -1; // no byte retuened + + return buf->buf_ptr[rd]; // return the byte +} + +int16_t fifoBuf_getByte(t_fifo_buffer *buf) +{ // get a data byte from the buffer + + uint16_t rd = buf->rd; + uint16_t buf_size = buf->buf_size; + uint8_t *buff = buf->buf_ptr; + + // get number of bytes available + uint16_t num_bytes = fifoBuf_getUsed(buf); + + if (num_bytes < 1) + return -1; // no byte returned + + uint8_t b = buff[rd]; + if (++rd >= buf_size) + rd = 0; + + buf->rd = rd; + + return b; // return the byte +} + +uint16_t fifoBuf_getDataPeek(t_fifo_buffer *buf, void *data, uint16_t len) +{ // get data from the buffer without removing it + + uint16_t rd = buf->rd; + uint16_t buf_size = buf->buf_size; + uint8_t *buff = buf->buf_ptr; + + // get number of bytes available + uint16_t num_bytes = fifoBuf_getUsed(buf); + + if (num_bytes > len) + num_bytes = len; + + if (num_bytes < 1) + return 0; // return number of bytes copied + + uint8_t *p = (uint8_t *)data; + uint16_t i = 0; + + while (num_bytes > 0) + { + uint16_t j = buf_size - rd; + if (j > num_bytes) + j = num_bytes; + memcpy(p + i, buff + rd, j); + i += j; + num_bytes -= j; + rd += j; + if (rd >= buf_size) + rd = 0; + } + + return i; // return number of bytes copied +} + +uint16_t fifoBuf_getData(t_fifo_buffer *buf, void *data, uint16_t len) +{ // get data from our rx buffer + + uint16_t rd = buf->rd; + uint16_t buf_size = buf->buf_size; + uint8_t *buff = buf->buf_ptr; + + // get number of bytes available + uint16_t num_bytes = fifoBuf_getUsed(buf); + + if (num_bytes > len) + num_bytes = len; + + if (num_bytes < 1) + return 0; // return number of bytes copied + + uint8_t *p = (uint8_t *)data; + uint16_t i = 0; + + while (num_bytes > 0) + { + uint16_t j = buf_size - rd; + if (j > num_bytes) + j = num_bytes; + memcpy(p + i, buff + rd, j); + i += j; + num_bytes -= j; + rd += j; + if (rd >= buf_size) + rd = 0; + } + + buf->rd = rd; + + return i; // return number of bytes copied +} + +uint16_t fifoBuf_putByte(t_fifo_buffer *buf, const uint8_t b) +{ // add a data byte to the buffer + + uint16_t wr = buf->wr; + uint16_t buf_size = buf->buf_size; + uint8_t *buff = buf->buf_ptr; + + uint16_t num_bytes = fifoBuf_getFree(buf); + if (num_bytes < 1) + return 0; + + buff[wr] = b; + if (++wr >= buf_size) + wr = 0; + + buf->wr = wr; + + return 1; // return number of bytes copied +} + +uint16_t fifoBuf_putData(t_fifo_buffer *buf, const void *data, uint16_t len) +{ // add data to the buffer + + uint16_t wr = buf->wr; + uint16_t buf_size = buf->buf_size; + uint8_t *buff = buf->buf_ptr; + + uint16_t num_bytes = fifoBuf_getFree(buf); + if (num_bytes > len) + num_bytes = len; + + if (num_bytes < 1) + return 0; // return number of bytes copied + + uint8_t *p = (uint8_t *)data; + uint16_t i = 0; + + while (num_bytes > 0) + { + uint16_t j = buf_size - wr; + if (j > num_bytes) + j = num_bytes; + memcpy(buff + wr, p + i, j); + i += j; + num_bytes -= j; + wr += j; + if (wr >= buf_size) + wr = 0; + } + + buf->wr = wr; + + return i; // return number of bytes copied +} + +void fifoBuf_init(t_fifo_buffer *buf, const void *buffer, const uint16_t buffer_size) +{ + buf->buf_ptr = (uint8_t *)buffer; + buf->rd = 0; + buf->wr = 0; + buf->buf_size = buffer_size; +} + +// ***************************************************************************** diff --git a/flight/Libraries/inc/fifo_buffer.h b/flight/Libraries/inc/fifo_buffer.h index 2e6ecaf63..cdc65c92f 100644 --- a/flight/Libraries/inc/fifo_buffer.h +++ b/flight/Libraries/inc/fifo_buffer.h @@ -1,65 +1,65 @@ -/** - ****************************************************************************** - * - * @file fifo_buffer.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief GPIO functions header. - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _FIFO_BUFFER_H_ -#define _FIFO_BUFFER_H_ - -#include "pios.h" - -// ********************* - -typedef struct -{ - uint8_t *buf_ptr; - volatile uint16_t rd; - volatile uint16_t wr; - uint16_t buf_size; -} t_fifo_buffer; - -// ********************* - -uint16_t fifoBuf_getSize(t_fifo_buffer *buf); - -uint16_t fifoBuf_getUsed(t_fifo_buffer *buf); -uint16_t fifoBuf_getFree(t_fifo_buffer *buf); - -void fifoBuf_clearData(t_fifo_buffer *buf); -void fifoBuf_removeData(t_fifo_buffer *buf, uint16_t len); - -int16_t fifoBuf_getBytePeek(t_fifo_buffer *buf); -int16_t fifoBuf_getByte(t_fifo_buffer *buf); - -uint16_t fifoBuf_getDataPeek(t_fifo_buffer *buf, void *data, uint16_t len); -uint16_t fifoBuf_getData(t_fifo_buffer *buf, void *data, uint16_t len); - -uint16_t fifoBuf_putByte(t_fifo_buffer *buf, const uint8_t b); - -uint16_t fifoBuf_putData(t_fifo_buffer *buf, const void *data, uint16_t len); - -void fifoBuf_init(t_fifo_buffer *buf, const void *buffer, const uint16_t buffer_size); - -// ********************* - -#endif +/** + ****************************************************************************** + * + * @file fifo_buffer.h + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * @brief GPIO functions header. + * @see The GNU Public License (GPL) Version 3 + * + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _FIFO_BUFFER_H_ +#define _FIFO_BUFFER_H_ + +#include "pios.h" + +// ********************* + +typedef struct +{ + uint8_t *buf_ptr; + volatile uint16_t rd; + volatile uint16_t wr; + uint16_t buf_size; +} t_fifo_buffer; + +// ********************* + +uint16_t fifoBuf_getSize(t_fifo_buffer *buf); + +uint16_t fifoBuf_getUsed(t_fifo_buffer *buf); +uint16_t fifoBuf_getFree(t_fifo_buffer *buf); + +void fifoBuf_clearData(t_fifo_buffer *buf); +void fifoBuf_removeData(t_fifo_buffer *buf, uint16_t len); + +int16_t fifoBuf_getBytePeek(t_fifo_buffer *buf); +int16_t fifoBuf_getByte(t_fifo_buffer *buf); + +uint16_t fifoBuf_getDataPeek(t_fifo_buffer *buf, void *data, uint16_t len); +uint16_t fifoBuf_getData(t_fifo_buffer *buf, void *data, uint16_t len); + +uint16_t fifoBuf_putByte(t_fifo_buffer *buf, const uint8_t b); + +uint16_t fifoBuf_putData(t_fifo_buffer *buf, const void *data, uint16_t len); + +void fifoBuf_init(t_fifo_buffer *buf, const void *buffer, const uint16_t buffer_size); + +// ********************* + +#endif