[Audio_test]修复Ql_AudPlayer_PlayFrmFile播放完成回调方法不生效的问题

1.修复Ql_AudPlayer_PlayFrmFile播放完成回调方法不生效的问题
2.修复write操作后返回值为-1报错的问题

Change-Id: I2b9695653301e4bbe6f805a359c47c0ce77d1a9c
diff --git a/mbtk/mbtk_lib/src/mbtk_audio_alsa.c b/mbtk/mbtk_lib/src/mbtk_audio_alsa.c
index 90015b4..83d2585 100755
--- a/mbtk/mbtk_lib/src/mbtk_audio_alsa.c
+++ b/mbtk/mbtk_lib/src/mbtk_audio_alsa.c
@@ -48,7 +48,15 @@
 #define ID_DATA 0x61746164
 #define FORMAT_PCM 1
 
-
+typedef enum {
+	AUD_PLAYER_ERROR = -1,
+	AUD_PLAYER_START = 0,
+	AUD_PLAYER_PAUSE,
+	AUD_PLAYER_RESUME,
+	AUD_PLAYER_NODATA,  //Buff no data and play tread will sleep
+    AUD_PLAYER_LESSDATA, //Buff has less data
+	AUD_PLAYER_FINISHED,
+} Enum_AudPlayer_State;
 
 struct mopen_audio_t
 {
@@ -71,6 +79,12 @@
     void *cb_data;
 };
 
+struct player_cb_s
+{
+    mbtk_audio_player_cb_func _cb;
+    void *cb_data;
+};
+
 static struct mopen_audio_t *internal_hdl = NULL;
 
 
@@ -611,7 +625,7 @@
 }
 
 
-int mbtk_audio_play_file(void *dev_hdl, int file_fd, int offset)
+int mbtk_audio_play_file(void *dev_hdl, int file_fd, int offset, mbtk_audio_player_cb_func cb_func)
 {
     unsigned bufsize = 0;
     char *data = NULL;
@@ -621,15 +635,17 @@
     int ret;
 
     struct mopen_audio_t *pcxt = (struct mopen_audio_t *)dev_hdl;
-
+    struct player_cb_s *_usrData = NULL;
     if (NULL == dev_hdl || NULL == internal_hdl)
         return -1;
 
     if(AUDIO_RUNNING == pcxt->state)
         return -2;
 
-    file_data_sz = mbtk_wav_pcm16Le_check(file_fd);
-
+    // file_data_sz = mbtk_wav_pcm16Le_check(file_fd);
+    _usrData = malloc(sizeof(struct player_cb_s));
+    _usrData->_cb = cb_func;
+    _usrData->cb_data = NULL;
     bufsize = pcxt->pcm_packet_size;
     data = calloc(1, bufsize);
     if (!data) {
@@ -663,23 +679,28 @@
         while(AUDIO_PAUSE == pcxt->state)
         {
             usleep(80000);
+            _usrData->_cb((int)pcxt, AUD_PLAYER_PAUSE);
         }
 
         if ((0 == first_set || AUDIO_RESUME == pcxt->state))
         {
             first_set = 1;
             mbtk_audio_set_status(dev_hdl, AUDIO_RUNNING);
+            _usrData->_cb((int)pcxt, AUD_PLAYER_RESUME);
         }
 
-        ret = pcxt->stream_out->write(pcxt->stream_out, data, res);
+        ret = pcxt->stream_out->write(pcxt->stream_out, data, bufsize);
         if (ret < 0) {
             printf("%s: error writing (child).\n", __FUNCTION__);
+            _usrData->_cb((int)pcxt, AUD_PLAYER_ERROR);
             break;
         } else if (ret < (signed int)pcxt->pcm_packet_size) {
             printf("%s: wrote less than buffer size, rc=%d.\n", __FUNCTION__, ret);
+            _usrData->_cb((int)pcxt, AUD_PLAYER_LESSDATA);
             break;
         }
     }
+    _usrData->_cb((int)pcxt, AUD_PLAYER_FINISHED);
 
     printf("file_data_sz :%d - all_size: %d\n", file_data_sz, all_size);
     mbtk_audio_set_status(dev_hdl, AUDIO_OPEN);