Skip to content

Commit 49df829

Browse files
committed
vfx: unify mode setting, using fixed frame periods
1 parent b54099f commit 49df829

File tree

1 file changed

+43
-57
lines changed

1 file changed

+43
-57
lines changed

main/src/user/vfx.c

Lines changed: 43 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
#define TAG "vfx"
2424

25-
#define VFX_PERIOD GDISP_NEED_TIMERFLUSH
26-
2725
static vfx_config_t vfx = {
2826
.mode = DEFAULT_VFX_MODE,
2927
.scale_factor = DEFAULT_VFX_SCALE_FACTOR,
@@ -110,7 +108,6 @@ static void vfx_task(void *pvParameter)
110108
break;
111109
}
112110
case 0x0E: { // 音樂頻譜-漸變-對數
113-
uint8_t color_cnt = 0;
114111
uint16_t color_tmp = 0;
115112
uint16_t color_h = 0;
116113
uint16_t color_l = vfx.lightness;
@@ -200,17 +197,13 @@ static void vfx_task(void *pvParameter)
200197
}
201198
}
202199

203-
if (++color_cnt % (16 / VFX_PERIOD) == 0) {
204-
color_h = ++color_tmp;
200+
if (color_tmp++ == 511) {
201+
color_h = 0;
205202
} else {
206203
color_h = color_tmp;
207204
}
208205

209-
if (color_h > 511) {
210-
color_h = 0;
211-
}
212-
213-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
206+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
214207
}
215208

216209
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -308,7 +301,7 @@ static void vfx_task(void *pvParameter)
308301
}
309302
}
310303

311-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
304+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
312305
}
313306

314307
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -318,7 +311,6 @@ static void vfx_task(void *pvParameter)
318311
break;
319312
}
320313
case 0x10: { // 音樂頻譜-漸變-線性
321-
uint8_t color_cnt = 0;
322314
uint16_t color_tmp = 0;
323315
uint16_t color_h = 0;
324316
uint16_t color_l = vfx.lightness;
@@ -404,17 +396,13 @@ static void vfx_task(void *pvParameter)
404396
}
405397
}
406398

407-
if (++color_cnt % (16 / VFX_PERIOD) == 0) {
408-
color_h = ++color_tmp;
399+
if (color_tmp++ == 511) {
400+
color_h = 0;
409401
} else {
410402
color_h = color_tmp;
411403
}
412404

413-
if (color_h > 511) {
414-
color_h = 0;
415-
}
416-
417-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
405+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
418406
}
419407

420408
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -508,7 +496,7 @@ static void vfx_task(void *pvParameter)
508496
}
509497
}
510498

511-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
499+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
512500
}
513501

514502
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -560,7 +548,7 @@ static void vfx_task(void *pvParameter)
560548
}
561549
}
562550

563-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
551+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
564552
}
565553
break;
566554
}
@@ -600,12 +588,13 @@ static void vfx_task(void *pvParameter)
600588
}
601589
}
602590

603-
color_h = ++color_tmp;
604-
if (color_h > 511) {
591+
if (color_tmp++ == 511) {
605592
color_h = 0;
593+
} else {
594+
color_h = color_tmp;
606595
}
607596

608-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
597+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
609598
}
610599
break;
611600
}
@@ -629,14 +618,13 @@ static void vfx_task(void *pvParameter)
629618
color_h = 0;
630619
}
631620

632-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
621+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
633622
}
634623
break;
635624
}
636625
case VFX_MODE_IDX_BREATHING: { // 呼吸
637626
uint8_t scale_dir = 0;
638-
uint8_t color_cnt = 0;
639-
uint16_t color_h = 0;
627+
uint16_t color_h = esp_random() % 512;
640628
uint16_t color_l = 0;
641629

642630
gdispGSetBacklight(vfx_gdisp, vfx.backlight);
@@ -660,15 +648,11 @@ static void vfx_task(void *pvParameter)
660648
if (color_l-- == 0) {
661649
color_l = 0;
662650
scale_dir = 0;
663-
}
664-
}
665-
if (++color_cnt % 16 == 0) {
666-
if (color_h++ == 511) {
667-
color_h = 0;
651+
color_h = esp_random() % 512;
668652
}
669653
}
670654

671-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
655+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
672656
}
673657
break;
674658
}
@@ -730,6 +714,7 @@ static void vfx_task(void *pvParameter)
730714

731715
vTaskDelayUntil(&xLastWakeTime, 8 / portTICK_RATE_MS);
732716
}
717+
733718
if (idx_base++ == 511) {
734719
idx_base = -led_num;
735720
}
@@ -794,6 +779,7 @@ static void vfx_task(void *pvParameter)
794779

795780
vTaskDelayUntil(&xLastWakeTime, 8 / portTICK_RATE_MS);
796781
}
782+
797783
if (idx_base++ == 511) {
798784
idx_base = -led_num;
799785
}
@@ -858,6 +844,7 @@ static void vfx_task(void *pvParameter)
858844

