Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,7 @@ CONFIG_ENABLE_AI_UI_TEXT_STREAMING=y
CONFIG_BUTTON_NAME="ai_chat_button"
CONFIG_BOARD_CHOICE_T5AI=y
CONFIG_TUYA_T5AI_BOARD_LCD_35565=y
CONFIG_ENABLE_AI_CHAT_GUI_GUIDED_WECHAT=y
CONFIG_LV_USE_QRCODE=y
CONFIG_ENABLE_MBEDTLS_SSL_MAX_CONTENT_LEN=4096
CONFIG_ENABLE_LVGL_TP=y
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ CONFIG_BUTTON_NAME="ai_chat_button"
CONFIG_BOARD_CHOICE_T5AI=y
CONFIG_TUYA_T5AI_BOARD_LCD_35565=y
CONFIG_TUYA_T5AI_BOARD_CAMERA=y
CONFIG_ENABLE_AI_CHAT_GUI_GUIDED_WECHAT=y
CONFIG_LV_USE_QRCODE=y
CONFIG_AI_INPUT_STACK_SIZE=28672
CONFIG_ENABLE_MBEDTLS_SSL_MAX_CONTENT_LEN=4096
CONFIG_ENABLE_LVGL_TP=y
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ CONFIG_BOARD_CHOICE_T5AI=y
CONFIG_TUYA_T5AI_BOARD_LCD_35565=y
CONFIG_TUYA_T5AI_BOARD_CAMERA=y
CONFIG_TUYA_T5AI_BOARD_PRINTER_DP48=y
CONFIG_ENABLE_AI_CHAT_GUI_GUIDED_WECHAT=y
CONFIG_LV_USE_QRCODE=y
CONFIG_AI_INPUT_STACK_SIZE=28672
CONFIG_ENABLE_MBEDTLS_SSL_MAX_CONTENT_LEN=4096
CONFIG_ENABLE_LVGL_TP=y
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ CONFIG_BUTTON_NAME="ai_chat_button"
CONFIG_BOARD_CHOICE_T5AI=y
CONFIG_TUYA_T5AI_BOARD_LCD_35565=y
CONFIG_ENABLE_T5AI_BOARD_CELLULAR_USB=y
CONFIG_ENABLE_AI_CHAT_GUI_GUIDED_WECHAT=y
CONFIG_LV_USE_QRCODE=y
CONFIG_ENABLE_AI_UI_TEXT_STREAMING=y
CONFIG_ENABLE_MBEDTLS_SSL_MAX_CONTENT_LEN=4096
CONFIG_ENABLE_LVGL_TP=y
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ CONFIG_BUTTON_NAME="ai_chat_button"
CONFIG_BOARD_CHOICE_T5AI=y
CONFIG_TUYA_T5AI_BOARD_VERSION_101=y
CONFIG_TUYA_T5AI_BOARD_LCD_35565=y
CONFIG_ENABLE_AI_CHAT_GUI_GUIDED_WECHAT=y
CONFIG_LV_USE_QRCODE=y
CONFIG_ENABLE_MBEDTLS_SSL_MAX_CONTENT_LEN=4096
CONFIG_ENABLE_LVGL_TP=y
CONFIG_BUTTION_STACK_SIZE=4096
18 changes: 18 additions & 0 deletions apps/tuya.ai/your_chat_bot/src/tuya_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@

#include "app_chat_bot.h"
#include "reset_netcfg.h"
#if defined(ENABLE_COMP_AI_DISPLAY) && (ENABLE_COMP_AI_DISPLAY == 1)
#include "ai_ui_manage.h"
#endif

#if defined(ENABLE_BATTERY) && (ENABLE_BATTERY == 1)
#include "app_battery.h"
Expand Down Expand Up @@ -169,6 +172,10 @@ void user_event_handler_on(tuya_iot_client_t *client, tuya_event_msg_t *event)
case TUYA_EVENT_BIND_START:
PR_INFO("Device Bind Start!");

#if defined(ENABLE_COMP_AI_DISPLAY) && (ENABLE_COMP_AI_DISPLAY == 1)
ai_ui_disp_msg(AI_UI_DISP_NETCFG_BEGIN, NULL, 0);
#endif

#if defined(ENABLE_COMP_AI_AUDIO) && (ENABLE_COMP_AI_AUDIO == 1)
ai_audio_player_alert(AI_AUDIO_ALERT_NETWORK_CFG);
#endif
Expand All @@ -185,12 +192,19 @@ void user_event_handler_on(tuya_iot_client_t *client, tuya_event_msg_t *event)
} break;

