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