Remove the timeout period extension code from the AVRISP project, as no single comman...
[pub/USBasp.git] / Projects / USBtoSerial / Lib / LightweightRingBuff.h
index 89239ac..9c25707 100644 (file)
@@ -44,7 +44,7 @@
 
        /* Defines: */
                /** Size of each ring buffer, in data elements - must be between 1 and 255. */
-               #define BUFFER_SIZE      128
+               #define BUFFER_SIZE      255
                
                /** Type of data to store into the buffer. */
                #define RingBuff_Data_t  uint8_t
@@ -66,7 +66,7 @@
                 *  before any operations are called upon them. Already initialized buffers may be reset
                 *  by re-initializing them using this function.
                 *
-                *  \ref Buffer  Pointer to a ring buffer structure to initialize
+                *  \param[out] Buffer  Pointer to a ring buffer structure to initialize
                 */
                static inline void RingBuffer_InitBuffer(RingBuff_t* const Buffer)
                {
                        Buffer->Count = 0;
                }
                
-               /** Inserts an element into the ring buffer.
+               /** Atomically inserts an element into the ring buffer.
                 *
-                *  \ref Buffer  Pointer to a ring buffer structure to insert into
-                *  \ref Data    Data element to insert into the buffer
+                *  \param[in,out] Buffer  Pointer to a ring buffer structure to insert into
+                *  \param[in]     Data    Data element to insert into the buffer
                 */
-               static inline void RingBuffer_Insert(RingBuff_t* const Buffer, RingBuff_Data_t Data)
+               static inline void RingBuffer_AtomicInsert(RingBuff_t* const Buffer, RingBuff_Data_t Data)
                {
                        ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
                        {
                        }
                }
 
-               /** Retrieves an element from the ring buffer.
+               /** Atomically retrieves an element from the ring buffer.
                 *
-                *  \ref Buffer  Pointer to a ring buffer structure to retrieve from
+                *  \param[in,out] Buffer  Pointer to a ring buffer structure to retrieve from
                 *
                 *  \return Next data element stored in the buffer
                 */
-               static inline RingBuff_Data_t RingBuffer_Remove(RingBuff_t* const Buffer)
+               static inline RingBuff_Data_t RingBuffer_AtomicRemove(RingBuff_t* const Buffer)
                {
                        RingBuff_Data_t Data;
                        
                        return Data;
                }
 
+               /** Inserts an element into the ring buffer.
+                *
+                *  \param[in,out] Buffer  Pointer to a ring buffer structure to insert into
+                *  \param[in]     Data    Data element to insert into the buffer
+                */
+               static inline void RingBuffer_Insert(RingBuff_t* const Buffer, RingBuff_Data_t Data)
+               {
+                       *Buffer->In = Data;
+                       
+                       if (++Buffer->In == &Buffer->Buffer[BUFFER_SIZE])
+                         Buffer->In = Buffer->Buffer;
+                                 
+                       Buffer->Count++;
+               }
+
+               /** Retrieves an element from the ring buffer.
+                *
+                *  \param[in,out] Buffer  Pointer to a ring buffer structure to retrieve from
+                *
+                *  \return Next data element stored in the buffer
+                */
+               static inline RingBuff_Data_t RingBuffer_Remove(RingBuff_t* const Buffer)
+               {
+                       RingBuff_Data_t Data = *Buffer->Out;
+                       
+                       if (++Buffer->Out == &Buffer->Buffer[BUFFER_SIZE])
+                         Buffer->Out = Buffer->Buffer;
+                                 
+                       Buffer->Count--;
+
+                       return Data;
+               }
+
 #endif
  
\ No newline at end of file