Skip to content

Commit bad882c

Browse files
committed
Merge branch 'bugfix/disable_agent_within_apps' into 'master'
Closes espressif#33 See merge request ae_group/esp-brookesia!25
2 parents eda7c9e + cafdbce commit bad882c

File tree

22 files changed

+225
-204
lines changed

22 files changed

+225
-204
lines changed

apps/brookesia_app_ai_profile/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: 0.6.0
22
dependencies:
33
brookesia_core:
4-
version: "0.6.*"
4+
version: "*"
55
public: true
66

77
espressif/esp-lib-utils:

apps/brookesia_app_calculator/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: 0.6.0
22
dependencies:
33
brookesia_core:
4-
version: "0.6.*"
4+
version: "*"
55
public: true
66

77
espressif/esp-lib-utils:

apps/brookesia_app_game_2048/esp_brookesia_app_game_2048.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,8 @@ lv_obj_t *Game2048::addBackgroundCell(lv_obj_t *parent)
377377
// Background
378378
lv_obj_set_style_bg_color(cell, CELL_BG_COLOR, 0);
379379
lv_obj_set_style_bg_opa(cell, CELL_OPA_1, 0);
380+
// Others
381+
lv_obj_remove_flag(cell, LV_OBJ_FLAG_SCROLLABLE);
380382

381383
return cell;
382384
}
@@ -435,7 +437,8 @@ void Game2048::generateForegroundCell()
435437
lv_obj_set_style_bg_color(cell, CELL_BG_COLOR, 0);
436438
lv_obj_set_style_opa(cell, CELL_OPA_2, 0);
437439
// Others
438-
lv_obj_clear_flag(cell, LV_OBJ_FLAG_CLICKABLE);
440+
lv_obj_remove_flag(cell, LV_OBJ_FLAG_CLICKABLE);
441+
lv_obj_remove_flag(cell, LV_OBJ_FLAG_SCROLLABLE);
439442

440443
lv_obj_t *label = lv_label_create(cell);
441444
lv_label_set_text_fmt(label, "%d", 1 << target_weight);

apps/brookesia_app_game_2048/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: 0.6.0
22
dependencies:
33
brookesia_core:
4-
version: "0.6.*"
4+
version: "*"
55
public: true
66

77
espressif/esp-lib-utils:

apps/brookesia_app_settings/esp_brookesia_app_settings_manager.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@
6262
#define VERSION_STR(x, y, z) _VERSION_STR(x, y, z)
6363
#define UI_SCREEN_ABOUT_SYSTEM_OS_NAME "FreeRTOS"
6464
#define UI_SCREEN_ABOUT_SYSTEM_UI_NAME "ESP-Brookesia & LVGL"
65-
#define UI_SCREEN_ABOUT_SYSTEM_UI_BROOKESIA_VERSION VERSION_STR(ESP_BROOKESIA_VER_MAJOR, ESP_BROOKESIA_VER_MINOR ,\
66-
ESP_BROOKESIA_VER_PATCH)
65+
#define UI_SCREEN_ABOUT_SYSTEM_UI_BROOKESIA_VERSION VERSION_STR(BROOKESIA_CORE_VER_MAJOR, BROOKESIA_CORE_VER_MINOR ,\
66+
BROOKESIA_CORE_VER_PATCH)
6767
#define UI_SCREEN_ABOUT_SYSTEM_UI_LVGL_VERSION VERSION_STR(LVGL_VERSION_MAJOR, LVGL_VERSION_MINOR, \
6868
LVGL_VERSION_PATCH)
6969
#define UI_SCREEN_ABOUT_DEVICE_MANUFACTURER "Espressif"

apps/brookesia_app_settings/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: 0.6.0
22
dependencies:
33
brookesia_core:
4-
version: "0.6.*"
4+
version: "*"
55
public: true
66

77
espressif/esp-lib-utils:

