Add toolchain and mbtk source
Change-Id: Ie12546301367ea59240bf23d5e184ad7e36e40b3
diff --git a/mbtk/lynq_lib/src/lynq_audio.c b/mbtk/lynq_lib/src/lynq_audio.c
new file mode 100755
index 0000000..21640ac
--- /dev/null
+++ b/mbtk/lynq_lib/src/lynq_audio.c
@@ -0,0 +1,333 @@
+/**
+ * \file lynq_audio_api.c
+ * \brief A Documented file.
+ *
+ * Detailed description
+ * \Author: luojian
+ * \Version: 1.0.0
+ * \Date: 2022-10-27
+ */
+#include <fcntl.h>
+#include <stdint.h>
+#include <limits.h>
+#include <termios.h>
+#include <stdarg.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <sys/statfs.h>
+#include <sys/types.h>
+#include <string.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <time.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <signal.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <pthread.h>
+
+#include "mbtk_log.h"
+#include "mbtk_type.h"
+#include "mbtk_audio.h"
+
+static int rec_fd = 0;
+static int play_fd = 0;
+static mbtk_audio_handle play_hdl = NULL;
+static mbtk_audio_handle record_hdl = NULL;
+int volume_size = 0;
+pthread_t paly_thread;
+
+
+void dtmf_cb(char dtmf)
+{
+ printf("%s:%c\n", __FUNCTION__, dtmf);
+}
+
+void audio_volume_cb(int volume)
+{
+ volume_size = volume;
+ printf("%s:%d\n", __FUNCTION__, volume);
+}
+
+int lynq_memscpy
+(
+ void *dst,
+ int dst_size,
+ const void *src,
+ int src_size
+)
+{
+ if(dst_size == 0 || src_size == 0 || dst == NULL || src == NULL)
+ {
+ return 0;
+ }
+ else
+ {
+ return memcpy( dst, src,src_size);
+ }
+} /* dsatutil_free_memory() */
+
+static int lynq_get_path_name ( const char* path_name,char* path )
+{
+ int i=0;
+ int last = -1;
+ int len = strlen ( path_name );
+ if ( len > 0 )
+ {
+ for ( i=len - 1; i >= 0; i-- )
+ {
+ if ( path_name[i] == '/' )
+ {
+ last = i;
+ break;
+ }
+ }
+ if ( i != -1 )
+ {
+ lynq_memscpy ( path, ( i + 1 ) * sizeof ( char ), path_name, ( i + 1 ) * sizeof ( char ) );
+ printf ( "mbtk_get_path %s", path );
+ return 0;
+ }
+ }
+ return -1;
+}
+
+int lynq_create_audio_dir(const char *dirname)
+{
+ DIR *p_dir;
+ int res = -1, i = 0;;
+ char str[512];
+ strncpy(str, dirname, 512);
+ int len=strlen(str);
+
+ if(NULL == (p_dir = opendir((const char *)dirname)))
+ {
+ for(i=0; i<len; i++ )
+ {
+ if( str[i]=='/' )
+ {
+ str[i] = '\0';
+ if( access(str,0)!=0 )
+ {
+ if(mkdir(dirname, 0777) == 0)
+ {
+ res = 0;
+ }
+ else
+ {
+ fprintf(stderr, "create audio dir error \n");
+ res = -1;
+ }
+ }
+ str[i]='/';
+ }
+ }
+ if( len>0 && access(str,0)!=0 )
+ {
+ if(mkdir(dirname, 0777) == 0)
+ {
+ res = 0;
+ }
+ else
+ {
+ fprintf(stderr, "create audio dir error \n");
+ res = -1;
+ }
+ }
+ }
+ else
+ {
+ closedir(p_dir);
+ res = 0;
+ }
+ return res;
+}
+
+void lynq_record_cb_func(int cb_result, char* databuf, unsigned int len)
+{
+ int rc;
+ // printf("lynq_record_cb_func() len:%d, rec_fd:%d\n", len, rec_fd);
+ if(NULL == databuf)
+ {
+ printf("NULL == databuf\n");
+ }
+
+ if(NULL != databuf && len > 0 && rec_fd > 0)
+ {
+ //for debug:save into file
+ rc = write(rec_fd, databuf, len);
+ if (rc < 0) {
+ printf("%s: error writing to file!\n", __FUNCTION__);
+ } else if (rc < len) {
+ printf("%s: wrote less the buffer size!\n", __FUNCTION__);
+ }
+ }
+}
+
+int lynq_media_rec_audio(const char *path)
+{
+ int ret = 0;
+ char audio_dir[50] ={0};
+ char audio_wav[10] = {0};
+ lynq_get_path_name(path, audio_dir);
+ printf("path:%s, audio_dir:%s\n", path, audio_dir);
+
+ record_hdl = mbtk_audio_open(MBTK_AUTIO_TYPE_IN, 1, 8000, NULL);
+ if (record_hdl == 0)
+ {
+ printf("AudRecorder open error\n");
+ return -1;
+ }
+
+ lynq_create_audio_dir(audio_dir);
+ rec_fd = open(path, O_RDWR|O_CREAT|O_TRUNC, 0644);
+ if (rec_fd <= 0)
+ {
+ printf("file open error\n");
+ goto err;
+ }
+
+ if(-1 == mbtk_audio_record(record_hdl, lynq_record_cb_func, NULL))
+ {
+ printf("file write error\n");
+ goto err;
+ }
+
+ return 0;
+// sleep(10);
+err:
+// Ql_AudRecorder_Close();
+ if(rec_fd > 0)
+ {
+ close(rec_fd);
+ rec_fd = 0;
+ }
+
+ return -1;
+}
+
+
+
+//停止录制音频文件
+void lynq_media_rec_stop_audio(void)
+{
+// sleep(10);
+ mbtk_audio_close(record_hdl);
+ if(rec_fd > 0)
+ {
+ close(rec_fd);
+ rec_fd = 0;
+ }
+ return 0;
+}
+
+//播放音频文件
+int lynq_media_play_audio_thread_handle(void *argv)
+{
+ char databuf[1024];
+ int size;
+
+ char *path = (char *)argv;
+ printf("lynq_media_play_audio() start \npath:%s\n",path);
+ LOGI("%s %d", __FUNCTION__, __LINE__);
+ play_hdl = mbtk_audio_open(MBTK_AUTIO_TYPE_OUT, 1, 8000, NULL);
+ if(NULL == play_hdl)
+ printf("mbtk_audio_open fail\n");
+
+ play_fd = open(path, O_RDWR);
+ if (play_fd <= 0)
+ {
+ printf("file open error\n");
+ goto err;
+ }
+ memset(databuf, 0, sizeof(databuf));
+ while(0 < (size = read(play_fd, databuf, sizeof(databuf))))
+ {
+ if(-1 == mbtk_audio_play_stream(play_hdl, databuf, size))
+ break;
+ }
+ printf("aplay Stream end \n");
+
+err:
+ if(play_fd > 0)
+ {
+ close(play_fd);
+ play_fd = 0;
+ }
+
+ pthread_exit(&paly_thread);
+ mbtk_audio_close(play_hdl);
+ return 0;
+}
+
+//创建线程播放音频文件
+int lynq_media_play_audio(const char *path)
+{
+ int ret = pthread_create(&paly_thread, NULL, lynq_media_play_audio_thread_handle, (void *)path);
+ if (ret != 0) {
+ printf("create thread failed!\n");
+ return -1;
+ }
+
+ pthread_detach(paly_thread);
+ return 0;
+}
+
+
+//停止播放音频文件
+void lynq_media_stop_audio(void)
+{
+ printf("lynq_media_stop_audio()----\n");
+ if(play_fd > 0)
+ {
+ int ret = pthread_cancel(paly_thread);
+ if (ret != 0) {
+ printf("cancle paly_thread fail\n");
+ return ;
+ }
+ close(play_fd);
+ play_fd = 0;
+ }
+ mbtk_audio_close(play_hdl);
+}
+
+
+int lynq_audio_ubus_client_init(mbtk_audio_client_handle_type *ph_audio, mbtk_dtmf_cb cb)
+{
+ if(rec_fd > 0 || play_fd > 0)
+ {
+ printf("rec or play need close\n");
+ return -1;
+ }
+ return mbtk_audio_ubus_client_init(ph_audio, cb);
+}
+
+int lynq_audio_ubus_client_deinit(mbtk_audio_client_handle_type h_audio)
+{
+ if(rec_fd > 0 || play_fd > 0)
+ {
+ printf("rec or play need close\n");
+ return -1;
+ }
+ return mbtk_audio_ubus_client_deinit(h_audio);
+}
+
+
+int lynq_get_spk_volume(int * volume)
+{
+ mbtk_audio_ubus_volume_get(audio_volume_cb);
+ *volume = volume_size;
+ return 0;
+}
+
+
+int lynq_set_spk_volume(const int volume)
+{
+ mbtk_audio_ubus_volume_set(volume);
+ return 0;
+}
+
+
+
+