The sound input from a microphone is output from a speaker. Check device : BSHSAU01BK

Dependencies:   USBHostDac USBHost_custom_Addiso

Committer:
dkato
Date:
Wed Sep 30 07:18:44 2015 +0000
Revision:
0:48a46b0d0cdd
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:48a46b0d0cdd 1 #include "mbed.h"
dkato 0:48a46b0d0cdd 2 #include "USBHostDac.h"
dkato 0:48a46b0d0cdd 3
dkato 0:48a46b0d0cdd 4 #if defined(TARGET_RZ_A1H)
dkato 0:48a46b0d0cdd 5 #include "usb_host_setting.h"
dkato 0:48a46b0d0cdd 6 #else
dkato 0:48a46b0d0cdd 7 #define USB_HOST_CH 0
dkato 0:48a46b0d0cdd 8 #endif
dkato 0:48a46b0d0cdd 9
dkato 0:48a46b0d0cdd 10 #if (USB_HOST_CH == 1) //Audio Shield USB1
dkato 0:48a46b0d0cdd 11 DigitalOut usb1en(P3_8);
dkato 0:48a46b0d0cdd 12 #endif
dkato 0:48a46b0d0cdd 13 DigitalIn button(USER_BUTTON0);
dkato 0:48a46b0d0cdd 14
dkato 0:48a46b0d0cdd 15 #define AUDIO_READ_BUFF_SIZE (2048)
dkato 0:48a46b0d0cdd 16 #define AUDIO_WRITE_BUFF_SIZE (AUDIO_READ_BUFF_SIZE * 2)
dkato 0:48a46b0d0cdd 17
dkato 0:48a46b0d0cdd 18 #define AUDIO_WRITE_BUFF_NUM (2)
dkato 0:48a46b0d0cdd 19
dkato 0:48a46b0d0cdd 20 static uint16_t audio_read_buff[AUDIO_READ_BUFF_SIZE/2];
dkato 0:48a46b0d0cdd 21 static uint16_t audio_write_buff[AUDIO_WRITE_BUFF_NUM][AUDIO_WRITE_BUFF_SIZE/2];
dkato 0:48a46b0d0cdd 22
dkato 0:48a46b0d0cdd 23 Semaphore sem(0);
dkato 0:48a46b0d0cdd 24
dkato 0:48a46b0d0cdd 25 void test_task(void const* arg) {
dkato 0:48a46b0d0cdd 26 int buf_index = 0;
dkato 0:48a46b0d0cdd 27 USBHostDac * p_usbdac = (USBHostDac *)arg;
dkato 0:48a46b0d0cdd 28
dkato 0:48a46b0d0cdd 29 while (1) {
dkato 0:48a46b0d0cdd 30 sem.wait();
dkato 0:48a46b0d0cdd 31
dkato 0:48a46b0d0cdd 32 p_usbdac->send((uint8_t *)audio_write_buff[buf_index], AUDIO_WRITE_BUFF_SIZE, false);
dkato 0:48a46b0d0cdd 33
dkato 0:48a46b0d0cdd 34 buf_index++;
dkato 0:48a46b0d0cdd 35 if (buf_index >= AUDIO_WRITE_BUFF_NUM) {
dkato 0:48a46b0d0cdd 36 buf_index = 0;
dkato 0:48a46b0d0cdd 37 }
dkato 0:48a46b0d0cdd 38 }
dkato 0:48a46b0d0cdd 39 }
dkato 0:48a46b0d0cdd 40
dkato 0:48a46b0d0cdd 41 int main() {
dkato 0:48a46b0d0cdd 42 int buf_index = 0;
dkato 0:48a46b0d0cdd 43
dkato 0:48a46b0d0cdd 44 #if (USB_HOST_CH == 1) //Audio Shield USB1
dkato 0:48a46b0d0cdd 45 //Audio Shield USB1 enable
dkato 0:48a46b0d0cdd 46 usb1en = 1; //Outputs high level
dkato 0:48a46b0d0cdd 47 Thread::wait(5);
dkato 0:48a46b0d0cdd 48 usb1en = 0; //Outputs low level
dkato 0:48a46b0d0cdd 49 #endif
dkato 0:48a46b0d0cdd 50
dkato 0:48a46b0d0cdd 51 USBHostDac usbdac;
dkato 0:48a46b0d0cdd 52 Thread TestTask(test_task, &usbdac, osPriorityNormal, 1024 * 8);
dkato 0:48a46b0d0cdd 53
dkato 0:48a46b0d0cdd 54 while(1) {
dkato 0:48a46b0d0cdd 55 // try to connect a usbdac device
dkato 0:48a46b0d0cdd 56 while(!usbdac.connect()) {
dkato 0:48a46b0d0cdd 57 Thread::wait(500);
dkato 0:48a46b0d0cdd 58 }
dkato 0:48a46b0d0cdd 59
dkato 0:48a46b0d0cdd 60 while (1) {
dkato 0:48a46b0d0cdd 61 // if device disconnected, try to connect again
dkato 0:48a46b0d0cdd 62 if (!usbdac.connected()) {
dkato 0:48a46b0d0cdd 63 break;
dkato 0:48a46b0d0cdd 64 }
dkato 0:48a46b0d0cdd 65 int ret = usbdac.receive((uint8_t *)audio_read_buff, AUDIO_READ_BUFF_SIZE);
dkato 0:48a46b0d0cdd 66 if (ret > 0) {
dkato 0:48a46b0d0cdd 67 //1ch -> 2ch
dkato 0:48a46b0d0cdd 68 uint16_t * p_write = audio_write_buff[buf_index];
dkato 0:48a46b0d0cdd 69 uint16_t * p_read = audio_read_buff;
dkato 0:48a46b0d0cdd 70
dkato 0:48a46b0d0cdd 71 for (int cnt = 0; cnt < (ret / 2); cnt++) {
dkato 0:48a46b0d0cdd 72 *p_write = *p_read;
dkato 0:48a46b0d0cdd 73 p_write++;
dkato 0:48a46b0d0cdd 74 *p_write = *p_read;
dkato 0:48a46b0d0cdd 75 p_write++;
dkato 0:48a46b0d0cdd 76 p_read++;
dkato 0:48a46b0d0cdd 77 }
dkato 0:48a46b0d0cdd 78
dkato 0:48a46b0d0cdd 79 sem.release();
dkato 0:48a46b0d0cdd 80
dkato 0:48a46b0d0cdd 81 buf_index++;
dkato 0:48a46b0d0cdd 82 if (buf_index >= AUDIO_WRITE_BUFF_NUM) {
dkato 0:48a46b0d0cdd 83 buf_index = 0;
dkato 0:48a46b0d0cdd 84 }
dkato 0:48a46b0d0cdd 85 }
dkato 0:48a46b0d0cdd 86 }
dkato 0:48a46b0d0cdd 87 }
dkato 0:48a46b0d0cdd 88 }