#include "app_config.h" #include "system/timer.h" #include "device/ioctl_cmds.h" #include "fs/fs.h" #include "system/init.h" #if TCFG_HOST_AUDIO_ENABLE #include "usb/host/usb_host.h" #include "usb_ctrl_transfer.h" #include "usb_bulk_transfer.h" #include "audio.h" #include "usb_config.h" #define LOG_TAG_CONST USB #define LOG_TAG "[AUDIO]" #define LOG_ERROR_ENABLE #define LOG_DEBUG_ENABLE #define LOG_INFO_ENABLE /* #define LOG_DUMP_ENABLE */ #define LOG_CLI_ENABLE #include "debug.h" #define TEST_FILE_ENABLE (0) //从sd卡读数据; 录制数据至sd卡 #if (TEST_FILE_ENABLE) static FILE *play_file = NULL; int usb_audio_record_get_buf(const usb_dev usb_id, void *ptr, u32 len, u8 channel, u32 sample_rate) { int ret = 0; if (ptr == NULL && len == 0) { //err if (play_file) { fclose(play_file); play_file = NULL; return 0; } } if (!play_file) { play_file = fopen(CONFIG_ROOT_PATH"raw.pcm", "r"); //单声道 /* play_file = fopen("storage/sd0/C/raw2.pcm", "r"); //双声道 */ if (!play_file) { log_e("fopen play file faild!\n"); return -1; } } //读sd卡数据到播放缓存中 ret = fread(ptr, len, 1, play_file); if (ret != len) { log_e(" file read buf err %d\n", ret); fclose(play_file); play_file = NULL; return -1; } return len; } static FILE *record_file = NULL; int usb_audio_play_put_buf(const usb_dev usb_id, void *ptr, u32 len, u8 channel, u32 sample_rate) { #if (TEST_FILE_ENABLE) int ret = 0; static u32 cnt = 0; if (!record_file) { record_file = fopen(CONFIG_ROOT_PATH"record01.pcm", "w+"); cnt = 0; if (!record_file) { log_e("fopen play file faild!\n"); return -1; } } putchar('W'); ret = fwrite(ptr, len, 1, record_file); if (ret != len) { log_e(" file write buf err %d\n", ret); fclose(record_file); record_file = NULL; return -1; } //test if (cnt++ >= 800) { cnt = 0; log_info("stop record....\n"); fclose(record_file); record_file = NULL; } #endif return len; } static int usb_host_audio_test_init(void) { usb_host_audio_init(0, usb_audio_play_put_buf, usb_audio_record_get_buf); #if USB_MAX_HW_NUM > 1 usb_host_audio_init(1, usb_audio_play_put_buf, usb_audio_record_get_buf); #endif return 0; } late_initcall(usb_host_audio_test_init); #else //主机收到从机通过usb发过来的数据 //ptr:usb数据指针 //len:读取的数据长度 int usb_audio_play_put_buf(const usb_dev usb_id, void *ptr, u32 len, u8 channel, u32 sample_rate) { return len; } //主机读取数据后通过usb发给从机 //ptr:usb数据指针 //len:发送的数据长度 int usb_audio_record_get_buf(const usb_dev usb_id, void *ptr, u32 len, u8 channel, u32 sample_rate) { return len; } #endif #endif