case TUYA_EVENT_BIND_TOKEN_ON:
#if defined(ENABLE_COMP_AI_DISPLAY) && (ENABLE_COMP_AI_DISPLAY == 1)
ai_ui_disp_msg(AI_UI_DISP_NETCFG_TOKEN_RECEIVED, NULL, 0);
#endif
break;

/* MQTT with tuya cloud is connected, device online */
case TUYA_EVENT_MQTT_CONNECTED:
PR_INFO("Device MQTT Connected!");

#if defined(ENABLE_COMP_AI_DISPLAY) && (ENABLE_COMP_AI_DISPLAY == 1)
ai_ui_disp_msg(AI_UI_DISP_NETCFG_COMPLETE, NULL, 0);
#endif

static uint8_t first = 1;
if (first) {
first = 0;
Expand Down Expand Up @@ -225,6 +239,10 @@ void user_event_handler_on(tuya_iot_client_t *client, tuya_event_msg_t *event)
tuya_reset_type_t reset_type = (tuya_reset_type_t)event->value.asInteger;
PR_INFO("Device Reset:%d", reset_type);

#if defined(ENABLE_COMP_AI_DISPLAY) && (ENABLE_COMP_AI_DISPLAY == 1)
ai_ui_disp_msg(AI_UI_DISP_NETCFG_RESET, NULL, 0);
#endif

// TUYA_RESET_TYPE_FACTORY, TUYA_RESET_TYPE_REMOTE_FACTORY, TUYA_RESET_TYPE_DATA_FACTORY
// Need remove the device application data from the kv store
} break;
Expand Down
90 changes: 84 additions & 6 deletions src/ai_components/ai_main/src/ai_chat_ui.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,18 @@
#include "ai_ui_chat_chatbot.h"
#elif defined(ENABLE_AI_CHAT_GUI_OLED) && (ENABLE_AI_CHAT_GUI_OLED == 1)
#include "ai_ui_chat_oled.h"
#elif defined(ENABLE_AI_CHAT_GUI_GUIDED_WECHAT) && (ENABLE_AI_CHAT_GUI_GUIDED_WECHAT == 1)
#include "ai_ui_chat_guided_wechat.h"
#include "ai_ui_locale.h"
#endif

#include "ai_chat_main.h"

static AI_MODE_STATE_E sg_last_mode_state = AI_MODE_STATE_INIT;
static AI_CHAT_MODE_E sg_last_chat_mode;
static bool sg_last_mode_state_valid = false;
static bool sg_last_chat_mode_valid = false;

