Files
FreeRTOS_LoRa_Environment_A…/STM32/Gateway_Node/Application/NetFIFO/NetFIFO.c

81 lines
2.0 KiB
C

#include "NetFIFO.h"
/**
* @brief 初始化环形缓冲区
* @param pBuffer: 缓冲区结构体指针
* @retval None
*/
void vNetBufferInit(NetFifoBuffer_t *pxBuffer)
{
if (pxBuffer == NULL) return;
memset(pxBuffer->cResponseBuffer, 0, sizeof(pxBuffer->cResponseBuffer));
pxBuffer->ucBufferIndex = 0;
}
/**
* @brief 向缓冲区写入数据
* @param pxBuffer: 缓冲区结构体指针
* @param cData: 要写入的数据
* @retval None
*/
void vNetBufferWrite(NetFifoBuffer_t *pxBuffer, char cData)
{
if (pxBuffer == NULL) return;
if (pxBuffer->ucBufferIndex < sizeof(pxBuffer->cResponseBuffer) - 1)
{
pxBuffer->cResponseBuffer[pxBuffer->ucBufferIndex++] = cData;
pxBuffer->cResponseBuffer[pxBuffer->ucBufferIndex] = '\0'; // 确保字符串终止
}
}
/**
* @brief 从缓冲区读取指定索引的字节
* @param pxBuffer: 缓冲区结构体指针
* @param index: 要读取的字节索引
* @retval 读取的字节,索引无效时返回'\0'
*/
char cNetBufferReadByte(NetFifoBuffer_t *pxBuffer, int index)
{
if (pxBuffer == NULL) return '\0';
if (index < 0 || index >= pxBuffer->ucBufferIndex)
{
return '\0'; // 索引无效
}
return pxBuffer->cResponseBuffer[index];
}
/**
* @brief 比较缓冲区内容与指定字符串
* @param pxBuffer: 缓冲区结构体指针
* @param pcStr: 要比较的字符串
* @retval true: 匹配成功, false: 匹配失败
*/
bool bNetBufferCompareStr(NetFifoBuffer_t *pxBuffer, const char *pcStr)
{
if (pxBuffer == NULL || pcStr == NULL) return false;
return (strstr(pxBuffer->cResponseBuffer, pcStr) != NULL);
}
/**
* @brief 获取缓冲区当前长度
* @param pxBuffer: 缓冲区结构体指针
* @retval 缓冲区长度
*/
int iNetBufferGetLength(NetFifoBuffer_t *pxBuffer)
{
if (pxBuffer == NULL) return 0;
return pxBuffer->ucBufferIndex;
}
/**
* @brief 清空缓冲区内容
* @param pxBuffer: 缓冲区结构体指针
* @retval None
*/
void vNetBufferClear(NetFifoBuffer_t *pxBuffer)
{
if (pxBuffer == NULL) return;
memset(pxBuffer->cResponseBuffer, 0, sizeof(pxBuffer->cResponseBuffer));
pxBuffer->ucBufferIndex = 0;
}