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:
Osamu Nakamura
Date:
Fri Apr 21 21:22:51 2017 +0900
Revision:
4:c7cba8933302
Parent:
3:ed025cdb164d
Introduced mbed OS 5 instead of mbed OS 2 (Classic)

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