4 #include "task_fileio.h"
13 static FILINFO filinfo;
15 static int readfunc(void *buf, int siz)
18 NTLEVT_START(NTLUSR_TRACK_FILEIO, NTLUSR_EVENT_FILEIO_READING);
19 pf_read(buf, siz, &cnt);
20 NTLEVT_END(NTLUSR_TRACK_FILEIO, NTLUSR_EVENT_FILEIO_READING);
24 static int play(const char *filename)
26 FRESULT r = pf_open(filename);
30 static int vol_prev = 0, vol_curr = 0;
34 ipc_menu_set_filename(filinfo.fname);
35 ipc_menu_set_location(fatfs.fptr * 100 / fatfs.fsize);
37 while (ipc_audio_play(readfunc)) {
38 NTLEVT_START(NTLUSR_TRACK_FILEIO, NTLUSR_EVENT_FILEIO_OTHERS);
39 switch ((divcnt++) % 4) {
42 *
\e$BAaAw$j$d4,$-La$7
\e(B
44 menu_get_audio_control(&control);
47 case AUDIO_CONTROL_FWD:
48 if (fatfs.fptr + 8192 < fatfs.fsize) {
49 pf_lseek(fatfs.fptr + 8192);
53 case AUDIO_CONTROL_REW:
54 if (16384 < fatfs.fptr) {
55 pf_lseek(fatfs.fptr - 16384);
64 *
\e$B%*!<%G%#%*>pJs$N<hF@
\e(B
66 menu_get_audio_info(&vol_curr);
67 if (vol_curr != vol_prev) {
68 ipc_audio_volume(vol_curr, vol_curr);
76 ipc_menu_set_location(fatfs.fptr * 100 / fatfs.fsize);
79 NTLEVT_END(NTLUSR_TRACK_FILEIO, NTLUSR_EVENT_FILEIO_OTHERS);
84 static int is_music_file(const char *filename)
86 int len = strlen(filename);
90 if (strcmp(filename + len - 4, ".MP3") == 0) {
93 if (strcmp(filename + len - 4, ".WAV") == 0) {
99 int task_fileio(int argc, char *argv[])
102 ipc_menu_set_filename("Mounting...");
103 if (pf_mount(&fatfs)) {
107 ipc_menu_set_filename("Directory");
108 if (pf_opendir(&dir, "")) {
111 while (!pf_readdir(&dir, &filinfo) && filinfo.fname[0]) {
112 ipc_menu_set_filename(filinfo.fname);
113 if (!(filinfo.fattrib & (AM_DIR | AM_HID))) {
114 if (is_music_file(filinfo.fname)) {
115 if (play(filinfo.fname)) {