static char topic[128] = {0};
static char imei[16] = {0};
int chat_audio_play_callback(char *p_data, int len, enum_aud_player_state state)
{
if (state == AUD_PLAYER_START)
{
sw_usb_debug_trace("chat_audio_play_callback play start\r\n");
}
else if (state == AUD_PLAYER_MOREDATA)
{
sw_usb_debug_trace("chat_audio_play_callback play stream\r\n");
}
else if (state == AUD_PLAYER_FINISHED)
{
sw_usb_debug_trace("chat_audio_play_callback play stop\r\n");
if (sw_fs_check(QUESTION_FILE) == 0)
{
sw_fs_remove(QUESTION_FILE);
}
}
else
{
sw_usb_debug_trace("chat_audio_play_callback state = %d, len=%d\r\n", state, len);
}
return 0;
}
static s32 chat_download_audio(char *buffer, int size, int nitems)
{
static int audio = 0;
static int length = 0;
if (audio == 0 || length == 0)
{
length = 0;
if (sw_fs_check(QUESTION_FILE) == 0)
{
sw_fs_remove(QUESTION_FILE);
}
if (sw_fs_check(ANSWER_FILE) == 0)
sw_fs_remove(ANSWER_FILE);
// sw_sleep(100);
audio = sw_fopen(ANSWER_FILE, "wb+");
}
sw_fwrite(buffer, 1, size, audio);
length += size;
sw_usb_debug_trace("buffer size=%d, nitems=%d, length=%d\r\n", size, nitems, length);
if (length >= nitems)
{
sw_fclose(audio);
sw_sleep(30);
audio = 0;
length = 0;
sw_set_volume(10);
if (sw_fs_check(ANSWER_FILE) == 0)
{
// if (getFileSize(ANSWER_FILE) > 0)
// {
// sw_play_file_stop();
sw_play_file_init(chat_audio_play_callback);
sw_play_file_start(0, ANSWER_FILE);
// }
}
}
return 0;
}
void aigc_download(char *url, response_cb callback)
{
httpCertT cert = {0};
int ret = sw_http(SW_HTTP_CLIENT_REQUEST_GET, url, cert, NULL, NULL, 30, NULL, callback);
sw_usb_debug_trace("download: %s, code=%d\r\n", url, ret);
}
static void mqtt_chat_subscribe_callback(MQTTMsgDataT *msg)
{
sw_usb_debug_trace("****** audio ******\n");
sw_usb_debug_trace("MQTT ID:%d, len:%d,msg:%s\n", msg->message->id, msg->message->payloadlen, msg->message->payload);
char *key = strtok(msg->message->payload, "|");
char *value = strtok(NULL, "|");
sw_usb_debug_trace("key: %s, value: %s\n", key, value);
if (sw_strcmp(key, "question") == 0)
{
lv_label_set_text_fmt(guider_ui.chat_question_label, "%s: %s", "Q", value);
// sw_usb_debug_trace("key: %s, value: %s\n", value);
}
if (sw_strcmp(key, "answer") == 0)
{
lv_label_set_text_fmt(guider_ui.chat_answer_label, "%s: %s", "A", value);
}
if (sw_strcmp(key, "audio") == 0)
{
aigc_download(value, (response_cb)chat_download_audio);
}
if (sw_strcmp(key, "warning") == 0)
{
lv_label_set_text(guider_ui.chat_question_label, "Warning");
aigc_download(value, (response_cb)chat_download_audio);
}
if (sw_strcmp(key, "exception") == 0)
{
lv_label_set_text(guider_ui.chat_question_label, "Exception");
lv_label_set_text(guider_ui.chat_answer_label, value);
}
}
void mqtt_chat_subscribe_session(char *session)
{
int ret;
/*imei read from nvm*/
// km_sdk_device_get_imei(clientID);
km_sdk_device_get_imei(imei);
// if (sw_mqtt_is_connect())
// {
// sw_mqtt_disconnect();
// }
if (!sw_mqtt_is_connect())
{
ret = sw_mqtt_client_init(4, imei, MQTT_USERNAME, MQTT_PASSWORD, 60, 0, NULL, 10000); // init
// sw_usb_debug_trace("sw_mqtt_client_init ret:%d\n", ret);
ret = sw_mqtt_connect_server(NULL, MQTT_HOSTNAME, MQTT_PORT); // connect server
sw_usb_debug_trace("sw_mqtt_connect_server ret:%d\n", ret);
sw_sleep(10); // get mqtt thread
}
if (sw_mqtt_is_connect())
{
sw_sprintf(topic, "%s/%s/%s", APP_ID, imei, session);
ret = sw_mqtt_subscribe(topic, 2, mqtt_chat_subscribe_callback); // subscribe1
sw_usb_debug_trace("topic subscribe:%s - %s\n", topic, ret);
}
}