apps/brookesia_app_settings/stylesheets/360_360/screen_about.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ constexpr SettingsUI_ScreenAboutData SETTINGS_UI_360_360_SCREEN_ABOUT_DATA()
5757
},
5858
.cell_confs = {
5959
[(int)SettingsUI_ScreenAboutCellIndex::SYSTEM_FIRMWARE_VERSION] =
60-
SETTINGS_UI_360_360_SCREEN_ABOUT_ELEMENT_CONF_SYSTEM_NAME("Firmware version"),
60+
SETTINGS_UI_360_360_SCREEN_ABOUT_ELEMENT_CONF_SYSTEM_NAME("Firmware"),
6161
[(int)SettingsUI_ScreenAboutCellIndex::SYSTEM_OS_NAME] =
6262
SETTINGS_UI_360_360_SCREEN_ABOUT_ELEMENT_CONF_SYSTEM_NAME("OS"),
6363
[(int)SettingsUI_ScreenAboutCellIndex::SYSTEM_OS_VERSION] =

apps/brookesia_app_squareline_demo/idf_component.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: 0.6.0
22
dependencies:
33
brookesia_core:
4-
version: "0.6.*"
4+
version: "*"
55
public: true
66

77
espressif/esp-lib-utils:

core/brookesia_core/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# ChangeLog
22

3+
## v0.6.0-beta2 - 2025-07-08
4+
5+
### Bugfixes:
6+
7+
* fix(ai_framework): prevent Agent from being awakened within apps
8+
* fix(systems): shorten animation filename to avoid warning
9+
310
## v0.6.0-beta1 - 2025-07-04
411

512
### Breaking Changes:

core/brookesia_core/ai_framework/agent/esp_brookesia_ai_agent.cpp

Lines changed: 113 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,36 @@ bool Agent::del()
143143
return ret;
144144
}
145145

