s_ai_talk_item_info.msg_data_ptr = NULL;
s_ai_talk_item_info.msg_data_size = 0;
}
+
+ if(NULL != s_ai_talk_item_info.msg_voice_data_ptr)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ lv_mem_free(s_ai_talk_item_info.msg_voice_data_ptr);
+ s_ai_talk_item_info.msg_voice_data_ptr = NULL;
+ s_ai_talk_item_info.msg_voice_data_size = 0;
+ }
}
uint8_t mmi_ai_talk_info_count_get(void)
return msg_count;
}
-uint8_t mmi_ai_talk_info_index_item_msg_from_get(uint8_t msg_index)
-{
- // 0-slef; 1-other
- uint8_t msg_from = 0;
-
- //msg_from = s_ai_talk_info->msg_item[msg_index].msg_from;
-
- return msg_from;
-}
-
-void mmi_ai_talk_info_index_item_get(uint8_t msg_index, mmi_ai_talk_msg_item_info_t ** msg_item)
-{
- //*msg_item = &(s_ai_talk_info->msg_item[msg_index]);
-}
-
-void mmi_ai_talk_info_index_item_delete(uint8_t msg_index)
-{
-#if 0
- if(msg_index >= s_ai_talk_info->msg_count)
- return;
-
- uint8_t i = 0;
- uint32_t msg_item_info_size = sizeof(mmi_ai_talk_msg_item_info_t);
-
- lv_fs_remove(s_ai_talk_info->msg_item[msg_index].msg_data_full_file_name);
- _lv_memset_00(&(s_ai_talk_info->msg_item[msg_index]), msg_item_info_size);
-
- if(msg_index < s_ai_talk_info->msg_count - 1)
- {
- for(i = msg_index; i < s_ai_talk_info->msg_count; i++)
- {
- _lv_memcpy(&(s_ai_talk_info->msg_item[i]), &(s_ai_talk_info->msg_item[i + 1]), msg_item_info_size);
- }
- }
- s_ai_talk_info->msg_count--;
-#endif
-}
-
-void mmi_ai_talk_info_all_item_delete(void)
-{
-#if 0
- uint8_t i = 0;
- uint32_t msg_item_info_size = sizeof(mmi_ai_talk_msg_item_info_t);
-
- for(i = 0; i < s_ai_talk_info->msg_count; i++)
- {
- lv_fs_remove(s_ai_talk_info->msg_item[i].msg_data_full_file_name);
- _lv_memset_00(&(s_ai_talk_info->msg_item[i]), msg_item_info_size);
- }
- s_ai_talk_info->msg_count = 0;
-#endif
-}
-
-void mmi_ai_talk_info_new_item_add(mmi_ai_talk_msg_item_info_t * msg_item)
-{
-#if 0
- uint32_t msg_item_info_size = sizeof(mmi_ai_talk_msg_item_info_t);
-
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- if(MMI_AI_TALK_MSG_NUM_MAX <= s_ai_talk_info->msg_count)
- {
- lv_fs_remove(s_ai_talk_info->msg_item[0].msg_data_full_file_name);
- //_lv_memset_00(&(s_ai_talk_info->msg_item[0]), msg_item_info_size);
-
- uint8_t i = 0;
- for(i = 0; i < MMI_AI_TALK_MSG_NUM_MAX - 1; i++)
- {
- _lv_memcpy(&(s_ai_talk_info->msg_item[i]), &(s_ai_talk_info->msg_item[i + 1]), msg_item_info_size);
- }
- s_ai_talk_info->msg_count--;
- }
-
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- s_ai_talk_info->msg_count++;
- _lv_memcpy(&(s_ai_talk_info->msg_item[s_ai_talk_info->msg_count - 1]), msg_item, msg_item_info_size);
-#endif
-}
-
void * mmi_ai_talk_actId_ext_get(lv_watch_Activity_Id_t actId)
{
lv_obj_t * activity_obj = lv_watch_get_activity_obj(actId);
// close tcp
mmi_ai_talk_tcp_disconnect_msg(NULL);
+
+ // free resource
+ mmi_ai_talk_data_receive_resource_clean();
lv_watch_png_cache_all_free();
return ;
printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- //if(NULL != ext->delete_timer_id)
- //{
- // Hal_Timer_Stop(ext->delete_timer_id);
- // ext->delete_timer_id = NULL;
- //}
- //mmi_ai_talk_voice_item_playing_stop(ext);
mmi_ai_talk_list_msg_item_style_reset(ext);
// free buffer
}
}
-bool mmi_ai_talk_receive_from_server(char * data_buff, int data_buff_len, nv_wechat_msg_type_e type)
+bool mmi_ai_talk_model_answer_result_display(char * data_buff, int data_buff_len)
{
if(NULL == data_buff || 0 == data_buff_len)
{
printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
return false;
}
- if(WECHAT_MSG_TYPE_MAX <= type)
- {
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- return false;
- }
-
-#if 1
if(false == mmi_ai_talk_is_waiting_for_result())
{
printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
return false;
}
- mmi_ai_talk_sending_screen_task_stop();
- mmi_ai_talk_receive_item_info_clean();
- uint32_t file_size = 0;
- char * file_buf = NULL;
+ //mmi_ai_talk_sending_screen_task_stop();
- file_size = data_buff_len;
- file_buf = lv_mem_alloc(file_size + 1);
- if(NULL == file_buf)
+ if(NULL != s_ai_talk_item_info.msg_data_ptr)
+ {
+ lv_mem_free(s_ai_talk_item_info.msg_data_ptr);
+ s_ai_talk_item_info.msg_data_ptr = NULL;
+ }
+ s_ai_talk_item_info.msg_data_ptr = lv_mem_alloc(data_buff_len + 1);
+ if(NULL == s_ai_talk_item_info.msg_data_ptr)
{
printf("[@CHENG_DEBUG][%s][%d]: alloc memory fail\n", __FUNCTION__, __LINE__);
return false;
}
- _lv_memset_00(file_buf, file_size + 1);
- _lv_memcpy(file_buf, data_buff, file_size);
- s_ai_talk_item_info.msg_data_ptr = file_buf;
- s_ai_talk_item_info.msg_data_size = file_size;
- s_ai_talk_item_info.msg_type = type;
+ _lv_memset_00(s_ai_talk_item_info.msg_data_ptr, data_buff_len + 1);
+ _lv_memcpy(s_ai_talk_item_info.msg_data_ptr, data_buff, data_buff_len);
+ s_ai_talk_item_info.msg_data_size = data_buff_len;
printf("[@CHENG_DEBUG][%s][%d]: msg_data_size=%d,msg_data_ptr=0x%x\n", __FUNCTION__, __LINE__, s_ai_talk_item_info.msg_data_size, s_ai_talk_item_info.msg_data_ptr);
- // ui
- mmi_watch_wake_up();
- mmi_ui_msg_action_ai_talk_incoming();
-
return true;
+}
-#else
- mmi_ai_talk_msg_item_info_t mmi_ai_talk_item_info = {0};
+#define BEI_KE_DEBUG_FILE "C:/bei_ke_debug.txt"
+bool mmi_ai_talk_debug_info_write_to_file(char * path, char * info_buf, uint32_t info_size)
+{
+ lv_fs_file_t file_p;
+ lv_fs_res_t res;
+ uint32_t bytes_write = 0;
+
+ res = lv_fs_open(&file_p, path, LV_FS_MODE_WR | LV_FS_MODE_APPEND);
+ if(LV_FS_RES_OK != res)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
+ lv_fs_close(&file_p);
+ return false;
+ }
+
hal_rtc_t cur_time = {0};
- char * t_file_ext[WECHAT_MSG_TYPE_MAX] = {AI_TALK_AUDIO_FORMAT_STR, "txt", "png", "png"}; // match nv_wechat_msg_type_e
+ char str_time[24] = {0};
Hal_Rtc_Gettime(&cur_time);
- _lv_memcpy(&(s_ai_talk_item_info.msg_time), &cur_time, sizeof(hal_rtc_t));
+ sprintf(str_time, "\n[%04d%02d%02d_%02d%02d%02d]",
+ cur_time.tm_year,
+ cur_time.tm_mon,
+ cur_time.tm_mday,
+ cur_time.tm_hour,
+ cur_time.tm_min,
+ cur_time.tm_sec);
+
+ //lv_fs_seek
+ res = lv_fs_write(&file_p, str_time, strlen(str_time), &bytes_write);
+ if(LV_FS_RES_OK != res)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
+ lv_fs_close(&file_p);
+ return false;
+ }
- s_ai_talk_item_info.msg_from = 1;
- s_ai_talk_item_info.unread_flag = 1;
- s_ai_talk_item_info.msg_type = type; // WECHAT_MSG_TYPE_VOICE;
- s_ai_talk_item_info.msg_data_size = data_buff_len;
- sprintf(s_ai_talk_item_info.msg_data_full_file_name, "C:/aitalk_r%04d%02d%02d_%02d%02d%02d.%s", /*WECHAT_MSG_DATA_FILE_PATH, */
- s_ai_talk_item_info.msg_time.tm_year,
- s_ai_talk_item_info.msg_time.tm_mon,
- s_ai_talk_item_info.msg_time.tm_mday,
- s_ai_talk_item_info.msg_time.tm_hour,
- s_ai_talk_item_info.msg_time.tm_min,
- s_ai_talk_item_info.msg_time.tm_sec,
- t_file_ext[type]);
+ res = lv_fs_write(&file_p, info_buf, info_size, &bytes_write);
+ lv_fs_close(&file_p);
+ if(LV_FS_RES_OK != res)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
+ return false;
+ }
+ printf("[@CHENG_DEBUG][%s][%d]: file_size=%d,write_size=%d\n", __FUNCTION__, __LINE__, info_size, bytes_write);
+
+ return true;
+}
+
+
+static void mmi_ai_talk_tts_info_result_play_over_cb(void * para)
+{
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(NULL != s_ai_talk_item_info.msg_voice_data_ptr)
+ {
+ lv_mem_free(s_ai_talk_item_info.msg_voice_data_ptr);
+ s_ai_talk_item_info.msg_voice_data_ptr = NULL;
+ }
+ s_ai_talk_item_info.msg_voice_data_size = 0;
+}
+
+bool mmi_ai_talk_tts_info_result_display(char * data_buff, int data_buff_len)
+{
+ uint32_t output_len = 0;
- if(false == mmi_ai_talk_item_info_write_to_file(s_ai_talk_item_info.msg_data_full_file_name, data_buff, data_buff_len))
+ uint32_t fs_total = 0;
+ uint32_t fs_free = 0;
+ lv_fs_free_space('C', &fs_total, &fs_free);
+ printf("[@CHENG_DEBUG][%s][%d]: space total = %dB, free = %dB\n", __FUNCTION__, __LINE__, fs_total, fs_free);
+
+ if(NULL == data_buff || 0 == data_buff_len)
{
printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
return false;
}
- lv_ai_talk_ext_t * ext = mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
- if(NULL != ext)
+ if(false == mmi_ai_talk_is_waiting_for_result())
{
- mmi_ai_talk_voice_item_playing_stop(ext);
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return false;
}
-
- mmi_ai_talk_info_new_item_add(&s_ai_talk_item_info);
+
+ mmi_ai_talk_sending_screen_task_stop();
// ui
- if(false == mmi_active_screen_is_prohibit_interrupted()
- && false == mmi_health_measure_state_is_ui_measure()
-// && false == mmi_ai_talk_voice_is_playing()
- && false == mmi_ai_talk_voice_is_recording()
- && false == mmi_ai_talk_item_is_sending()
- #ifdef __MMI_ZHSX_SUPPORT_DO_NOT_DISTURB__
- && false == mmi_watch_is_in_do_not_disturb_time()
- #endif
- )
+ mmi_watch_wake_up();
+ mmi_ui_msg_action_ai_talk_incoming();
+
+
+ if(NULL != s_ai_talk_item_info.msg_voice_data_ptr)
{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- mmi_watch_wake_up();
- mmi_ui_msg_action_ai_talk_incoming();
+ lv_mem_free(s_ai_talk_item_info.msg_voice_data_ptr);
+ s_ai_talk_item_info.msg_voice_data_ptr = NULL;
}
+ s_ai_talk_item_info.msg_voice_data_ptr = lv_mem_alloc(data_buff_len);
+ if(NULL == s_ai_talk_item_info.msg_voice_data_ptr)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ _lv_memset_00(s_ai_talk_item_info.msg_voice_data_ptr, data_buff_len);
+
+ if(0 != mbedtls_base64_decode(s_ai_talk_item_info.msg_voice_data_ptr, data_buff_len, &output_len, data_buff, data_buff_len))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: base64 decode error\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ s_ai_talk_item_info.msg_voice_data_size = output_len;
- return true;
+ printf("[@CHENG_DEBUG][%s][%d]: len1=%d,len2=%d\n", __FUNCTION__, __LINE__, data_buff_len, output_len);
+ //mmi_ai_talk_debug_info_write_to_file(BEI_KE_DEBUG_FILE, s_ai_talk_item_info.msg_voice_data_ptr, s_ai_talk_item_info.msg_voice_data_size);
+#if 1
+ char * info_buf = s_ai_talk_item_info.msg_voice_data_ptr;
+ uint32_t info_size = s_ai_talk_item_info.msg_voice_data_size;
+ {
+ lv_fs_file_t file_p;
+ lv_fs_res_t res;
+ uint32_t bytes_write = 0;
+
+ res = lv_fs_open(&file_p, "C:/bei_ke_debug.wav", LV_FS_MODE_WR | LV_FS_MODE_APPEND);
+ if(LV_FS_RES_OK != res)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
+ lv_fs_close(&file_p);
+ return false;
+ }
+
+ res = lv_fs_write(&file_p, info_buf, info_size, &bytes_write);
+ lv_fs_close(&file_p);
+ if(LV_FS_RES_OK != res)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
+ return false;
+ }
+ printf("[@CHENG_DEBUG][%s][%d]: file_size=%d,write_size=%d\n", __FUNCTION__, __LINE__, info_size, bytes_write);
+
+ return true;
+ }
#endif
+
+
+ Hal_Tone_Play_Onetime((uint32_t *)s_ai_talk_item_info.msg_voice_data_ptr,
+ s_ai_talk_item_info.msg_voice_data_size,
+ query_current_volume(),
+ mmi_ai_talk_tts_info_result_play_over_cb,
+ NULL);
+
+
+ return true;
}
bool mmi_ai_talk_send_to_server(void)
return false;
}
-#if 20
-
printf("[@CHENG_DEBUG][%s][%d]: size=%d, buf=0x%x\n", __FUNCTION__, __LINE__, ext->record_size, ext->record_buffer);
uint32_t file_size = ext->record_size - s_ai_talk_recording_sent_size;
lv_mem_free(file_buf);
s_ai_talk_recording_sent_size = 0;
-#else
-
-#if 10
- printf("[@CHENG_DEBUG][%s][%d]: size=%d, buf=0x%x\n", __FUNCTION__, __LINE__, ext->record_size, ext->record_buffer);
-
- uint32_t file_size = ext->record_size;
- char * file_buf = lv_mem_alloc(file_size + 1);
- if(NULL == file_buf || MMI_AI_TALK_DATA_WAV_HEAD_SIZE >= file_size)
- {
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_mem_free(ext->record_buffer);
- ext->record_buffer = NULL;
- ext->record_size = 0;
- return false;
- }
- _lv_memset_00(file_buf, file_size + 1);
- _lv_memcpy(file_buf, ext->record_buffer, file_size);
-
- lv_mem_free(ext->record_buffer);
- ext->record_buffer = NULL;
-
-#else
-
- lv_mem_free(ext->record_buffer);
- ext->record_buffer = NULL;
-
-
- lv_fs_file_t file_p;
- lv_fs_res_t res;
- uint32_t file_size = 0, bytes_read = 0;
- char * file_buf = NULL;
-
- res = lv_fs_open(&file_p, "C:/111.pcm", LV_FS_MODE_RD);
- if(LV_FS_RES_OK != res)
- {
- printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
- lv_fs_close(&file_p);
- return false;
- }
-
- lv_fs_size(&file_p, &file_size);
- file_buf = (char *)lv_mem_alloc(file_size + 1);
- _lv_memset_00(file_buf, file_size + 1);
- res = lv_fs_read(&file_p, file_buf, file_size, &bytes_read);
- lv_fs_close(&file_p);
- if(LV_FS_RES_OK != res)
- {
- printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
- lv_mem_free(file_buf);
- return false;
- }
- printf("[@CHENG_DEBUG][%s][%d]: %d,%d,%s\n", __FUNCTION__, __LINE__, file_size, bytes_read, file_buf);
-
-#endif
-
-
-
- if(true == mmi_ai_talk_item_info_write_to_file(s_ai_talk_item_info.msg_data_full_file_name, file_buf, file_size))
- {
- if(true == mmi_ai_talk_audio_data_send(file_buf, file_size))
- {
- s_ai_talk_item_info.msg_data_size = file_size;
- mmi_ai_talk_info_new_item_add(&s_ai_talk_item_info);
- result = true;
- }
- else
- {
- lv_fs_remove(s_ai_talk_item_info.msg_data_full_file_name);
- }
- }
-
- lv_mem_free(file_buf);
- _lv_memset_00(&s_ai_talk_item_info, sizeof(mmi_ai_talk_msg_item_info_t));
-#endif
-
return result;
}
return;
}
+ // free resource
+ mmi_ai_talk_data_receive_resource_clean();
+
mmi_ai_talk_list_set_slide_enable(&ext->old_ext, false); /*prevent to slide out while recording*/
mmi_ai_talk_recording_screen_create(NULL);
}
lv_style_reset(&(list_page_ext->style_label_len_other));
}
-void mmi_ai_talk_list_msg_item_time(char * time_str, hal_rtc_t * cur_time, hal_rtc_t * msg_time, hal_rtc_t * last_msg_time)
-{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-#if 0
- if(0 == last_msg_time->tm_year)
- {
- sprintf(time_str, "%d/%d/%d %02d:%02d", msg_time->tm_year, msg_time->tm_mon, msg_time->tm_mday,
- msg_time->tm_hour, msg_time->tm_min);
-
- return;
- }
-
- uint32_t msg_sec = time_to_seconds(msg_time);
- uint32_t last_msg_sec = time_to_seconds(last_msg_time);
- if(msg_sec < last_msg_sec)
- {
- sprintf(time_str, "%d/%d/%d %02d:%02d", msg_time->tm_year, msg_time->tm_mon,
- msg_time->tm_mday, msg_time->tm_hour, msg_time->tm_min);
- }
- else if(msg_sec > (last_msg_sec + MMI_AI_TALK_CHAT_TIME_INTERVAL))
- {
- uint32_t cur_sec = time_to_seconds(cur_time);
- if((msg_sec > cur_sec) || (msg_time->tm_year < cur_time->tm_year))
- {
- sprintf(time_str, "%d/%d/%d %02d:%02d", msg_time->tm_year, msg_time->tm_mon,
- msg_time->tm_mday, msg_time->tm_hour, msg_time->tm_min);
- }
- else
- {
- uint32_t today_sec = cur_sec - cur_time->tm_hour * 3600 - cur_time->tm_min * 60 - cur_time->tm_sec;
-
- if(msg_sec >= today_sec)
- {
- /*today*/
- sprintf(time_str, "%02d:%02d", msg_time->tm_hour, msg_time->tm_min);
- }
- else if(msg_sec >= (today_sec - 24 * 3600))
- {
- /*yesterday*/
- const char * yesterday = lv_lang_get_text(WATCH_TEXT_ID_YESTERDAY);
-
- sprintf(time_str, "%s %02d:%02d", yesterday, msg_time->tm_hour, msg_time->tm_min);
- }
- else
- {
- uint8_t wday;
- if(0 == cur_time->tm_wday)
- {
- /*today is Sunday*/
- wday = 6;
- }
- else
- {
- wday = cur_time->tm_wday - 1;
- }
- /*the start of a week is monday, the end is sunday*/
- if(msg_sec >= (today_sec - wday * 24 * 3600)) {
- /*current week before yesterday*/
- const char * wday_str;
- switch(rtc_calc_weekday(msg_time))
- {
- case 1:
- /*Monday*/
- wday_str = lv_lang_get_text(WATCH_TEXT_ID_MONDAY);
- break;
- case 2:
- /*Tuesday*/
- wday_str = lv_lang_get_text(WATCH_TEXT_ID_TUESDAY);
- break;
- case 3:
- /*Wednesday*/
- wday_str = lv_lang_get_text(WATCH_TEXT_ID_WEDNESDAY);
- break;
- case 4:
- /*Thursday*/
- wday_str = lv_lang_get_text(WATCH_TEXT_ID_THURSDAY);
- break;
- case 5:
- /*Friday*/
- wday_str = lv_lang_get_text(WATCH_TEXT_ID_FRIDAY);
- break;
- default:
- printf("%s: week error\n", __FUNCTION__);
- break;
- }
-
- sprintf(time_str, "%s %02d:%02d", wday_str, msg_time->tm_hour, msg_time->tm_min);
- }
- else
- {
- sprintf(time_str, "%d/%d %02d:%02d", msg_time->tm_mon, msg_time->tm_mday, msg_time->tm_hour, msg_time->tm_min);
- }
- }
- }
- }
-#endif
-}
-
-void mmi_ai_talk_list_voice_item_playing_anim_cb(lv_anim_t * a)
-{
-#if 0
- lv_obj_t * play_img = (lv_obj_t *)a->var;
- uint8_t msg_from = mmi_ai_talk_info_index_item_msg_from_get(s_ai_talk_selected_item_index);
-
- printf("[@CHENG_DEBUG][%s][%d]: msg_from=%d\n", __FUNCTION__, __LINE__, msg_from);
-
- switch(s_ai_talk_play_anim_count % 3)
- {
- case 0:
- lv_img_set_src(play_img, ((0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING1 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING1));
- break;
-
- case 1:
- lv_img_set_src(play_img, ((0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING2 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING2));
- break;
-
- case 2:
- lv_img_set_src(play_img, ((0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING3 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3));
- break;
-
- default:
- break;
- }
- s_ai_talk_play_anim_count++;
-#endif
-}
-
-void mmi_ai_talk_list_voice_item_playing_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
-{
- printf("[@CHENG_DEBUG][%s][%d]: priority=%d\n", __FUNCTION__, __LINE__, priority);
-
-#if 0
- if(AUDIO_CTRL_PRIORITY_5 == priority)
- {
- if(false == watch_is_ready())
- {
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- return;
- }
- }
- else if(AUDIO_CTRL_PRIORITY_5 > priority)
- {
- lv_ai_talk_ext_t * ext = mmi_ai_talk_actId_ext_get(ACT_ID_AI_TALK);
- if(NULL != ext)
- {
- mmi_ai_talk_voice_item_playing_stop(ext);
- }
- }
-#endif
-}
-
-void mmi_ai_talk_list_voice_item_play_over_cb(void * para)
-{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-#if 0
- Hal_File_Play_End();
- Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
-
- lv_ai_talk_list_ext_t * list_page_ext = (lv_ai_talk_list_ext_t *)para;
- if(NULL == list_page_ext || NULL == list_page_ext->voice_playing_anim.var)
- {
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- return;
- }
- mmi_ai_talk_voice_item_reset_play_state(list_page_ext);
-#endif
-}
-
-void mmi_ai_talk_list_voice_item_play_action(lv_ai_talk_list_ext_t * list_page_ext, lv_obj_t * play_img, lv_obj_t * unread_img)
-{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-#if 0
- //display ui
- lv_anim_t * a = &(list_page_ext->voice_playing_anim);
-
- lv_anim_init(a);
- lv_anim_set_var(a, play_img);
- lv_anim_set_start_cb(a, (lv_anim_ready_cb_t)mmi_ai_talk_list_voice_item_playing_anim_cb);
- lv_anim_set_repeat_count(a, LV_ANIM_REPEAT_INFINITE);
- lv_anim_set_time(a, 400);
- lv_anim_start(a);
- s_ai_talk_play_anim_count = 1;
-
- mmi_ai_talk_msg_item_info_t * msg_item = NULL;
- mmi_ai_talk_info_index_item_get(s_ai_talk_selected_item_index, &msg_item);
- msg_item->unread_flag = 0;
- if(NULL != unread_img)
- {
- lv_obj_del(unread_img);
- unread_img = NULL;
- }
- list_page_ext->voice_playing_msg_from = msg_item->msg_from;
-
- //play voice
- if(AUDIO_CTRL_PRIORITY_5 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_5, mmi_ai_talk_list_voice_item_playing_audio_ctrl_callback))
- {
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- Hal_File_Play_Onetime(msg_item->msg_data_full_file_name, query_current_volume(), mmi_ai_talk_list_voice_item_play_over_cb, list_page_ext, 0);
- }
-#endif
-}
-
-void mmi_ai_talk_list_voice_item_event_cb(lv_obj_t * cont, lv_event_t e)
-{
-#if 0
- lv_ai_talk_list_item_ext_t * list_item_ext = (lv_ai_talk_list_item_ext_t *)lv_obj_get_ext_attr(cont);
- if(NULL == list_item_ext)
- return;
-
- s_ai_talk_selected_item_index = list_item_ext->item_index;
-
- lv_obj_t * scrl = lv_obj_get_parent(cont);
- lv_obj_t * list_page = lv_obj_get_parent(scrl);
- //lv_obj_t * scrl = lv_page_get_scrl(list_page);
-
- lv_ai_talk_list_ext_t * list_page_ext = (lv_ai_talk_list_ext_t *)lv_obj_get_ext_attr(list_page);
- if(NULL == list_page_ext)
- return;
-
- if(LV_EVENT_PRESSED == e)
- {
- list_page_ext->pressing = true;
- }
- else if((LV_EVENT_LONG_PRESSED == e) && (true == list_page_ext->pressing)) // delete msg item
- {
- list_page_ext->pressing = false;
-
- mmi_ai_talk_list_msg_item_delete_create();
- }
- else if((LV_EVENT_CLICKED == e) && (true == list_page_ext->pressing)) // playing voice msg
- {
- list_page_ext->pressing = false;
-
- mmi_ai_talk_msg_item_info_t * msg_item = NULL;
- mmi_ai_talk_info_index_item_get(s_ai_talk_selected_item_index, &msg_item);
-
- if(0 != msg_item->msg_data_size)
- {
- if(NULL != list_page_ext->voice_playing_anim.var) // exist voice playing
- {
- printf("[@CHENG_DEBUG][%s][%d]: index=%d\n", __FUNCTION__, __LINE__, list_item_ext->item_index);
-
- //stop item voice
- Hal_File_Play_End();
- Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
- mmi_ai_talk_voice_item_reset_play_state(list_page_ext);
- }
- else if(NULL != msg_item->msg_data_full_file_name)
- {
- printf("[@CHENG_DEBUG][%s][%d]: index=%d\n", __FUNCTION__, __LINE__, list_item_ext->item_index);
-
- lv_obj_t * play_img = lv_obj_get_child_back(cont, NULL);
- mmi_ai_talk_list_voice_item_play_action(list_page_ext, play_img, ((1 == msg_item->unread_flag) ? list_item_ext->unread_img : NULL));
- }
- }
- }
-#endif
-}
-
-void mmi_ai_talk_list_text_item_event_cb(lv_obj_t * cont, lv_event_t e)
-{
-#if 0
- lv_ai_talk_list_item_ext_t * list_item_ext = (lv_ai_talk_list_item_ext_t *)lv_obj_get_ext_attr(cont);
- if(NULL == list_item_ext)
- return;
-
- s_ai_talk_selected_item_index = list_item_ext->item_index;
-
- lv_obj_t * scrl = lv_obj_get_parent(cont);
- lv_obj_t * list_page = lv_obj_get_parent(scrl);
- //lv_obj_t * scrl = lv_page_get_scrl(list_page);
-
- lv_ai_talk_list_ext_t * list_page_ext = (lv_ai_talk_list_ext_t *)lv_obj_get_ext_attr(list_page);
- if(NULL == list_page_ext)
- return;
-
- if(LV_EVENT_PRESSED == e)
- {
- list_page_ext->pressing = true;
- }
- else if((LV_EVENT_LONG_PRESSED == e) && (true == list_page_ext->pressing)) // delete msg item
- {
- list_page_ext->pressing = false;
-
- mmi_ai_talk_list_msg_item_delete_create();
- }
- else if((LV_EVENT_CLICKED == e) && (true == list_page_ext->pressing)) // display text msg
- {
- list_page_ext->pressing = false;
- }
-#endif
-}
-
//display time & content
lv_obj_t * mmi_ai_talk_list_msg_item_add(lv_obj_t * list_page, mmi_ai_talk_msg_item_info_t * msg_item, char * time_str, uint8_t i)
{
printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
lv_obj_t * obj = NULL;
- lv_ai_talk_list_item_ext_t * list_item_ext = NULL;
lv_ai_talk_list_ext_t * list_page_ext = lv_obj_get_ext_attr(list_page);
lv_obj_t * scrl = lv_page_get_scrl(list_page);
- lv_obj_t * last_obj = lv_obj_get_child(scrl, NULL);
lv_coord_t obj_y = 0;
- #if 1
obj_y = lv_obj_get_style_pad_inner(scrl, LV_STATE_DEFAULT);
- #else
- if(NULL != last_obj)
- {
- obj_y = lv_obj_get_y(last_obj) + lv_obj_get_height(last_obj) + lv_obj_get_style_pad_inner(scrl, LV_STATE_DEFAULT);
- }
- else
- {
- obj_y = lv_obj_get_style_pad_top(scrl, LV_STATE_DEFAULT);
- }
-
- if(0 != strlen(time_str))
- {
- obj = lv_label_create(list_page, NULL);
-
- //lv_obj_set_base_dir(obj, LV_BIDI_DIR_LTR);
- lv_label_set_text(obj, time_str);
- lv_obj_add_style(obj, LV_LABEL_PART_MAIN, &list_page_ext->style_label_time);
- lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_MID, 0, obj_y);
-
- last_obj = obj;
- obj_y = lv_obj_get_y(last_obj) + lv_obj_get_height(last_obj) + lv_obj_get_style_pad_inner(scrl, LV_STATE_DEFAULT);
- }
-
- printf("[@CHENG_DEBUG][%s][%d]: msg_type=%d,file=%s,size=%d,obj_y=%d\n", __FUNCTION__, __LINE__,
- msg_item->msg_type, msg_item->msg_data_full_file_name, msg_item->msg_data_size, obj_y);
- #endif
- printf("[@CHENG_DEBUG][%s][%d]: msg_type=%d,obj_y=%d,size=%d,buf=0x%x\n", __FUNCTION__, __LINE__,
- msg_item->msg_type, obj_y, msg_item->msg_data_size, msg_item->msg_data_ptr);
-
- switch(msg_item->msg_type)
- {
- case WECHAT_MSG_TYPE_VOICE:
- #if 0
- lv_obj_t * unread_img = lv_img_create(list_page, NULL);
- //obj = lv_img_create(list_page, NULL);
- obj = lv_cont_create(list_page, NULL);
- list_item_ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_ai_talk_list_item_ext_t));
- list_item_ext->item_index = i;
- list_item_ext->unread_img = NULL;
- lv_obj_set_size(obj, LV_HOR_RES * 2 / 3, 50);
- lv_cont_set_fit4(obj, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_TIGHT);
-
- lv_obj_t * play_img = lv_img_create(obj, NULL);
- lv_obj_t * len_label = lv_label_create(obj, NULL);
- uint32_t duration = 0;
-
- if(LV_FS_RES_OK != Hal_File_Get_AudioDurationTime((const char *)msg_item->msg_data_full_file_name, &duration))
- {
- printf("[@CHENG_DEBUG][%s][%d]: read file error. %s\n", __FUNCTION__, __LINE__, msg_item->msg_data_full_file_name);
- }
- else
- {
- duration = (duration + 999) / 1000;
- }
-
- if(0 == duration)
- {
- /*invalid voice*/
- lv_img_set_src(play_img, ICON_WECHAT_VOICE_ITEM_DAMAGE);
- lv_label_set_text(len_label, "");
- }
- else
- {
- char len_str[8] = {0};
-
- if(MMI_AI_TALK_DATA_RECORD_DURATION_MAX < duration)
- duration = MMI_AI_TALK_DATA_RECORD_DURATION_MAX;
-
- sprintf(len_str, "%d\"", duration);
- lv_label_set_text(len_label, len_str);
- }
-
- if(0 == msg_item->msg_from) // msg from slef
- {
- lv_obj_add_style(len_label, LV_LABEL_PART_MAIN, &list_page_ext->style_label_len_self);
- //lv_img_set_src(obj, ICON_WECHAT_MY_VOICE_ITEM_BG);
- lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(list_page_ext->style_cont_self));
- lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_RIGHT, -10, obj_y);
- if(0 < duration)
- {
- lv_img_set_src(play_img, ICON_WECHAT_MY_VOICE_ITEM_PLAYING3);
- }
- lv_obj_align(play_img, obj, LV_ALIGN_IN_LEFT_MID, 15, 0);
- lv_obj_align(len_label, play_img, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
- lv_obj_del(unread_img);
- }
- else // msg from other
- {
- lv_obj_add_style(len_label, LV_LABEL_PART_MAIN, &list_page_ext->style_label_len_other);
- //lv_img_set_src(obj, ICON_WECHAT_OTHER_VOICE_ITEM_BG);
- lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(list_page_ext->style_cont_other));
- lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_LEFT, 10, obj_y);
- if(0 < duration)
- {
- lv_img_set_src(play_img, ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3);
- }
- lv_obj_align(play_img, obj, LV_ALIGN_IN_RIGHT_MID, -15, 0);
- lv_obj_align(len_label, play_img, LV_ALIGN_OUT_LEFT_MID, -10, 0);
- if(1 == msg_item->unread_flag)
- {
- lv_img_set_src(unread_img, ICON_WECHAT_UNREAD_FLAG);
- lv_obj_align(unread_img, obj, LV_ALIGN_OUT_RIGHT_MID, 5, 0);
- list_item_ext->unread_img = unread_img;
- }
- else
- {
- lv_obj_del(unread_img);
- }
- }
-
- lv_obj_set_click(obj, true);
- lv_obj_set_event_cb(obj, mmi_ai_talk_list_voice_item_event_cb);
- lv_obj_set_adv_hittest(obj, false);
- lv_page_focus(list_page, obj, 0);
- lv_page_glue_obj(obj, true);
- lv_watch_obj_add_element(obj);
- #endif
- break;
-
- case WECHAT_MSG_TYPE_TEXT:
- obj = lv_cont_create(list_page, NULL);
- #if 0
- list_item_ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_ai_talk_list_item_ext_t));
- list_item_ext->item_index = i;
- list_item_ext->unread_img = NULL;
- #endif
- #if 1
- lv_obj_set_size(obj, LV_HOR_RES - 30, 50); //lv_obj_set_size(obj, 153, 53); // same with voice item
- lv_cont_set_fit4(obj, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_TIGHT);
- //lv_cont_set_layout(obj, LV_LAYOUT_COLUMN_LEFT);
- lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(list_page_ext->style_cont_other));
- lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_MID, 0, obj_y);
- #else
- lv_obj_set_size(obj, LV_HOR_RES * 2 / 3, 50); //lv_obj_set_size(obj, 153, 53); // same with voice item
- lv_cont_set_fit4(obj, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_TIGHT);
- //lv_cont_set_layout(obj, LV_LAYOUT_COLUMN_LEFT);
- lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(list_page_ext->style_cont_other));
- lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_LEFT, 10, obj_y);
- #endif
-
- #if 1
- uint32_t file_size = msg_item->msg_data_size;
- char * file_buf = msg_item->msg_data_ptr;
-
- #else
- lv_fs_file_t file_p;
- lv_fs_res_t res;
- uint32_t file_size = 0, bytes_read = 0;
- char * file_buf = NULL;
-
- res = lv_fs_open(&file_p, msg_item->msg_data_full_file_name, LV_FS_MODE_RD);
- if(LV_FS_RES_OK != res)
- {
- printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
- lv_fs_close(&file_p);
- break;
- }
-
- lv_fs_size(&file_p, &file_size);
- file_buf = (char *)lv_mem_alloc(file_size + 1);
- _lv_memset_00(file_buf, file_size + 1);
- res = lv_fs_read(&file_p, file_buf, file_size, &bytes_read);
- lv_fs_close(&file_p);
- if(LV_FS_RES_OK != res)
- {
- printf("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
- lv_mem_free(file_buf);
- break;
- }
- printf("[@CHENG_DEBUG][%s][%d]: %d,%d,%s\n", __FUNCTION__, __LINE__, file_size, bytes_read, file_buf);
- #endif
-
- lv_obj_t * label_text = lv_label_create(obj, NULL);
- lv_obj_add_style(label_text, LV_LABEL_PART_MAIN, &(list_page_ext->style_label_len_other));
- lv_label_set_align(label_text, LV_LABEL_ALIGN_CENTER);
- lv_label_set_long_mode(label_text, LV_LABEL_LONG_BREAK);
- lv_obj_set_width(label_text, lv_obj_get_width(obj) - 20);
- lv_label_set_text(label_text, file_buf);
- lv_obj_align(label_text, obj, LV_ALIGN_IN_LEFT_MID, 10, 0);
-
- #if 1
- lv_obj_set_click(obj, false);
- #else
- lv_obj_set_click(obj, true);
- lv_obj_set_event_cb(obj, mmi_ai_talk_list_text_item_event_cb);
- #endif
- lv_obj_set_adv_hittest(obj, false);
- lv_page_focus(list_page, obj, 0);
- lv_page_glue_obj(obj, true);
- lv_watch_obj_add_element(obj);
-
- //lv_mem_free(file_buf);
- break;
-
- case WECHAT_MSG_TYPE_EXPRESSION:
- case WECHAT_MSG_TYPE_IMAGE:
- #if 0
- obj = lv_img_create(list, NULL);
-
- lv_watch_obj_add_element(obj);
- #endif
- break;
-
- default:
- break;
- }
+ printf("[@CHENG_DEBUG][%s][%d]: obj_y=%d,size=%d,buf=0x%x\n", __FUNCTION__, __LINE__,
+ obj_y, msg_item->msg_data_size, msg_item->msg_data_ptr);
+
+ obj = lv_cont_create(list_page, NULL);
+ lv_obj_set_size(obj, LV_HOR_RES - 30, 50); //lv_obj_set_size(obj, 153, 53); // same with voice item
+ lv_cont_set_fit4(obj, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_NONE, LV_FIT_TIGHT);
+ //lv_cont_set_layout(obj, LV_LAYOUT_COLUMN_LEFT);
+ lv_obj_add_style(obj, LV_CONT_PART_MAIN, &(list_page_ext->style_cont_other));
+ lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_MID, 0, obj_y);
+
+ uint32_t file_size = msg_item->msg_data_size;
+ char * file_buf = msg_item->msg_data_ptr;
+
+ lv_obj_t * label_text = lv_label_create(obj, NULL);
+ lv_obj_add_style(label_text, LV_LABEL_PART_MAIN, &(list_page_ext->style_label_len_other));
+ lv_label_set_align(label_text, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_long_mode(label_text, LV_LABEL_LONG_BREAK);
+ lv_obj_set_width(label_text, lv_obj_get_width(obj) - 20);
+ lv_label_set_text(label_text, file_buf);
+ lv_obj_align(label_text, obj, LV_ALIGN_IN_LEFT_MID, 10, 0);
+
+ lv_obj_set_click(obj, false);
+ lv_obj_set_adv_hittest(obj, false);
+ lv_page_focus(list_page, obj, 0);
+ lv_page_glue_obj(obj, true);
+ lv_watch_obj_add_element(obj);
return obj;
}
list_page_ext->pressing = false;
ext->list = list_page;
- #if 1
mmi_ai_talk_msg_item_info_t * msg_item = &s_ai_talk_item_info;
mmi_ai_talk_list_msg_item_add(list_page, msg_item, NULL, 0);
- #else
-
- uint8_t i = 0;
- uint8_t msg_count = mmi_ai_talk_info_count_get();
- hal_rtc_t cur_time = {0}, last_msg_item_time = {0}, msg_time = {0};
-
- Hal_Rtc_Gettime(&cur_time);
- for(i = 0; i < msg_count; i++)
- {
- printf("[@CHENG_DEBUG][%s][%d]: i=%d, msg_count=%d\n", __FUNCTION__, __LINE__, i, msg_count);
-
- char time_str[32] = {0};
- mmi_ai_talk_msg_item_info_t * msg_item = NULL;
-
- mmi_ai_talk_info_index_item_get(i, &msg_item);
- _lv_memcpy(&msg_time, &(msg_item->msg_time), sizeof(hal_rtc_t));
- mmi_ai_talk_list_msg_item_time(time_str, &cur_time, &msg_time, &last_msg_item_time);
- _lv_memcpy(&last_msg_item_time, &(msg_item->msg_time), sizeof(hal_rtc_t));
-
- mmi_ai_talk_list_msg_item_add(list_page, msg_item, time_str, i);
- }
- #endif
if((lv_obj_get_height(list_page) - lv_obj_get_style_pad_top(list_page, LV_LIST_PART_BG) * 2) > lv_obj_get_height(scrl))
{
return obj;
}
-/*
- else if(true != mmi_watch_tcp_connect_state_get()
- || true != mmi_protocol_watch_bind_state_get()
- )
- {
- // not bind
- lv_obj_t * label = lv_label_create(cont, NULL);
- lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font26_black);
- lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NOT_BIND);
- lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
- lv_obj_align(label, cont, LV_ALIGN_CENTER, 0, -10);
-
- return obj;
- }
-*/
//create no msg label
ext->label_no_msg = lv_label_create(cont, NULL);
#include "hal/dm/cJSON.h"
+// for debug
+// #define MMI_AI_TALK_DEBUG_TO_FILE
+
+
static void * s_ai_talk_send_space_ptr[MMI_AI_TALK_ACTION_MAX] = {NULL};
static uint32_t s_ai_talk_send_space_size[MMI_AI_TALK_ACTION_MAX] = {0};
}
-// signatureÉú³ÉÂß¼£º¶Ôsecret_idºÍtimestampÒÔ¡°&&¡±½øÐÐÆ´½Ó³É×Ö·û´®£¬ÔÚÒÔhmacsha1Ϊ¼ÓÃÜ·½·¨£¬
-// ÒÔapi_keyΪhmacsha1µÄkey¶ÔÉÏÃæÆ´½Ó¶ø³ÉµÄ×Ö·û´®½øÐмÓÃܼ´¿ÉµÃ¡£
+// signature����������secret_id��timestamp�ԡ�&&������ƴ�ӳ��ַ���������hmacsha1Ϊ���ܷ�����
+// ��api_keyΪhmacsha1��key������ƴ�Ӷ��ɵ��ַ������м��ܼ��ɵá�
bool mm_ai_talk_login_action(void)
{
return false;
+#ifdef MMI_AI_TALK_DEBUG_TO_FILE
#define BEI_KE_RECEIVE_FILE "C:/bei_ke.txt"
#define BEI_KE_RECEIVE_TEXT_FILE "C:/bei_ke_result.txt"
-bool mmi_receive_info_write_to_file(char * path, char * info_buf, uint32_t info_size)
+#define BEI_KE_RECEIVE_TTS_INFO_FILE "C:/bei_ke_tts_info.txt"
+#define BEI_KE_RECEIVE_TTS_AUDIO_JSON_FILE "C:/bei_ke_tts_audio_json.txt"
+#define BEI_KE_RECEIVE_TTS_AUDIO_TEMP_FILE "C:/bei_ke_tts_audio_temp.txt"
+#define BEI_KE_RECEIVE_TTS_AUDIO_TOTAL_FILE "C:/bei_ke_tts_audio_total.txt"
+bool mmi_ai_talk_receive_info_write_to_file(char * path, char * info_buf, uint32_t info_size)
{
lv_fs_file_t file_p;
lv_fs_res_t res;
return true;
}
+#endif
+
+/*
+[20231103_093424]{"status":"ok","msg":"The connection was successful","meeting_id":"1ee79e91-e621-6781-86f5-4be19df63f36","type":"start"}
+[20231103_093429]{"is_final":0,"results":"����","status":"ok","timestamp":{"end":1450,"start":730},"type":"real_asr"}
+[20231103_093429]{"is_final":1,"results":"��������","status":"ok","timestamp":{"end":1900,"start":730},"type":"real_asr"}
+[20231103_093430]{"is_final":0,"results":"��������","status":"ok","timestamp":{"end":1900,"start":730},"type":"real_asr"}
+[20231103_093435]{"type":"model_answer","status":"ok","answer_id":"1698975269631t",
+"answer":"��Ǹ�������ش�������⡣������֪��ǰ�����������","question":"��������"}
+*/
-#define KEY_IS_FINAL ("is_final")
-#define KEY_RESULTS ("results")
#define KEY_TYPE ("type")
-#define VALUE_REAL_ASR ("real_asr")
-#define VALUE_MODEL_ANSWER ("model_answer")
-#define KEY_ANSWER ("answer")
+#define VALUE_TYPE_START ("start")
+#define VALUE_TYPE_TEXT ("real_asr")
+#define VALUE_TYPE_ANSWER ("model_answer")
+#define VALUE_TYPE_TTS ("tts_info")
-bool mmi_ai_talk_data_receive(unsigned char * next_buff, unsigned int next_buff_len)
-{
- bool result = false;
- cJSON * json_root = NULL;
- if(NULL == next_buff || 0 == next_buff_len)
- {
- printf("[@CHENG_DEBUG][%s][%d]: no data\n", __FUNCTION__, __LINE__);
- goto exit_free_res;
- }
+#define KEY_TYPE_START_RESULT ("status")
+#define VALUE_TYPE_START_RESULT ("ok")
+#define KEY_TYPE_TEXT_RESULT ("is_final")
+#define VALUE_TYPE_TEXT_RESULT (1)
+
+#define KEY_TYPE_ANSWER_RESULT ("answer")
+
+#define KEY_TYPE_TTS_RESULT ("audio")
+#define KEY_TYPE_TTS_INDEX ("index")
+
+
+static bool s_ai_talk_type_tts_info_recv_begin = false;
+static bool s_ai_talk_type_tts_info_recv_end = false;
+static char * s_ai_talk_type_tts_info_ptr = NULL;
+static uint32_t s_ai_talk_type_tts_info_size = 0;
+static char * s_ai_talk_type_tts_info_json_ptr = NULL;
+static char * s_ai_talk_type_tts_info_audio_ptr = NULL;
+static uint32_t s_ai_talk_type_tts_info_audio_size = 0;
+
+void mmi_ai_talk_data_receive_resource_clean(void)
+{
+ s_ai_talk_type_tts_info_recv_begin = false;
+ s_ai_talk_type_tts_info_recv_end = false;
- // write to file for debug
- //mmi_receive_info_write_to_file(BEI_KE_RECEIVE_FILE, next_buff, next_buff_len);
-
-
- lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_AI_TALK);
- if(NULL == activity_obj)
+ if(NULL != s_ai_talk_type_tts_info_ptr)
{
- printf("[@CHENG_DEBUG][%s][%d]: not in ai talk\n", __FUNCTION__, __LINE__);
- goto exit_free_res;
+ lv_mem_free(s_ai_talk_type_tts_info_ptr);
+ s_ai_talk_type_tts_info_ptr = NULL;
}
+ s_ai_talk_type_tts_info_size = 0;
-
- json_root = cJSON_Parse(next_buff);
- if(NULL == json_root)
+ if(NULL != s_ai_talk_type_tts_info_json_ptr)
{
- printf("[@CHENG_DEBUG][%s][%d]: json parse error\n", __FUNCTION__, __LINE__);
- goto exit_free_res;
- }
- //Hal_Mem_Free(next_buff);
- //next_buff = NULL;
+ lv_mem_free(s_ai_talk_type_tts_info_json_ptr);
+ s_ai_talk_type_tts_info_json_ptr = NULL;
+ }
+ if(NULL != s_ai_talk_type_tts_info_audio_ptr)
+ {
+ lv_mem_free(s_ai_talk_type_tts_info_audio_ptr);
+ s_ai_talk_type_tts_info_audio_ptr = NULL;
+ }
+ s_ai_talk_type_tts_info_audio_size = 0;
+}
-#if 0
-// {"is_final":1,"results":"ÀëÀëÔÉϲÝ","status":"ok","timestamp":{"end":2200,"start":730},"type":"real_asr"}
- int is_final = 0;
- char * type_real_asr = NULL;
- char * str_results = NULL;
- uint16_t str_results_len = 0;
-
- is_final = cJSON_GetIntValue(cJSON_GetObjectItem(json_root, KEY_IS_FINAL));
- if(1 != is_final)
+bool mmi_ai_talk_not_type_tts_info_data_processing(unsigned char * next_buff, unsigned int next_buff_len, cJSON * json_root)
+{
+ json_root = cJSON_Parse(next_buff);
+ if(NULL != json_root)
{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- goto exit_free_res;
+ printf("[@CHENG_DEBUG][%s][%d]: json file\n", __FUNCTION__, __LINE__);
+
+ char * value_type_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_TYPE));
+ if(0 == strncmp(value_type_str, VALUE_TYPE_START, strlen(VALUE_TYPE_START)))
+ {
+ // {"status":"ok","msg":"The connection was successful","meeting_id":"1ee79e91-e621-6781-86f5-4be19df63f36","type":"start"}
+ printf("[@CHENG_DEBUG][%s][%d]: connect message\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ else if(0 == strncmp(value_type_str, VALUE_TYPE_TEXT, strlen(VALUE_TYPE_TEXT)))
+ {
+ // {"is_final":0,"results":"����ԭ�ϲ�","status":"ok","timestamp":{"end":2200,"start":730},"type":"real_asr"}
+ // {"is_final":1,"results":"����ԭ�ϲ�","status":"ok","timestamp":{"end":2200,"start":730},"type":"real_asr"}
+ printf("[@CHENG_DEBUG][%s][%d]: convert text\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ else if(0 == strncmp(value_type_str, VALUE_TYPE_ANSWER, strlen(VALUE_TYPE_ANSWER)))
+ {
+ // {"type":"model_answer","status":"ok","answer_id":"1698890526941t","answer":"����ԭ�ϲݣ�һ��һ���١�\nҰ���ղ��������紵������\nԶ���ֹŵ������ӻijǡ�\n��������ȥ�����������顣","question":"����ԭ�ϲ�"}
+ printf("[@CHENG_DEBUG][%s][%d]: model_answer\n", __FUNCTION__, __LINE__);
+ char * value_type_answer_result_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_TYPE_ANSWER_RESULT));
+ if(NULL == value_type_answer_result_str)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ uint32_t answer_result_str_len = strlen(value_type_answer_result_str);
+ mmi_ai_talk_model_answer_result_display(value_type_answer_result_str, answer_result_str_len);
+
+ s_ai_talk_type_tts_info_recv_begin = true;
+ }
}
+ else
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+
+ return true;
+}
- type_real_asr = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_TYPE));
- if(NULL == type_real_asr)
+bool mmi_ai_talk_type_tts_info_data_store(unsigned char * next_buff, unsigned int next_buff_len)
+{
+ if(NULL == s_ai_talk_type_tts_info_ptr)
{
- printf("[@CHENG_DEBUG][%s][%d]: get type fail\n", __FUNCTION__, __LINE__);
- goto exit_free_res;
+ printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
+
+ s_ai_talk_type_tts_info_ptr = lv_mem_alloc(next_buff_len + 1);
+ if(NULL == s_ai_talk_type_tts_info_ptr)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ _lv_memset_00(s_ai_talk_type_tts_info_ptr, next_buff_len + 1);
+ _lv_memcpy(s_ai_talk_type_tts_info_ptr, next_buff, next_buff_len);
+ s_ai_talk_type_tts_info_size = next_buff_len;
}
- if(0 != strncmp(type_real_asr, VALUE_REAL_ASR, strlen(VALUE_REAL_ASR)))
+ else
{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- goto exit_free_res;
+ printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
+
+ s_ai_talk_type_tts_info_ptr = lv_mem_realloc(s_ai_talk_type_tts_info_ptr, s_ai_talk_type_tts_info_size + next_buff_len + 1);
+ if(NULL == s_ai_talk_type_tts_info_ptr)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: memory realloc fail\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ _lv_memset_00(s_ai_talk_type_tts_info_ptr + s_ai_talk_type_tts_info_size, next_buff_len + 1);
+ _lv_memcpy(s_ai_talk_type_tts_info_ptr + s_ai_talk_type_tts_info_size, next_buff, next_buff_len);
+ s_ai_talk_type_tts_info_size += next_buff_len;
}
+
+ return true;
+}
+
+bool mmi_ai_talk_type_tts_info_data_parse(cJSON * json_type_tts)
+{
+ char t_left_brace = '{';
+ char t_right_brace = '}';
+ char * t_start_ptr = NULL;
+ char * t_end_ptr = NULL;
+ uint32_t t_offset = 0;
+ char * t_head_ptr = NULL;
+
+ printf("[@CHENG_DEBUG][%s][%d]: total_size=%d\n", __FUNCTION__, __LINE__, s_ai_talk_type_tts_info_size);
+
+ t_head_ptr = s_ai_talk_type_tts_info_ptr;
+ while(1)
+ {
+ if(s_ai_talk_type_tts_info_size <= (t_head_ptr - s_ai_talk_type_tts_info_ptr))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return false;
+ }
+
+ t_start_ptr = strchr(t_head_ptr, t_left_brace);
+ t_end_ptr = strchr(t_head_ptr, t_right_brace);
+ t_offset = t_end_ptr - t_start_ptr + 1;
+ t_head_ptr += t_offset;
+
+ printf("[@CHENG_DEBUG][%s][%d]: head=0x%x,start=0x%x,end=0x%x,offset=%d\n",
+ __FUNCTION__, __LINE__, t_head_ptr, t_start_ptr, t_end_ptr, t_offset);
+
+ if(NULL != s_ai_talk_type_tts_info_json_ptr)
+ {
+ lv_mem_free(s_ai_talk_type_tts_info_json_ptr);
+ s_ai_talk_type_tts_info_json_ptr = NULL;
+ }
+ s_ai_talk_type_tts_info_json_ptr = lv_mem_alloc(t_offset + 1);
+ if(NULL == s_ai_talk_type_tts_info_json_ptr)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ _lv_memset_00(s_ai_talk_type_tts_info_json_ptr, t_offset + 1);
+ _lv_memcpy(s_ai_talk_type_tts_info_json_ptr, t_start_ptr, t_offset);
+
+ if(NULL != json_type_tts)
+ {
+ cJSON_Delete(json_type_tts);
+ json_type_tts = NULL;
+ }
+ json_type_tts = cJSON_Parse(s_ai_talk_type_tts_info_json_ptr);
+ if(NULL == json_type_tts)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: json parse fail\n", __FUNCTION__, __LINE__);
+ return false;
+ }
- str_results = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_RESULTS));
- if(NULL == str_results)
+ char * value_type_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_type_tts, KEY_TYPE));
+ if(0 != strncmp(value_type_str, VALUE_TYPE_TTS, strlen(VALUE_TYPE_TTS)))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: not tts info json\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+
+ int value_type_tts_index = cJSON_GetIntValue(cJSON_GetObjectItem(json_type_tts, KEY_TYPE_TTS_INDEX));
+ if(0 > value_type_tts_index)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: tts info end flag\n", __FUNCTION__, __LINE__);
+
+ #ifdef MMI_AI_TALK_DEBUG_TO_FILE
+ // write to file for debug
+ mmi_ai_talk_receive_info_write_to_file(BEI_KE_RECEIVE_TTS_AUDIO_TOTAL_FILE, s_ai_talk_type_tts_info_audio_ptr, s_ai_talk_type_tts_info_audio_size);
+ #endif
+
+ mmi_ai_talk_tts_info_result_display(s_ai_talk_type_tts_info_audio_ptr, s_ai_talk_type_tts_info_audio_size);
+
+ break;
+ }
+ else
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ char * value_type_tts_result_str = cJSON_GetStringValue(cJSON_GetObjectItem(json_type_tts, KEY_TYPE_TTS_RESULT));
+ uint32_t value_type_tts_result_len = strlen(value_type_tts_result_str);
+
+ if(NULL == s_ai_talk_type_tts_info_audio_ptr)
+ {
+ s_ai_talk_type_tts_info_audio_ptr = lv_mem_alloc(value_type_tts_result_len + 1);
+ if(NULL == s_ai_talk_type_tts_info_audio_ptr)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ _lv_memset_00(s_ai_talk_type_tts_info_audio_ptr, value_type_tts_result_len + 1);
+ _lv_memcpy(s_ai_talk_type_tts_info_audio_ptr, value_type_tts_result_str, value_type_tts_result_len);
+ s_ai_talk_type_tts_info_audio_size = value_type_tts_result_len;
+ }
+ else
+ {
+ s_ai_talk_type_tts_info_audio_ptr = lv_mem_realloc(s_ai_talk_type_tts_info_audio_ptr, s_ai_talk_type_tts_info_audio_size + value_type_tts_result_len + 1);
+ if(NULL == s_ai_talk_type_tts_info_audio_ptr)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: memory realloc fail\n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ _lv_memset_00(s_ai_talk_type_tts_info_audio_ptr + s_ai_talk_type_tts_info_audio_size, value_type_tts_result_len + 1);
+ _lv_memcpy(s_ai_talk_type_tts_info_audio_ptr + s_ai_talk_type_tts_info_audio_size, value_type_tts_result_str, value_type_tts_result_len);
+ s_ai_talk_type_tts_info_audio_size += value_type_tts_result_len;
+ }
+ }
+ }
+
+ return true;
+}
+
+bool mmi_ai_talk_type_tts_info_data_processing(unsigned char * next_buff, unsigned int next_buff_len, cJSON * json_type_tts)
+{
+ // {"answer_id":"1699511956918t","audio":"8f////D/5f8DA9QChwHe
+ // 7/1YfAQA7/1fAQ/D/5f8DAYADR/9q/+j/AfAQgDR/9/fAQD/5f8DAq/+j/Ag
+ // 6afA5QfAQ5/4U/C5CQQ=","index":0,"type":"tts_info"}
+ // {"answer_id":"1699511956918t","audio":"FgD7/1YADR/9q/+j/AgAlAA==","index":2,"type":"tts_info"}
+ // {"answer_id":"1699511956918t","audio":"","index":-1,"type":"tts_info"}
+
+ printf("[@CHENG_DEBUG][%s][%d]: receive_size=%d\n", __FUNCTION__, __LINE__, next_buff_len);
+
+ // search end flag
+ char * t_end_str = "\"index\":-1";
+ if(NULL != strstr(next_buff, t_end_str))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
+
+ s_ai_talk_type_tts_info_recv_end = true;
+ }
+
+ // store type tts data
+ if(false == mmi_ai_talk_type_tts_info_data_store(next_buff, next_buff_len))
{
printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- goto exit_free_res;
+ return false;
}
- str_results_len = strlen(str_results);
- result = mmi_ai_talk_receive_from_server(str_results, str_results_len, WECHAT_MSG_TYPE_TEXT);
-#endif
+ // parse type tts data
+ if(true == s_ai_talk_type_tts_info_recv_end)
+ {
+ if(false == mmi_ai_talk_type_tts_info_data_parse(json_type_tts))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ }
+
+ return true;
+}
-// {"type":"model_answer","status":"ok","answer_id":"1698890526941t","answer":"ÀëÀëÔÉϲݣ¬Ò»ËêÒ»¿ÝÈÙ¡£\nÒ°»ðÉÕ²»¾¡£¬´º·ç´µÓÖÉú¡£\nÔ¶·¼ÇֹŵÀ£¬Çç´ä½Ó»Ä³Ç¡£\nÓÖËÍÍõËïÈ¥£¬ÝÂÝÂÂú±ðÇé¡£","question":"ÀëÀëÔÉϲÝ"}
- char * type_model_answer = NULL;
- char * str_answer = NULL;
- uint16_t str_answer_len = 0;
+bool mmi_ai_talk_data_receive(unsigned char * next_buff, unsigned int next_buff_len)
+{
+ bool result = false;
+ cJSON * json_root = NULL;
+ cJSON * json_type_tts = NULL;
- type_model_answer = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_TYPE));
- if(NULL == type_model_answer)
+ if(NULL == next_buff || 0 == next_buff_len)
{
- printf("[@CHENG_DEBUG][%s][%d]: get type fail\n", __FUNCTION__, __LINE__);
+ printf("[@CHENG_DEBUG][%s][%d]: no data\n", __FUNCTION__, __LINE__);
goto exit_free_res;
}
- if(0 != strncmp(type_model_answer, VALUE_MODEL_ANSWER, strlen(VALUE_MODEL_ANSWER)))
+
+#ifdef MMI_AI_TALK_DEBUG_TO_FILE
+ // write to file for debug
+ mmi_ai_talk_receive_info_write_to_file(BEI_KE_RECEIVE_FILE, next_buff, next_buff_len);
+#endif
+
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_AI_TALK);
+ if(NULL == activity_obj)
{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ printf("[@CHENG_DEBUG][%s][%d]: not in ai talk\n", __FUNCTION__, __LINE__);
goto exit_free_res;
}
- str_answer = cJSON_GetStringValue(cJSON_GetObjectItem(json_root, KEY_ANSWER));
- if(NULL == str_answer)
+ if(false == s_ai_talk_type_tts_info_recv_begin)
{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- goto exit_free_res;
+ result = mmi_ai_talk_not_type_tts_info_data_processing(next_buff, next_buff_len, json_root);
+ }
+ else
+ {
+ result = mmi_ai_talk_type_tts_info_data_processing(next_buff, next_buff_len, json_type_tts);
}
- str_answer_len = strlen(str_answer);
- result = mmi_ai_talk_receive_from_server(str_answer, str_answer_len, WECHAT_MSG_TYPE_TEXT);
exit_free_res:
- //if(NULL != next_buff)
- //{
- // printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- // Hal_Mem_Free(next_buff);
- // next_buff = NULL;
- //}
+ if(NULL != s_ai_talk_type_tts_info_json_ptr)
+ {
+ lv_mem_free(s_ai_talk_type_tts_info_json_ptr);
+ s_ai_talk_type_tts_info_json_ptr = NULL;
+ }
+
+ if(NULL != json_type_tts)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: free json type tts\n", __FUNCTION__, __LINE__);
+ cJSON_Delete(json_type_tts);
+ json_type_tts = NULL;
+ }
if(NULL != json_root)
{
- printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ printf("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__);
cJSON_Delete(json_root);
json_root = NULL;
}