/***********************************************************
************************macro define************************
***********************************************************/
Expand All @@ -37,20 +45,45 @@
***********************************************************/
static void __ai_chat_disp_mode_state(AI_MODE_STATE_E state)
{
const char *status;

sg_last_mode_state = state;
sg_last_mode_state_valid = true;

switch (state) {
case AI_MODE_STATE_INIT:
case AI_MODE_STATE_IDLE:
ai_ui_disp_msg(AI_UI_DISP_EMOTION, (uint8_t *)EMOJI_NEUTRAL, strlen(EMOJI_NEUTRAL));
ai_ui_disp_msg(AI_UI_DISP_STATUS, (uint8_t *)STANDBY, strlen(STANDBY));
#if defined(ENABLE_AI_CHAT_GUI_GUIDED_WECHAT) && (ENABLE_AI_CHAT_GUI_GUIDED_WECHAT == 1)
status = ai_ui_locale_tr(STANDBY, "Standby");
#else
status = STANDBY;
#endif
ai_ui_disp_msg(AI_UI_DISP_STATUS, (uint8_t *)status, strlen(status));
break;
case AI_MODE_STATE_LISTEN:
ai_ui_disp_msg(AI_UI_DISP_STATUS, (uint8_t *)LISTENING, strlen(LISTENING));
#if defined(ENABLE_AI_CHAT_GUI_GUIDED_WECHAT) && (ENABLE_AI_CHAT_GUI_GUIDED_WECHAT == 1)
status = ai_ui_locale_tr(LISTENING, "Listening");
#else
status = LISTENING;
#endif
ai_ui_disp_msg(AI_UI_DISP_STATUS, (uint8_t *)status, strlen(status));
break;
case AI_MODE_STATE_SPEAK:
ai_ui_disp_msg(AI_UI_DISP_STATUS, (uint8_t *)SPEAKING, strlen(SPEAKING));
#if defined(ENABLE_AI_CHAT_GUI_GUIDED_WECHAT) && (ENABLE_AI_CHAT_GUI_GUIDED_WECHAT == 1)
status = ai_ui_locale_tr(SPEAKING, "Speaking");
#else
status = SPEAKING;
#endif
ai_ui_disp_msg(AI_UI_DISP_STATUS, (uint8_t *)status, strlen(status));
break;
case AI_MODE_STATE_UPLOAD:
ai_ui_disp_msg(AI_UI_DISP_STATUS, (uint8_t *)UPLOADING, strlen(UPLOADING));
#if defined(ENABLE_AI_CHAT_GUI_GUIDED_WECHAT) && (ENABLE_AI_CHAT_GUI_GUIDED_WECHAT == 1)
status = ai_ui_locale_tr(UPLOADING, "Uploading");
#else
status = UPLOADING;
#endif
ai_ui_disp_msg(AI_UI_DISP_STATUS, (uint8_t *)status, strlen(status));
break;
default:
break;
Expand Down Expand Up @@ -114,12 +147,36 @@ void ai_chat_ui_handle_event(AI_NOTIFY_EVENT_T *event)
case AI_USER_EVT_MODE_SWITCH: {
AI_CHAT_MODE_E mode = (AI_CHAT_MODE_E)(event->data);
char *name = ai_get_mode_name_str(mode);
const char *localized_name = name;

sg_last_chat_mode = mode;
sg_last_chat_mode_valid = true;
if (NULL == name) {
PR_NOTICE("mode name str is null");
break;
}

ai_ui_disp_msg(AI_UI_DISP_CHAT_MODE, (uint8_t *)name, strlen(name));
#if defined(ENABLE_AI_CHAT_GUI_GUIDED_WECHAT) && (ENABLE_AI_CHAT_GUI_GUIDED_WECHAT == 1)
if (ai_ui_locale_is_english()) {
switch (mode) {
case AI_CHAT_MODE_HOLD:
localized_name = "Hold to talk";
break;
case AI_CHAT_MODE_ONE_SHOT:
localized_name = "Push to talk";
break;
case AI_CHAT_MODE_WAKEUP:
localized_name = "Wake word";
break;
case AI_CHAT_MODE_FREE:
localized_name = "Free talk";
break;
default:
break;
}
}
#endif
ai_ui_disp_msg(AI_UI_DISP_CHAT_MODE, (uint8_t *)localized_name, strlen(localized_name));
} break;

#if defined(ENABLE_COMP_AI_PICTURE) && (ENABLE_COMP_AI_PICTURE == 1)
Expand All @@ -138,6 +195,21 @@ void ai_chat_ui_handle_event(AI_NOTIFY_EVENT_T *event)
}
}

void ai_chat_ui_refresh_locale(void)
{
if (sg_last_mode_state_valid) {
__ai_chat_disp_mode_state(sg_last_mode_state);
}

if (sg_last_chat_mode_valid) {
AI_NOTIFY_EVENT_T mode_event = {
.type = AI_USER_EVT_MODE_SWITCH,
.data = (void *)(uintptr_t)sg_last_chat_mode,
};
ai_chat_ui_handle_event(&mode_event);
}
}

