From 39fdcb0c57bfeba598f00d77f190e731f26b25a1 Mon Sep 17 00:00:00 2001 From: sola.lu <sola.lu@greentest.com.cn> Date: 周四, 24 4月 2025 18:25:01 +0800 Subject: [PATCH] 1.修改一下,把当前库改为刚从origin仓库拉去下来,然后添加了cmake构建文件的状态。 --- libscpi/src/fifo.c | 58 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 45 insertions(+), 13 deletions(-) diff --git a/libscpi/src/fifo.c b/libscpi/src/fifo.c index c7caccc..8cecc4e 100644 --- a/libscpi/src/fifo.c +++ b/libscpi/src/fifo.c @@ -1,3 +1,30 @@ +/*- + * BSD 2-Clause License + * + * Copyright (c) 2012-2018, Jan Breuer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #include "fifo_private.h" @@ -5,9 +32,10 @@ * Initialize fifo * @param fifo */ -void fifo_init(scpi_fifo_t * fifo, int16_t * data, int16_t size) { +void fifo_init(scpi_fifo_t * fifo, scpi_error_t * data, int16_t size) { fifo->wr = 0; fifo->rd = 0; + fifo->count = 0; fifo->data = data; fifo->size = size; } @@ -19,6 +47,7 @@ void fifo_clear(scpi_fifo_t * fifo) { fifo->wr = 0; fifo->rd = 0; + fifo->count = 0; } /** @@ -27,7 +56,7 @@ * @return */ scpi_bool_t fifo_is_empty(scpi_fifo_t * fifo) { - return fifo->wr == fifo->rd; + return fifo->count == 0; } /** @@ -36,24 +65,28 @@ * @return */ scpi_bool_t fifo_is_full(scpi_fifo_t * fifo) { - return fifo->wr == ((fifo->rd + fifo->size - 1) % (fifo->size)); + return fifo->count == fifo->size; } /** * Add element to fifo. If fifo is full, return FALSE. * @param fifo - * @param value + * @param err + * @param info * @return */ -scpi_bool_t fifo_add(scpi_fifo_t * fifo, int16_t value) { +scpi_bool_t fifo_add(scpi_fifo_t * fifo, const scpi_error_t * value) { /* FIFO full? */ if (fifo_is_full(fifo)) { return FALSE; } + if (!value) { + return FALSE; + } - fifo->data[fifo->wr] = value; + fifo->data[fifo->wr] = *value; fifo->wr = (fifo->wr + 1) % (fifo->size); - + fifo->count += 1; return TRUE; } @@ -63,7 +96,7 @@ * @param value * @return FALSE - fifo is empty */ -scpi_bool_t fifo_remove(scpi_fifo_t * fifo, int16_t * value) { +scpi_bool_t fifo_remove(scpi_fifo_t * fifo, scpi_error_t * value) { /* FIFO empty? */ if (fifo_is_empty(fifo)) { return FALSE; @@ -74,6 +107,7 @@ } fifo->rd = (fifo->rd + 1) % (fifo->size); + fifo->count -= 1; return TRUE; } @@ -84,7 +118,7 @@ * @param value * @return FALSE - fifo is empty */ -scpi_bool_t fifo_remove_last(scpi_fifo_t * fifo, int16_t * value) { +scpi_bool_t fifo_remove_last(scpi_fifo_t * fifo, scpi_error_t * value) { /* FIFO empty? */ if (fifo_is_empty(fifo)) { return FALSE; @@ -95,6 +129,7 @@ if (value) { *value = fifo->data[fifo->wr]; } + fifo->count -= 1; return TRUE; } @@ -106,9 +141,6 @@ * @return */ scpi_bool_t fifo_count(scpi_fifo_t * fifo, int16_t * value) { - *value = fifo->wr - fifo->rd; - if (*value < 0) { - *value += (fifo->size); - } + *value = fifo->count; return TRUE; } -- Gitblit v1.9.1