From b8c67ec55a2bb88125c2170b5107278410d6f169 Mon Sep 17 00:00:00 2001 From: idea4good Date: Thu, 17 Jan 2019 14:39:18 +0800 Subject: [PATCH] reafactor wave_buffer --- core/core_include/wave_buffer.h | 13 ++++----- core/src/wave_buffer.cpp | 47 +++++++++++++++------------------ core/src/wave_ctrl.cpp | 7 +++-- 3 files changed, 31 insertions(+), 36 deletions(-) diff --git a/core/core_include/wave_buffer.h b/core/core_include/wave_buffer.h index 6bf3d6b..bb85e12 100644 --- a/core/core_include/wave_buffer.h +++ b/core/core_include/wave_buffer.h @@ -2,7 +2,7 @@ #define _WAVE_BUFFER_H_ #define WAVE_BUFFER_LEN 1024 -#define WAVE_FRAME_LEN 8 +#define WAVE_READ_CACHE_LEN 8 #define BUFFER_EMPTY -1111 #define BUFFER_FULL -2222; class c_wave_buffer @@ -10,7 +10,7 @@ class c_wave_buffer public: c_wave_buffer(); 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 clear_data(); short get_cnt(); @@ -26,10 +26,11 @@ private: int m_max_older; int m_last_data; - short m_fb_min[WAVE_FRAME_LEN]; - short m_fb_mid[WAVE_FRAME_LEN]; - short m_fb_max[WAVE_FRAME_LEN]; - unsigned int m_refresh_sqence; + short m_read_cache_min[WAVE_READ_CACHE_LEN]; + short m_read_cache_mid[WAVE_READ_CACHE_LEN]; + short m_read_cache_max[WAVE_READ_CACHE_LEN]; + short m_read_cache_sum; + unsigned int m_refresh_sequence; }; #endif diff --git a/core/src/wave_buffer.cpp b/core/src/wave_buffer.cpp index 48bfe77..d65b7ee 100644 --- a/core/src/wave_buffer.cpp +++ b/core/src/wave_buffer.cpp @@ -9,13 +9,11 @@ c_wave_buffer::c_wave_buffer() { m_head = m_tail = m_min_old = m_max_old = - m_min_older = m_max_older = m_last_data = - m_refresh_sqence = 0; - + m_min_older = m_max_older = m_last_data = m_read_cache_sum = m_refresh_sequence = 0; memset(m_wave_buf, 0, sizeof(m_wave_buf)); - memset(m_fb_min, 0, sizeof(m_fb_min)); - memset(m_fb_mid, 0, sizeof(m_fb_mid)); - memset(m_fb_max, 0, sizeof(m_fb_max)); + memset(m_read_cache_min, 0, sizeof(m_read_cache_min)); + memset(m_read_cache_mid, 0, sizeof(m_read_cache_mid)); + memset(m_read_cache_max, 0, sizeof(m_read_cache_max)); } 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) {//full - //printf("full\n"); - //fflush(stdout); + log_out("wave buf full\n"); return BUFFER_FULL; } m_wave_buf[m_tail] = data; @@ -40,8 +37,7 @@ int c_wave_buffer::read_data() { if (m_head == m_tail) {//empty - //printf("empty\n"); - //fflush(stdout); + log_out("wave buf empty\n"); return BUFFER_EMPTY; } int ret = m_wave_buf[m_head]; @@ -49,30 +45,29 @@ int c_wave_buffer::read_data() 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(offset > WAVE_FRAME_LEN) + if (m_refresh_sequence != sequence) { - ASSERT(FALSE); + m_refresh_sequence = sequence; + m_read_cache_sum = 0; } - - if(((m_refresh_sqence & 0xff) == (seq & 0xff))) + else if(offset < m_read_cache_sum)//(m_refresh_sequence == sequence && offset < m_fb_sum) { - max = m_fb_max[offset]; - min = m_fb_min[offset]; - return m_fb_mid[offset]; + max = m_read_cache_max[offset]; + min = m_read_cache_min[offset]; + return m_read_cache_mid[offset]; } - - m_refresh_sqence = seq; - + + m_read_cache_sum++; + ASSERT(m_read_cache_sum <= WAVE_READ_CACHE_LEN); int i, data; int tmp_min = m_last_data; int tmp_max = m_last_data; int mid = (m_min_old + m_max_old)>>1; i = 0; - while(i++ < len) + while(i++ < frame_len) { data = read_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;} } - min = m_fb_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)); + min = m_read_cache_min[offset] = MIN(m_min_old, MIN(tmp_min, m_min_older)); + max = m_read_cache_max[offset] = MAX(m_max_old, MAX(tmp_max, m_max_older)); m_min_older = m_min_old; m_max_older = m_max_old; m_min_old = tmp_min; m_max_old = tmp_max; - return (m_fb_mid[offset] = mid); + return (m_read_cache_mid[offset] = mid); } void c_wave_buffer::clear_data() diff --git a/core/src/wave_ctrl.cpp b/core/src/wave_ctrl.cpp index a84eda6..2638cef 100644 --- a/core/src/wave_ctrl.cpp +++ b/core/src/wave_ctrl.cpp @@ -115,14 +115,13 @@ void c_wave_ctrl::refresh_wave(unsigned char frame) return; } - short max, min, mid, offset; - offset = m_wave_speed; - while(--offset >= 0) + short max, min, mid; + for(short offset = 0; offset < m_wave_speed; offset++) { //get wave value mid = m_wave->read_wave_data_by_frame(max, min, m_frame_len_map[m_frame_len_map_index++], - (frame | (offset << 8))); + frame, offset); m_frame_len_map_index %= sizeof(m_frame_len_map); //map to wave ctrl