146+
bool Agent::pause()
147+
{
148+
ESP_UTILS_LOG_TRACE_GUARD_WITH_THIS();
149+
150+
if (_flags.is_paused) {
151+
ESP_UTILS_LOGW("Already paused");
152+
return true;
153+
}
154+
155+
coze_chat_app_pause();
156+
_flags.is_paused = true;
157+
158+
return true;
159+
}
160+
161+
bool Agent::resume()
162+
{
163+
ESP_UTILS_LOG_TRACE_GUARD_WITH_THIS();
164+
165+
if (!_flags.is_paused) {
166+
ESP_UTILS_LOGW("Not paused");
167+
return true;
168+
}
169+
170+
coze_chat_app_resume();
171+
_flags.is_paused = false;
172+
173+
return true;
174+
}
175+
146176
bool Agent::setCurrentRobotIndex(int index)
147177
{
148178
ESP_UTILS_LOG_TRACE_GUARD_WITH_THIS();
@@ -189,7 +219,7 @@ bool Agent::sendChatEvent(const ChatEvent &event, bool clear_queue, int wait_fin
189219
ESP_UTILS_LOG_TRACE_GUARD_WITH_THIS();
190220

191221
ESP_UTILS_LOGD(
192-
"Param: event(%d), clear_queue(%d), wait_finish_timeout_ms(%d)", static_cast<int>(event),
222+
"Param: event(%s), clear_queue(%d), wait_finish_timeout_ms(%d)", chatEventToString(event).c_str(),
193223
clear_queue, wait_finish_timeout_ms
194224
);
195225
ESP_UTILS_CHECK_FALSE_RETURN(_flags.is_begun, false, "Not begun");
@@ -210,7 +240,7 @@ bool Agent::sendChatEvent(const ChatEvent &event, bool clear_queue, int wait_fin
210240
while (!_chat_event_queue.empty()) {
211241
auto event_wrapper_tmp = _chat_event_queue.front();
212242
_chat_event_queue.pop();
213-
ESP_UTILS_LOGD("Pop event: %d", static_cast<int>(event_wrapper_tmp.event));
243+
ESP_UTILS_LOGD("Pop event: %s", chatEventToString(event_wrapper_tmp.event).c_str());
214244
}
215245
}
216246
_chat_event_queue.push(event_wrapper);
@@ -223,7 +253,8 @@ bool Agent::sendChatEvent(const ChatEvent &event, bool clear_queue, int wait_fin
223253
}
224254

225255
ESP_UTILS_LOGD(
226-
"Wait chat event finish: %d, timeout_ms(%d)", static_cast<int>(event_wrapper.event), wait_finish_timeout_ms
256+
"Wait chat event finish: %s, timeout_ms(%d)", chatEventToString(event_wrapper.event).c_str(),
257+
wait_finish_timeout_ms
227258
);
228259
auto future = event_wrapper.promise->get_future();
229260
ESP_UTILS_CHECK_FALSE_RETURN(
@@ -257,6 +288,56 @@ void Agent::releaseInstance()
257288
}
258289
}
259290

291+
std::string Agent::chatStateToString(const ChatState &state)
292+
{
293+
switch (state) {
294+
case ChatState::ChatStateDeinit:
295+
return "Deinit";
296+
case ChatState::ChatStateIniting:
297+
return "Initing";
298+
case ChatState::ChatStateInited:
299+
return "Inited";
300+
case ChatState::ChatStateStopping:
301+
return "Stopping";
302+
case ChatState::ChatStateStopped:
303+
return "Stopped";
304+
case ChatState::ChatStateStarting:
305+
return "Starting";
306+
case ChatState::ChatStateStarted:
307+
return "Started";
308+
case ChatState::ChatStateSleeping:
309+
return "Sleeping";
310+
case ChatState::ChatStateSlept:
311+
return "Slept";
312+
case ChatState::ChatStateWaking:
313+
return "Waking";
314+
case ChatState::ChatStateWaked:
315+
return "Waked";
316+
default:
317+
return "Unknown";
318+
}
319+
}
320+
321+
std::string Agent::chatEventToString(const ChatEvent &event)
322+
{
323+
switch (event) {
324+
case ChatEvent::Deinit:
325+
return "Deinit";
326+
case ChatEvent::Init:
327+
return "Init";
328+
case ChatEvent::Stop:
329+
return "Stop";
330+
case ChatEvent::Start:
331+
return "Start";
332+
case ChatEvent::Sleep:
333+
return "Sleep";
334+
case ChatEvent::WakeUp:
335+
return "WakeUp";
336+
default:
337+
return "Unknown";
338+
}
339+
}
340+
260341
bool Agent::isTimeSync()
261342
{
262343
time_t now;
@@ -271,22 +352,24 @@ bool Agent::processChatEvent(const ChatEvent &event)
271352
{
272353
ESP_UTILS_LOG_TRACE_GUARD_WITH_THIS();
273354

274-
ESP_UTILS_LOGD("Process chat event: %d", static_cast<int>(event));
355+
ESP_UTILS_LOGD("Process chat event: %s", chatEventToString(event).c_str());
275356
ESP_UTILS_LOGD(
276-
"Current chat state(%d), last chat event(%d)", static_cast<int>(_chat_state),
277-
static_cast<int>(_last_chat_event)
357+
"Current chat state(%s), last chat event(%s)", chatStateToString(_chat_state).c_str(),
358+
chatEventToString(_last_chat_event).c_str()
278359
);
279360

361+
if (event == _last_chat_event) {
362+
ESP_UTILS_LOGW("Chat event already processed");
363+
return true;
364+
}
365+
280366
chat_event_process_start_signal(event, _last_chat_event);
281367

282368
switch (event) {
283369
case ChatEvent::Deinit:
284370
break;
285371
case ChatEvent::Init: {
286-
if (hasChatState(_ChatStateInit)) {
287-
ESP_UTILS_LOGW("Chat already initing or inited");
288-
return true;
289-
}
372+
ESP_UTILS_CHECK_FALSE_RETURN(isChatState(ChatStateDeinit), false, "Chat not deinit");
290373

291374
{
292375
esp_utils::value_guard chat_state_guard(_chat_state);
@@ -315,19 +398,12 @@ bool Agent::processChatEvent(const ChatEvent &event)
315398
break;
316399
}
317400
case ChatEvent::Stop: {
318-
if (hasChatState(_ChatStateStop)) {
319-
ESP_UTILS_LOGW("Chat already stopping or stopped");
320-
return true;
321-
}
322-
ESP_UTILS_CHECK_FALSE_RETURN(
323-
hasChatState(_ChatStateStart), false, "Invalid chat state(%d)", static_cast<int>(_chat_state)
324-
);
401+
ESP_UTILS_CHECK_FALSE_RETURN(hasChatState(ChatStateStarted), false, "Invalid chat state");
325402

326403
{
327404
esp_utils::value_guard chat_state_guard(_chat_state);
328405
chat_state_guard.set(ChatStateStopping);
329406

330-
coze_chat_app_pause();
331407
ESP_UTILS_CHECK_FALSE_RETURN(coze_chat_app_stop() == ESP_OK, false, "Stop chat failed");
332408

333409
chat_state_guard.set(ChatStateStopped);
@@ -336,13 +412,11 @@ bool Agent::processChatEvent(const ChatEvent &event)
336412
break;
337413
}
338414
case ChatEvent::Start: {
339-
if (hasChatState(_ChatStateStart)) {
340-
ESP_UTILS_LOGW("Chat already starting or started");
415+
if (hasChatState(ChatStateStarted)) {
416+
ESP_UTILS_LOGW("Chat already started");
341417
return true;
342418
}
343-
ESP_UTILS_CHECK_FALSE_RETURN(
344-
hasChatState(ChatStateInited), false, "Invalid chat state(%d)", static_cast<int>(_chat_state)
345-
);
419+
ESP_UTILS_CHECK_FALSE_RETURN(hasChatState(ChatStateInited), false, "Invalid chat state");
346420

347421
{
348422
esp_utils::value_guard chat_state_guard(_chat_state);
@@ -370,58 +444,38 @@ bool Agent::processChatEvent(const ChatEvent &event)
370444
chat_event_process_special_signal(ChatEventSpecialSignalType::StartMaxRetry);
371445
ESP_UTILS_CHECK_FALSE_RETURN(false, false, "Start chat failed after %d retries", max_retries);
372446
}
373-
coze_chat_app_resume();
374-
_flags.is_sleep = false;
375-
_flags.is_paused = false;
376447

377448
chat_state_guard.set(ChatStateStarted);
378449
chat_state_guard.release();
379450
}
380451
break;
381452
}
382-
case ChatEvent::Pause: {
383-
if (_flags.is_paused) {
384-
ESP_UTILS_LOGW("Chat already paused");
385-
return true;
386-
}
387-
ESP_UTILS_CHECK_FALSE_RETURN(hasChatState(_ChatStateStart), false, "Chat not started");
388-
389-
coze_chat_app_pause();
390-
_flags.is_paused = true;
391-
break;
392-
}
393-
case ChatEvent::Resume: {
394-
if (!_flags.is_paused) {
395-
ESP_UTILS_LOGW("Chat not paused");
396-
return true;
397-
}
398-
ESP_UTILS_CHECK_FALSE_RETURN(hasChatState(_ChatStateStart), false, "Chat not started");
399-
400-
coze_chat_app_resume();
401-
_flags.is_paused = false;
402-
break;
403-
}
404453
case ChatEvent::Sleep: {
405-
if (_flags.is_sleep) {
406-
ESP_UTILS_LOGW("Chat already sleep");
407-
return true;
408-
}
409-
ESP_UTILS_CHECK_FALSE_RETURN(hasChatState(_ChatStateStart), false, "Chat not started");
454+
ESP_UTILS_CHECK_FALSE_RETURN(hasChatState(ChatStateStarted), false, "Chat not started");
455+
456+
esp_utils::value_guard chat_state_guard(_chat_state);
457+
chat_state_guard.set(ChatStateSleeping);
410458

411-
// Should be called before set chat state to sleep
412459
coze_chat_app_sleep();
413-
_flags.is_sleep = true;
460+
461+
chat_state_guard.set(ChatStateSlept);
462+
chat_state_guard.release();
414463
break;
415464
}
416465
case ChatEvent::WakeUp: {
417-
if (!_flags.is_sleep) {
418-
ESP_UTILS_LOGW("Chat not sleep");
466+
if (isChatState(ChatStateStarted)) {
467+
ESP_UTILS_LOGW("Chat already woke up");
419468
return true;
420469
}
421-
ESP_UTILS_CHECK_FALSE_RETURN(hasChatState(_ChatStateStart), false, "Chat not started");
470+
ESP_UTILS_CHECK_FALSE_RETURN(isChatState(ChatStateSlept), false, "Chat not slept");
471+
472+
esp_utils::value_guard chat_state_guard(_chat_state);
473+
chat_state_guard.set(ChatStateWaking);
422474

423475
coze_chat_app_wakeup();
424-
_flags.is_sleep = false;
476+
477+
chat_state_guard.set(ChatStateWaked);
478+
chat_state_guard.release();
425479
break;
426480
}
427481
default:

0 commit comments

Comments
 (0)