Files
xiaozhi-esp32/main/display/display.cc
2025-12-09 17:20:01 +08:00

100 lines
2.8 KiB
C++

#include <esp_log.h>
#include <esp_err.h>
#include <string>
#include <cstdlib>
#include <cstring>
#include <font_awesome.h>
#include "display.h"
#include "board.h"
#include "application.h"
#include "audio_codec.h"
#include "settings.h"
#include "assets/lang_config.h"
#define TAG "Display"
Display::Display() {
}
Display::~Display() {
}
void Display::SetStatus(const char* status) {
ESP_LOGW(TAG, "SetStatus: %s", status);
}
void Display::ShowNotification(const std::string &notification, int duration_ms) {
ShowNotification(notification.c_str(), duration_ms);
}
void Display::ShowNotification(const char* notification, int duration_ms) {
ESP_LOGW(TAG, "ShowNotification: %s", notification);
}
void Display::UpdateStatusBar(bool update_all) {
}
void Display::SetEmotion(const char* emotion) {
ESP_LOGW(TAG, "SetEmotion: %s", emotion);
}
void Display::SetChatMessage(const char* role, const char* content) {
ESP_LOGW(TAG, "Role:%s", role);
ESP_LOGW(TAG, " %s", content);
}
void Display::SetTheme(Theme* theme) {
current_theme_ = theme;
Settings settings("display", true);
settings.SetString("theme", theme->name());
}
void Display::SetPowerSaveMode(bool on) {
ESP_LOGW(TAG, "SetPowerSaveMode: %d", on);
}
void Display::SetMusicInfo(const char* song_name) {
// 默认实现:对于非微信模式,将歌名显示在聊天消息标签中
DisplayLockGuard lock(this);
if (chat_message_label_ == nullptr) {
return;
}
if (song_name != nullptr && strlen(song_name) > 0) {
std::string music_text = "";
music_text += song_name;
lv_label_set_text(chat_message_label_, music_text.c_str());
SetEmotion(FONT_AWESOME_MUSIC);
} else {
lv_label_set_text(chat_message_label_, "");
SetEmotion(FONT_AWESOME_NEUTRAL);
}
}
void Display::SetMusicProgress(const char* song_name, int current_seconds, int total_seconds, float progress_percent) {
// 默认实现:简化显示,只显示歌名和时间
char time_info[64];
int current_min = current_seconds / 60;
int current_sec = current_seconds % 60;
int total_min = total_seconds / 60;
int total_sec = total_seconds % 60;
snprintf(time_info, sizeof(time_info), "%s %02d:%02d / %02d:%02d",
song_name ? song_name : "Unknown",
current_min, current_sec, total_min, total_sec);
DisplayLockGuard lock(this);
if (chat_message_label_ != nullptr) {
lv_label_set_text(chat_message_label_, time_info);
SetEmotion(FONT_AWESOME_MUSIC);
}
}
void Display::ClearMusicInfo() {
DisplayLockGuard lock(this);
if (chat_message_label_ != nullptr) {
lv_label_set_text(chat_message_label_, "");
SetEmotion(FONT_AWESOME_NEUTRAL);
}
}