12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /*
- * Tencent is pleased to support the open source community by making IoT Hub
- available.
- * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
- * Licensed under the MIT License (the "License"); you may not use this file
- except in
- * compliance with the License. You may obtain a copy of the License at
- * http://opensource.org/licenses/MIT
- * Unless required by applicable law or agreed to in writing, software
- distributed under the License is
- * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND,
- * either express or implied. See the License for the specific language
- governing permissions and
- * limitations under the License.
- *
- */
- #include "utils_ringbuff.h"
- #include <stdio.h>
- #include <string.h>
- int ring_buff_init(sRingbuff *ring_buff, char *buff, uint32_t size)
- {
- ring_buff->buffer = buff;
- ring_buff->size = size;
- ring_buff->readpoint = 0;
- ring_buff->writepoint = 0;
- memset(ring_buff->buffer, 0, ring_buff->size);
- ring_buff->full = false;
- return RINGBUFF_OK;
- }
- int ring_buff_flush(sRingbuff *ring_buff)
- {
- ring_buff->readpoint = 0;
- ring_buff->writepoint = 0;
- memset(ring_buff->buffer, 0, ring_buff->size);
- ring_buff->full = false;
- return RINGBUFF_OK;
- }
- int ring_buff_push_data(sRingbuff *ring_buff, uint8_t *pData, int len)
- {
- int i;
- if (len > ring_buff->size) {
- return RINGBUFF_TOO_SHORT;
- }
- for (i = 0; i < len; i++) {
- if (((ring_buff->writepoint + 1) % ring_buff->size) == ring_buff->readpoint) {
- ring_buff->full = true;
- return RINGBUFF_FULL;
- } else {
- if (ring_buff->writepoint < (ring_buff->size - 1)) {
- ring_buff->writepoint++;
- } else {
- ring_buff->writepoint = 0;
- }
- ring_buff->buffer[ring_buff->writepoint] = pData[i];
- }
- }
- return RINGBUFF_OK;
- }
- int ring_buff_pop_data(sRingbuff *ring_buff, uint8_t *pData, int len)
- {
- int i;
- if (len > ring_buff->size) {
- return RINGBUFF_TOO_SHORT;
- }
- for (i = 0; i < len; i++) {
- if (ring_buff->writepoint == ring_buff->readpoint) {
- break;
- } else {
- if (ring_buff->readpoint == (ring_buff->size - 1)) {
- ring_buff->readpoint = 0;
- }
- else {
- ring_buff->readpoint++;
- }
- pData[i] = ring_buff->buffer[ring_buff->readpoint];
- }
- }
- return i;
- }
|