mirror of
https://gitee.com/idea4good/GuiLite.git
synced 2025-06-07 23:57:20 +08:00
reafactor wave_buffer
This commit is contained in:
parent
f6fbf66e58
commit
b8c67ec55a
@ -2,7 +2,7 @@
|
|||||||
#define _WAVE_BUFFER_H_
|
#define _WAVE_BUFFER_H_
|
||||||
|
|
||||||
#define WAVE_BUFFER_LEN 1024
|
#define WAVE_BUFFER_LEN 1024
|
||||||
#define WAVE_FRAME_LEN 8
|
#define WAVE_READ_CACHE_LEN 8
|
||||||
#define BUFFER_EMPTY -1111
|
#define BUFFER_EMPTY -1111
|
||||||
#define BUFFER_FULL -2222;
|
#define BUFFER_FULL -2222;
|
||||||
class c_wave_buffer
|
class c_wave_buffer
|
||||||
@ -10,7 +10,7 @@ class c_wave_buffer
|
|||||||
public:
|
public:
|
||||||
c_wave_buffer();
|
c_wave_buffer();
|
||||||
int write_wave_data(short data);
|
int write_wave_data(short data);
|
||||||
int read_wave_data_by_frame(short &max, short &min, short len, unsigned int seq);
|
int read_wave_data_by_frame(short &max, short &min, short frame_len, unsigned int sequence, short offset);
|
||||||
void reset();
|
void reset();
|
||||||
void clear_data();
|
void clear_data();
|
||||||
short get_cnt();
|
short get_cnt();
|
||||||
@ -26,10 +26,11 @@ private:
|
|||||||
int m_max_older;
|
int m_max_older;
|
||||||
int m_last_data;
|
int m_last_data;
|
||||||
|
|
||||||
short m_fb_min[WAVE_FRAME_LEN];
|
short m_read_cache_min[WAVE_READ_CACHE_LEN];
|
||||||
short m_fb_mid[WAVE_FRAME_LEN];
|
short m_read_cache_mid[WAVE_READ_CACHE_LEN];
|
||||||
short m_fb_max[WAVE_FRAME_LEN];
|
short m_read_cache_max[WAVE_READ_CACHE_LEN];
|
||||||
unsigned int m_refresh_sqence;
|
short m_read_cache_sum;
|
||||||
|
unsigned int m_refresh_sequence;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -9,13 +9,11 @@
|
|||||||
c_wave_buffer::c_wave_buffer()
|
c_wave_buffer::c_wave_buffer()
|
||||||
{
|
{
|
||||||
m_head = m_tail = m_min_old = m_max_old =
|
m_head = m_tail = m_min_old = m_max_old =
|
||||||
m_min_older = m_max_older = m_last_data =
|
m_min_older = m_max_older = m_last_data = m_read_cache_sum = m_refresh_sequence = 0;
|
||||||
m_refresh_sqence = 0;
|
|
||||||
|
|
||||||
memset(m_wave_buf, 0, sizeof(m_wave_buf));
|
memset(m_wave_buf, 0, sizeof(m_wave_buf));
|
||||||
memset(m_fb_min, 0, sizeof(m_fb_min));
|
memset(m_read_cache_min, 0, sizeof(m_read_cache_min));
|
||||||
memset(m_fb_mid, 0, sizeof(m_fb_mid));
|
memset(m_read_cache_mid, 0, sizeof(m_read_cache_mid));
|
||||||
memset(m_fb_max, 0, sizeof(m_fb_max));
|
memset(m_read_cache_max, 0, sizeof(m_read_cache_max));
|
||||||
}
|
}
|
||||||
|
|
||||||
short c_wave_buffer::get_cnt()
|
short c_wave_buffer::get_cnt()
|
||||||
@ -27,8 +25,7 @@ int c_wave_buffer::write_wave_data(short data)
|
|||||||
{
|
{
|
||||||
if ((m_tail + 1) % WAVE_BUFFER_LEN == m_head)
|
if ((m_tail + 1) % WAVE_BUFFER_LEN == m_head)
|
||||||
{//full
|
{//full
|
||||||
//printf("full\n");
|
log_out("wave buf full\n");
|
||||||
//fflush(stdout);
|
|
||||||
return BUFFER_FULL;
|
return BUFFER_FULL;
|
||||||
}
|
}
|
||||||
m_wave_buf[m_tail] = data;
|
m_wave_buf[m_tail] = data;
|
||||||
@ -40,8 +37,7 @@ int c_wave_buffer::read_data()
|
|||||||
{
|
{
|
||||||
if (m_head == m_tail)
|
if (m_head == m_tail)
|
||||||
{//empty
|
{//empty
|
||||||
//printf("empty\n");
|
log_out("wave buf empty\n");
|
||||||
//fflush(stdout);
|
|
||||||
return BUFFER_EMPTY;
|
return BUFFER_EMPTY;
|
||||||
}
|
}
|
||||||
int ret = m_wave_buf[m_head];
|
int ret = m_wave_buf[m_head];
|
||||||
@ -49,30 +45,29 @@ int c_wave_buffer::read_data()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int c_wave_buffer::read_wave_data_by_frame(short &max, short &min, short len, unsigned int seq)
|
int c_wave_buffer::read_wave_data_by_frame(short &max, short &min, short frame_len, unsigned int sequence, short offset)
|
||||||
{
|
{
|
||||||
unsigned int offset = (seq >> 8) & 0xff;
|
if (m_refresh_sequence != sequence)
|
||||||
if(offset > WAVE_FRAME_LEN)
|
|
||||||
{
|
{
|
||||||
ASSERT(FALSE);
|
m_refresh_sequence = sequence;
|
||||||
|
m_read_cache_sum = 0;
|
||||||
|
}
|
||||||
|
else if(offset < m_read_cache_sum)//(m_refresh_sequence == sequence && offset < m_fb_sum)
|
||||||
|
{
|
||||||
|
max = m_read_cache_max[offset];
|
||||||
|
min = m_read_cache_min[offset];
|
||||||
|
return m_read_cache_mid[offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(((m_refresh_sqence & 0xff) == (seq & 0xff)))
|
m_read_cache_sum++;
|
||||||
{
|
ASSERT(m_read_cache_sum <= WAVE_READ_CACHE_LEN);
|
||||||
max = m_fb_max[offset];
|
|
||||||
min = m_fb_min[offset];
|
|
||||||
return m_fb_mid[offset];
|
|
||||||
}
|
|
||||||
|
|
||||||
m_refresh_sqence = seq;
|
|
||||||
|
|
||||||
int i, data;
|
int i, data;
|
||||||
int tmp_min = m_last_data;
|
int tmp_min = m_last_data;
|
||||||
int tmp_max = m_last_data;
|
int tmp_max = m_last_data;
|
||||||
int mid = (m_min_old + m_max_old)>>1;
|
int mid = (m_min_old + m_max_old)>>1;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while(i++ < len)
|
while(i++ < frame_len)
|
||||||
{
|
{
|
||||||
data = read_data();
|
data = read_data();
|
||||||
if(BUFFER_EMPTY == data)
|
if(BUFFER_EMPTY == data)
|
||||||
@ -85,14 +80,14 @@ int c_wave_buffer::read_wave_data_by_frame(short &max, short &min, short len, un
|
|||||||
if(data > tmp_max){tmp_max = data;}
|
if(data > tmp_max){tmp_max = data;}
|
||||||
}
|
}
|
||||||
|
|
||||||
min = m_fb_min[offset] = MIN(m_min_old, MIN(tmp_min, m_min_older));
|
min = m_read_cache_min[offset] = MIN(m_min_old, MIN(tmp_min, m_min_older));
|
||||||
max = m_fb_max[offset] = MAX(m_max_old, MAX(tmp_max, m_max_older));
|
max = m_read_cache_max[offset] = MAX(m_max_old, MAX(tmp_max, m_max_older));
|
||||||
|
|
||||||
m_min_older = m_min_old;
|
m_min_older = m_min_old;
|
||||||
m_max_older = m_max_old;
|
m_max_older = m_max_old;
|
||||||
m_min_old = tmp_min;
|
m_min_old = tmp_min;
|
||||||
m_max_old = tmp_max;
|
m_max_old = tmp_max;
|
||||||
return (m_fb_mid[offset] = mid);
|
return (m_read_cache_mid[offset] = mid);
|
||||||
}
|
}
|
||||||
|
|
||||||
void c_wave_buffer::clear_data()
|
void c_wave_buffer::clear_data()
|
||||||
|
@ -115,14 +115,13 @@ void c_wave_ctrl::refresh_wave(unsigned char frame)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
short max, min, mid, offset;
|
short max, min, mid;
|
||||||
offset = m_wave_speed;
|
for(short offset = 0; offset < m_wave_speed; offset++)
|
||||||
while(--offset >= 0)
|
|
||||||
{
|
{
|
||||||
//get wave value
|
//get wave value
|
||||||
mid = m_wave->read_wave_data_by_frame(max, min,
|
mid = m_wave->read_wave_data_by_frame(max, min,
|
||||||
m_frame_len_map[m_frame_len_map_index++],
|
m_frame_len_map[m_frame_len_map_index++],
|
||||||
(frame | (offset << 8)));
|
frame, offset);
|
||||||
m_frame_len_map_index %= sizeof(m_frame_len_map);
|
m_frame_len_map_index %= sizeof(m_frame_len_map);
|
||||||
|
|
||||||
//map to wave ctrl
|
//map to wave ctrl
|
||||||
|
Loading…
Reference in New Issue
Block a user