OPERATE_RET ai_chat_ui_init(void)
{
OPERATE_RET rt = OPRT_OK;
Expand All @@ -146,12 +218,18 @@ OPERATE_RET ai_chat_ui_init(void)
PR_NOTICE("use custom ai chat ui, need register ui by user");
#else

#if defined(ENABLE_AI_CHAT_GUI_GUIDED_WECHAT) && (ENABLE_AI_CHAT_GUI_GUIDED_WECHAT == 1)
ai_ui_locale_load();
#endif

#if defined(ENABLE_AI_CHAT_GUI_WECHAT) && (ENABLE_AI_CHAT_GUI_WECHAT == 1)
TUYA_CALL_ERR_RETURN(ai_ui_chat_wechat_register());
#elif defined(ENABLE_AI_CHAT_GUI_CHATBOT) && (ENABLE_AI_CHAT_GUI_CHATBOT == 1)
TUYA_CALL_ERR_RETURN(ai_ui_chat_chatbot_register());
#elif defined(ENABLE_AI_CHAT_GUI_OLED) && (ENABLE_AI_CHAT_GUI_OLED == 1)
TUYA_CALL_ERR_RETURN(ai_ui_chat_oled_register());
#elif defined(ENABLE_AI_CHAT_GUI_GUIDED_WECHAT) && (ENABLE_AI_CHAT_GUI_GUIDED_WECHAT == 1)
TUYA_CALL_ERR_RETURN(ai_ui_chat_guided_wechat_register());
#else
#error "please select ai chat present ui"
#endif
Expand All @@ -161,4 +239,4 @@ OPERATE_RET ai_chat_ui_init(void)

return rt;
}
#endif
#endif
5 changes: 5 additions & 0 deletions src/ai_components/ai_ui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ elseif (CONFIG_ENABLE_AI_CHAT_GUI_CHATBOT STREQUAL "y")
elseif (CONFIG_ENABLE_AI_CHAT_GUI_OLED STREQUAL "y")
file(GLOB OLED_SRCS ${MODULE_PATH}/src/oled/*.c)
list(APPEND LIB_SRCS ${OLED_SRCS})
elseif (CONFIG_ENABLE_AI_CHAT_GUI_GUIDED_WECHAT STREQUAL "y")
file(GLOB GUIDED_WECHAT_SRCS CONFIGURE_DEPENDS ${MODULE_PATH}/src/guided_wechat/*.c)
list(APPEND LIB_SRCS ${GUIDED_WECHAT_SRCS})
endif()

# Font sources
Expand Down Expand Up @@ -49,6 +52,8 @@ set(LIB_PUBLIC_INC

if (CONFIG_ENABLE_AI_CHAT_GUI_WECHAT STREQUAL "y")
list(APPEND LIB_PUBLIC_INC ${MODULE_PATH}/src/wechat)
elseif (CONFIG_ENABLE_AI_CHAT_GUI_GUIDED_WECHAT STREQUAL "y")
list(APPEND LIB_PUBLIC_INC ${MODULE_PATH}/src/guided_wechat)
endif()

########################################
Expand Down
15 changes: 12 additions & 3 deletions src/ai_components/ai_ui/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,15 @@ if(!ENABLE_AI_CHAT_CUSTOM_UI)
config ENABLE_AI_CHAT_GUI_OLED
select ENABLE_LIBLVGL
bool "Use OLED ui"

config ENABLE_AI_CHAT_GUI_GUIDED_WECHAT
select ENABLE_LIBLVGL
select LV_USE_QRCODE
bool "Use guided full WeChat-like ui"
help
Keep the complete WeChat chat/camera/album UI and add a
first-run language, authorization and network guide together
with device settings and about pages.
endchoice

config ENABLE_CIRCLE_UI_STYLE
Expand All @@ -32,7 +41,7 @@ if(!ENABLE_AI_CHAT_CUSTOM_UI)
default n

config AI_UI_WECHAT_SCREEN_CORNER_RADIUS
depends on ENABLE_AI_CHAT_GUI_WECHAT
depends on ENABLE_AI_CHAT_GUI_WECHAT || ENABLE_AI_CHAT_GUI_GUIDED_WECHAT
int "WeChat UI rounded-screen corner radius in pixels (NOT degrees)"
range 0 120
default 0
Expand Down Expand Up @@ -124,7 +133,7 @@ if(ENABLE_AI_UI_ICON_FONT)

choice
prompt "choose emo font type"
default FONT_EMOJI_SIZE_32 if(ENABLE_AI_CHAT_GUI_WECHAT)
default FONT_EMOJI_SIZE_32 if(ENABLE_AI_CHAT_GUI_WECHAT || ENABLE_AI_CHAT_GUI_GUIDED_WECHAT)
default FONT_EMOJI_SIZE_64 if(ENABLE_AI_CHAT_GUI_CHATBOT)
default FONT_EMO_AWESOME if(ENABLE_AI_CHAT_GUI_OLED)

Expand All @@ -140,4 +149,4 @@ if(ENABLE_AI_UI_ICON_FONT)

endif

endif
endif
5 changes: 5 additions & 0 deletions src/ai_components/ai_ui/include/ai_ui_manage.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ typedef enum {
AI_UI_DISP_NETWORK,
AI_UI_DISP_CHAT_MODE,

AI_UI_DISP_NETCFG_BEGIN,
AI_UI_DISP_NETCFG_TOKEN_RECEIVED,
AI_UI_DISP_NETCFG_COMPLETE,
AI_UI_DISP_NETCFG_RESET,

AI_UI_DISP_CAMERA_OPEN,
AI_UI_DISP_CAMERA_FLUSH,
AI_UI_DISP_CAMERA_THUMB,
Expand Down
Loading
Loading