859845
vTaskDelayUntil(&xLastWakeTime, 8 / portTICK_RATE_MS);
860846
}
847+
861848
if (idx_base++ == 511) {
862849
idx_base = -led_num;
863850
}
@@ -887,8 +874,7 @@ static void vfx_task(void *pvParameter)
887874
vfx_draw_layer_number(num, 4, color_h, color_l);
888875
vfx_draw_layer_number(num, 5, color_h, color_l);
889876

890-
color_h += 8;
891-
if (color_h > 511) {
877+
if ((color_h += 8) == 512) {
892878
color_h = 0;
893879
}
894880

@@ -1010,10 +996,10 @@ static void vfx_task(void *pvParameter)
1010996
}
1011997
}
1012998

1013-
if (frame_pre == 27) {
999+
if (frame_pre++ == 27) {
10141000
frame_idx = 0;
10151001
} else {
1016-
frame_idx = frame_pre + 1;
1002+
frame_idx = frame_pre;
10171003
}
10181004

10191005
vTaskDelayUntil(&xLastWakeTime, 40 / portTICK_RATE_MS);
@@ -1045,10 +1031,10 @@ static void vfx_task(void *pvParameter)
10451031
}
10461032
}
10471033

1048-
if (frame_pre == 0) {
1034+
if (frame_pre-- == 0) {
10491035
frame_idx = 27;
10501036
} else {
1051-
frame_idx = frame_pre - 1;
1037+
frame_idx = frame_pre;
10521038
}
10531039

10541040
vTaskDelayUntil(&xLastWakeTime, 40 / portTICK_RATE_MS);
@@ -1145,7 +1131,7 @@ static void vfx_task(void *pvParameter)
11451131
}
11461132
}
11471133

1148-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
1134+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
11491135
}
11501136

11511137
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -1241,20 +1227,19 @@ static void vfx_task(void *pvParameter)
12411227
}
12421228
}
12431229

1244-
color_h += 8;
1245-
if (color_h > 511) {
1230+
if ((color_h += 8) == 512) {
12461231
color_h = 0;
12471232
}
12481233
}
12491234

1250-
if (++color_cnt % (128 / VFX_PERIOD) == 0) {
1251-
color_tmp += 8;
1252-
if (color_tmp > 511) {
1235+
if (color_cnt++ == 7) {
1236+
color_cnt = 0;
1237+
if ((color_tmp += 8) == 512) {
12531238
color_tmp = 0;
12541239
}
12551240
}
12561241

1257-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
1242+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
12581243
}
12591244

12601245
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -1371,13 +1356,14 @@ static void vfx_task(void *pvParameter)
13711356
}
13721357
}
13731358

1374-
if (++color_cnt % (32 / VFX_PERIOD) == 0) {
1359+
if (color_cnt++ == 1) {
1360+
color_cnt = 0;
13751361
color_flg = 1;
13761362
} else {
13771363
color_flg = 0;
13781364
}
13791365

1380-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
1366+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
13811367
}
13821368

13831369
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -1476,7 +1462,7 @@ static void vfx_task(void *pvParameter)
14761462
}
14771463
}
14781464

1479-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
1465+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
14801466
}
14811467

14821468
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -1572,20 +1558,19 @@ static void vfx_task(void *pvParameter)
15721558
}
15731559
}
15741560

1575-
color_h += 8;
1576-
if (color_h > 511) {
1561+
if ((color_h += 8) == 512) {
15771562
color_h = 0;
15781563
}
15791564
}
15801565

1581-
if (++color_cnt % (128 / VFX_PERIOD) == 0) {
1582-
color_tmp += 8;
1583-
if (color_tmp > 511) {
1566+
if (color_cnt++ == 7) {
1567+
color_cnt = 0;
1568+
if ((color_tmp += 8) == 512) {
15841569
color_tmp = 0;
15851570
}
15861571
}
15871572

1588-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
1573+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
15891574
}
15901575

15911576
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);
@@ -1702,13 +1687,14 @@ static void vfx_task(void *pvParameter)
17021687
}
17031688
}
17041689

1705-
if (++color_cnt % (32 / VFX_PERIOD) == 0) {
1690+
if (color_cnt++ == 1) {
1691+
color_cnt = 0;
17061692
color_flg = 1;
17071693
} else {
17081694
color_flg = 0;
17091695
}
17101696

1711-
vTaskDelayUntil(&xLastWakeTime, VFX_PERIOD / portTICK_RATE_MS);
1697+
vTaskDelayUntil(&xLastWakeTime, 16 / portTICK_RATE_MS);
17121698
}
17131699

17141700
xEventGroupClearBits(user_event_group, AUDIO_INPUT_FFT_BIT);

0 commit comments

Comments
 (0)