//***************************************************************************** // //! Reads a single byte of data from a ring buffer. //! //! \param psUSBRingBuf points to the ring buffer to be written to. //! //! This function reads a single byte of data from a ring buffer. //! //! \return The byte read from the ring buffer. // //***************************************************************************** uint8_t USBRingBufReadOne(tUSBRingBufObject *psUSBRingBuf) { uint8_t ui8Temp; // // Check the arguments. // ASSERT(psUSBRingBuf != NULL); // // Verify that space is available in the buffer. // ASSERT(USBRingBufUsed(psUSBRingBuf) != 0); // // Write the data byte. // ui8Temp = psUSBRingBuf->pui8Buf[psUSBRingBuf->ui32ReadIndex]; // // Increment the read index. // UpdateIndexAtomic(&psUSBRingBuf->ui32ReadIndex, 1, psUSBRingBuf->ui32Size); // // Return the character read. // return(ui8Temp); }
//***************************************************************************** // //! Reads a single byte of data from a ring buffer. //! //! \param ptUSBRingBuf points to the ring buffer to be written to. //! //! This function reads a single byte of data from a ring buffer. //! //! \return The byte read from the ring buffer. // //***************************************************************************** unsigned char USBRingBufReadOne(tUSBRingBufObject *ptUSBRingBuf) { unsigned char ucTemp; // // Check the arguments. // ASSERT(ptUSBRingBuf != NULL); // // Verify that space is available in the buffer. // ASSERT(USBRingBufUsed(ptUSBRingBuf) != 0); // // Write the data byte. // ucTemp = ptUSBRingBuf->pucBuf[ptUSBRingBuf->ulReadIndex]; // // Increment the read index. // UpdateIndexAtomic(&ptUSBRingBuf->ulReadIndex, 1, ptUSBRingBuf->ulSize); // // Return the character read. // return(ucTemp); }
//***************************************************************************** // //! Removes bytes from the ring buffer by advancing the read index. //! //! \param psUSBRingBuf points to the ring buffer from which bytes are to be //! removed. //! \param ui32NumBytes is the number of bytes to be removed from the buffer. //! //! This function advances the ring buffer read index by a given number of //! bytes, removing that number of bytes of data from the buffer. If //! \e ui32NumBytes is larger than the number of bytes currently in the buffer, //! the buffer is emptied. //! //! \return None. // //***************************************************************************** void USBRingBufAdvanceRead(tUSBRingBufObject *psUSBRingBuf, uint32_t ui32NumBytes) { uint32_t ui32Count; // // Check the arguments. // ASSERT(psUSBRingBuf != NULL); // // Make sure that we are not being asked to remove more data than is // there to be removed. // ui32Count = USBRingBufUsed(psUSBRingBuf); ui32Count = (ui32Count < ui32NumBytes) ? ui32Count : ui32NumBytes; // // Advance the buffer read index by the required number of bytes. // UpdateIndexAtomic(&psUSBRingBuf->ui32ReadIndex, ui32Count, psUSBRingBuf->ui32Size); }
//***************************************************************************** // //! Writes a single byte of data to a ring buffer. //! //! \param psRingBuf points to the ring buffer to be written to. //! \param ui8Data is the byte to be written. //! //! This function writes a single byte of data into a ring buffer. //! //! \return None. // //***************************************************************************** void RingBufWriteOne(tRingBufObject *psRingBuf, uint8_t ui8Data) { // // Check the arguments. // ASSERT(psRingBuf != NULL); // // Verify that space is available in the buffer. // ASSERT(RingBufFree(psRingBuf) != 0); // // Write the data byte. // psRingBuf->pui8Buf[psRingBuf->ui32WriteIndex] = ui8Data; // // Increment the write index. // UpdateIndexAtomic(&psRingBuf->ui32WriteIndex, 1, psRingBuf->ui32Size); }
//***************************************************************************** // //! Writes a single byte of data to a ring buffer. //! //! \param ptUSBRingBuf points to the ring buffer to be written to. //! \param ucData is the byte to be written. //! //! This function writes a single byte of data into a ring buffer. //! //! \return None. // //***************************************************************************** void USBRingBufWriteOne(tUSBRingBufObject *ptUSBRingBuf, unsigned char ucData) { // // Check the arguments. // ASSERT(ptUSBRingBuf != NULL); // // Verify that space is available in the buffer. // ASSERT(USBRingBufFree(ptUSBRingBuf) != 0); // // Write the data byte. // ptUSBRingBuf->pucBuf[ptUSBRingBuf->ulWriteIndex] = ucData; // // Increment the write index. // UpdateIndexAtomic(&ptUSBRingBuf->ulWriteIndex, 1, ptUSBRingBuf->ulSize); }
//***************************************************************************** // //! Removes bytes from the ring buffer by advancing the read index. //! //! \param ptUSBRingBuf points to the ring buffer from which bytes are to be //! removed. //! \param ulNumBytes is the number of bytes to be removed from the buffer. //! //! This function advances the ring buffer read index by a given number of //! bytes, removing that number of bytes of data from the buffer. If \e //! ulNumBytes is larger than the number of bytes currently in the buffer, the //! buffer is emptied. //! //! \return None. // //***************************************************************************** void USBRingBufAdvanceRead(tUSBRingBufObject *ptUSBRingBuf, unsigned long ulNumBytes) { unsigned long ulCount; // // Check the arguments. // ASSERT(ptUSBRingBuf != NULL); // // Make sure that we are not being asked to remove more data than is // there to be removed. // ulCount = USBRingBufUsed(ptUSBRingBuf); ulCount = (ulCount < ulNumBytes) ? ulCount : ulNumBytes; // // Advance the buffer read index by the required number of bytes. // UpdateIndexAtomic(&ptUSBRingBuf->ulReadIndex, ulCount, ptUSBRingBuf->ulSize); }