The sound input from a microphone is output from a speaker. Check device : BSHSAU01BK
Dependencies: USBHostDac USBHost_custom_Addiso
main.cpp@0:48a46b0d0cdd, 2015-09-30 (annotated)
- Committer:
- dkato
- Date:
- Wed Sep 30 07:18:44 2015 +0000
- Revision:
- 0:48a46b0d0cdd
first commit
Who changed what in which revision?
User | Revision | Line number | New 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 | } |