Esempio n. 1
0
void RingBufferPut(tRingBuffer *rb, unsigned char c, int block)
{
    if (block)
    {
        while (RingBufferFillLevel(rb) + 1 == RingBufferSize(rb))
        {
            // wait
        }
    }
    else
    {
        if (RingBufferFillLevel(rb) + 1 == RingBufferSize(rb))
        {
            rb->Overrun++;
            return;
        }
    }

    rb->Buffer[rb->Write] = c;

    if (rb->Write + 1 == RingBufferSize(rb))
    {
        rb->Write = 0;
    }
    else
    {
        rb->Write++;
    }

    if (rb->CallBack)
    {
        rb->CallBack();
    }
}
Esempio n. 2
0
void RingBufferPutBlock(tRingBuffer *rb, unsigned char *data, int dataLen, int block)
{
    if (block)
    {
        while (RingBufferFillLevel(rb) + dataLen >= RingBufferSize(rb))
        {
            // wait
        }
    }
    else
    {
        if (RingBufferFillLevel(rb) + dataLen >= RingBufferSize(rb))
        {
            rb->Overrun += dataLen;

            if (rb->CallBack)
            {
                rb->CallBack();
            }

            return;
        }
    }

    int free1 = RingBufferSize(rb) - rb->Write;

    if (dataLen <= free1)
    {
        memcpy(rb->Buffer + rb->Write, data, dataLen);

        if (rb->Write + dataLen == RingBufferSize(rb))
        {
            rb->Write = 0;
        }
        else
        {
            rb->Write += dataLen;
        }
    }
    else
    {
        memcpy(rb->Buffer + rb->Write, data, free1);
        int len2 = dataLen - free1;
        memcpy(rb->Buffer, data + free1, len2);
        rb->Write = len2;
    }

    if (rb->CallBack)
    {
        rb->CallBack();
    }
}
Esempio n. 3
0
void USART_Flush(void)
{
    while (RingBufferFillLevel(&RingBufferUART4TX) != 0)
        ;
}
Esempio n. 4
0
int USART_Available(void)
{
    return RingBufferFillLevel(&RingBufferUART4RX);
}