feat: Add rfid feature and .gitignore file
This commit is contained in:
60
apps/earphone/xtell_Sensor/buffer/circle_buffer.c
Normal file
60
apps/earphone/xtell_Sensor/buffer/circle_buffer.c
Normal file
@ -0,0 +1,60 @@
|
||||
#include "circle_buffer.h"
|
||||
#include <string.h>
|
||||
|
||||
// 初始化环形缓冲区
|
||||
void circle_buffer_init(circle_buffer_t *cb, void *buffer, u16 capacity, u16 element_size) {
|
||||
cb->buffer = (u8 *)buffer;
|
||||
cb->capacity = capacity;
|
||||
cb->element_size = element_size;
|
||||
cb->head = 0;
|
||||
cb->tail = 0;
|
||||
cb->size = 0;
|
||||
}
|
||||
|
||||
// 向环形缓冲区写入一个元素
|
||||
bool circle_buffer_write(circle_buffer_t *cb, const void *element) {
|
||||
if (circle_buffer_is_full(cb)) {
|
||||
return false; // 缓冲区已满
|
||||
}
|
||||
|
||||
u8 *dest = cb->buffer + (cb->head * cb->element_size);
|
||||
memcpy(dest, element, cb->element_size);
|
||||
|
||||
cb->head = (cb->head + 1) % cb->capacity;
|
||||
cb->size++;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 从环形缓冲区读取一个元素
|
||||
bool circle_buffer_read(circle_buffer_t *cb, void *element) {
|
||||
if (circle_buffer_is_empty(cb)) {
|
||||
return false; // 缓冲区为空
|
||||
}
|
||||
|
||||
u8 *src = cb->buffer + (cb->tail * cb->element_size);
|
||||
memcpy(element, src, cb->element_size);
|
||||
|
||||
cb->tail = (cb->tail + 1) % cb->capacity;
|
||||
cb->size--;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 获取已用空间的大小(以元素为单位)
|
||||
u16 circle_buffer_get_size(circle_buffer_t *cb) {
|
||||
return cb->size;
|
||||
}
|
||||
|
||||
// 获取剩余空间的大小(以元素为单位)
|
||||
u16 circle_buffer_get_free_space(circle_buffer_t *cb) {
|
||||
return cb->capacity - cb->size;
|
||||
}
|
||||
|
||||
// 检查缓冲区是否已满
|
||||
bool circle_buffer_is_full(circle_buffer_t *cb) {
|
||||
return cb->size == cb->capacity;
|
||||
}
|
||||
|
||||
// 检查缓冲区是否为空
|
||||
bool circle_buffer_is_empty(circle_buffer_t *cb) {
|
||||
return cb->size == 0;
|
||||
}
|
||||
70
apps/earphone/xtell_Sensor/buffer/circle_buffer.h
Normal file
70
apps/earphone/xtell_Sensor/buffer/circle_buffer.h
Normal file
@ -0,0 +1,70 @@
|
||||
#ifndef CIRCLE_BUFFER_H
|
||||
#define CIRCLE_BUFFER_H
|
||||
|
||||
#include "system/includes.h"
|
||||
|
||||
// 定义环形缓冲区的结构体
|
||||
typedef struct {
|
||||
u8 *buffer; // 缓冲区指针
|
||||
u16 capacity; // 缓冲区总容量(以元素为单位)
|
||||
u16 element_size; // 每个元素的大小(以字节为单位)
|
||||
u16 head; // 头部指针(写入位置,以元素为单位)
|
||||
u16 tail; // 尾部指针(读取位置,以元素为单位)
|
||||
u16 size; // 当前已用大小(以元素为单位)
|
||||
} circle_buffer_t;
|
||||
|
||||
/**
|
||||
* @brief 初始化环形缓冲区
|
||||
* @param cb 指向环形缓冲区结构体的指针
|
||||
* @param buffer 外部提供的缓冲区内存
|
||||
* @param capacity 缓冲区的总容量(以元素数量为单位)
|
||||
* @param element_size 每个元素的大小(字节)
|
||||
*/
|
||||
void circle_buffer_init(circle_buffer_t *cb, void *buffer, u16 capacity, u16 element_size);
|
||||
|
||||
/**
|
||||
* @brief 向环形缓冲区写入一个元素
|
||||
* @param cb 指向环形缓冲区结构体的指针
|
||||
* @param element 要写入的元素的指针
|
||||
* @return 成功返回true,失败返回false
|
||||
*/
|
||||
bool circle_buffer_write(circle_buffer_t *cb, const void *element);
|
||||
|
||||
/**
|
||||
* @brief 从环形缓冲区读取一个元素
|
||||
* @param cb 指向环形缓冲区结构体的指针
|
||||
* @param element 用于存放读取元素的缓冲区的指针
|
||||
* @return 成功返回true,失败返回false
|
||||
*/
|
||||
bool circle_buffer_read(circle_buffer_t *cb, void *element);
|
||||
|
||||
/**
|
||||
* @brief 获取环形缓冲区中已用空间的大小(以元素为单位)
|
||||
* @param cb 指向环形缓冲区结构体的指针
|
||||
* @return 已用空间的大小(元素数量)
|
||||
*/
|
||||
u16 circle_buffer_get_size(circle_buffer_t *cb);
|
||||
|
||||
/**
|
||||
* @brief 获取环形缓冲区中剩余空间的大小(以元素为单位)
|
||||
* @param cb 指向环形缓冲区结构体的指针
|
||||
* @return 剩余空间的大小(元素数量)
|
||||
*/
|
||||
u16 circle_buffer_get_free_space(circle_buffer_t *cb);
|
||||
|
||||
/**
|
||||
* @brief 检查缓冲区是否已满
|
||||
* @param cb 指向环形缓冲区结构体的指针
|
||||
* @return 如果已满返回true,否则返回false
|
||||
*/
|
||||
bool circle_buffer_is_full(circle_buffer_t *cb);
|
||||
|
||||
/**
|
||||
* @brief 检查缓冲区是否为空
|
||||
* @param cb 指向环形缓冲区结构体的指针
|
||||
* @return 如果为空返回true,否则返回false
|
||||
*/
|
||||
bool circle_buffer_is_empty(circle_buffer_t *cb);
|
||||
|
||||
|
||||
#endif // CIRCLE_BUFFER_H
|
||||
Reference in New Issue
Block a user