//When accessing data, it is best to add a mutex lock to prevent exceptions
unsigned char m_data[8*1024];
int m_max = 8*1024;
int m_read = 0;
int m_write = 0;
int m_used = 0;
int putdata(uint8_t *data, int length)
{
if (m_used + length > m_max)
return 0;
if (m_write+length <= m_max) {
memcpy (m_data+m_write, data, length);
m_write += length;
} else {
int left;
left = m_max-m_write;
memcpy (m_data+m_write, data, left);
memcpy (m_data, (uint8_t *)data+left, length-left);
m_write = length-left;
}
if (m_write >= m_max)
m_write = 0;
m_used += length;
return length;
}
int getdata(uint8_t *data, int length)
{
if (m_used < length)
return 0;
if (m_read+length <= m_max) {
memcpy (data, m_data+m_read, length);
m_read += length;
} else {
int left;
left = m_max-m_read;
memcpy (data, m_data+m_read, left);
memcpy ((uint8_t *)data+left, m_data, length-left);
m_read = length-left;
}
if (m_read >= m_max)
m_read = 0;
m_used -= length;
return length;
}