This sample will play a ".wav" file of the USB root folder. Only RIFF format, 48kHz, 16bit, 2ch.

Dependencies:   USBHostDac USBHost_custom_Addiso

Fork of USBHostDac_example by GR-PEACH_producer_meeting

Isochronous transfer sample for GR-PEACH. This sample will play a ".wav" file of the USB root folder. Only RIFF format, 48kHz, 16bit, 2ch.

/media/uploads/dkato/usbdacsample.png
The default setting of serial communication (baud rate etc.) in mbed is shown the following link.
Please refer to the link and change the settings of your PC terminal software.
The default value of baud rate in mbed is 9600, and this application uses baud rate 9600.
https://developer.mbed.org/teams/Renesas/wiki/GR-PEACH-Getting-Started#install-the-usb-serial-communication

Committer:
dkato
Date:
Fri Jun 26 08:00:14 2015 +0000
Revision:
2:4611f39d677b
Parent:
1:82fe51d45902
Child:
3:ed025cdb164d
modify buffer number

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:39320363f99f 1 #include "mbed.h"
dkato 0:39320363f99f 2 #include "USBHostDac.h"
dkato 0:39320363f99f 3 #include "USBHostMSD.h"
dkato 1:82fe51d45902 4 #include "dec_wav.h"
dkato 0:39320363f99f 5
dkato 1:82fe51d45902 6 #if defined(TARGET_RZ_A1H)
dkato 1:82fe51d45902 7 #include "usb_host_setting.h"
dkato 1:82fe51d45902 8 #else
dkato 1:82fe51d45902 9 #define USB_HOST_CH 0
dkato 1:82fe51d45902 10 #endif
dkato 1:82fe51d45902 11
dkato 1:82fe51d45902 12 #if (USB_HOST_CH == 1) //Audio Shield USB1
dkato 1:82fe51d45902 13 DigitalOut usb1en(P3_8);
dkato 1:82fe51d45902 14 #endif
dkato 0:39320363f99f 15 DigitalIn button(USER_BUTTON0);
dkato 0:39320363f99f 16
dkato 1:82fe51d45902 17 #define AUDIO_WRITE_BUFF_SIZE (4096)
dkato 1:82fe51d45902 18 #define AUDIO_WRITE_BUFF_NUM (9)
dkato 0:39320363f99f 19 #define FILE_NAME_LEN (64)
dkato 1:82fe51d45902 20 #define TEXT_SIZE (64 + 1) //null-terminated
dkato 1:82fe51d45902 21 #define FLD_PATH "/usb/"
dkato 0:39320363f99f 22
dkato 1:82fe51d45902 23 static uint8_t audio_write_buff[AUDIO_WRITE_BUFF_NUM][AUDIO_WRITE_BUFF_SIZE];
dkato 1:82fe51d45902 24 //Tag buffer
dkato 1:82fe51d45902 25 static uint8_t title_buf[TEXT_SIZE];
dkato 1:82fe51d45902 26 static uint8_t artist_buf[TEXT_SIZE];
dkato 1:82fe51d45902 27 static uint8_t album_buf[TEXT_SIZE];
dkato 0:39320363f99f 28
dkato 1:82fe51d45902 29 int main() {
dkato 0:39320363f99f 30 FILE * fp = NULL;
dkato 0:39320363f99f 31 DIR * d = NULL;
dkato 1:82fe51d45902 32 char file_path[sizeof(FLD_PATH) + FILE_NAME_LEN];
dkato 1:82fe51d45902 33 int buff_index = 0;
dkato 1:82fe51d45902 34 size_t audio_data_size;
dkato 1:82fe51d45902 35 dec_wav wav_file;
dkato 1:82fe51d45902 36
dkato 1:82fe51d45902 37 #if (USB_HOST_CH == 1) //Audio Shield USB1
dkato 1:82fe51d45902 38 //Audio Shield USB1 enable
dkato 1:82fe51d45902 39 usb1en = 1; //Outputs high level
dkato 1:82fe51d45902 40 Thread::wait(5);
dkato 1:82fe51d45902 41 usb1en = 0; //Outputs low level
dkato 1:82fe51d45902 42 #endif
dkato 0:39320363f99f 43
dkato 0:39320363f99f 44 USBHostMSD msd("usb");
dkato 1:82fe51d45902 45 USBHostDac usbdac;
dkato 0:39320363f99f 46
dkato 0:39320363f99f 47 while(1) {
dkato 0:39320363f99f 48 // try to connect a MSD device
dkato 0:39320363f99f 49 while(!msd.connect()) {
dkato 0:39320363f99f 50 Thread::wait(500);
dkato 0:39320363f99f 51 }
dkato 0:39320363f99f 52
dkato 0:39320363f99f 53 // in a loop, append a file
dkato 0:39320363f99f 54 // if the device is disconnected, we try to connect it again
dkato 0:39320363f99f 55 while(1) {
dkato 0:39320363f99f 56 // if device disconnected, try to connect again
dkato 0:39320363f99f 57 if (!msd.connected()) {
dkato 0:39320363f99f 58 break;
dkato 0:39320363f99f 59 }
dkato 0:39320363f99f 60 if (fp == NULL) {
dkato 0:39320363f99f 61 // file search
dkato 0:39320363f99f 62 if (d == NULL) {
dkato 1:82fe51d45902 63 d = opendir(FLD_PATH);
dkato 0:39320363f99f 64 }
dkato 0:39320363f99f 65 struct dirent * p;
dkato 0:39320363f99f 66 while ((p = readdir(d)) != NULL) {
dkato 0:39320363f99f 67 size_t len = strlen(p->d_name);
dkato 1:82fe51d45902 68 if ((len > 4) && (len < FILE_NAME_LEN)
dkato 1:82fe51d45902 69 && (memcmp(&p->d_name[len - 4], ".wav", 4) == 0)) {
dkato 1:82fe51d45902 70 strcpy(file_path, FLD_PATH);
dkato 0:39320363f99f 71 strcat(file_path, p->d_name);
dkato 0:39320363f99f 72 fp = fopen(file_path, "r");
dkato 1:82fe51d45902 73 if (wav_file.AnalyzeHeder(title_buf, artist_buf, album_buf,
dkato 1:82fe51d45902 74 TEXT_SIZE, fp) == false) {
dkato 1:82fe51d45902 75 fclose(fp);
dkato 1:82fe51d45902 76 fp = NULL;
dkato 1:82fe51d45902 77 } else if ((wav_file.GetChannel() != 2)
dkato 1:82fe51d45902 78 || (wav_file.GetBlockSize() != 16)
dkato 2:4611f39d677b 79 || (wav_file.GetSamplingRate() != 44100)) {
dkato 0:39320363f99f 80 fclose(fp);
dkato 0:39320363f99f 81 fp = NULL;
dkato 0:39320363f99f 82 } else {
dkato 1:82fe51d45902 83 printf("File :%s\n", p->d_name);
dkato 1:82fe51d45902 84 printf("Title :%s\n", title_buf);
dkato 1:82fe51d45902 85 printf("Artist:%s\n", artist_buf);
dkato 1:82fe51d45902 86 printf("Album :%s\n", album_buf);
dkato 1:82fe51d45902 87 printf("\n");
dkato 0:39320363f99f 88 break;
dkato 0:39320363f99f 89 }
dkato 0:39320363f99f 90 }
dkato 0:39320363f99f 91 }
dkato 0:39320363f99f 92 if (p == NULL) {
dkato 0:39320363f99f 93 closedir(d);
dkato 0:39320363f99f 94 d = NULL;
dkato 0:39320363f99f 95 }
dkato 0:39320363f99f 96 } else {
dkato 0:39320363f99f 97 // file read
dkato 1:82fe51d45902 98 uint8_t * p_buf = audio_write_buff[buff_index];
dkato 1:82fe51d45902 99
dkato 1:82fe51d45902 100 audio_data_size = wav_file.GetNextData(p_buf, AUDIO_WRITE_BUFF_SIZE);
dkato 1:82fe51d45902 101 if (audio_data_size > 0) {
dkato 1:82fe51d45902 102 bool flush = false;
dkato 1:82fe51d45902 103
dkato 1:82fe51d45902 104 // try to connect a usbdac device
dkato 1:82fe51d45902 105 while(!usbdac.connect()) {
dkato 1:82fe51d45902 106 Thread::wait(500);
dkato 1:82fe51d45902 107 }
dkato 1:82fe51d45902 108 if (audio_data_size < AUDIO_WRITE_BUFF_SIZE) {
dkato 1:82fe51d45902 109 flush = true;
dkato 1:82fe51d45902 110 }
dkato 1:82fe51d45902 111 usbdac.send(p_buf, audio_data_size, flush);
dkato 1:82fe51d45902 112 buff_index++;
dkato 1:82fe51d45902 113 if (buff_index >= AUDIO_WRITE_BUFF_NUM) {
dkato 1:82fe51d45902 114 buff_index = 0;
dkato 0:39320363f99f 115 }
dkato 0:39320363f99f 116 }
dkato 0:39320363f99f 117
dkato 0:39320363f99f 118 // file close
dkato 1:82fe51d45902 119 if ((audio_data_size < AUDIO_WRITE_BUFF_SIZE) || (button == 0)) {
dkato 0:39320363f99f 120 fclose(fp);
dkato 0:39320363f99f 121 fp = NULL;
dkato 0:39320363f99f 122 Thread::wait(500);
dkato 0:39320363f99f 123 }
dkato 0:39320363f99f 124 }
dkato 0:39320363f99f 125 }
dkato 0:39320363f99f 126
dkato 0:39320363f99f 127 // close check
dkato 0:39320363f99f 128 if (fp != NULL) {
dkato 0:39320363f99f 129 fclose(fp);
dkato 0:39320363f99f 130 fp = NULL;
dkato 0:39320363f99f 131 }
dkato 0:39320363f99f 132 if (d != NULL) {
dkato 0:39320363f99f 133 closedir(d);
dkato 0:39320363f99f 134 d = NULL;
dkato 0:39320363f99f 135 }
dkato 0:39320363f99f 136 }
dkato 0:39320363f99f 137 }