LibDriver VS1053B
Loading...
Searching...
No Matches
driver_vs1053b_record_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static vs1053b_handle_t gs_handle;
41static volatile uint8_t gs_flag = 0;
42
49static void a_callback(uint8_t type, uint32_t cur_pos)
50{
51 switch (type)
52 {
54 {
55 break;
56 }
58 {
59 break;
60 }
62 {
63 break;
64 }
66 {
67 break;
68 }
70 {
71 break;
72 }
74 {
75 vs1053b_interface_debug_print("vs1053b: irq record end with %d.\n", cur_pos);
76
77 break;
78 }
80 {
81 vs1053b_interface_debug_print("vs1053b: irq record over buffer with %d.\n", cur_pos);
82
83 break;
84 }
86 {
87 /* stop */
88 (void)vs1053b_stop(&gs_handle);
89 gs_flag = 1;
90 vs1053b_interface_debug_print("vs1053b: up to record time.\n");
91
92 break;
93 }
94 default :
95 {
96 vs1053b_interface_debug_print("vs1053b: unknown type.\n");
97
98 break;
99 }
100 }
101}
102
112uint8_t vs1053b_record_test(char *path, uint32_t second)
113{
114 uint8_t res;
115 uint8_t reg;
116 uint8_t buf[2];
117 uint16_t clk;
118 uint16_t config;
119 vs1053b_info_t info;
120
121 /* link interface function */
143 DRIVER_VS1053B_LINK_RECEIVE_CALLBACK(&gs_handle, a_callback);
144
145 /* get information */
146 res = vs1053b_info(&info);
147 if (res != 0)
148 {
149 vs1053b_interface_debug_print("vs1053b: get info failed.\n");
150
151 return 1;
152 }
153 else
154 {
155 /* print chip info */
156 vs1053b_interface_debug_print("vs1053b: chip is %s.\n", info.chip_name);
157 vs1053b_interface_debug_print("vs1053b: manufacturer is %s.\n", info.manufacturer_name);
158 vs1053b_interface_debug_print("vs1053b: interface is %s.\n", info.interface);
159 vs1053b_interface_debug_print("vs1053b: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
160 vs1053b_interface_debug_print("vs1053b: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
161 vs1053b_interface_debug_print("vs1053b: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
162 vs1053b_interface_debug_print("vs1053b: max current is %0.2fmA.\n", info.max_current_ma);
163 vs1053b_interface_debug_print("vs1053b: max temperature is %0.1fC.\n", info.temperature_max);
164 vs1053b_interface_debug_print("vs1053b: min temperature is %0.1fC.\n", info.temperature_min);
165 }
166
167 /* start record test */
168 vs1053b_interface_debug_print("vs1053b: start record test.\n");
169
170 /* vs1053b init */
171 res = vs1053b_init(&gs_handle);
172 if (res != 0)
173 {
174 vs1053b_interface_debug_print("vs1053b: init failed.\n");
175
176 return 1;
177 }
178
179 /* if wav format, load the wav patch */
180 if (strstr(path, ".wav") != NULL)
181 {
182 const uint16_t *patch_addr;
183 uint16_t l;
184
185 /* 2.0 xtali */
187 if (res != 0)
188 {
189 vs1053b_interface_debug_print("vs1053b: set clock multiplier failed.\n");
190 (void)vs1053b_deinit(&gs_handle);
191
192 return 1;
193 }
194
195 /* no modification is allowed */
197 if (res != 0)
198 {
199 vs1053b_interface_debug_print("vs1053b: set allowed multiplier addition failed.\n");
200 (void)vs1053b_deinit(&gs_handle);
201
202 return 1;
203 }
204
205 /* 8000000hz */
206 res = vs1053b_clock_frequency_convert_to_register(&gs_handle, 8000000.0f, &clk);
207 if (res != 0)
208 {
209 vs1053b_interface_debug_print("vs1053b: clock frequency convert to register failed.\n");
210 (void)vs1053b_deinit(&gs_handle);
211
212 return 1;
213 }
214
215 /* set clock frequency */
216 res = vs1053b_set_clock_frequency(&gs_handle, clk);
217 if (res != 0)
218 {
219 vs1053b_interface_debug_print("vs1053b: set clock frequency failed.\n");
220 (void)vs1053b_deinit(&gs_handle);
221
222 return 1;
223 }
224
225 /* disable do not jump */
227 if (res != 0)
228 {
229 vs1053b_interface_debug_print("vs1053b: set do not jump failed.\n");
230 (void)vs1053b_deinit(&gs_handle);
231
232 return 1;
233 }
234
235 /* 0.0f */
236 res = vs1053b_swing_convert_to_register(&gs_handle, 0.0f, &reg);
237 if (res != 0)
238 {
239 vs1053b_interface_debug_print("vs1053b: swing convert to register failed.\n");
240 (void)vs1053b_deinit(&gs_handle);
241
242 return 1;
243 }
244
245 /* set swing */
246 res = vs1053b_set_swing(&gs_handle, reg);
247 if (res != 0)
248 {
249 vs1053b_interface_debug_print("vs1053b: set swing failed.\n");
250 (void)vs1053b_deinit(&gs_handle);
251
252 return 1;
253 }
254
255 /* enable overload detection */
257 if (res != 0)
258 {
259 vs1053b_interface_debug_print("vs1053b: set overload detection failed.\n");
260 (void)vs1053b_deinit(&gs_handle);
261
262 return 1;
263 }
264
265 /* disable analog driver power down */
267 if (res != 0)
268 {
269 vs1053b_interface_debug_print("vs1053b: set analog driver power down failed.\n");
270 (void)vs1053b_deinit(&gs_handle);
271
272 return 1;
273 }
274
275 /* disable analog internal power down */
277 if (res != 0)
278 {
279 vs1053b_interface_debug_print("vs1053b: set analog internal power down failed.\n");
280 (void)vs1053b_deinit(&gs_handle);
281
282 return 1;
283 }
284
285 /* ad clock 6mhz */
287 if (res != 0)
288 {
289 vs1053b_interface_debug_print("vs1053b: set ad clock failed.\n");
290 (void)vs1053b_deinit(&gs_handle);
291
292 return 1;
293 }
294
295 /* 1.23v */
297 if (res != 0)
298 {
299 vs1053b_interface_debug_print("vs1053b: set reference voltage failed.\n");
300 (void)vs1053b_deinit(&gs_handle);
301
302 return 1;
303 }
304
305 /* 0.0db */
306 res = vs1053b_treble_control_convert_to_register(&gs_handle, 0.0f, &reg);
307 if (res != 0)
308 {
309 vs1053b_interface_debug_print("vs1053b: treble control convert to register failed.\n");
310 (void)vs1053b_deinit(&gs_handle);
311
312 return 1;
313 }
314
315 /* set treble control */
316 res = vs1053b_set_treble_control(&gs_handle, reg);
317 if (res != 0)
318 {
319 vs1053b_interface_debug_print("vs1053b: set treble control failed.\n");
320 (void)vs1053b_deinit(&gs_handle);
321
322 return 1;
323 }
324
325 /* 0khz */
327 if (res != 0)
328 {
329 vs1053b_interface_debug_print("vs1053b: lower limit frequency in 1000 hz convert to register failed.\n");
330 (void)vs1053b_deinit(&gs_handle);
331
332 return 1;
333 }
334
335 /* set lower limit frequency in 0 hz */
337 if (res != 0)
338 {
339 vs1053b_interface_debug_print("vs1053b: set lower limit frequency in 1000 hz failed.\n");
340 (void)vs1053b_deinit(&gs_handle);
341
342 return 1;
343 }
344
345 /* 0db */
346 res = vs1053b_set_bass_enhancement(&gs_handle, 0);
347 if (res != 0)
348 {
349 vs1053b_interface_debug_print("vs1053b: set bass enhancement failed.\n");
350 (void)vs1053b_deinit(&gs_handle);
351
352 return 1;
353 }
354
355 /* 0hz */
357 if (res != 0)
358 {
359 vs1053b_interface_debug_print("vs1053b: lower limit frequency in 10 hz convert to register failed.\n");
360 (void)vs1053b_deinit(&gs_handle);
361
362 return 1;
363 }
364
365 /* set lower limit frequency in 0 hz */
366 res = vs1053b_set_lower_limit_frequency_in_10_hz(&gs_handle, reg);
367 if (res != 0)
368 {
369 vs1053b_interface_debug_print("vs1053b: set lower limit frequency in 10 hz failed.\n");
370 (void)vs1053b_deinit(&gs_handle);
371
372 return 1;
373 }
374
375 /* init 0x0000 */
376 res = vs1053b_set_decode_time(&gs_handle, 0x0000);
377 if (res != 0)
378 {
379 vs1053b_interface_debug_print("vs1053b: set decode time failed.\n");
380 (void)vs1053b_deinit(&gs_handle);
381
382 return 1;
383 }
384
385 /* -100.0db */
386 res = vs1053b_vol_convert_to_register(&gs_handle, -100.0f, &reg);
387 if (res != 0)
388 {
389 vs1053b_interface_debug_print("vs1053b: vol convert to register failed.\n");
390 (void)vs1053b_deinit(&gs_handle);
391
392 return 1;
393 }
394
395 /* set vol */
396 res = vs1053b_set_vol(&gs_handle, reg, reg);
397 if (res != 0)
398 {
399 vs1053b_interface_debug_print("vs1053b: set vol failed.\n");
400 (void)vs1053b_deinit(&gs_handle);
401
402 return 1;
403 }
404
405 /* sample rate 8000hz */
406 config = 8000;
407 buf[0] = (config >> 8) & 0xFF;
408 buf[1] = (config >> 0) & 0xFF;
409 res = vs1053b_write_application(&gs_handle, VS1053B_APPLICATION_0, buf, 2);
410 if (res != 0)
411 {
412 vs1053b_interface_debug_print("vs1053b: write application failed.\n");
413 (void)vs1053b_deinit(&gs_handle);
414
415 return 1;
416 }
417
418 /* 5 times */
419 config = 1024 * 5;
420 buf[0] = (config >> 8) & 0xFF;
421 buf[1] = (config >> 0) & 0xFF;
422 res = vs1053b_write_application(&gs_handle, VS1053B_APPLICATION_1, buf, 2);
423 if (res != 0)
424 {
425 vs1053b_interface_debug_print("vs1053b: write application failed.\n");
426 (void)vs1053b_deinit(&gs_handle);
427
428 return 1;
429 }
430
431 /* agc */
432 config = 0;
433 buf[0] = (config >> 8) & 0xFF;
434 buf[1] = (config >> 0) & 0xFF;
435 res = vs1053b_write_application(&gs_handle, VS1053B_APPLICATION_2, buf, 2);
436 if (res != 0)
437 {
438 vs1053b_interface_debug_print("vs1053b: write application failed.\n");
439 (void)vs1053b_deinit(&gs_handle);
440
441 return 1;
442 }
443
444 /* left channel mic */
446 buf[0] = (config >> 8) & 0xFF;
447 buf[1] = (config >> 0) & 0xFF;
448 res = vs1053b_write_application(&gs_handle, VS1053B_APPLICATION_3, buf, 2);
449 if (res != 0)
450 {
451 vs1053b_interface_debug_print("vs1053b: write application failed.\n");
452 (void)vs1053b_deinit(&gs_handle);
453
454 return 1;
455 }
456
457 /* diff normal mode */
458 res = vs1053b_set_diff(&gs_handle, VS1053B_DIFF_NORMAL);
459 if (res != 0)
460 {
461 vs1053b_interface_debug_print("vs1053b: set diff failed.\n");
462 (void)vs1053b_deinit(&gs_handle);
463
464 return 1;
465 }
466
467 /* disable mpeg layer i and ii */
469 if (res != 0)
470 {
471 vs1053b_interface_debug_print("vs1053b: set mpeg layer i and ii failed.\n");
472 (void)vs1053b_deinit(&gs_handle);
473
474 return 1;
475 }
476
477 /* disable cancel decoding current file */
479 if (res != 0)
480 {
481 vs1053b_interface_debug_print("vs1053b: set cancel decoding current file failed.\n");
482 (void)vs1053b_deinit(&gs_handle);
483
484 return 1;
485 }
486
487 /* disable ear speaker low setting */
489 if (res != 0)
490 {
491 vs1053b_interface_debug_print("vs1053b: set ear speaker low setting failed.\n");
492 (void)vs1053b_deinit(&gs_handle);
493
494 return 1;
495 }
496
497 /* disable allow sdi test */
499 if (res != 0)
500 {
501 vs1053b_interface_debug_print("vs1053b: set allow sdi test failed.\n");
502 (void)vs1053b_deinit(&gs_handle);
503
504 return 1;
505 }
506
507 /* disable stream mode */
509 if (res != 0)
510 {
511 vs1053b_interface_debug_print("vs1053b: set stream mode failed.\n");
512 (void)vs1053b_deinit(&gs_handle);
513
514 return 1;
515 }
516
517 /* disable ear speaker high setting */
519 if (res != 0)
520 {
521 vs1053b_interface_debug_print("vs1053b: set ear speaker high setting failed.\n");
522 (void)vs1053b_deinit(&gs_handle);
523
524 return 1;
525 }
526
527 /* rising dclk edge */
529 if (res != 0)
530 {
531 vs1053b_interface_debug_print("vs1053b: set dclk edge failed.\n");
532 (void)vs1053b_deinit(&gs_handle);
533
534 return 1;
535 }
536
537 /* sdi bit order msb */
539 if (res != 0)
540 {
541 vs1053b_interface_debug_print("vs1053b: set sdi bit order failed.\n");
542 (void)vs1053b_deinit(&gs_handle);
543
544 return 1;
545 }
546
547 /* disable share spi chip select */
549 if (res != 0)
550 {
551 vs1053b_interface_debug_print("vs1053b: set share spi chip select failed.\n");
552 (void)vs1053b_deinit(&gs_handle);
553
554 return 1;
555 }
556
557 /* enable native spi modes */
559 if (res != 0)
560 {
561 vs1053b_interface_debug_print("vs1053b: set native spi modes failed.\n");
562 (void)vs1053b_deinit(&gs_handle);
563
564 return 1;
565 }
566
567 /* microphone */
569 if (res != 0)
570 {
571 vs1053b_interface_debug_print("vs1053b: set selector failed.\n");
572 (void)vs1053b_deinit(&gs_handle);
573
574 return 1;
575 }
576
577 /* 12MHz - 13MHz */
579 if (res != 0)
580 {
581 vs1053b_interface_debug_print("vs1053b: set clock range failed.\n");
582 (void)vs1053b_deinit(&gs_handle);
583
584 return 1;
585 }
586
587 /* enable pcm adpcm recording active */
589 if (res != 0)
590 {
591 vs1053b_interface_debug_print("vs1053b: set pcm adpcm recording active failed.\n");
592 (void)vs1053b_deinit(&gs_handle);
593
594 return 1;
595 }
596
597 /* both soft reset and pcm adpcm recording active to start ima adpcm mode */
598 res = vs1053b_set_soft_reset(&gs_handle, VS1053B_BOOL_TRUE);
599 if (res != 0)
600 {
601 vs1053b_interface_debug_print("vs1053b: set soft reset failed.\n");
602 (void)vs1053b_deinit(&gs_handle);
603
604 return 1;
605 }
606
607 /* set record format wav */
609 if (res != 0)
610 {
611 vs1053b_interface_debug_print("vs1053b: set record format failed.\n");
612 (void)vs1053b_deinit(&gs_handle);
613
614 return 1;
615 }
616
617 /* get wav patch */
618 res = vs1053b_get_patch(&gs_handle, VS1053B_PATCH_WAV, &patch_addr, &l);
619 if (res != 0)
620 {
621 vs1053b_interface_debug_print("vs1053b: get patch failed.\n");
622 (void)vs1053b_deinit(&gs_handle);
623
624 return 1;
625 }
626
627 /* load wav patch */
628 res = vs1053b_load_patch(&gs_handle, patch_addr, l);
629 if (res != 0)
630 {
631 vs1053b_interface_debug_print("vs1053b: load patch failed.\n");
632 (void)vs1053b_deinit(&gs_handle);
633
634 return 1;
635 }
636
637 /* set record time */
638 res = vs1053b_set_period_callback(&gs_handle, second, 0, VS1053B_BOOL_TRUE);
639 if (res != 0)
640 {
641 vs1053b_interface_debug_print("vs1053b: set period callback failed.\n");
642 (void)vs1053b_deinit(&gs_handle);
643
644 return 1;
645 }
646
647 /* delay 5ms */
649
650 /* record music */
651 res = vs1053b_record(&gs_handle, path, 8000);
652 if (res != 0)
653 {
654 vs1053b_interface_debug_print("vs1053b: record failed.\n");
655 (void)vs1053b_deinit(&gs_handle);
656
657 return 1;
658 }
659 }
660 else if (strstr(path, ".ogg") != NULL)
661 {
662 const uint16_t *patch_addr;
663 uint8_t buf[2];
664 uint16_t l;
665 uint16_t addr;
666 uint16_t value;
667
668 /* 4.5 xtali */
670 if (res != 0)
671 {
672 vs1053b_interface_debug_print("vs1053b: set clock multiplier failed.\n");
673 (void)vs1053b_deinit(&gs_handle);
674
675 return 1;
676 }
677
678 /* no modification is allowed */
680 if (res != 0)
681 {
682 vs1053b_interface_debug_print("vs1053b: set allowed multiplier addition failed.\n");
683 (void)vs1053b_deinit(&gs_handle);
684
685 return 1;
686 }
687
688 /* 8000000hz */
689 res = vs1053b_clock_frequency_convert_to_register(&gs_handle, 8000000.0f, &clk);
690 if (res != 0)
691 {
692 vs1053b_interface_debug_print("vs1053b: clock frequency convert to register failed.\n");
693 (void)vs1053b_deinit(&gs_handle);
694
695 return 1;
696 }
697
698 /* set clock frequency */
699 res = vs1053b_set_clock_frequency(&gs_handle, clk);
700 if (res != 0)
701 {
702 vs1053b_interface_debug_print("vs1053b: set clock frequency failed.\n");
703 (void)vs1053b_deinit(&gs_handle);
704
705 return 1;
706 }
707
708 /* disable do not jump */
710 if (res != 0)
711 {
712 vs1053b_interface_debug_print("vs1053b: set do not jump failed.\n");
713 (void)vs1053b_deinit(&gs_handle);
714
715 return 1;
716 }
717
718 /* 0.0f */
719 res = vs1053b_swing_convert_to_register(&gs_handle, 0.0f, &reg);
720 if (res != 0)
721 {
722 vs1053b_interface_debug_print("vs1053b: swing convert to register failed.\n");
723 (void)vs1053b_deinit(&gs_handle);
724
725 return 1;
726 }
727
728 /* set swing */
729 res = vs1053b_set_swing(&gs_handle, reg);
730 if (res != 0)
731 {
732 vs1053b_interface_debug_print("vs1053b: set swing failed.\n");
733 (void)vs1053b_deinit(&gs_handle);
734
735 return 1;
736 }
737
738 /* enable overload detection */
740 if (res != 0)
741 {
742 vs1053b_interface_debug_print("vs1053b: set overload detection failed.\n");
743 (void)vs1053b_deinit(&gs_handle);
744
745 return 1;
746 }
747
748 /* disable analog driver power down */
750 if (res != 0)
751 {
752 vs1053b_interface_debug_print("vs1053b: set analog driver power down failed.\n");
753 (void)vs1053b_deinit(&gs_handle);
754
755 return 1;
756 }
757
758 /* disable analog internal power down */
760 if (res != 0)
761 {
762 vs1053b_interface_debug_print("vs1053b: set analog internal power down failed.\n");
763 (void)vs1053b_deinit(&gs_handle);
764
765 return 1;
766 }
767
768 /* ad clock 6mhz */
770 if (res != 0)
771 {
772 vs1053b_interface_debug_print("vs1053b: set ad clock failed.\n");
773 (void)vs1053b_deinit(&gs_handle);
774
775 return 1;
776 }
777
778 /* 1.23v */
780 if (res != 0)
781 {
782 vs1053b_interface_debug_print("vs1053b: set reference voltage failed.\n");
783 (void)vs1053b_deinit(&gs_handle);
784
785 return 1;
786 }
787
788 /* 0.0db */
789 res = vs1053b_treble_control_convert_to_register(&gs_handle, 0.0f, &reg);
790 if (res != 0)
791 {
792 vs1053b_interface_debug_print("vs1053b: treble control convert to register failed.\n");
793 (void)vs1053b_deinit(&gs_handle);
794
795 return 1;
796 }
797
798 /* set treble control */
799 res = vs1053b_set_treble_control(&gs_handle, reg);
800 if (res != 0)
801 {
802 vs1053b_interface_debug_print("vs1053b: set treble control failed.\n");
803 (void)vs1053b_deinit(&gs_handle);
804
805 return 1;
806 }
807
808 /* 0khz */
810 if (res != 0)
811 {
812 vs1053b_interface_debug_print("vs1053b: lower limit frequency in 1000 hz convert to register failed.\n");
813 (void)vs1053b_deinit(&gs_handle);
814
815 return 1;
816 }
817
818 /* set lower limit frequency in 0 hz */
820 if (res != 0)
821 {
822 vs1053b_interface_debug_print("vs1053b: set lower limit frequency in 1000 hz failed.\n");
823 (void)vs1053b_deinit(&gs_handle);
824
825 return 1;
826 }
827
828 /* 0db */
829 res = vs1053b_set_bass_enhancement(&gs_handle, 0);
830 if (res != 0)
831 {
832 vs1053b_interface_debug_print("vs1053b: set bass enhancement failed.\n");
833 (void)vs1053b_deinit(&gs_handle);
834
835 return 1;
836 }
837
838 /* 0hz */
840 if (res != 0)
841 {
842 vs1053b_interface_debug_print("vs1053b: lower limit frequency in 10 hz convert to register failed.\n");
843 (void)vs1053b_deinit(&gs_handle);
844
845 return 1;
846 }
847
848 /* set lower limit frequency in 0 hz */
849 res = vs1053b_set_lower_limit_frequency_in_10_hz(&gs_handle, reg);
850 if (res != 0)
851 {
852 vs1053b_interface_debug_print("vs1053b: set lower limit frequency in 10 hz failed.\n");
853 (void)vs1053b_deinit(&gs_handle);
854
855 return 1;
856 }
857
858 /* init 0x0000 */
859 res = vs1053b_set_decode_time(&gs_handle, 0x0000);
860 if (res != 0)
861 {
862 vs1053b_interface_debug_print("vs1053b: set decode time failed.\n");
863 (void)vs1053b_deinit(&gs_handle);
864
865 return 1;
866 }
867
868 /* -100.0db */
869 res = vs1053b_vol_convert_to_register(&gs_handle, -100.0f, &reg);
870 if (res != 0)
871 {
872 vs1053b_interface_debug_print("vs1053b: vol convert to register failed.\n");
873 (void)vs1053b_deinit(&gs_handle);
874
875 return 1;
876 }
877
878 /* set vol */
879 res = vs1053b_set_vol(&gs_handle, reg, reg);
880 if (res != 0)
881 {
882 vs1053b_interface_debug_print("vs1053b: set vol failed.\n");
883 (void)vs1053b_deinit(&gs_handle);
884
885 return 1;
886 }
887
888 /* sample rate 44100hz */
889 config = 44100;
890 buf[0] = (config >> 8) & 0xFF;
891 buf[1] = (config >> 0) & 0xFF;
892 res = vs1053b_write_application(&gs_handle, VS1053B_APPLICATION_0, buf, 2);
893 if (res != 0)
894 {
895 vs1053b_interface_debug_print("vs1053b: write application failed.\n");
896 (void)vs1053b_deinit(&gs_handle);
897
898 return 1;
899 }
900
901 /* 5 times */
902 config = 1024 * 5;
903 buf[0] = (config >> 8) & 0xFF;
904 buf[1] = (config >> 0) & 0xFF;
905 res = vs1053b_write_application(&gs_handle, VS1053B_APPLICATION_1, buf, 2);
906 if (res != 0)
907 {
908 vs1053b_interface_debug_print("vs1053b: write application failed.\n");
909 (void)vs1053b_deinit(&gs_handle);
910
911 return 1;
912 }
913
914 /* agc */
915 config = 0;
916 buf[0] = (config >> 8) & 0xFF;
917 buf[1] = (config >> 0) & 0xFF;
918 res = vs1053b_write_application(&gs_handle, VS1053B_APPLICATION_2, buf, 2);
919 if (res != 0)
920 {
921 vs1053b_interface_debug_print("vs1053b: write application failed.\n");
922 (void)vs1053b_deinit(&gs_handle);
923
924 return 1;
925 }
926
927 /* stop */
928 config = 0;
929 buf[0] = (config >> 8) & 0xFF;
930 buf[1] = (config >> 0) & 0xFF;
931 res = vs1053b_write_application(&gs_handle, VS1053B_APPLICATION_3, buf, 2);
932 if (res != 0)
933 {
934 vs1053b_interface_debug_print("vs1053b: write application failed.\n");
935 (void)vs1053b_deinit(&gs_handle);
936
937 return 1;
938 }
939
940 /* diff normal mode */
941 res = vs1053b_set_diff(&gs_handle, VS1053B_DIFF_NORMAL);
942 if (res != 0)
943 {
944 vs1053b_interface_debug_print("vs1053b: set diff failed.\n");
945 (void)vs1053b_deinit(&gs_handle);
946
947 return 1;
948 }
949
950 /* disable mpeg layer i and ii */
952 if (res != 0)
953 {
954 vs1053b_interface_debug_print("vs1053b: set mpeg layer i and ii failed.\n");
955 (void)vs1053b_deinit(&gs_handle);
956
957 return 1;
958 }
959
960 /* disable cancel decoding current file */
962 if (res != 0)
963 {
964 vs1053b_interface_debug_print("vs1053b: set cancel decoding current file failed.\n");
965 (void)vs1053b_deinit(&gs_handle);
966
967 return 1;
968 }
969
970 /* disable ear speaker low setting */
972 if (res != 0)
973 {
974 vs1053b_interface_debug_print("vs1053b: set ear speaker low setting failed.\n");
975 (void)vs1053b_deinit(&gs_handle);
976
977 return 1;
978 }
979
980 /* disable allow sdi test */
982 if (res != 0)
983 {
984 vs1053b_interface_debug_print("vs1053b: set allow sdi test failed.\n");
985 (void)vs1053b_deinit(&gs_handle);
986
987 return 1;
988 }
989
990 /* disable stream mode */
992 if (res != 0)
993 {
994 vs1053b_interface_debug_print("vs1053b: set stream mode failed.\n");
995 (void)vs1053b_deinit(&gs_handle);
996
997 return 1;
998 }
999
1000 /* disable ear speaker high setting */
1002 if (res != 0)
1003 {
1004 vs1053b_interface_debug_print("vs1053b: set ear speaker high setting failed.\n");
1005 (void)vs1053b_deinit(&gs_handle);
1006
1007 return 1;
1008 }
1009
1010 /* rising dclk edge */
1012 if (res != 0)
1013 {
1014 vs1053b_interface_debug_print("vs1053b: set dclk edge failed.\n");
1015 (void)vs1053b_deinit(&gs_handle);
1016
1017 return 1;
1018 }
1019
1020 /* sdi bit order msb */
1022 if (res != 0)
1023 {
1024 vs1053b_interface_debug_print("vs1053b: set sdi bit order failed.\n");
1025 (void)vs1053b_deinit(&gs_handle);
1026
1027 return 1;
1028 }
1029
1030 /* disable share spi chip select */
1032 if (res != 0)
1033 {
1034 vs1053b_interface_debug_print("vs1053b: set share spi chip select failed.\n");
1035 (void)vs1053b_deinit(&gs_handle);
1036
1037 return 1;
1038 }
1039
1040 /* enable native spi modes */
1042 if (res != 0)
1043 {
1044 vs1053b_interface_debug_print("vs1053b: set native spi modes failed.\n");
1045 (void)vs1053b_deinit(&gs_handle);
1046
1047 return 1;
1048 }
1049
1050 /* microphone */
1052 if (res != 0)
1053 {
1054 vs1053b_interface_debug_print("vs1053b: set selector failed.\n");
1055 (void)vs1053b_deinit(&gs_handle);
1056
1057 return 1;
1058 }
1059
1060 /* 12MHz - 13MHz */
1062 if (res != 0)
1063 {
1064 vs1053b_interface_debug_print("vs1053b: set clock range failed.\n");
1065 (void)vs1053b_deinit(&gs_handle);
1066
1067 return 1;
1068 }
1069
1070 /* enable pcm adpcm recording active */
1072 if (res != 0)
1073 {
1074 vs1053b_interface_debug_print("vs1053b: set pcm adpcm recording active failed.\n");
1075 (void)vs1053b_deinit(&gs_handle);
1076
1077 return 1;
1078 }
1079
1080 /* soft reset */
1081 res = vs1053b_set_soft_reset(&gs_handle, VS1053B_BOOL_TRUE);
1082 if (res != 0)
1083 {
1084 vs1053b_interface_debug_print("vs1053b: set soft reset failed.\n");
1085 (void)vs1053b_deinit(&gs_handle);
1086
1087 return 1;
1088 }
1089
1090 /* set interrupt enable ram address */
1091 addr = 0xC01A;
1092 res = vs1053b_set_ram_address(&gs_handle, addr);
1093 if (res != 0)
1094 {
1095 vs1053b_interface_debug_print("vs1053b: set ram address failed.\n");
1096 (void)vs1053b_deinit(&gs_handle);
1097
1098 return 1;
1099 }
1100
1101 /* disable all interrupts except sci */
1102 value = 0x0002;
1103 buf[0] = (value >> 8) & 0xFF;
1104 buf[1] = (value >> 0) & 0xFF;
1105 res = vs1053b_write_ram(&gs_handle, buf, 2);
1106 if (res != 0)
1107 {
1108 vs1053b_interface_debug_print("vs1053b: write ram failed.\n");
1109 (void)vs1053b_deinit(&gs_handle);
1110
1111 return 1;
1112 }
1113
1114 /* set record format ogg */
1116 if (res != 0)
1117 {
1118 vs1053b_interface_debug_print("vs1053b: set record format failed.\n");
1119 (void)vs1053b_deinit(&gs_handle);
1120
1121 return 1;
1122 }
1123
1124 /* get ogg patch */
1125 res = vs1053b_get_patch(&gs_handle, VS1053B_PATCH_OGG_VENC44K2Q05, &patch_addr, &l);
1126 if (res != 0)
1127 {
1128 vs1053b_interface_debug_print("vs1053b: get patch failed.\n");
1129 (void)vs1053b_deinit(&gs_handle);
1130
1131 return 1;
1132 }
1133
1134 /* load ogg patch */
1135 res = vs1053b_load_patch(&gs_handle, patch_addr, l);
1136 if (res != 0)
1137 {
1138 vs1053b_interface_debug_print("vs1053b: load patch failed.\n");
1139 (void)vs1053b_deinit(&gs_handle);
1140
1141 return 1;
1142 }
1143
1144 /* set record time */
1145 res = vs1053b_set_period_callback(&gs_handle, second, 0, VS1053B_BOOL_TRUE);
1146 if (res != 0)
1147 {
1148 vs1053b_interface_debug_print("vs1053b: set period callback failed.\n");
1149 (void)vs1053b_deinit(&gs_handle);
1150
1151 return 1;
1152 }
1153
1154 /* delay 5ms */
1156
1157 /* record music */
1158 res = vs1053b_record(&gs_handle, path, 44100);
1159 if (res != 0)
1160 {
1161 vs1053b_interface_debug_print("vs1053b: record failed.\n");
1162 (void)vs1053b_deinit(&gs_handle);
1163
1164 return 1;
1165 }
1166 }
1167 else
1168 {
1169 vs1053b_interface_debug_print("vs1053b: record only supports wav and ogg format.\n");
1170 (void)vs1053b_deinit(&gs_handle);
1171
1172 return 1;
1173 }
1174
1175 /* clear flag */
1176 gs_flag = 0;
1177
1178 /* run the server and wait for the end */
1179 while (gs_flag == 0)
1180 {
1181 (void)vs1053b_process(&gs_handle);
1182 }
1183
1184 /* finish record */
1185 vs1053b_interface_debug_print("vs1053b: finish record test.\n");
1186 (void)vs1053b_deinit(&gs_handle);
1187
1188 return 0;
1189}
driver vs1053b record test header file
uint8_t vs1053b_set_swing(vs1053b_handle_t *handle, uint8_t swing)
set swing
uint8_t vs1053b_set_treble_control(vs1053b_handle_t *handle, uint8_t db)
set treble control
#define VS1053B_AICTRL3_MODE_LINEAR_PCM
uint8_t vs1053b_set_ad_clock(vs1053b_handle_t *handle, vs1053b_ad_clock_t ad_clock)
set ad clock
uint8_t vs1053b_set_clock_multiplier(vs1053b_handle_t *handle, vs1053b_clock_multiplier_t multiplier)
set clock multiplier
uint8_t vs1053b_set_reference_voltage(vs1053b_handle_t *handle, vs1053b_reference_voltage_t voltage)
set reference voltage
uint8_t vs1053b_set_period_callback(vs1053b_handle_t *handle, uint32_t second, uint32_t microsecond, vs1053b_bool_t enable)
set period callback
uint8_t vs1053b_set_analog_internal_power_down(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable analog internal power down
uint8_t vs1053b_swing_convert_to_register(vs1053b_handle_t *handle, float db, uint8_t *reg)
convert the swing to the register raw data
uint8_t vs1053b_set_lower_limit_frequency_in_10_hz(vs1053b_handle_t *handle, uint8_t step)
set lower limit frequency in 10 hz
uint8_t vs1053b_stop(vs1053b_handle_t *handle)
stop audio
uint8_t vs1053b_set_vol(vs1053b_handle_t *handle, uint8_t left, uint8_t right)
set vol
uint8_t vs1053b_lower_limit_frequency_in_1000_hz_convert_to_register(vs1053b_handle_t *handle, uint32_t hz, uint8_t *reg)
convert the lower limit frequency in 1000 hz to the register raw data
uint8_t vs1053b_process(vs1053b_handle_t *handle)
audio process
uint8_t vs1053b_set_selector(vs1053b_handle_t *handle, vs1053b_selector_t selector)
set selector
uint8_t vs1053b_clock_frequency_convert_to_register(vs1053b_handle_t *handle, float hz, uint16_t *reg)
convert the clock frequency to the register raw data
uint8_t vs1053b_set_do_not_jump(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable do not jump
uint8_t vs1053b_set_decode_time(vs1053b_handle_t *handle, uint16_t decode_time)
set decode time
uint8_t vs1053b_set_native_spi_modes(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable native spi modes
uint8_t vs1053b_init(vs1053b_handle_t *handle)
initialize the chip
uint8_t vs1053b_set_cancel_decoding_current_file(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable cancel decoding current file
uint8_t vs1053b_set_stream_mode(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable stream mode
uint8_t vs1053b_write_application(vs1053b_handle_t *handle, vs1053b_application_t num, uint8_t *buf, uint16_t len)
write application
uint8_t vs1053b_set_dclk_edge(vs1053b_handle_t *handle, vs1053b_dclk_edge_t edge)
set dclk edge
uint8_t vs1053b_set_analog_driver_power_down(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable analog driver power down
uint8_t vs1053b_set_pcm_adpcm_recording_active(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable pcm adpcm recording active
uint8_t vs1053b_set_clock_frequency(vs1053b_handle_t *handle, uint16_t clk)
set clock frequency
uint8_t vs1053b_set_ear_speaker_low_setting(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable ear speaker low setting
uint8_t vs1053b_set_record_format(vs1053b_handle_t *handle, vs1053b_record_format_t format)
set record format
uint8_t vs1053b_set_clock_range(vs1053b_handle_t *handle, vs1053b_clock_range_t range)
set clock range
uint8_t vs1053b_get_patch(vs1053b_handle_t *handle, vs1053b_patch_t type, const uint16_t **patch_addr, uint16_t *len)
get patch info
uint8_t vs1053b_set_diff(vs1053b_handle_t *handle, vs1053b_diff_t diff)
set the audio differential
uint8_t vs1053b_set_ear_speaker_high_setting(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable ear speaker high setting
uint8_t vs1053b_set_share_spi_chip_select(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable share spi chip select
uint8_t vs1053b_vol_convert_to_register(vs1053b_handle_t *handle, float db, uint8_t *reg)
convert vol to the register raw data
uint8_t vs1053b_set_soft_reset(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable soft reset
uint8_t vs1053b_set_ram_address(vs1053b_handle_t *handle, uint16_t addr)
set ram address
struct vs1053b_handle_s vs1053b_handle_t
vs1053b handle structure definition
uint8_t vs1053b_set_allow_sdi_test(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable allow sdi test
uint8_t vs1053b_set_overload_detection(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable overload detection
uint8_t vs1053b_treble_control_convert_to_register(vs1053b_handle_t *handle, float db, uint8_t *reg)
convert the treble control to the register raw data
uint8_t vs1053b_deinit(vs1053b_handle_t *handle)
deinit the chip
uint8_t vs1053b_set_allowed_multiplier_addition(vs1053b_handle_t *handle, vs1053b_allowed_multiplier_addition_t addition)
set allowed multiplier addition
uint8_t vs1053b_set_sdi_bit_order(vs1053b_handle_t *handle, vs1053b_bit_order_t order)
set sdi bit order
struct vs1053b_info_s vs1053b_info_t
vs1053b information structure definition
#define VS1053B_AICTRL3_ADC_LEFT_CHANNEL
uint8_t vs1053b_info(vs1053b_info_t *info)
get chip's information
uint8_t vs1053b_record(vs1053b_handle_t *handle, char *path, uint32_t sample_rate)
record audio
uint8_t vs1053b_load_patch(vs1053b_handle_t *handle, const uint16_t *patch, uint16_t len)
load patch
uint8_t vs1053b_write_ram(vs1053b_handle_t *handle, uint8_t *buf, uint16_t len)
write ram
uint8_t vs1053b_set_bass_enhancement(vs1053b_handle_t *handle, uint8_t db)
set bass enhancement
uint8_t vs1053b_set_lower_limit_frequency_in_1000_hz(vs1053b_handle_t *handle, uint8_t step)
set lower limit frequency in 1000 hz
uint8_t vs1053b_set_mpeg_layer_i_and_ii(vs1053b_handle_t *handle, vs1053b_bool_t enable)
enable or disable mpeg layer i and ii
uint8_t vs1053b_lower_limit_frequency_in_10_hz_convert_to_register(vs1053b_handle_t *handle, uint32_t hz, uint8_t *reg)
convert the lower limit frequency in 10 hz to the register raw data
@ VS1053B_TYPE_PERIOD
@ VS1053B_TYPE_PLAY_END
@ VS1053B_TYPE_PLAY_WRITE
@ VS1053B_TYPE_RECORD_END
@ VS1053B_TYPE_RECORD_READ
@ VS1053B_TYPE_RECORD_WRITE
@ VS1053B_TYPE_RECORD_OVER
@ VS1053B_TYPE_PLAY_READ
@ VS1053B_AD_CLOCK_6MHZ
@ VS1053B_REFERENCE_VOLTAGE_1P23V
@ VS1053B_BIT_ORDER_MSB_FIRST
@ VS1053B_ALLOWED_MULTIPLIER_ADDITION_NONE
@ VS1053B_DIFF_NORMAL
@ VS1053B_BOOL_FALSE
@ VS1053B_BOOL_TRUE
@ VS1053B_SELECTOR_MICP
@ VS1053B_PATCH_OGG_VENC44K2Q05
@ VS1053B_PATCH_WAV
@ VS1053B_DCLK_EDGE_RISING
@ VS1053B_CLOCK_RANGE_12MHZ_13MHZ
@ VS1053B_APPLICATION_2
@ VS1053B_APPLICATION_0
@ VS1053B_APPLICATION_3
@ VS1053B_APPLICATION_1
@ VS1053B_RECORD_FORMAT_OGG
@ VS1053B_RECORD_FORMAT_WAV
@ VS1053B_CLOCK_MULTIPLIER_2P0_XTALI
@ VS1053B_CLOCK_MULTIPLIER_4P5_XTALI
uint8_t vs1053b_interface_spi_dat_init(void)
interface spi dat bus init
uint8_t vs1053b_interface_audio_deinit(void)
interface audio deinit
uint8_t vs1053b_interface_spi_dat_write_cmd(uint8_t *buf, uint16_t len)
interface spi dat bus write command
uint8_t vs1053b_interface_spi_cmd_write_address16(uint16_t reg, uint8_t *buf, uint16_t len)
interface spi cmd bus write
void vs1053b_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t vs1053b_interface_spi_cmd_deinit(void)
interface spi cmd bus deinit
void vs1053b_interface_timestamp_read(uint32_t *sec, uint32_t *us)
interface timestamp read
uint8_t vs1053b_interface_spi_cmd_read_address16(uint16_t reg, uint8_t *buf, uint16_t len)
interface spi cmd bus read
uint8_t vs1053b_interface_spi_dat_deinit(void)
interface spi dat bus deinit
void vs1053b_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t vs1053b_interface_spi_cmd_init(void)
interface spi cmd bus init
uint8_t vs1053b_interface_dreq_gpio_deinit(void)
interface dreq gpio deinit
uint8_t vs1053b_interface_dreq_gpio_init(void)
interface dreq gpio init
uint8_t vs1053b_interface_audio_init(uint8_t type, char *name, uint32_t *size)
interface audio init
uint8_t vs1053b_interface_dreq_gpio_read(uint8_t *data)
interface dreq gpio read
uint8_t vs1053b_interface_reset_gpio_write(uint8_t data)
interface reset gpio write
uint8_t vs1053b_interface_reset_gpio_init(void)
interface reset gpio init
uint8_t vs1053b_interface_reset_gpio_deinit(void)
interface reset gpio deinit
uint8_t vs1053b_interface_audio_write(uint32_t addr, uint16_t size, uint8_t *buffer)
interface audio write
uint8_t vs1053b_interface_audio_read(uint32_t addr, uint16_t size, uint8_t *buffer)
interface audio read
uint8_t vs1053b_record_test(char *path, uint32_t second)
record test
uint32_t driver_version
char manufacturer_name[32]