summaryrefslogtreecommitdiff
path: root/apps/plugins/oscilloscope.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/oscilloscope.c')
-rw-r--r--apps/plugins/oscilloscope.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index a4ec6a8789..4d807493d3 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -1200,13 +1200,14 @@ static long anim_peaks_vertical(void)
1200/** Waveform View **/ 1200/** Waveform View **/
1201 1201
1202#ifdef OSCILLOSCOPE_GRAPHMODE 1202#ifdef OSCILLOSCOPE_GRAPHMODE
1203static int16_t waveform_buffer[2*ALIGN_UP(NATIVE_FREQUENCY, 2048)+2*2048] 1203static int16_t waveform_buffer[2*ALIGN_UP(PLAY_SAMPR_MAX, 2048)+2*2048]
1204 MEM_ALIGN_ATTR; 1204 MEM_ALIGN_ATTR;
1205static size_t waveform_buffer_threshold = 0; 1205static size_t waveform_buffer_threshold = 0;
1206static size_t volatile waveform_buffer_have = 0; 1206static size_t volatile waveform_buffer_have = 0;
1207static size_t waveform_buffer_break = 0; 1207static size_t waveform_buffer_break = 0;
1208static unsigned long mixer_sampr = PLAY_SAMPR_DEFAULT;
1208#define PCM_SAMPLESIZE (2*sizeof(int16_t)) 1209#define PCM_SAMPLESIZE (2*sizeof(int16_t))
1209#define PCM_BYTERATE (NATIVE_FREQUENCY*PCM_SAMPLESIZE) 1210#define PCM_BYTERATE(sampr) ((sampr)*PCM_SAMPLESIZE)
1210 1211
1211#define WAVEFORM_SCALE_PCM(full_scale, sample) \ 1212#define WAVEFORM_SCALE_PCM(full_scale, sample) \
1212 ((((full_scale) * (sample)) + (1 << 14)) >> 15) 1213 ((((full_scale) * (sample)) + (1 << 14)) >> 15)
@@ -1390,7 +1391,7 @@ static long anim_waveform_horizontal(void)
1390 return cur_tick + HZ/5; 1391 return cur_tick + HZ/5;
1391 } 1392 }
1392 1393
1393 int count = (NATIVE_FREQUENCY*osc_delay + 100*HZ - 1) / (100*HZ); 1394 int count = (mixer_sampr*osc_delay + 100*HZ - 1) / (100*HZ);
1394 1395
1395 waveform_buffer_set_threshold(count*PCM_SAMPLESIZE); 1396 waveform_buffer_set_threshold(count*PCM_SAMPLESIZE);
1396 1397
@@ -1516,7 +1517,8 @@ static long anim_waveform_horizontal(void)
1516 osd_lcd_update(); 1517 osd_lcd_update();
1517 1518
1518 long delay = get_next_delay(); 1519 long delay = get_next_delay();
1519 return cur_tick + delay - waveform_buffer_have * HZ / PCM_BYTERATE; 1520 return cur_tick + delay - waveform_buffer_have * HZ /
1521 PCM_BYTERATE(mixer_sampr);
1520} 1522}
1521 1523
1522static void anim_waveform_plot_filled_v(int y, int y_prev, 1524static void anim_waveform_plot_filled_v(int y, int y_prev,
@@ -1583,7 +1585,7 @@ static long anim_waveform_vertical(void)
1583 return cur_tick + HZ/5; 1585 return cur_tick + HZ/5;
1584 } 1586 }
1585 1587
1586 int count = (NATIVE_FREQUENCY*osc_delay + 100*HZ - 1) / (100*HZ); 1588 int count = (mixer_sampr*osc_delay + 100*HZ - 1) / (100*HZ);
1587 1589
1588 waveform_buffer_set_threshold(count*PCM_SAMPLESIZE); 1590 waveform_buffer_set_threshold(count*PCM_SAMPLESIZE);
1589 1591
@@ -1709,7 +1711,8 @@ static long anim_waveform_vertical(void)
1709 osd_lcd_update(); 1711 osd_lcd_update();
1710 1712
1711 long delay = get_next_delay(); 1713 long delay = get_next_delay();
1712 return cur_tick + delay - waveform_buffer_have * HZ / PCM_BYTERATE; 1714 return cur_tick + delay - waveform_buffer_have * HZ
1715 / PCM_BYTERATE(mixer_sampr);
1713} 1716}
1714 1717
1715static void anim_waveform_exit(void) 1718static void anim_waveform_exit(void)
@@ -1872,6 +1875,10 @@ static void osc_setup(void)
1872 osd_lcd_update(); 1875 osd_lcd_update();
1873#endif 1876#endif
1874 1877
1878#ifdef OSCILLOSCOPE_GRAPHMODE
1879 mixer_sampr = rb->mixer_get_frequency();
1880#endif
1881
1875 /* Turn off backlight timeout */ 1882 /* Turn off backlight timeout */
1876 backlight_ignore_timeout(); 1883 backlight_ignore_timeout();
1877 graphmode_setup(); 1884 graphmode_setup();