DIGILIGHT
fft_debug.c
См. документацию.
1 
16 #if defined(_FFT_DEBUG_)
17 
18 #include <avr/io.h>
19 #include "avr_helper.h"
20 #include <stdlib.h>
21 #include "global.h"
22 #include "fft_debug.h"
23 #include "lcd_show.h"
24 #include "lcd.h"
25 #include "main_effect.h"
26 #include "spectrum.h"
27 
28 // перечисление того, что отображается на ЖКИ
29 typedef enum{
30  ADC_OFFS,
31  REAL_OFS,
32  VOL_PEAK,
33  VOL_AVE,
34  F_0,
35  F_250,
36  F_500,
37  F_750,
38  F_1000,
39  F_1300,
40  F_1500,
41  F_1800,
42  F_2000,
43  F_2300,
44  F_2500,
45  F_2800,
46  F_3000,
47  F_3300,
48  F_3500,
49  F_3800,
50  B_LF,
51  B_MF,
52  B_HF,
53  //
54  SHOW_CNT
55 } show_t;
56 
57 // текстовые названия выводимых значений
58 static __flash const char names[SHOW_CNT][9] = {
59  "ADC_OFFS",
60  "REAL_OFFS",
61  "VOL_PEAK",
62  "VOL_AVE",
63  "F_0",
64  "F_250",
65  "F_500",
66  "F_750",
67  "F_1000",
68  "F_1300",
69  "F_1500",
70  "F_1800",
71  "F_2000",
72  "F_2300",
73  "F_2500",
74  "F_2800",
75  "F_3000",
76  "F_3300",
77  "F_3500",
78  "F_3800",
79  "B_LF",
80  "B_MF",
81  "B_HF"
82 };
83 
84 // текущее отображаемое на ЖКИ
85 static show_t item = VOL_PEAK;
86 
87 // отображение числа
88 static void show_val(uint16_t v){
89  char str[16];
90  utoa(v, str, 10);
91  lcd_puts(str);
92 }
93 
94 // функция индикации на ЖКИ в режиме отладки
95 void _fft_debug_show(signal_t *s){
96  // заголовок
97  show_rpad_str_p(0, PSTR("DEBUG FFT"));
98  // наименование выводимой переменной
99  show_rpad_str_p(1,names[item]);
100  lcd_gotoxy(9,1);
101  lcd_putc('=');
102  // вывод значения
103  switch(item){
104  case ADC_OFFS:
105  show_val(cfg.dc_offset);
106  break;
107  case REAL_OFS:
108  show_val(real_offset);
109  break;
110  case VOL_PEAK:
111  show_val(s->peak_volume);
112  break;
113  case VOL_AVE:
114  show_val(s->average_vol);
115  break;
116  case F_0 ... F_3800:
117  show_val(s->harmonics[item - F_0]);
118  break;
119  case B_LF ... B_HF:
120  show_val(s->band[item - B_LF]);
121  break;
122  }
123 }
124 
125 // ниже следуют обязательные для модуля эффекта описания - без комментариев
126 
127 static void _effect(signal_t *s);
128 static preset_result_t _preset(int8_t d);
129 
130 static __flash const char _name[] = "@";
131 
132 static flash_effect_t effect_def = {
133  .name = _name,
134  .start = NULL, // может быть NULL
135  .work = _effect, // это значение не может быть NULL!
136  .stop = NULL, // может быть NULL
137  .preset = _preset, // может быть NULL
138  .save = NULL // может быть NULL
139 };
140 
141 static flash_effect_t effect_def_b = {
142  .name = _name,
143  .start = NULL, // может быть NULL
144  .work = _effect, // это значение не может быть NULL!
145  .stop = NULL, // может быть NULL
146  .preset = _preset, // может быть NULL
147  .save = NULL // может быть NULL
148 };
149 
150 INIT(7){
151  register_effect(BACKGROUND_EFFECT, &effect_def_b);
152  register_effect(FOREGROUND_EFFECT, &effect_def);
153 }
154 
155 // главная функция эффекта - вызывается 100 раз в секунду для рендеринга
156 static void _effect(signal_t *s){
157 }
158 
159 // смена пресета эффекта - вызывается в произвольные моменты
160 static preset_result_t _preset(int8_t d){
161  item += d;
162  if((d < 0) && (item == ADC_OFFS)) item = SHOW_CNT-1;
163  if(item >= SHOW_CNT) item = ADC_OFFS;
164  return PRESET_HIDDEN;
165 }
166 
167 #endif
отладочный модуль
void lcd_gotoxy(uint8_t x, uint8_t y)
Set cursor to specified position.
Definition: lcd.c:380
volume_t average_vol
средняя громкость
Definition: global.h:74
power_t band[BAND_CNT]
"мощности" полос сигнала
Definition: global.h:75
Вспомогательные эффекты ЖКИ
Общие описания
const __flash effect_t flash_effect_t
тип описания эффекта, размещенного во FLASH.
Definition: main_effect.h:79
структура параметров звукового сигнала
Definition: global.h:72
uint16_t harmonics[F_CNT]
амплитуды всех гармоник сигнала
Definition: global.h:77
Описания для модуля реализации спектрального анализа
отображать название пресета не надо
Definition: main_effect.h:59
#define BACKGROUND_EFFECT
фоновый эффект
Definition: main_effect.h:48
preset_result_t
результат функции смены пресета
Definition: main_effect.h:56
void lcd_puts(const char *s)
Display string without auto linefeed.
Definition: lcd.c:483
#define FOREGROUND_EFFECT
основной эффект
Definition: main_effect.h:50
volume_t peak_volume
пиковая громкость
Definition: global.h:73
Интерфейс визуальных эффектов
void lcd_putc(char c)
Display character at current cursor position.
Definition: lcd.c:436
void register_effect(uint8_t toe, flash_effect_t *eff)
Регистрация эффекта в списках
Definition: main_effect.c:41
void show_rpad_str_p(uint8_t line, const char *src)
вывод строки из flash с очисткой дисплея справа
Definition: lcd_show.c:135