feat: GIF动画表情系统 + 情绪映射增强 + HTTPS音频中止修复
一、新增功能: 1、新增8种GIF动画表情(200x89) + 3种叠加图标(45x45),实现22种情绪标签到GIF的映射表; 2、新增30+组英文近义词情绪fallback映射(如worried→sad),防止AI使用非标准标签时GIF无法切换; 3、新增HTTPS中止后诊断日志,自动追踪前20帧音频处理流程便于定位无声问题; 二、Bug修复: 4、修复HTTPS播放中止后RTC音频解码参数未恢复(16000/60→8000/20),通过background_task_串行化恢复; 5、修复AbortHttpsPlayback解码器竞态崩溃,将重置/恢复/DMA flush全部串行化执行; 6、修复LVGL gifdec不支持无全局颜色表GIF的问题,支持仅使用局部颜色表的压缩GIF; 7、修复GIF透明区域显示黑色方块,canvas初始alpha改为0x00; 8、修复lv_gif定时器gif对象为NULL时的空指针崩溃; 三、优化: 9、情绪标签从等待is_final改为第一条字幕即时触发GIF切换,新增去重和回复结束自动恢复neutral; 10、对话状态表情映射优化:THINKING→thinking、ANSWERING→happy、INTERRUPTED→surprised; 11、CPU核心绑定:LVGL任务Core0,音频循环Core1,避免GIF解码与音频争抢; 12、中文情绪词映射扩展,新增担心/心疼/着急等映射; Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
da098bf482
commit
919bf8f28f
1
.gitignore
vendored
1
.gitignore
vendored
@ -21,3 +21,4 @@ sdkconfig.old
|
||||
05-最新日志.txt
|
||||
07-uniapp最新日志.txt
|
||||
/Dzbj_ESP32_S3
|
||||
/esp-brookesia-master
|
||||
|
||||
@ -53,7 +53,7 @@ set(SOURCES "audio_codecs/audio_codec.cc"
|
||||
"ui/images/ui_img_s12_png.c"
|
||||
"ui/images/ui_img_s13_png.c"
|
||||
"ui/images/ui_img_s14_png.c"
|
||||
# emoji 表情图片资源
|
||||
# emoji 表情图片资源(旧 PNG 静态表情,保留备用)
|
||||
"ui/images/ui_img_neutral_png.c"
|
||||
"ui/images/ui_img_happy_png.c"
|
||||
"ui/images/ui_img_sad_png.c"
|
||||
@ -61,6 +61,19 @@ set(SOURCES "audio_codecs/audio_codec.cc"
|
||||
"ui/images/ui_img_crying_png.c"
|
||||
"ui/images/ui_img_funny_png.c"
|
||||
"ui/images/ui_img_laughing_png.c"
|
||||
# GIF 动画表情资源(压缩优化,200x89)
|
||||
"ui/images/my_emotion/emotion_angry_200_89.c"
|
||||
"ui/images/my_emotion/emotion_blink1_200_89.c"
|
||||
"ui/images/my_emotion/emotion_blink_fast_200_89.c"
|
||||
"ui/images/my_emotion/emotion_blink_slow_200_89.c"
|
||||
"ui/images/my_emotion/emotion_dizzy_200_89.c"
|
||||
"ui/images/my_emotion/emotion_happy_200_89.c"
|
||||
"ui/images/my_emotion/emotion_sad_200_89.c"
|
||||
"ui/images/my_emotion/emotion_sleep_200_89.c"
|
||||
# GIF 动画图标资源(压缩优化,45x45,叠加在表情上)
|
||||
"ui/images/my_icon/icon_emotion_confused_45.c"
|
||||
"ui/images/my_icon/icon_emotion_sleep_45.c"
|
||||
"ui/images/my_icon/icon_emotion_thinking_45.c"
|
||||
)
|
||||
|
||||
set(INCLUDE_DIRS "." "display" "audio_codecs" "protocols" "audio_processing" "audio" "dzbj" "ui")
|
||||
|
||||
@ -35,6 +35,9 @@
|
||||
#define TAG "Application"
|
||||
#define MAC_TAG "BluetoothMAC"
|
||||
|
||||
// AI 对话界面 GIF 动画控制(纯 C 函数)
|
||||
extern "C" void ai_chat_resume_animation(void);
|
||||
|
||||
// 设备空闲无对话状态 倒计时
|
||||
#define DIALOG_IDLE_COUNTDOWN_SECONDS 40
|
||||
|
||||
@ -621,7 +624,7 @@ void Application::Start() {
|
||||
Application* app = (Application*)arg;
|
||||
app->AudioLoop();
|
||||
vTaskDelete(NULL);
|
||||
}, "audio_loop", 4096 * 3, this, 8, &audio_loop_task_handle_, realtime_chat_enabled_ ? 1 : 0);
|
||||
}, "audio_loop", 4096 * 3, this, 8, &audio_loop_task_handle_, 1); // 始终绑定 Core 1,与 LVGL(Core0) 隔离避免 GIF 解码争抢
|
||||
|
||||
/* Start the main loop */
|
||||
xTaskCreatePinnedToCore([](void* arg) {
|
||||
@ -1257,19 +1260,19 @@ void Application::Start() {
|
||||
display->SetStatus("聆听中...");
|
||||
break;
|
||||
case 2: // THINKING
|
||||
display->SetEmotion("neutral");
|
||||
display->SetEmotion("thinking");
|
||||
display->SetStatus("思考中...");
|
||||
break;
|
||||
case 3: // ANSWERING
|
||||
display->SetEmotion("laughing");
|
||||
display->SetEmotion("happy");
|
||||
display->SetStatus("说话中...");
|
||||
break;
|
||||
case 4: // INTERRUPTED
|
||||
display->SetEmotion("funny");
|
||||
display->SetEmotion("surprised");
|
||||
display->SetStatus("聆听中...");
|
||||
break;
|
||||
case 5: // ANSWER_FINISH
|
||||
display->SetEmotion("happy");
|
||||
display->SetEmotion("neutral");
|
||||
display->SetStatus("聆听中...");
|
||||
break;
|
||||
}
|
||||
@ -1298,8 +1301,9 @@ void Application::Start() {
|
||||
std::string msg = text->valuestring;
|
||||
std::string emotion_str;
|
||||
|
||||
// 提取并剥离字幕开头的情绪标签(如 "(平静)今天...")
|
||||
// 实际 UTF-8:(= 0xEF 0xBC 0x88,)= 0xEF 0xBC 0x89
|
||||
// 提取并剥离字幕开头的情绪标签
|
||||
// 格式: "(happy)今天..." 或 "(平静)今天..."
|
||||
// UTF-8:(= 0xEF 0xBC 0x88,)= 0xEF 0xBC 0x89
|
||||
if (!is_user && msg.size() >= 6) {
|
||||
const char* p = msg.c_str();
|
||||
// 检查是否以全角左括号(开头
|
||||
@ -1317,41 +1321,111 @@ void Application::Start() {
|
||||
}
|
||||
}
|
||||
|
||||
// 如果提取到情绪标签,映射到 emoji
|
||||
if (!emotion_str.empty() && is_final) {
|
||||
// 中文情绪词 → emoji 映射
|
||||
struct { const char* keyword; const char* emoji; } emotion_map[] = {
|
||||
{"开心", "happy"}, {"高兴", "happy"}, {"愉快", "happy"}, {"喜悦", "happy"},
|
||||
{"兴奋", "happy"}, {"快乐", "happy"}, {"欢喜", "happy"},
|
||||
{"平静", "neutral"}, {"冷静", "neutral"}, {"沉思", "neutral"},
|
||||
{"思考", "neutral"}, {"疑惑", "neutral"}, {"好奇", "neutral"},
|
||||
{"伤心", "sad"}, {"悲伤", "sad"}, {"难过", "sad"}, {"失落", "sad"},
|
||||
{"忧伤", "sad"}, {"惆怅", "sad"}, {"低落", "sad"},
|
||||
{"生气", "angry"}, {"愤怒", "angry"}, {"恼怒", "angry"}, {"不满", "angry"},
|
||||
{"烦躁", "angry"}, {"气愤", "angry"},
|
||||
{"哭泣", "crying"}, {"大哭", "crying"}, {"委屈", "crying"}, {"心疼", "crying"},
|
||||
{"搞笑", "funny"}, {"调皮", "funny"}, {"惊讶", "funny"}, {"吃惊", "funny"},
|
||||
{"俏皮", "funny"}, {"得意", "funny"}, {"无奈", "funny"},
|
||||
{"大笑", "laughing"}, {"哈哈", "laughing"}, {"笑", "laughing"},
|
||||
{"开怀", "laughing"}, {"爆笑", "laughing"},
|
||||
};
|
||||
// 去重用:记录当前轮次已设置的情绪,避免中间字幕重复触发
|
||||
static std::string last_subtitle_emotion;
|
||||
|
||||
// 即时处理情绪标签(不等 is_final,第一条字幕就触发 GIF 切换)
|
||||
if (!emotion_str.empty()) {
|
||||
const char* mapped_emoji = nullptr;
|
||||
for (auto& entry : emotion_map) {
|
||||
if (emotion_str.find(entry.keyword) != std::string::npos) {
|
||||
mapped_emoji = entry.emoji;
|
||||
|
||||
// 英文情绪名直接使用(如 "happy"、"sleepy")
|
||||
static const char* valid_emotions[] = {
|
||||
"neutral", "happy", "sad", "angry", "thinking",
|
||||
"confused", "surprised", "sleepy", "dizzy",
|
||||
"embarrassed", "laughing", "funny", "crying",
|
||||
"loving", "relaxed", "shocked", "curious", "blink",
|
||||
"silly", "confident",
|
||||
};
|
||||
for (auto& valid : valid_emotions) {
|
||||
if (emotion_str == valid) {
|
||||
mapped_emoji = valid;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (mapped_emoji) {
|
||||
|
||||
// 回退1:英文近义词映射(AI可能使用非标准英文标签)
|
||||
if (!mapped_emoji) {
|
||||
struct { const char* alias; const char* emoji; } en_fallback[] = {
|
||||
{"worried", "sad"}, {"anxious", "sad"}, {"nervous", "sad"},
|
||||
{"excited", "happy"}, {"joyful", "happy"}, {"cheerful", "happy"},
|
||||
{"scared", "shocked"}, {"afraid", "shocked"}, {"fearful", "shocked"},
|
||||
{"proud", "confident"}, {"determined", "confident"},
|
||||
{"annoyed", "angry"}, {"frustrated", "angry"}, {"irritated", "angry"},
|
||||
{"shy", "embarrassed"}, {"awkward", "embarrassed"},
|
||||
{"bored", "sleepy"}, {"tired", "sleepy"}, {"exhausted", "sleepy"},
|
||||
{"playful", "silly"}, {"mischievous", "silly"}, {"naughty", "silly"},
|
||||
{"gentle", "loving"}, {"warm", "loving"}, {"tender", "loving"},
|
||||
{"calm", "relaxed"}, {"peaceful", "relaxed"}, {"chill", "relaxed"},
|
||||
{"puzzled", "confused"}, {"lost", "confused"},
|
||||
{"amazed", "surprised"}, {"astonished", "surprised"},
|
||||
{"moved", "crying"}, {"touched", "crying"},
|
||||
{"hilarious", "laughing"}, {"amused", "laughing"},
|
||||
};
|
||||
for (auto& entry : en_fallback) {
|
||||
if (emotion_str == entry.alias) {
|
||||
mapped_emoji = entry.emoji;
|
||||
ESP_LOGI(TAG, "英文近义词映射: %s → %s", entry.alias, entry.emoji);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 回退2:中文情绪词映射(兼容旧 prompt)
|
||||
if (!mapped_emoji) {
|
||||
struct { const char* keyword; const char* emoji; } cn_map[] = {
|
||||
{"开心", "happy"}, {"高兴", "happy"}, {"快乐", "happy"},
|
||||
{"平静", "neutral"}, {"冷静", "neutral"}, {"正常", "neutral"},
|
||||
{"思考", "thinking"}, {"沉吟", "thinking"},
|
||||
{"困惑", "confused"}, {"疑惑", "confused"},
|
||||
{"好奇", "curious"}, {"感兴趣", "curious"},
|
||||
{"惊讶", "surprised"}, {"吃惊", "surprised"},
|
||||
{"震惊", "shocked"}, {"没想到", "shocked"},
|
||||
{"伤心", "sad"}, {"难过", "sad"}, {"失落", "sad"},
|
||||
{"生气", "angry"}, {"愤怒", "angry"}, {"不满", "angry"},
|
||||
{"尴尬", "embarrassed"}, {"害羞", "embarrassed"}, {"脸红", "blink"},
|
||||
{"撒娇", "blink"}, {"卖萌", "blink"},
|
||||
{"大笑", "laughing"}, {"哈哈", "laughing"},
|
||||
{"搞笑", "funny"}, {"滑稽", "funny"}, {"逗趣", "funny"},
|
||||
{"哭泣", "crying"}, {"感动", "crying"},
|
||||
{"喜欢", "loving"}, {"爱", "loving"},
|
||||
{"放松", "relaxed"}, {"悠闲", "relaxed"},
|
||||
{"自信", "confident"}, {"肯定", "confident"},
|
||||
{"调皮", "silly"}, {"搞怪", "silly"},
|
||||
{"困倦", "sleepy"}, {"犯困", "sleepy"}, {"困", "sleepy"}, {"疲倦", "sleepy"},
|
||||
{"头晕", "dizzy"}, {"眩晕", "dizzy"},
|
||||
{"担心", "sad"}, {"心疼", "sad"}, {"着急", "sad"},
|
||||
};
|
||||
for (auto& entry : cn_map) {
|
||||
if (emotion_str.find(entry.keyword) != std::string::npos) {
|
||||
mapped_emoji = entry.emoji;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 去重:同一情绪不重复设置(中间字幕每条都带相同标签)
|
||||
if (mapped_emoji && last_subtitle_emotion != mapped_emoji) {
|
||||
last_subtitle_emotion = mapped_emoji;
|
||||
ESP_LOGI(TAG, "字幕情绪: %s → %s", emotion_str.c_str(), mapped_emoji);
|
||||
Schedule([this, display, emo = std::string(mapped_emoji)]() {
|
||||
display->SetEmotion(emo.c_str());
|
||||
});
|
||||
} else {
|
||||
} else if (!mapped_emoji) {
|
||||
ESP_LOGW(TAG, "未映射的字幕情绪: %s", emotion_str.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
// AI 回复结束时自动恢复 neutral(对齐喵伴 speaking_signal(false) 机制)
|
||||
if (is_final && !is_user) {
|
||||
if (last_subtitle_emotion != "neutral") {
|
||||
last_subtitle_emotion = "neutral";
|
||||
ESP_LOGI(TAG, "AI回复结束,表情恢复 neutral");
|
||||
Schedule([this, display]() {
|
||||
display->SetEmotion("neutral");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const char* role = is_user ? "USER" : "AI";
|
||||
ESP_LOGI(TAG, "%s %s: %s", is_final ? "📝" : "..", role, msg.c_str());
|
||||
|
||||
@ -2139,6 +2213,16 @@ void Application::OnAudioOutput() {
|
||||
|
||||
int src_rate = decoded ? opus_decoder_->sample_rate() : (protocol_ ? protocol_->server_sample_rate() : 16000);
|
||||
static bool first_play_logged = false;
|
||||
|
||||
// 🔍 HTTPS中止后诊断日志:追踪前N帧音频处理流程
|
||||
int dbg = post_abort_debug_frames_.load();
|
||||
if (dbg > 0) {
|
||||
post_abort_debug_frames_.fetch_sub(1);
|
||||
ESP_LOGI(TAG, "🔍 中止后音频[%d]: pcm=%zu样本 src_rate=%d treat_pcm=%d decoded=%d opus_frame=%d pipeline=%d output_en=%d",
|
||||
20 - dbg + 1, pcm.size(), src_rate, (int)treat_as_pcm, (int)decoded,
|
||||
(int)is_opus_frame, (player_pipeline_ != nullptr), codec->output_enabled());
|
||||
}
|
||||
|
||||
if (player_pipeline_) {
|
||||
player_pipeline_set_src_rate(player_pipeline_, src_rate);
|
||||
int bytes = (int)(pcm.size() * sizeof(int16_t));
|
||||
@ -2478,7 +2562,7 @@ void Application::AbortSpeaking(AbortReason reason) {
|
||||
is_aborting_.store(false);
|
||||
}
|
||||
|
||||
// 中止HTTPS音频播放:清空队列、重置解码器、清除标志、DMA flush
|
||||
// 中止HTTPS音频播放:清空队列、重置解码器、恢复RTC参数、清除标志、DMA flush
|
||||
void Application::AbortHttpsPlayback(const char* reason) {
|
||||
ESP_LOGI(TAG, "🔴 %s,中止HTTPS音频播放", reason);
|
||||
https_playback_abort_.store(true);
|
||||
@ -2489,23 +2573,58 @@ void Application::AbortHttpsPlayback(const char* reason) {
|
||||
audio_decode_queue_.clear();
|
||||
}
|
||||
}
|
||||
ResetDecoder();
|
||||
// 先清除播放标志,让 background_task_ 中残留的 lambda 尽快跳过
|
||||
opus_playback_active_.store(false);
|
||||
https_playback_active_.store(false);
|
||||
ESP_LOGI(TAG, "🔴 HTTPS播放标志已清除,RTC音频通道已打开");
|
||||
// DMA flush:用独立任务立即清空I2S DMA缓冲区
|
||||
// 不能用background_task_,RTC音频lambda会持续占用它导致延迟数秒
|
||||
xTaskCreate([](void* arg) {
|
||||
auto codec = Board::GetInstance().GetAudioCodec();
|
||||
if (codec) {
|
||||
ESP_LOGI(TAG, "DMA flush: output_enabled=%d", codec->output_enabled());
|
||||
codec->EnableOutput(false);
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
codec->EnableOutput(true);
|
||||
ESP_LOGI(TAG, "🔇 音频输出已重置,DMA缓冲区已清空");
|
||||
|
||||
// 启用诊断日志:追踪中止后前20帧RTC音频的处理流程
|
||||
post_abort_debug_frames_.store(20);
|
||||
|
||||
// 🔧 关键修复:通过 background_task_ 串行化解码器操作,避免与音频处理 lambda 竞态
|
||||
// 直接调用 SetDecodeSampleRate 会在 RTC 回调线程上 reset opus_decoder_,
|
||||
// 而 background_task_ 线程可能正在 opus_decoder_->Decode(),导致 LoadProhibited 崩溃
|
||||
if (background_task_) {
|
||||
int srv_rate = 0, srv_dur = 0;
|
||||
if (protocol_) {
|
||||
srv_rate = protocol_->server_sample_rate();
|
||||
srv_dur = protocol_->server_frame_duration();
|
||||
}
|
||||
vTaskDelete(NULL);
|
||||
}, "dma_flush", 4096, NULL, 10, NULL);
|
||||
background_task_->Schedule([this, srv_rate, srv_dur]() {
|
||||
// 在 background_task_ 线程内安全重置解码器
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
opus_decoder_->ResetState();
|
||||
audio_decode_queue_.clear();
|
||||
last_output_time_ = std::chrono::steady_clock::now();
|
||||
}
|
||||
|
||||
// 恢复RTC音频解码参数(HTTPS播放会修改为16000/60,需恢复为RTC的8000/20)
|
||||
if (srv_rate > 0 && srv_dur > 0) {
|
||||
SetDecodeSampleRate(srv_rate, srv_dur);
|
||||
ESP_LOGI(TAG, "🔧 已恢复RTC解码参数: %dHz/%dms", srv_rate, srv_dur);
|
||||
}
|
||||
|
||||
// DMA flush:在同一线程中执行,确保与 codec 写入串行
|
||||
auto codec = Board::GetInstance().GetAudioCodec();
|
||||
if (codec) {
|
||||
codec->EnableOutput(false);
|
||||
vTaskDelay(pdMS_TO_TICKS(20));
|
||||
codec->EnableOutput(true);
|
||||
ESP_LOGI(TAG, "🔇 DMA缓冲区已清空,解码器已重置");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// fallback:无 background_task_ 时直接操作(吧唧模式不走此路径)
|
||||
ResetDecoder();
|
||||
if (protocol_) {
|
||||
int srv_rate = protocol_->server_sample_rate();
|
||||
int srv_dur = protocol_->server_frame_duration();
|
||||
if (srv_rate > 0 && srv_dur > 0) {
|
||||
SetDecodeSampleRate(srv_rate, srv_dur);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 通过HTTPS下载JSON并播放音频(故事/歌曲等)
|
||||
@ -3168,6 +3287,19 @@ void Application::HttpsApiPlayback(const char* api_url_base, const char* tag, co
|
||||
app.https_playback_active_.store(false);
|
||||
app.https_playback_abort_.store(false);
|
||||
app.opus_playback_active_.store(false);
|
||||
|
||||
// 🔧 修复:通过 background_task_ 恢复RTC解码参数,避免与音频处理 lambda 竞态
|
||||
if (app.background_task_ && app.protocol_) {
|
||||
int srv_rate = app.protocol_->server_sample_rate();
|
||||
int srv_dur = app.protocol_->server_frame_duration();
|
||||
if (srv_rate > 0 && srv_dur > 0) {
|
||||
app.background_task_->Schedule([&app, srv_rate, srv_dur, tag]() {
|
||||
app.SetDecodeSampleRate(srv_rate, srv_dur);
|
||||
ESP_LOGI(TAG, "[%s] 已恢复RTC解码参数: %dHz/%dms", tag, srv_rate, srv_dur);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "[%s] 播放结束, 堆: %lu", tag,
|
||||
(unsigned long)esp_get_free_heap_size());
|
||||
vTaskDelete(NULL);
|
||||
|
||||
@ -152,6 +152,7 @@ private:
|
||||
std::atomic<bool> opus_playback_active_{false};// Opus解码播放活跃标志(WS/HTTPS共用)
|
||||
std::atomic<bool> https_playback_active_{false};// HTTPS音频播放进行中标志
|
||||
std::atomic<bool> https_playback_abort_{false};// HTTPS音频播放中止标志
|
||||
std::atomic<int> post_abort_debug_frames_{0};// HTTPS中止后诊断日志计数(追踪前N帧音频)
|
||||
bool aborted_ = false;
|
||||
bool voice_detected_ = false;
|
||||
bool audio_paused_ = false; // 音频暂停状态标志
|
||||
|
||||
@ -49,6 +49,7 @@ extern "C" void init_spiffs_image_list(void);
|
||||
|
||||
// AI 对话屏幕初始化(纯 C,避免 lv_font_t 冲突)
|
||||
extern "C" void ai_chat_screen_init(void);
|
||||
extern "C" void ai_chat_resume_animation(void);
|
||||
|
||||
// 背光初始化(pages_pwm.h 包含 LVGL 头文件,不能直接 include)
|
||||
extern "C" void pwm_init(void);
|
||||
|
||||
@ -103,6 +103,7 @@ SpiLcdDisplay::SpiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_h
|
||||
ESP_LOGI(TAG, "Initialize LVGL port");
|
||||
lvgl_port_cfg_t port_cfg = ESP_LVGL_PORT_INIT_CONFIG();
|
||||
port_cfg.task_priority = 1;
|
||||
port_cfg.task_affinity = 0; // 绑定 Core 0,与 WiFi/BLE 同核,让 Core 1 专供音频
|
||||
port_cfg.timer_period_ms = 50;
|
||||
lvgl_port_init(&port_cfg);
|
||||
|
||||
|
||||
@ -1,12 +1,37 @@
|
||||
#include "ai_chat_ui.h"
|
||||
#include "lvgl.h"
|
||||
#include "esp_lvgl_port.h"
|
||||
#include "esp_log.h"
|
||||
#include <string.h>
|
||||
|
||||
// lv_gif API 通过 lvgl.h 自动包含(LV_USE_GIF=y 时)
|
||||
|
||||
static const char *TAG = "AI_CHAT_UI";
|
||||
|
||||
// 声明阿里巴巴普惠体 20px 4bpp(GB2312 简体中文+ASCII)
|
||||
LV_FONT_DECLARE(font_puhui_20_4);
|
||||
|
||||
// 声明 emoji 图片资源
|
||||
#if LV_USE_GIF
|
||||
// 需要访问 lv_gif_t 内部结构(暂停/恢复定时器)
|
||||
#include "extra/libs/gif/lv_gif.h"
|
||||
|
||||
// 声明 GIF 表情资源(压缩优化,200x89)
|
||||
LV_IMG_DECLARE(emotion_angry_200_89);
|
||||
LV_IMG_DECLARE(emotion_blink1_200_89);
|
||||
LV_IMG_DECLARE(emotion_blink_fast_200_89);
|
||||
LV_IMG_DECLARE(emotion_blink_slow_200_89);
|
||||
LV_IMG_DECLARE(emotion_dizzy_200_89);
|
||||
LV_IMG_DECLARE(emotion_happy_200_89);
|
||||
LV_IMG_DECLARE(emotion_sad_200_89);
|
||||
LV_IMG_DECLARE(emotion_sleep_200_89);
|
||||
|
||||
// 声明 GIF 图标资源(压缩优化,45x45)
|
||||
LV_IMG_DECLARE(icon_emotion_confused_45);
|
||||
LV_IMG_DECLARE(icon_emotion_sleep_45);
|
||||
LV_IMG_DECLARE(icon_emotion_thinking_45);
|
||||
#endif
|
||||
|
||||
// 声明旧 PNG 表情资源(LV_USE_GIF 未启用时的回退)
|
||||
LV_IMG_DECLARE(ui_img_neutral_png);
|
||||
LV_IMG_DECLARE(ui_img_happy_png);
|
||||
LV_IMG_DECLARE(ui_img_sad_png);
|
||||
@ -17,12 +42,54 @@ LV_IMG_DECLARE(ui_img_laughing_png);
|
||||
|
||||
// 屏幕和控件
|
||||
static lv_obj_t *ai_screen = NULL;
|
||||
static lv_obj_t *emoji_img = NULL;
|
||||
static lv_obj_t *status_label = NULL;
|
||||
static lv_obj_t *chat_label = NULL;
|
||||
|
||||
// 背景色
|
||||
#define BG_COLOR 0x121212
|
||||
#if LV_USE_GIF
|
||||
static lv_obj_t *gif_emotion = NULL; // GIF 表情对象
|
||||
static lv_obj_t *gif_icon = NULL; // GIF 图标对象(叠加在表情右上角)
|
||||
static bool gif_animation_paused = false;
|
||||
#else
|
||||
static lv_obj_t *emoji_img = NULL; // 旧 PNG 表情
|
||||
#endif
|
||||
|
||||
// 背景色(纯黑,与 GIF 背景一致避免色差)
|
||||
#define BG_COLOR 0x000000
|
||||
|
||||
// 表情→GIF 映射表
|
||||
typedef struct {
|
||||
const char *name;
|
||||
const lv_img_dsc_t *emotion_gif;
|
||||
const lv_img_dsc_t *icon_gif; // NULL 表示无叠加图标
|
||||
} emotion_gif_entry_t;
|
||||
|
||||
#if LV_USE_GIF
|
||||
static const emotion_gif_entry_t emotion_gif_map[] = {
|
||||
{"neutral", &emotion_blink_slow_200_89, NULL},
|
||||
{"happy", &emotion_happy_200_89, NULL},
|
||||
{"laughing", &emotion_happy_200_89, NULL},
|
||||
{"funny", &emotion_happy_200_89, NULL},
|
||||
{"loving", &emotion_happy_200_89, NULL},
|
||||
{"relaxed", &emotion_happy_200_89, NULL},
|
||||
{"delicious", &emotion_happy_200_89, NULL},
|
||||
{"kissy", &emotion_happy_200_89, NULL},
|
||||
{"confident", &emotion_happy_200_89, NULL},
|
||||
{"sad", &emotion_sad_200_89, NULL},
|
||||
{"crying", &emotion_sad_200_89, NULL},
|
||||
{"angry", &emotion_angry_200_89, NULL},
|
||||
{"surprised", &emotion_blink_fast_200_89, NULL},
|
||||
{"shocked", &emotion_blink_fast_200_89, NULL},
|
||||
{"silly", &emotion_blink_fast_200_89, NULL},
|
||||
{"embarrassed", &emotion_blink_fast_200_89, &icon_emotion_thinking_45},
|
||||
{"thinking", &emotion_blink_fast_200_89, &icon_emotion_thinking_45},
|
||||
{"confused", &emotion_blink_fast_200_89, &icon_emotion_confused_45},
|
||||
{"curious", &emotion_blink_fast_200_89, &icon_emotion_confused_45},
|
||||
{"dizzy", &emotion_dizzy_200_89, NULL},
|
||||
{"blink", &emotion_blink1_200_89, NULL},
|
||||
{"sleepy", &emotion_sleep_200_89, &icon_emotion_sleep_45},
|
||||
};
|
||||
#define EMOTION_GIF_MAP_SIZE (sizeof(emotion_gif_map) / sizeof(emotion_gif_map[0]))
|
||||
#endif
|
||||
|
||||
void ai_chat_screen_init(void) {
|
||||
// 创建 AI 对话屏幕
|
||||
@ -31,21 +98,41 @@ void ai_chat_screen_init(void) {
|
||||
lv_obj_set_style_bg_opa(ai_screen, 255, 0);
|
||||
lv_obj_clear_flag(ai_screen, LV_OBJ_FLAG_SCROLLABLE);
|
||||
|
||||
// emoji 表情图片(屏幕中央偏上)
|
||||
#if LV_USE_GIF
|
||||
// GIF 表情(屏幕正中央,200x89)
|
||||
gif_emotion = lv_gif_create(ai_screen);
|
||||
lv_gif_set_src(gif_emotion, &emotion_blink_slow_200_89);
|
||||
lv_obj_align(gif_emotion, LV_ALIGN_CENTER, 0, 0);
|
||||
|
||||
// 降低 GIF 定时器频率(10ms→20ms),平衡动画流畅度与 CPU 占用
|
||||
lv_gif_t *gifobj = (lv_gif_t *)gif_emotion;
|
||||
lv_timer_set_period(gifobj->timer, 20);
|
||||
|
||||
// GIF 图标(表情上方居中,45x45)
|
||||
// 表情高89,顶边y=-44.5,icon高45,中心再上移几像素避免重叠
|
||||
gif_icon = lv_gif_create(ai_screen);
|
||||
lv_obj_align(gif_icon, LV_ALIGN_CENTER, 0, -70);
|
||||
lv_obj_add_flag(gif_icon, LV_OBJ_FLAG_HIDDEN);
|
||||
#else
|
||||
// 旧 PNG 表情(回退方案)
|
||||
emoji_img = lv_img_create(ai_screen);
|
||||
lv_img_set_src(emoji_img, &ui_img_neutral_png);
|
||||
lv_obj_align(emoji_img, LV_ALIGN_CENTER, 0, -55);
|
||||
lv_obj_align(emoji_img, LV_ALIGN_CENTER, 0, 0);
|
||||
#endif
|
||||
|
||||
// 状态文本(表情下方,居中)
|
||||
// 状态文本(暂时隐藏,GIF 模式下不需要文字)
|
||||
status_label = lv_label_create(ai_screen);
|
||||
lv_obj_set_style_text_font(status_label, &font_puhui_20_4, 0);
|
||||
lv_obj_set_style_text_color(status_label, lv_color_white(), 0);
|
||||
lv_obj_set_width(status_label, 300);
|
||||
lv_obj_set_style_text_align(status_label, LV_TEXT_ALIGN_CENTER, 0);
|
||||
lv_label_set_text(status_label, "正在初始化...");
|
||||
lv_obj_align(status_label, LV_ALIGN_CENTER, 0, 5);
|
||||
lv_label_set_text(status_label, "");
|
||||
lv_obj_align(status_label, LV_ALIGN_CENTER, 0, 90);
|
||||
#if LV_USE_GIF
|
||||
lv_obj_add_flag(status_label, LV_OBJ_FLAG_HIDDEN);
|
||||
#endif
|
||||
|
||||
// 聊天消息文本(下半部分)
|
||||
// 聊天消息文本(暂时隐藏,不显示字幕)
|
||||
chat_label = lv_label_create(ai_screen);
|
||||
lv_obj_set_style_text_font(chat_label, &font_puhui_20_4, 0);
|
||||
lv_obj_set_style_text_color(chat_label, lv_color_hex(0xAAAAAA), 0);
|
||||
@ -54,6 +141,7 @@ void ai_chat_screen_init(void) {
|
||||
lv_label_set_text(chat_label, "");
|
||||
lv_obj_align(chat_label, LV_ALIGN_CENTER, 0, 50);
|
||||
lv_label_set_long_mode(chat_label, LV_LABEL_LONG_WRAP);
|
||||
lv_obj_add_flag(chat_label, LV_OBJ_FLAG_HIDDEN);
|
||||
|
||||
// 加载屏幕
|
||||
lv_disp_load_scr(ai_screen);
|
||||
@ -61,42 +149,102 @@ void ai_chat_screen_init(void) {
|
||||
|
||||
void ai_chat_set_status(const char* status) {
|
||||
if (!status_label) return;
|
||||
#if LV_USE_GIF
|
||||
// GIF 模式下隐藏状态文字,仅记录日志
|
||||
ESP_LOGD(TAG, "状态: %s(GIF模式不显示)", status);
|
||||
(void)status;
|
||||
#else
|
||||
lvgl_port_lock(50);
|
||||
lv_label_set_text(status_label, status);
|
||||
lvgl_port_unlock();
|
||||
#endif
|
||||
}
|
||||
|
||||
void ai_chat_resume_animation(void) {
|
||||
#if LV_USE_GIF
|
||||
if (!gif_emotion || !gif_animation_paused) return;
|
||||
if (!lvgl_port_lock(200)) return;
|
||||
lv_gif_t *gifobj = (lv_gif_t *)gif_emotion;
|
||||
lv_timer_resume(gifobj->timer);
|
||||
gif_animation_paused = false;
|
||||
ESP_LOGI(TAG, "GIF动画已恢复播放");
|
||||
lvgl_port_unlock();
|
||||
#endif
|
||||
}
|
||||
|
||||
void ai_chat_set_emotion(const char* emotion) {
|
||||
if (!emotion) return;
|
||||
|
||||
#if LV_USE_GIF
|
||||
if (!gif_emotion) return;
|
||||
if (!lvgl_port_lock(200)) {
|
||||
ESP_LOGW(TAG, "LVGL锁超时,跳过表情切换: %s", emotion);
|
||||
return;
|
||||
}
|
||||
|
||||
// 查找映射表
|
||||
const emotion_gif_entry_t *entry = NULL;
|
||||
for (int i = 0; i < EMOTION_GIF_MAP_SIZE; i++) {
|
||||
if (strcmp(emotion, emotion_gif_map[i].name) == 0) {
|
||||
entry = &emotion_gif_map[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 未找到映射,默认使用 neutral
|
||||
if (!entry) {
|
||||
ESP_LOGW(TAG, "未映射的GIF表情: %s, 使用 neutral", emotion);
|
||||
entry = &emotion_gif_map[0]; // neutral
|
||||
}
|
||||
|
||||
// 切换表情 GIF(lv_gif_set_src 内部已自动启动播放)
|
||||
lv_gif_set_src(gif_emotion, entry->emotion_gif);
|
||||
// set_src 内部会重建 10ms 定时器,重新设置为 50ms 降低 CPU 占用
|
||||
lv_gif_t *gifobj = (lv_gif_t *)gif_emotion;
|
||||
lv_timer_set_period(gifobj->timer, 20);
|
||||
gif_animation_paused = false;
|
||||
|
||||
// 处理叠加图标
|
||||
if (entry->icon_gif) {
|
||||
lv_gif_set_src(gif_icon, entry->icon_gif);
|
||||
lv_gif_t *icon_gifobj = (lv_gif_t *)gif_icon;
|
||||
lv_timer_set_period(icon_gifobj->timer, 20);
|
||||
lv_obj_clear_flag(gif_icon, LV_OBJ_FLAG_HIDDEN);
|
||||
} else {
|
||||
// 隐藏图标时暂停其定时器,避免空跑浪费 CPU
|
||||
lv_gif_t *icon_gifobj = (lv_gif_t *)gif_icon;
|
||||
if (icon_gifobj->gif) {
|
||||
lv_timer_pause(icon_gifobj->timer);
|
||||
}
|
||||
lv_obj_add_flag(gif_icon, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "GIF表情切换: %s%s", emotion, entry->icon_gif ? " +图标" : "");
|
||||
lvgl_port_unlock();
|
||||
|
||||
#else
|
||||
// 旧 PNG 回退逻辑
|
||||
if (!emoji_img) return;
|
||||
lvgl_port_lock(50);
|
||||
|
||||
const lv_img_dsc_t *img = &ui_img_neutral_png;
|
||||
|
||||
if (strcmp(emotion, "neutral") == 0) {
|
||||
img = &ui_img_neutral_png;
|
||||
} else if (strcmp(emotion, "happy") == 0) {
|
||||
img = &ui_img_happy_png;
|
||||
} else if (strcmp(emotion, "sad") == 0) {
|
||||
img = &ui_img_sad_png;
|
||||
} else if (strcmp(emotion, "angry") == 0) {
|
||||
img = &ui_img_angry_png;
|
||||
} else if (strcmp(emotion, "surprised") == 0) {
|
||||
img = &ui_img_funny_png;
|
||||
} else if (strcmp(emotion, "thinking") == 0) {
|
||||
img = &ui_img_neutral_png;
|
||||
} else if (strcmp(emotion, "crying") == 0) {
|
||||
img = &ui_img_crying_png;
|
||||
} else if (strcmp(emotion, "laughing") == 0) {
|
||||
img = &ui_img_laughing_png;
|
||||
}
|
||||
if (strcmp(emotion, "neutral") == 0) img = &ui_img_neutral_png;
|
||||
else if (strcmp(emotion, "happy") == 0) img = &ui_img_happy_png;
|
||||
else if (strcmp(emotion, "sad") == 0) img = &ui_img_sad_png;
|
||||
else if (strcmp(emotion, "angry") == 0) img = &ui_img_angry_png;
|
||||
else if (strcmp(emotion, "surprised") == 0) img = &ui_img_funny_png;
|
||||
else if (strcmp(emotion, "crying") == 0) img = &ui_img_crying_png;
|
||||
else if (strcmp(emotion, "laughing") == 0) img = &ui_img_laughing_png;
|
||||
|
||||
lv_img_set_src(emoji_img, img);
|
||||
lvgl_port_unlock();
|
||||
#endif
|
||||
}
|
||||
|
||||
void ai_chat_set_chat_message(const char* role, const char* content) {
|
||||
if (!chat_label) return;
|
||||
lvgl_port_lock(50);
|
||||
lv_label_set_text(chat_label, content ? content : "");
|
||||
lvgl_port_unlock();
|
||||
// 字幕暂时隐藏,不更新内容
|
||||
// 后续恢复时去掉 return 和 ai_chat_screen_init 中的 LV_OBJ_FLAG_HIDDEN
|
||||
(void)role;
|
||||
(void)content;
|
||||
}
|
||||
|
||||
@ -17,6 +17,10 @@ void ai_chat_set_emotion(const char* emotion);
|
||||
// 更新聊天消息(预留接口)
|
||||
void ai_chat_set_chat_message(const char* role, const char* content);
|
||||
|
||||
// 恢复 GIF 动画播放(开机音频播放完成后调用)
|
||||
void ai_chat_resume_animation(void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
3078
main/ui/images/my_emotion/emotion_angry_200_89.c
Normal file
3078
main/ui/images/my_emotion/emotion_angry_200_89.c
Normal file
File diff suppressed because it is too large
Load Diff
5483
main/ui/images/my_emotion/emotion_blink1_200_89.c
Normal file
5483
main/ui/images/my_emotion/emotion_blink1_200_89.c
Normal file
File diff suppressed because it is too large
Load Diff
1659
main/ui/images/my_emotion/emotion_blink_fast_200_89.c
Normal file
1659
main/ui/images/my_emotion/emotion_blink_fast_200_89.c
Normal file
File diff suppressed because it is too large
Load Diff
1265
main/ui/images/my_emotion/emotion_blink_slow_200_89.c
Normal file
1265
main/ui/images/my_emotion/emotion_blink_slow_200_89.c
Normal file
File diff suppressed because it is too large
Load Diff
8359
main/ui/images/my_emotion/emotion_dizzy_200_89.c
Normal file
8359
main/ui/images/my_emotion/emotion_dizzy_200_89.c
Normal file
File diff suppressed because it is too large
Load Diff
2333
main/ui/images/my_emotion/emotion_happy_200_89.c
Normal file
2333
main/ui/images/my_emotion/emotion_happy_200_89.c
Normal file
File diff suppressed because it is too large
Load Diff
7504
main/ui/images/my_emotion/emotion_sad_200_89.c
Normal file
7504
main/ui/images/my_emotion/emotion_sad_200_89.c
Normal file
File diff suppressed because it is too large
Load Diff
7390
main/ui/images/my_emotion/emotion_sleep_200_89.c
Normal file
7390
main/ui/images/my_emotion/emotion_sleep_200_89.c
Normal file
File diff suppressed because it is too large
Load Diff
1743
main/ui/images/my_icon/icon_emotion_confused_45.c
Normal file
1743
main/ui/images/my_icon/icon_emotion_confused_45.c
Normal file
File diff suppressed because it is too large
Load Diff
340
main/ui/images/my_icon/icon_emotion_sleep_45.c
Normal file
340
main/ui/images/my_icon/icon_emotion_sleep_45.c
Normal file
@ -0,0 +1,340 @@
|
||||
#ifdef __has_include
|
||||
#if __has_include("lvgl.h")
|
||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
||||
#endif
|
||||
|
||||
#ifndef LV_ATTRIBUTE_IMG_ICON_EMOTION_SLEEP_45
|
||||
#define LV_ATTRIBUTE_IMG_ICON_EMOTION_SLEEP_45
|
||||
#endif
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_ICON_EMOTION_SLEEP_45 uint8_t icon_emotion_sleep_45_map[] = {
|
||||
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x2d, 0x00, 0x2d, 0x00, 0xf6, 0x05, 0x00,
|
||||
0x00, 0x04, 0x00, 0x08, 0x04, 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x08,
|
||||
0x0c, 0x08, 0x10, 0x0c, 0x10, 0x18, 0x18, 0x18, 0x18, 0x14, 0x18, 0x10, 0x14,
|
||||
0x10, 0x21, 0x20, 0x21, 0x18, 0x1c, 0x18, 0x21, 0x1c, 0x21, 0x21, 0x24, 0x21,
|
||||
0x29, 0x24, 0x29, 0x29, 0x2c, 0x29, 0x29, 0x28, 0x29, 0x31, 0x2c, 0x31, 0x31,
|
||||
0x30, 0x31, 0x31, 0x34, 0x31, 0x39, 0x38, 0x39, 0x39, 0x34, 0x39, 0x39, 0x3c,
|
||||
0x39, 0x52, 0x55, 0x52, 0x42, 0x41, 0x42, 0x52, 0x51, 0x52, 0x42, 0x45, 0x42,
|
||||
0x4a, 0x49, 0x4a, 0x4a, 0x4d, 0x4a, 0x5a, 0x59, 0x5a, 0x73, 0x71, 0x73, 0x6b,
|
||||
0x69, 0x6b, 0x63, 0x65, 0x63, 0x6b, 0x6d, 0x6b, 0x6b, 0x65, 0x6b, 0x63, 0x61,
|
||||
0x63, 0x5a, 0x5d, 0x5a, 0x73, 0x6d, 0x73, 0x4a, 0x45, 0x4a, 0x5a, 0x55, 0x5a,
|
||||
0x42, 0x3c, 0x42, 0x52, 0x4d, 0x52, 0x4a, 0x51, 0x4a, 0x63, 0x69, 0x63, 0x63,
|
||||
0x5d, 0x63, 0x73, 0x75, 0x73, 0x7b, 0x79, 0x7b, 0x7b, 0x75, 0x7b, 0x73, 0x79,
|
||||
0x73, 0x94, 0x96, 0x94, 0x9c, 0x9a, 0x9c, 0x8c, 0x8e, 0x8c, 0x94, 0x92, 0x94,
|
||||
0x8c, 0x8a, 0x8c, 0x7b, 0x7d, 0x7b, 0x9c, 0x9e, 0x9c, 0xbd, 0xbe, 0xbd, 0xbd,
|
||||
0xba, 0xbd, 0xc6, 0xc3, 0xc6, 0xd6, 0xd7, 0xd6, 0xce, 0xcf, 0xce, 0xce, 0xd3,
|
||||
0xce, 0xd6, 0xd3, 0xd6, 0xc6, 0xc7, 0xc6, 0xad, 0xae, 0xad, 0xb5, 0xb6, 0xb5,
|
||||
0xb5, 0xb2, 0xb5, 0xce, 0xcb, 0xce, 0xa5, 0xaa, 0xa5, 0xbd, 0xc3, 0xbd, 0x84,
|
||||
0x82, 0x84, 0x84, 0x86, 0x84, 0x39, 0x41, 0x39, 0xa5, 0xa2, 0xa5, 0xa5, 0xa6,
|
||||
0xa5, 0xde, 0xdf, 0xde, 0xde, 0xdb, 0xde, 0x9c, 0x96, 0x9c, 0x84, 0x8a, 0x84,
|
||||
0xe7, 0xe3, 0xe7, 0xad, 0xaa, 0xad, 0x8c, 0x86, 0x8c, 0x9c, 0xa2, 0x9c, 0xb5,
|
||||
0xba, 0xb5, 0xa5, 0x9e, 0xa5, 0x5a, 0x61, 0x5a, 0xe7, 0xe7, 0xe7, 0xef, 0xef,
|
||||
0xef, 0xf7, 0xf7, 0xf7, 0xe7, 0xeb, 0xe7, 0xf7, 0xf3, 0xf7, 0x7b, 0x82, 0x7b,
|
||||
0x94, 0x8e, 0x94, 0x84, 0x7d, 0x84, 0xbd, 0xb6, 0xbd, 0xad, 0xa6, 0xad, 0x00,
|
||||
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xce, 0xc7, 0xce, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xfe, 0x2e, 0x47, 0x49, 0x46,
|
||||
0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x77,
|
||||
0x69, 0x74, 0x68, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65,
|
||||
0x7a, 0x67, 0x69, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x74, 0x69,
|
||||
0x6d, 0x69, 0x7a, 0x65, 0x00, 0x21, 0xff, 0x0b, 0x4e, 0x45, 0x54, 0x53, 0x43,
|
||||
0x41, 0x50, 0x45, 0x32, 0x2e, 0x30, 0x03, 0x01, 0x00, 0x00, 0x00, 0x21, 0xf9,
|
||||
0x04, 0x05, 0x20, 0x00, 0x05, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00,
|
||||
0x2d, 0x00, 0x00, 0x07, 0xf5, 0x80, 0x5f, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
|
||||
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
|
||||
0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1,
|
||||
0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x87, 0x09,
|
||||
0x1c, 0x17, 0x04, 0xa9, 0x1c, 0x3b, 0x4e, 0x42, 0x31, 0x22, 0x1a, 0x0e, 0x03,
|
||||
0xa4, 0x22, 0x62, 0x56, 0x61, 0x60, 0x57, 0x55, 0x37, 0x49, 0x45, 0x1a, 0x0a,
|
||||
0xa1, 0x08, 0x17, 0x2c, 0x31, 0x40, 0x55, 0xc1, 0x61, 0x56, 0x3a, 0x3e, 0x32,
|
||||
0x15, 0xa3, 0x03, 0x0c, 0x1a, 0x30, 0x42, 0x4e, 0x57, 0x60, 0x56, 0x45, 0x00,
|
||||
0xa6, 0x09, 0x31, 0xdf, 0x3c, 0x1c, 0xa6, 0x1b, 0x3f, 0xc0, 0x3a, 0x1f, 0x07,
|
||||
0xa4, 0x04, 0x23, 0x42, 0xd2, 0x52, 0x16, 0xa5, 0x0a, 0x45, 0x3a, 0xd2, 0x48,
|
||||
0xd7, 0xa4, 0x17, 0x48, 0xb2, 0x5c, 0xe1, 0xc1, 0x82, 0x17, 0x29, 0x0d, 0x37,
|
||||
0xae, 0x5c, 0xf1, 0x31, 0x42, 0x00, 0xa9, 0x04, 0x2c, 0xf6, 0x59, 0x89, 0x32,
|
||||
0x61, 0xdc, 0x28, 0x03, 0x31, 0xbc, 0x29, 0x91, 0x81, 0x20, 0xde, 0x3a, 0x60,
|
||||
0x42, 0x44, 0x18, 0x88, 0xa7, 0x62, 0xc7, 0x15, 0x2b, 0x41, 0x2e, 0x94, 0x1a,
|
||||
0x50, 0x63, 0x89, 0x34, 0x6b, 0xa6, 0x2a, 0xd0, 0x43, 0xf9, 0x41, 0x82, 0x43,
|
||||
0x52, 0x18, 0xf6, 0x09, 0x53, 0xb2, 0xe3, 0x07, 0x8b, 0x8a, 0xa2, 0x0e, 0x68,
|
||||
0x68, 0x01, 0x44, 0x09, 0xb0, 0x30, 0x27, 0x77, 0x20, 0x69, 0xc1, 0x01, 0x42,
|
||||
0x28, 0x01, 0x0c, 0x3e, 0x38, 0xdb, 0x71, 0x34, 0x8b, 0x12, 0x1b, 0x06, 0x83,
|
||||
0x5e, 0x08, 0x41, 0x23, 0x48, 0x15, 0x94, 0x01, 0x52, 0x25, 0xc0, 0xa0, 0xa1,
|
||||
0x15, 0xa7, 0x40, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x03, 0x00, 0x2c,
|
||||
0x15, 0x00, 0x0f, 0x00, 0x0e, 0x00, 0x12, 0x00, 0x00, 0x02, 0x2a, 0x9c, 0x6f,
|
||||
0x00, 0x88, 0xa1, 0x02, 0xd9, 0x83, 0x54, 0xb4, 0xba, 0xde, 0x5d, 0xc7, 0x71,
|
||||
0xd6, 0x45, 0xe0, 0x36, 0x92, 0xe5, 0xa0, 0x9d, 0xa8, 0x78, 0xb2, 0xa5, 0xa7,
|
||||
0xae, 0x71, 0x9a, 0xd0, 0xf0, 0x44, 0x85, 0x58, 0x00, 0x62, 0xed, 0x07, 0x2a,
|
||||
0x00, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x09, 0x00, 0x2c, 0x15, 0x00,
|
||||
0x0f, 0x00, 0x0f, 0x00, 0x12, 0x00, 0x00, 0x04, 0x45, 0x30, 0xc9, 0x99, 0x80,
|
||||
0x20, 0x34, 0x07, 0x32, 0xd0, 0x41, 0x02, 0x65, 0x71, 0xde, 0xf7, 0x05, 0x54,
|
||||
0x51, 0x0e, 0xc4, 0xf6, 0x69, 0x6d, 0xfa, 0x66, 0x9a, 0x87, 0xd2, 0x32, 0x86,
|
||||
0x4f, 0x40, 0x77, 0xef, 0x95, 0x19, 0x30, 0xe1, 0x1b, 0x06, 0x41, 0x38, 0x00,
|
||||
0x0f, 0x39, 0xec, 0x31, 0x45, 0x39, 0xde, 0xc5, 0x26, 0x71, 0x5e, 0xa6, 0xa6,
|
||||
0xc2, 0xcd, 0xb9, 0xf2, 0x29, 0x97, 0xd9, 0x6f, 0x52, 0x20, 0xa6, 0x45, 0x00,
|
||||
0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x0c, 0x00, 0x2c, 0x14, 0x00, 0x0f,
|
||||
0x00, 0x10, 0x00, 0x12, 0x00, 0x00, 0x04, 0x55, 0x90, 0xc9, 0x29, 0x03, 0x19,
|
||||
0x80, 0x52, 0x20, 0x86, 0x59, 0x89, 0x52, 0x68, 0xcc, 0x65, 0x28, 0xc9, 0x82,
|
||||
0x26, 0xc2, 0x76, 0x80, 0x8a, 0x81, 0x0d, 0x21, 0x89, 0x1c, 0x45, 0xc6, 0x00,
|
||||
0xdf, 0x40, 0x92, 0x82, 0x58, 0xeb, 0x47, 0xa1, 0x21, 0x88, 0x9a, 0x13, 0x01,
|
||||
0x39, 0x29, 0xa8, 0x98, 0x95, 0x1e, 0xb4, 0x14, 0x0a, 0x4c, 0x11, 0x35, 0x68,
|
||||
0x00, 0x05, 0xb4, 0x25, 0x10, 0x3a, 0xcb, 0xcd, 0x60, 0x8d, 0x7e, 0x3b, 0x87,
|
||||
0x55, 0x6c, 0x03, 0x6a, 0x87, 0x70, 0x40, 0x35, 0x06, 0x09, 0x18, 0x60, 0x74,
|
||||
0xa4, 0x08, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x05, 0x00, 0x2c, 0x14,
|
||||
0x00, 0x0f, 0x00, 0x10, 0x00, 0x12, 0x00, 0x00, 0x05, 0x5d, 0x60, 0x21, 0x8e,
|
||||
0xa2, 0x80, 0x18, 0x64, 0x5a, 0x10, 0x06, 0xe3, 0x40, 0x0f, 0x92, 0x9a, 0x8a,
|
||||
0xfb, 0xda, 0x44, 0x9a, 0x3c, 0x30, 0x63, 0x0c, 0x08, 0x07, 0x03, 0x40, 0x02,
|
||||
0xd4, 0x0e, 0x81, 0xd1, 0xee, 0xa0, 0x52, 0x11, 0x1e, 0x8d, 0xa6, 0xca, 0x20,
|
||||
0x24, 0x4a, 0x4b, 0xae, 0xc1, 0x75, 0x74, 0x80, 0x5a, 0xb7, 0xcb, 0x2d, 0xb6,
|
||||
0x21, 0x10, 0x17, 0xa8, 0x0a, 0xb3, 0x00, 0xaa, 0x9d, 0xa5, 0x82, 0xe9, 0x02,
|
||||
0xc0, 0xb4, 0x1b, 0x92, 0x96, 0xac, 0x5d, 0x2f, 0x51, 0xc6, 0xf6, 0x6e, 0x0a,
|
||||
0x48, 0x49, 0x23, 0x4f, 0x37, 0x08, 0x7d, 0x52, 0x06, 0x3f, 0x57, 0x21, 0x00,
|
||||
0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x08, 0x00, 0x2c, 0x14, 0x00, 0x0f, 0x00,
|
||||
0x10, 0x00, 0x13, 0x00, 0x00, 0x05, 0x66, 0x20, 0x22, 0x8e, 0x22, 0xa1, 0x30,
|
||||
0x02, 0x49, 0x0a, 0x47, 0xe2, 0x4c, 0xd5, 0x74, 0xa8, 0x66, 0x13, 0xc1, 0xb8,
|
||||
0xbc, 0xbe, 0x71, 0x94, 0x18, 0x8b, 0x49, 0x44, 0x85, 0xb0, 0x19, 0x04, 0x00,
|
||||
0x44, 0xe0, 0xb5, 0x20, 0x26, 0x57, 0xc2, 0x01, 0x51, 0x05, 0x48, 0x4c, 0x1a,
|
||||
0x53, 0xda, 0x6d, 0x96, 0x1d, 0x05, 0x1d, 0xdd, 0xd1, 0x52, 0x17, 0x56, 0x46,
|
||||
0xcb, 0x63, 0x14, 0x5a, 0x42, 0xe1, 0x8a, 0x0b, 0x2a, 0xc5, 0x35, 0xa0, 0x1c,
|
||||
0x9c, 0x28, 0x11, 0xf8, 0xe8, 0x21, 0x1b, 0xb8, 0x28, 0x3d, 0x0e, 0x7a, 0x66,
|
||||
0x31, 0x39, 0x0f, 0x0a, 0x83, 0x25, 0x80, 0x78, 0x88, 0x4f, 0x4e, 0x09, 0x09,
|
||||
0x03, 0x74, 0x68, 0x65, 0x21, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x0b,
|
||||
0x00, 0x2c, 0x14, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x12, 0x00, 0x00, 0x06, 0x7c,
|
||||
0xc0, 0x85, 0x70, 0x28, 0x1c, 0x38, 0x24, 0x05, 0xe2, 0x10, 0x50, 0x50, 0x38,
|
||||
0x2e, 0x98, 0x28, 0x43, 0x69, 0x9c, 0x64, 0xa2, 0x58, 0x94, 0x82, 0x48, 0x80,
|
||||
0x5a, 0x30, 0x99, 0x08, 0xc3, 0x01, 0x0e, 0x70, 0x29, 0x97, 0x46, 0x72, 0x21,
|
||||
0x38, 0x61, 0x1c, 0xca, 0xf8, 0x02, 0x81, 0xd2, 0x18, 0xe4, 0xca, 0x08, 0x66,
|
||||
0x22, 0xc0, 0x0f, 0x07, 0x57, 0x09, 0x7e, 0x43, 0x0f, 0x65, 0x83, 0x6c, 0x15,
|
||||
0x6f, 0x87, 0x73, 0x29, 0x76, 0x8b, 0x7a, 0x14, 0x66, 0x83, 0x80, 0x1b, 0x82,
|
||||
0x5c, 0x03, 0x00, 0x44, 0x85, 0x15, 0x7d, 0x02, 0x06, 0x0f, 0x13, 0x1b, 0x8e,
|
||||
0x42, 0x6d, 0x6f, 0x06, 0x12, 0x5e, 0x16, 0x1a, 0x15, 0x08, 0x43, 0x06, 0x1b,
|
||||
0x26, 0xa2, 0x5f, 0xab, 0x0f, 0x07, 0x7d, 0xae, 0x29, 0xaa, 0x61, 0x03, 0x7e,
|
||||
0x04, 0x11, 0x11, 0x0a, 0xb7, 0x71, 0x41, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04,
|
||||
0x00, 0x08, 0x00, 0x2c, 0x14, 0x00, 0x0e, 0x00, 0x10, 0x00, 0x13, 0x00, 0x00,
|
||||
0x06, 0x88, 0x40, 0x84, 0x70, 0x48, 0x04, 0x10, 0x8f, 0x43, 0x80, 0x61, 0x92,
|
||||
0x19, 0x20, 0x85, 0x87, 0xc6, 0x85, 0xe3, 0x01, 0x79, 0x22, 0xc7, 0xa5, 0x66,
|
||||
0x54, 0xed, 0x7a, 0x1a, 0xc4, 0x82, 0xa9, 0xcb, 0xb9, 0x44, 0x26, 0x1e, 0x8e,
|
||||
0xa0, 0x58, 0xc2, 0x60, 0x85, 0x04, 0x0c, 0x68, 0xf2, 0x34, 0x0e, 0x15, 0x9e,
|
||||
0x15, 0xe3, 0xc9, 0xf6, 0x68, 0xf8, 0x44, 0x06, 0x5c, 0x0e, 0x80, 0x43, 0x14,
|
||||
0x69, 0x04, 0x85, 0x42, 0x72, 0x12, 0x8a, 0x08, 0x06, 0x2a, 0x23, 0x0a, 0x8a,
|
||||
0x02, 0x17, 0x20, 0x25, 0x6b, 0x85, 0x82, 0x1f, 0x84, 0x61, 0x06, 0x01, 0x49,
|
||||
0x68, 0x1b, 0x89, 0x05, 0x0c, 0x14, 0x1b, 0x1f, 0x23, 0x09, 0x43, 0x62, 0x57,
|
||||
0x0c, 0x53, 0x22, 0x1d, 0x20, 0x22, 0x18, 0x0b, 0x43, 0x09, 0x1f, 0x24, 0x22,
|
||||
0x21, 0x56, 0x22, 0x1a, 0x13, 0x09, 0x89, 0xb7, 0x2a, 0xba, 0x1c, 0x15, 0x9f,
|
||||
0x7c, 0x03, 0x27, 0x27, 0x0c, 0xc2, 0x48, 0x41, 0x00, 0x21, 0xf9, 0x04, 0x05,
|
||||
0x04, 0x00, 0x02, 0x00, 0x2c, 0x14, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x12, 0x00,
|
||||
0x00, 0x06, 0x80, 0x40, 0x81, 0x70, 0x28, 0x54, 0x54, 0x34, 0x08, 0xe2, 0x30,
|
||||
0x60, 0x70, 0x64, 0x56, 0x9d, 0x56, 0x47, 0xa2, 0x34, 0x62, 0x3e, 0x2c, 0xa9,
|
||||
0xe7, 0xd5, 0x79, 0x10, 0x07, 0xa3, 0x2c, 0x6b, 0x55, 0x92, 0x54, 0xc6, 0x4a,
|
||||
0xc1, 0x86, 0x43, 0x19, 0x0c, 0x39, 0xac, 0x4a, 0x3a, 0xa0, 0x4c, 0x74, 0x3e,
|
||||
0xe9, 0x7c, 0x86, 0x85, 0x22, 0xe4, 0x89, 0x0a, 0x1f, 0x20, 0x11, 0x7f, 0x44,
|
||||
0x67, 0x23, 0x85, 0x44, 0x70, 0x13, 0x89, 0x43, 0x77, 0x09, 0x8d, 0x6a, 0x2f,
|
||||
0x1b, 0x91, 0x02, 0x21, 0x83, 0x4a, 0x03, 0x0a, 0x4a, 0x67, 0x16, 0x04, 0x00,
|
||||
0x03, 0x0f, 0x15, 0x18, 0x20, 0x1f, 0x0c, 0x43, 0x60, 0x71, 0x0f, 0x1a, 0x23,
|
||||
0x20, 0x2d, 0x2d, 0x2a, 0x16, 0x90, 0x42, 0x0c, 0xae, 0x5b, 0x2e, 0xb0, 0x18,
|
||||
0x15, 0xa7, 0x4a, 0xb6, 0x1f, 0x17, 0x9b, 0x7f, 0x08, 0x17, 0x19, 0x5e, 0x7f,
|
||||
0x41, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x0a, 0x00, 0x2c, 0x14, 0x00,
|
||||
0x0f, 0x00, 0x10, 0x00, 0x12, 0x00, 0x00, 0x07, 0x97, 0x80, 0x0a, 0x82, 0x83,
|
||||
0x82, 0x09, 0x1a, 0x1c, 0x06, 0x84, 0x83, 0x02, 0x09, 0x12, 0x16, 0x2f, 0x34,
|
||||
0x33, 0x34, 0x15, 0x84, 0x00, 0x86, 0x1f, 0x2d, 0x32, 0x30, 0x34, 0x45, 0x92,
|
||||
0x12, 0x84, 0x08, 0x1d, 0x91, 0x32, 0x2c, 0x16, 0x17, 0x1a, 0xa4, 0x05, 0xa0,
|
||||
0x54, 0x20, 0x17, 0x08, 0x01, 0x0a, 0x03, 0x20, 0x5b, 0x1b, 0x8a, 0x0a, 0x02,
|
||||
0x8a, 0x0c, 0x34, 0x35, 0x11, 0xb6, 0xb6, 0x1c, 0x32, 0x22, 0xaa, 0xbe, 0x83,
|
||||
0x0c, 0x2d, 0x46, 0x94, 0xc4, 0x83, 0xa8, 0x1d, 0x03, 0xca, 0x82, 0x04, 0xb3,
|
||||
0x19, 0xcf, 0x85, 0x9c, 0x0f, 0xd4, 0x0a, 0x26, 0x33, 0x23, 0x04, 0xd4, 0x0b,
|
||||
0x35, 0xc8, 0x8a, 0x08, 0x09, 0xb8, 0xcb, 0x32, 0x1e, 0xaf, 0x07, 0x11, 0x1a,
|
||||
0x1f, 0x46, 0x2d, 0x0e, 0x83, 0xa1, 0x5b, 0x17, 0x8e, 0xa2, 0x30, 0x33, 0x45,
|
||||
0x1e, 0xd7, 0x82, 0x10, 0x50, 0x4c, 0x45, 0xa3, 0x8a, 0x88, 0xd0, 0xe0, 0xc0,
|
||||
0xd9, 0xa0, 0x08, 0x91, 0xdc, 0x61, 0x60, 0xa0, 0xcc, 0x00, 0x06, 0x0b, 0x11,
|
||||
0x0c, 0xda, 0x0a, 0x04, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x14, 0x00, 0x0f, 0x00, 0x10, 0x00, 0x12, 0x00, 0x00, 0x07, 0x9a, 0x80,
|
||||
0x00, 0x82, 0x83, 0x82, 0x0c, 0x16, 0x1f, 0x0a, 0x84, 0x84, 0x0c, 0x15, 0x54,
|
||||
0x46, 0x36, 0x48, 0x31, 0x25, 0x8a, 0x0d, 0x18, 0x1d, 0x34, 0x51, 0x4f, 0x36,
|
||||
0x33, 0x91, 0x13, 0x84, 0x06, 0x45, 0x53, 0x43, 0x36, 0x45, 0x22, 0x1a, 0x26,
|
||||
0x48, 0x45, 0x8a, 0x00, 0x1e, 0x35, 0x1b, 0x06, 0x83, 0x2d, 0x48, 0x16, 0xab,
|
||||
0xab, 0x0e, 0x31, 0x32, 0x9e, 0xb5, 0x83, 0x04, 0x22, 0x48, 0x20, 0x03, 0xbb,
|
||||
0x83, 0x0f, 0x4d, 0x30, 0x17, 0xc2, 0x83, 0x18, 0x36, 0x35, 0x08, 0xc8, 0x00,
|
||||
0x05, 0x2d, 0x36, 0x1b, 0xce, 0x00, 0x0c, 0x9b, 0x0e, 0xce, 0xbd, 0xbf, 0x05,
|
||||
0xce, 0x0c, 0x32, 0x33, 0x19, 0x8a, 0x07, 0x0f, 0x04, 0x84, 0x16, 0xcb, 0x07,
|
||||
0x00, 0x06, 0x14, 0x16, 0x1d, 0x30, 0x34, 0x12, 0x83, 0x07, 0xb2, 0x1a, 0x13,
|
||||
0x1f, 0x35, 0x30, 0x43, 0x49, 0x33, 0x2d, 0x10, 0x83, 0x12, 0x31, 0xbc, 0xcc,
|
||||
0x08, 0xb8, 0x8f, 0x84, 0x85, 0x08, 0x8a, 0x28, 0x40, 0x7a, 0x37, 0xc2, 0x81,
|
||||
0x80, 0x5d, 0x0a, 0x46, 0x88, 0x98, 0xd0, 0xac, 0x56, 0x20, 0x00, 0x21, 0xf9,
|
||||
0x04, 0x05, 0x04, 0x00, 0x02, 0x00, 0x2c, 0x14, 0x00, 0x0f, 0x00, 0x10, 0x00,
|
||||
0x13, 0x00, 0x00, 0x07, 0xa1, 0x80, 0x02, 0x82, 0x83, 0x82, 0x0e, 0x22, 0x2e,
|
||||
0x0c, 0x84, 0x83, 0x04, 0x0f, 0x19, 0x20, 0x30, 0x41, 0x38, 0x41, 0x18, 0x8a,
|
||||
0x0e, 0x23, 0x45, 0x36, 0x52, 0x39, 0x41, 0x43, 0x37, 0x41, 0x19, 0x8a, 0x90,
|
||||
0x44, 0x52, 0x30, 0x1d, 0x16, 0x22, 0x38, 0x4c, 0x03, 0x84, 0x03, 0x2d, 0x32,
|
||||
0x16, 0x0a, 0x82, 0x08, 0x34, 0x52, 0x22, 0x8a, 0x02, 0x04, 0x01, 0x83, 0x00,
|
||||
0x11, 0x3f, 0x48, 0x17, 0xb7, 0x8a, 0x05, 0x20, 0x38, 0x35, 0x08, 0xc1, 0x84,
|
||||
0x11, 0x36, 0x3f, 0x28, 0xc8, 0x84, 0x23, 0x40, 0x33, 0x06, 0xce, 0xb2, 0x32,
|
||||
0x38, 0x1c, 0xd4, 0x85, 0x40, 0x49, 0x14, 0xd9, 0xc3, 0x37, 0x2d, 0xab, 0xd4,
|
||||
0x0e, 0x48, 0x4f, 0x94, 0x84, 0x06, 0x10, 0x84, 0x01, 0xa8, 0x4d, 0x06, 0x00,
|
||||
0x0a, 0x27, 0x54, 0x45, 0xbe, 0x15, 0x83, 0x0a, 0xd6, 0x26, 0x17, 0x2c, 0x33,
|
||||
0x4f, 0xa3, 0x49, 0x4d, 0x26, 0x0c, 0xaa, 0xf0, 0xe3, 0xc6, 0x90, 0x48, 0x06,
|
||||
0x6b, 0x88, 0x98, 0x70, 0x80, 0xd0, 0x91, 0x48, 0x4f, 0x62, 0xa8, 0xa0, 0x96,
|
||||
0x00, 0x44, 0x87, 0x13, 0xd3, 0xb2, 0xe9, 0xa2, 0x16, 0x08, 0x00, 0x21, 0xf9,
|
||||
0x04, 0x05, 0x38, 0x00, 0x05, 0x00, 0x2c, 0x14, 0x00, 0x0e, 0x00, 0x10, 0x00,
|
||||
0x14, 0x00, 0x00, 0x07, 0xaa, 0x80, 0x05, 0x82, 0x83, 0x84, 0x02, 0x84, 0x87,
|
||||
0x83, 0x01, 0x15, 0x45, 0x30, 0x0e, 0x88, 0x05, 0x03, 0x13, 0x1c, 0x32, 0x39,
|
||||
0x55, 0x56, 0x55, 0x21, 0x87, 0x15, 0x2d, 0x49, 0x42, 0x56, 0x57, 0x55, 0x3a,
|
||||
0x97, 0x16, 0x84, 0x09, 0x37, 0x58, 0x57, 0x56, 0x44, 0x33, 0x20, 0x35, 0x58,
|
||||
0x44, 0x06, 0x84, 0x08, 0x36, 0x40, 0x20, 0x0c, 0x86, 0x06, 0x41, 0x56, 0x35,
|
||||
0x88, 0x03, 0x86, 0x83, 0x17, 0x4e, 0x3c, 0x18, 0x8f, 0xb2, 0x33, 0x56, 0x48,
|
||||
0x0a, 0xc5, 0x83, 0x15, 0x42, 0x4a, 0x22, 0xcb, 0x83, 0x2d, 0x55, 0x38, 0x09,
|
||||
0xd1, 0x90, 0x40, 0x58, 0x2c, 0xd7, 0x00, 0x14, 0xa1, 0x25, 0xd7, 0x08, 0x32,
|
||||
0x59, 0x31, 0xb1, 0xd1, 0x12, 0x3b, 0x4b, 0x1f, 0x87, 0x09, 0x13, 0x03, 0x89,
|
||||
0xae, 0x3f, 0x09, 0x01, 0x0f, 0x18, 0x35, 0x43, 0x4a, 0x42, 0x1b, 0x83, 0x0c,
|
||||
0xba, 0x1d, 0x26, 0x30, 0x70, 0x2c, 0x49, 0xd5, 0x23, 0x08, 0x38, 0x41, 0x1b,
|
||||
0x94, 0x5c, 0xd1, 0xa1, 0xe4, 0x93, 0x0e, 0x24, 0x35, 0x34, 0x28, 0x1b, 0x84,
|
||||
0xc1, 0xc9, 0x95, 0x7c, 0x34, 0x8e, 0x10, 0x28, 0xe6, 0x80, 0xc6, 0x0c, 0x0b,
|
||||
0xf3, 0xb8, 0x01, 0x88, 0x16, 0x08, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00,
|
||||
0x02, 0x00, 0x2c, 0x1f, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x00, 0x02,
|
||||
0x18, 0x94, 0x11, 0x20, 0x6a, 0x8d, 0xcf, 0xda, 0x41, 0xd2, 0x85, 0x3a, 0xf1,
|
||||
0xba, 0x98, 0x76, 0x5e, 0x25, 0x9a, 0x17, 0x42, 0xa4, 0x64, 0x0a, 0x05, 0x00,
|
||||
0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x06, 0x00, 0x2c, 0x1f, 0x00, 0x02, 0x00,
|
||||
0x0b, 0x00, 0x0c, 0x00, 0x00, 0x03, 0x23, 0x68, 0x26, 0x53, 0xf2, 0x40, 0x29,
|
||||
0xf0, 0x5c, 0x23, 0x41, 0x6a, 0x36, 0xb2, 0x5e, 0xd7, 0x07, 0x3a, 0x22, 0x17,
|
||||
0x7d, 0x41, 0xb8, 0x71, 0x25, 0x5b, 0x76, 0xe2, 0x74, 0x39, 0x90, 0x44, 0x55,
|
||||
0x96, 0x92, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x09, 0x00, 0x2c,
|
||||
0x1f, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x00, 0x04, 0x2f, 0x30, 0xa5,
|
||||
0x62, 0xce, 0x28, 0x22, 0x00, 0x99, 0x02, 0xb9, 0x47, 0x85, 0x08, 0x9c, 0x04,
|
||||
0x00, 0x44, 0x45, 0x96, 0x5d, 0xb8, 0x96, 0x82, 0xcb, 0x4a, 0xe1, 0xdc, 0x0e,
|
||||
0xc1, 0x4c, 0xe1, 0x7a, 0x65, 0xa7, 0xbc, 0x9e, 0x08, 0x97, 0x31, 0xa1, 0x3e,
|
||||
0xa0, 0x83, 0xcd, 0x28, 0x89, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00,
|
||||
0x0e, 0x00, 0x2c, 0x1e, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x00, 0x04,
|
||||
0x39, 0xd0, 0x49, 0xc4, 0x96, 0x41, 0x43, 0x04, 0x29, 0x05, 0x52, 0x4b, 0x52,
|
||||
0x29, 0x05, 0xc7, 0x05, 0x9e, 0x28, 0x98, 0xa7, 0xca, 0x4e, 0xee, 0x3b, 0xc4,
|
||||
0xec, 0xbc, 0xac, 0x6c, 0x40, 0x19, 0xc0, 0xab, 0x33, 0xbc, 0x97, 0xe3, 0x00,
|
||||
0xdc, 0xf8, 0x28, 0x8d, 0x84, 0xe2, 0x92, 0x39, 0x79, 0x0e, 0x06, 0x50, 0xd1,
|
||||
0x81, 0x33, 0x01, 0x50, 0x92, 0x08, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x08, 0x00,
|
||||
0x05, 0x00, 0x2c, 0x1e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x00, 0x05,
|
||||
0x46, 0x60, 0x21, 0x02, 0x62, 0x69, 0x8a, 0x8a, 0x14, 0x35, 0x89, 0x31, 0x08,
|
||||
0xa4, 0x38, 0x30, 0x4e, 0xa4, 0x52, 0x0e, 0x72, 0x02, 0xc2, 0x4c, 0x49, 0xba,
|
||||
0x53, 0xe1, 0x60, 0x3b, 0x08, 0x87, 0x2a, 0xe3, 0x2e, 0x15, 0x21, 0x08, 0x01,
|
||||
0xcc, 0xc1, 0x93, 0x81, 0x13, 0x4c, 0xab, 0xd7, 0x07, 0x21, 0x66, 0x02, 0x50,
|
||||
0x27, 0xaa, 0x07, 0x43, 0x11, 0x2c, 0xf4, 0x0c, 0x09, 0x9a, 0xcd, 0x11, 0x30,
|
||||
0xef, 0x02, 0x04, 0x67, 0x21, 0x04, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00,
|
||||
0x04, 0x00, 0x2c, 0x1e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x00, 0x07,
|
||||
0x60, 0x80, 0x04, 0x82, 0x01, 0x00, 0x82, 0x86, 0x87, 0x00, 0x13, 0x2b, 0x18,
|
||||
0x17, 0x13, 0x0e, 0x0c, 0x08, 0x01, 0x86, 0x09, 0x17, 0x1b, 0x18, 0x1c, 0x22,
|
||||
0x23, 0x1b, 0x0f, 0x87, 0x04, 0x01, 0x03, 0x0b, 0x13, 0x23, 0x1c, 0x0c, 0x9d,
|
||||
0x82, 0x0c, 0x16, 0xa4, 0xa6, 0x00, 0x0e, 0x1c, 0x16, 0x9c, 0x9d, 0x01, 0x12,
|
||||
0xa3, 0x08, 0xab, 0x14, 0x1c, 0x1b, 0x09, 0xab, 0x27, 0x9a, 0xb5, 0x9d, 0x03,
|
||||
0x47, 0xbd, 0xb6, 0x22, 0x25, 0x06, 0x02, 0x85, 0x88, 0x17, 0x23, 0x99, 0x8c,
|
||||
0x8d, 0x0c, 0xc8, 0xa0, 0x11, 0x27, 0x19, 0x1b, 0x98, 0x1b, 0x05, 0x9e, 0x88,
|
||||
0x02, 0x03, 0x06, 0x06, 0x82, 0x81, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00,
|
||||
0x05, 0x00, 0x2c, 0x1e, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x00, 0x06,
|
||||
0x59, 0xc0, 0x82, 0xf0, 0x02, 0x12, 0x6d, 0x2e, 0x92, 0x87, 0x42, 0x20, 0x2c,
|
||||
0x38, 0x36, 0x1c, 0x51, 0x88, 0x04, 0x1a, 0x39, 0x9a, 0x42, 0x81, 0x81, 0x41,
|
||||
0xf4, 0x3c, 0xb0, 0x59, 0xc8, 0xc7, 0x13, 0x01, 0x0b, 0x25, 0xa1, 0x4f, 0x04,
|
||||
0x60, 0xae, 0x78, 0x44, 0x06, 0x73, 0xc1, 0xcd, 0x61, 0x98, 0x09, 0x1a, 0x90,
|
||||
0x25, 0x0e, 0x46, 0xe4, 0x31, 0x08, 0x72, 0x19, 0x1d, 0x18, 0x09, 0x04, 0x01,
|
||||
0x60, 0x78, 0x1d, 0x8b, 0x23, 0x18, 0x47, 0x57, 0x42, 0x07, 0x0d, 0x15, 0x1a,
|
||||
0x18, 0x51, 0x1d, 0x1c, 0x03, 0x77, 0x04, 0x08, 0x0a, 0x4b, 0x05, 0x41, 0x00,
|
||||
0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x02, 0x00, 0x2c, 0x1e, 0x00, 0x02, 0x00,
|
||||
0x0c, 0x00, 0x0d, 0x00, 0x00, 0x06, 0x4f, 0x40, 0x81, 0x30, 0xc3, 0x0a, 0x99,
|
||||
0x4a, 0x13, 0x87, 0x70, 0x29, 0xc0, 0x88, 0x3c, 0x20, 0x57, 0x31, 0xc2, 0x5c,
|
||||
0x3e, 0x4a, 0xac, 0x8e, 0xb2, 0x2a, 0x88, 0x44, 0x25, 0x00, 0x2e, 0x05, 0x04,
|
||||
0x92, 0x70, 0x05, 0x97, 0xa2, 0xe2, 0x9c, 0x16, 0x3d, 0xb8, 0x05, 0x14, 0x8b,
|
||||
0xb3, 0xae, 0x1e, 0xe4, 0x16, 0x03, 0x37, 0x80, 0x4f, 0x14, 0xe0, 0x18, 0x2d,
|
||||
0x82, 0x1f, 0x1c, 0x18, 0x25, 0x11, 0x01, 0x56, 0x17, 0x29, 0x1c, 0x4f, 0x2d,
|
||||
0x22, 0x67, 0x42, 0x06, 0x09, 0x0b, 0x42, 0x41, 0x00, 0x21, 0xf9, 0x04, 0x05,
|
||||
0x04, 0x00, 0x07, 0x00, 0x2c, 0x1e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x0e, 0x00,
|
||||
0x00, 0x07, 0x65, 0x80, 0x07, 0x82, 0x07, 0x01, 0x83, 0x86, 0x83, 0x1c, 0x30,
|
||||
0x46, 0x20, 0x1c, 0x1a, 0x15, 0x0f, 0x04, 0x83, 0x15, 0x20, 0x35, 0x46, 0x32,
|
||||
0x31, 0x8a, 0x17, 0x87, 0x04, 0x09, 0x11, 0x89, 0x32, 0x15, 0x87, 0x82, 0x17,
|
||||
0x34, 0x32, 0x9a, 0x9b, 0x25, 0x32, 0x34, 0xa7, 0x86, 0x04, 0x16, 0x33, 0x46,
|
||||
0x0c, 0x00, 0x9b, 0xaf, 0x35, 0x12, 0xa2, 0x03, 0x1f, 0x30, 0x1d, 0x0c, 0xa2,
|
||||
0x0b, 0x21, 0xbb, 0x09, 0xa2, 0x02, 0x22, 0x31, 0x1d, 0x10, 0x08, 0x02, 0x9b,
|
||||
0x1e, 0x30, 0x98, 0x45, 0x1d, 0x1e, 0x1c, 0x27, 0xca, 0x07, 0x0a, 0x12, 0x18,
|
||||
0x1f, 0x94, 0x97, 0x35, 0x06, 0x82, 0xb3, 0xde, 0x08, 0x9d, 0x90, 0x07, 0x81,
|
||||
0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x05, 0x00, 0x2c, 0x1e, 0x00, 0x02,
|
||||
0x00, 0x0c, 0x00, 0x0d, 0x00, 0x00, 0x07, 0x66, 0x80, 0x05, 0x05, 0x01, 0x21,
|
||||
0x49, 0x33, 0x2c, 0x1f, 0x16, 0x19, 0x0e, 0x03, 0x82, 0x00, 0x17, 0x2d, 0x34,
|
||||
0x30, 0x36, 0x4f, 0x43, 0x32, 0x1a, 0x82, 0x8e, 0x03, 0x0c, 0x13, 0x1f, 0x49,
|
||||
0x51, 0x19, 0x99, 0x99, 0x01, 0x25, 0x93, 0x1b, 0xa2, 0x8e, 0x1b, 0x31, 0x31,
|
||||
0x1a, 0x02, 0xa8, 0x05, 0x23, 0x51, 0x33, 0x0f, 0xaf, 0x03, 0x2b, 0xb2, 0x15,
|
||||
0xb5, 0x1d, 0x49, 0x35, 0x0e, 0xaf, 0x09, 0xbb, 0x2d, 0x0c, 0xba, 0x3f, 0x35,
|
||||
0x12, 0x06, 0x02, 0x00, 0xa2, 0x07, 0x2c, 0x49, 0x43, 0x48, 0x32, 0x35, 0x88,
|
||||
0xa1, 0x83, 0x09, 0x15, 0x1c, 0x1d, 0x35, 0x34, 0x94, 0x50, 0x0b, 0xaf, 0x05,
|
||||
0x06, 0x0c, 0x11, 0xbe, 0x05, 0x81, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00,
|
||||
0x00, 0x00, 0x2c, 0x1e, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x00, 0x07,
|
||||
0x65, 0x80, 0x00, 0x82, 0x02, 0x02, 0x82, 0x86, 0x87, 0x00, 0x1d, 0x52, 0x49,
|
||||
0x46, 0x1d, 0x23, 0x1b, 0x12, 0x87, 0x1a, 0x50, 0x36, 0x49, 0x3f, 0x37, 0x38,
|
||||
0x53, 0x18, 0x88, 0x00, 0x0f, 0x17, 0x8a, 0x41, 0x1a, 0x9c, 0x02, 0x1b, 0x4f,
|
||||
0x41, 0x16, 0x9c, 0x00, 0x1c, 0x3f, 0x4f, 0x9b, 0x88, 0x05, 0x1e, 0x40, 0x49,
|
||||
0x11, 0xa9, 0xb1, 0x31, 0x17, 0x9c, 0x06, 0x35, 0x52, 0x32, 0xb4, 0x88, 0x0c,
|
||||
0xbb, 0x46, 0x0f, 0xa3, 0x35, 0x44, 0x34, 0x13, 0x06, 0x04, 0x88, 0x06, 0x45,
|
||||
0x38, 0x98, 0x48, 0x32, 0x45, 0x1d, 0x1b, 0x05, 0x82, 0x0c, 0x17, 0x1f, 0x35,
|
||||
0x34, 0x31, 0x97, 0x30, 0x09, 0xa3, 0x0a, 0x0f, 0x13, 0xbe, 0x81, 0x00, 0x21,
|
||||
0xf9, 0x04, 0x05, 0x04, 0x00, 0x00, 0x00, 0x2c, 0x1e, 0x00, 0x02, 0x00, 0x0c,
|
||||
0x00, 0x0d, 0x00, 0x00, 0x07, 0x58, 0x80, 0x00, 0x82, 0x2c, 0x37, 0x43, 0x34,
|
||||
0x2c, 0x22, 0x82, 0x8a, 0x00, 0x1b, 0x32, 0x48, 0x4f, 0x40, 0x39, 0x39, 0x49,
|
||||
0x8b, 0x82, 0x08, 0x0e, 0x00, 0x2c, 0x39, 0x38, 0x1b, 0x95, 0x82, 0x16, 0x41,
|
||||
0x5d, 0x26, 0x9e, 0x82, 0x40, 0x41, 0x16, 0x9e, 0x03, 0x20, 0x85, 0xa4, 0x08,
|
||||
0xab, 0x48, 0x19, 0xa4, 0x45, 0x37, 0x30, 0xa4, 0x00, 0x45, 0x39, 0x32, 0xad,
|
||||
0x00, 0x3e, 0x32, 0x15, 0x0a, 0xb2, 0x37, 0x3e, 0x38, 0x49, 0x33, 0x46, 0x2c,
|
||||
0x18, 0x8b, 0x19, 0x1e, 0x45, 0x32, 0x51, 0x91, 0x36, 0x0c, 0xa9, 0x8a, 0x12,
|
||||
0x02, 0x00, 0x81, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x01, 0x00, 0x2c,
|
||||
0x1f, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x00, 0x07, 0x63, 0x80, 0x01,
|
||||
0x01, 0x35, 0x3b, 0x40, 0x30, 0x35, 0x1e, 0x16, 0x13, 0x08, 0x82, 0x18, 0x30,
|
||||
0x3f, 0x38, 0x39, 0x3c, 0x3b, 0x3f, 0x1c, 0x82, 0x82, 0x07, 0x11, 0x1a, 0x84,
|
||||
0x3e, 0x16, 0x97, 0x97, 0x1c, 0x37, 0x3e, 0x2b, 0x9f, 0x82, 0x22, 0x44, 0x37,
|
||||
0x23, 0xa5, 0x01, 0x2c, 0x42, 0x38, 0x12, 0xab, 0x2f, 0x3e, 0x3f, 0x1a, 0xa5,
|
||||
0x0a, 0x32, 0x3b, 0x36, 0x14, 0x00, 0x9f, 0x0f, 0xb8, 0x30, 0x0e, 0xab, 0x34,
|
||||
0x3a, 0x30, 0x17, 0x09, 0x03, 0xa5, 0x33, 0x3b, 0x3d, 0x42, 0x41, 0x36, 0x33,
|
||||
0x35, 0x1c, 0xc8, 0x0f, 0x1b, 0x1d, 0x32, 0x31, 0x3f, 0x92, 0x43, 0x0f, 0xab,
|
||||
0x09, 0x0e, 0x27, 0x13, 0x82, 0x81, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x04, 0x00,
|
||||
0x00, 0x00, 0x2c, 0x1f, 0x00, 0x02, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x00, 0x07,
|
||||
0x59, 0x80, 0x00, 0x00, 0x45, 0x3d, 0x37, 0x30, 0x45, 0x20, 0x1c, 0x15, 0x07,
|
||||
0x82, 0x16, 0x31, 0x41, 0x37, 0x42, 0x3a, 0x3a, 0x40, 0x23, 0x82, 0x97, 0x82,
|
||||
0x84, 0x3b, 0x26, 0x98, 0x82, 0x23, 0x3e, 0x42, 0x22, 0x01, 0x9d, 0x1f, 0x3e,
|
||||
0x39, 0x22, 0x9d, 0x00, 0x2d, 0x3c, 0x37, 0x13, 0xa9, 0xab, 0x41, 0x1b, 0xa9,
|
||||
0x00, 0x3d, 0x49, 0xae, 0x98, 0x0e, 0x33, 0x3a, 0x31, 0x11, 0xa9, 0x32, 0x4a,
|
||||
0x36, 0x97, 0xa3, 0x97, 0x4c, 0x93, 0x85, 0x48, 0x87, 0x98, 0x28, 0x2c, 0x33,
|
||||
0x48, 0x41, 0x3e, 0x4b, 0x3f, 0xa9, 0x03, 0x00, 0x11, 0x17, 0x97, 0x81, 0x00,
|
||||
0x21, 0xf9, 0x04, 0x05, 0x04, 0x00, 0x01, 0x00, 0x2c, 0x1e, 0x00, 0x02, 0x00,
|
||||
0x0c, 0x00, 0x0d, 0x00, 0x00, 0x07, 0x5d, 0x80, 0x01, 0x82, 0x46, 0x4b, 0x44,
|
||||
0x36, 0x46, 0x1d, 0x23, 0x27, 0x06, 0x82, 0x82, 0x51, 0x38, 0x39, 0x3b, 0x4a,
|
||||
0x4a, 0x37, 0x22, 0x8d, 0x97, 0x1b, 0x84, 0x3d, 0x1c, 0x97, 0x8d, 0x22, 0x42,
|
||||
0x3c, 0x1f, 0x9d, 0x82, 0x1e, 0x3b, 0x42, 0xa2, 0x9d, 0x08, 0x35, 0x3a, 0x39,
|
||||
0x15, 0xa3, 0x01, 0x5a, 0x3a, 0x38, 0x28, 0xa3, 0x0b, 0x30, 0x3a, 0x4f, 0xaf,
|
||||
0x10, 0x4c, 0x4a, 0x53, 0xaf, 0x01, 0x33, 0x55, 0x48, 0x19, 0xaf, 0x0a, 0x31,
|
||||
0x93, 0xb2, 0x49, 0x31, 0x50, 0x23, 0x8d, 0x0e, 0x18, 0x2f, 0x30, 0x49, 0x40,
|
||||
0x3b, 0x4e, 0x40, 0xa3, 0x00, 0x97, 0xae, 0x01, 0x81, 0x00, 0x21, 0xf9, 0x04,
|
||||
0x05, 0x60, 0x00, 0x00, 0x00, 0x2c, 0x1f, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x0c,
|
||||
0x00, 0x00, 0x07, 0x37, 0x80, 0x00, 0x82, 0x00, 0x3e, 0x83, 0x86, 0x1c, 0x48,
|
||||
0x37, 0x39, 0x3d, 0x86, 0x8d, 0x28, 0x4d, 0x4a, 0x8d, 0x83, 0x3b, 0x3a, 0x92,
|
||||
0x00, 0x3c, 0x96, 0x99, 0x06, 0x83, 0x18, 0x86, 0x09, 0x00, 0x91, 0x99, 0x48,
|
||||
0xa2, 0x25, 0x92, 0x36, 0x4a, 0x4e, 0x4b, 0x39, 0x43, 0x36, 0x34, 0x2b, 0x82,
|
||||
0x16, 0x2d, 0x82, 0x38, 0x83, 0x0e, 0x81, 0x00, 0x3b
|
||||
};
|
||||
|
||||
const lv_img_dsc_t icon_emotion_sleep_45 = {
|
||||
.header.cf = LV_IMG_CF_RAW_CHROMA_KEYED,
|
||||
.header.always_zero = 0,
|
||||
.header.reserved = 0,
|
||||
.header.w = 45,
|
||||
.header.h = 45,
|
||||
.data_size = 3961,
|
||||
.data = icon_emotion_sleep_45_map,
|
||||
};
|
||||
230
main/ui/images/my_icon/icon_emotion_thinking_45.c
Normal file
230
main/ui/images/my_icon/icon_emotion_thinking_45.c
Normal file
@ -0,0 +1,230 @@
|
||||
#ifdef __has_include
|
||||
#if __has_include("lvgl.h")
|
||||
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#define LV_LVGL_H_INCLUDE_SIMPLE
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
|
||||
#include "lvgl.h"
|
||||
#else
|
||||
#include "lvgl/lvgl.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef LV_ATTRIBUTE_MEM_ALIGN
|
||||
#define LV_ATTRIBUTE_MEM_ALIGN
|
||||
#endif
|
||||
|
||||
#ifndef LV_ATTRIBUTE_IMG_ICON_EMOTION_THINKING_45
|
||||
#define LV_ATTRIBUTE_IMG_ICON_EMOTION_THINKING_45
|
||||
#endif
|
||||
|
||||
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_ICON_EMOTION_THINKING_45 uint8_t icon_emotion_thinking_45_map[] = {
|
||||
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x2d, 0x00, 0x2d, 0x00, 0xf5, 0x00, 0x00,
|
||||
0x00, 0x04, 0x00, 0x08, 0x04, 0x08, 0x08, 0x08, 0x08, 0x10, 0x0c, 0x10, 0x08,
|
||||
0x0c, 0x08, 0x10, 0x14, 0x10, 0x18, 0x18, 0x18, 0x18, 0x14, 0x18, 0x10, 0x10,
|
||||
0x10, 0x18, 0x1c, 0x18, 0x21, 0x20, 0x21, 0x29, 0x28, 0x29, 0x29, 0x2c, 0x29,
|
||||
0x21, 0x24, 0x21, 0x31, 0x30, 0x31, 0x39, 0x38, 0x39, 0x42, 0x41, 0x42, 0x4a,
|
||||
0x49, 0x4a, 0x5a, 0x59, 0x5a, 0x52, 0x4d, 0x52, 0x39, 0x3c, 0x39, 0x63, 0x65,
|
||||
0x63, 0xbd, 0xbe, 0xbd, 0xde, 0xdf, 0xde, 0xff, 0xff, 0xff, 0xa5, 0xa6, 0xa5,
|
||||
0x9c, 0x9e, 0x9c, 0x94, 0x92, 0x94, 0x7b, 0x7d, 0x7b, 0x73, 0x79, 0x73, 0x8c,
|
||||
0x8e, 0x8c, 0xd6, 0xd7, 0xd6, 0xc6, 0xc7, 0xc6, 0x73, 0x6d, 0x73, 0xf7, 0xf7,
|
||||
0xf7, 0xad, 0xae, 0xad, 0x42, 0x3c, 0x42, 0xb5, 0xb6, 0xb5, 0x84, 0x86, 0x84,
|
||||
0x6b, 0x71, 0x6b, 0x63, 0x5d, 0x63, 0x6b, 0x69, 0x6b, 0xce, 0xcf, 0xce, 0x7b,
|
||||
0x82, 0x7b, 0xef, 0xef, 0xef, 0x63, 0x69, 0x63, 0x6b, 0x65, 0x6b, 0xe7, 0xe7,
|
||||
0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xfe, 0x27,
|
||||
0x47, 0x49, 0x46, 0x20, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69,
|
||||
0x74, 0x68, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x65, 0x7a,
|
||||
0x67, 0x69, 0x66, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x65, 0x65, 0x64,
|
||||
0x00, 0x21, 0xff, 0x0b, 0x4e, 0x45, 0x54, 0x53, 0x43, 0x41, 0x50, 0x45, 0x32,
|
||||
0x2e, 0x30, 0x03, 0x01, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00,
|
||||
0x03, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x2d, 0x00, 0x00, 0x06,
|
||||
0x5d, 0x40, 0x98, 0x70, 0x48, 0x2c, 0x1a, 0x8f, 0xc8, 0xa4, 0x72, 0xc9, 0x6c,
|
||||
0x3a, 0x9f, 0xd0, 0xa8, 0x74, 0x4a, 0xad, 0x5a, 0xaf, 0xd8, 0xac, 0x76, 0xcb,
|
||||
0xed, 0x7a, 0xbf, 0xe0, 0xb0, 0x78, 0x4c, 0x2e, 0x9b, 0xcf, 0x68, 0xb3, 0x60,
|
||||
0xbd, 0x3e, 0x23, 0x20, 0x91, 0x38, 0x04, 0x60, 0x4e, 0x48, 0x2a, 0xad, 0x8a,
|
||||
0x84, 0x5e, 0xb6, 0xbb, 0x52, 0x2e, 0x7b, 0x75, 0x77, 0x80, 0x82, 0x7d, 0x11,
|
||||
0x12, 0x89, 0x11, 0x7c, 0x65, 0x0a, 0x0d, 0x8f, 0x0a, 0x69, 0x92, 0x93, 0x94,
|
||||
0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1,
|
||||
0xa2, 0x30, 0x41, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c,
|
||||
0x02, 0x00, 0x14, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x03, 0x02, 0x58, 0x09,
|
||||
0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x13,
|
||||
0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1d, 0x40, 0x80, 0x80, 0x30, 0x28,
|
||||
0x1a, 0x26, 0x92, 0xe4, 0xa4, 0x91, 0xe2, 0x38, 0x53, 0x4c, 0x27, 0x07, 0xda,
|
||||
0x7c, 0x2a, 0x24, 0xa9, 0xac, 0x44, 0xd0, 0x60, 0x78, 0x17, 0x41, 0x00, 0x21,
|
||||
0xf9, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x13, 0x00, 0x06,
|
||||
0x00, 0x07, 0x00, 0x00, 0x06, 0x1f, 0x40, 0x00, 0x01, 0x41, 0x24, 0x24, 0x24,
|
||||
0xa1, 0xd3, 0x49, 0xb2, 0xe0, 0x78, 0x36, 0x1b, 0x0e, 0xc3, 0x09, 0x95, 0x52,
|
||||
0xa3, 0x8d, 0x14, 0x67, 0xdb, 0x22, 0x30, 0x1c, 0xe0, 0x45, 0x10, 0x00, 0x21,
|
||||
0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x13, 0x00, 0x07,
|
||||
0x00, 0x07, 0x00, 0x00, 0x06, 0x24, 0x40, 0x00, 0x62, 0x58, 0x00, 0x00, 0x1a,
|
||||
0x2e, 0x8e, 0x32, 0x05, 0x70, 0x78, 0x34, 0x99, 0x8c, 0x27, 0xe0, 0x8c, 0x4a,
|
||||
0xa9, 0x9e, 0xa8, 0x66, 0xba, 0xe8, 0x78, 0xbe, 0x9d, 0xc0, 0xc0, 0xf1, 0x28,
|
||||
0x3b, 0x00, 0x41, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x01, 0x00, 0x2c,
|
||||
0x02, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x22, 0x40, 0x00,
|
||||
0xa2, 0x40, 0x44, 0x2c, 0x42, 0xa6, 0x64, 0xe8, 0xa1, 0x19, 0x95, 0x4a, 0x9b,
|
||||
0x80, 0xe6, 0x59, 0xd2, 0x04, 0x36, 0x54, 0x0d, 0xc3, 0xb4, 0xd1, 0x68, 0x4c,
|
||||
0x81, 0x07, 0x64, 0xfc, 0x08, 0x02, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00,
|
||||
0x00, 0x00, 0x2c, 0x02, 0x00, 0x13, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x06,
|
||||
0x24, 0x40, 0x40, 0xc1, 0x40, 0x44, 0x00, 0x18, 0x9c, 0x8d, 0x92, 0x13, 0xa0,
|
||||
0x64, 0x2c, 0x16, 0x50, 0x46, 0xe0, 0x8c, 0x4a, 0xa9, 0x4f, 0xe8, 0x48, 0xe0,
|
||||
0xf0, 0x64, 0xbe, 0x9e, 0x00, 0x82, 0x12, 0x29, 0x53, 0x00, 0x41, 0x00, 0x21,
|
||||
0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x13, 0x00, 0x06,
|
||||
0x00, 0x07, 0x00, 0x00, 0x06, 0x1c, 0x40, 0x80, 0x50, 0x78, 0x70, 0x98, 0x34,
|
||||
0x9a, 0x8d, 0x89, 0x34, 0x02, 0xa9, 0x54, 0x23, 0xc8, 0xe8, 0x09, 0x95, 0x52,
|
||||
0x85, 0x9b, 0x91, 0x76, 0x33, 0x14, 0x92, 0x82, 0x00, 0x21, 0xf9, 0x04, 0x05,
|
||||
0x02, 0x00, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x13, 0x00, 0x07, 0x00, 0x07, 0x00,
|
||||
0x00, 0x05, 0x1e, 0x20, 0x70, 0x24, 0x24, 0x60, 0x6e, 0x59, 0xba, 0x01, 0x90,
|
||||
0x75, 0xbd, 0x96, 0xe9, 0xc2, 0xf2, 0x7b, 0x59, 0xc2, 0x93, 0x59, 0xbc, 0x26,
|
||||
0x1c, 0x90, 0x89, 0x10, 0x02, 0x08, 0x01, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02,
|
||||
0x00, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00,
|
||||
0x06, 0x1d, 0x40, 0x80, 0x41, 0x41, 0x34, 0x3c, 0x00, 0xa5, 0xa4, 0x26, 0xa2,
|
||||
0x62, 0x39, 0x55, 0x4c, 0x27, 0x0b, 0xda, 0x7c, 0x42, 0x46, 0xaa, 0xec, 0xc8,
|
||||
0x10, 0x91, 0x78, 0x23, 0x41, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00,
|
||||
0x00, 0x2c, 0x02, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1b,
|
||||
0xc0, 0x00, 0x60, 0x48, 0xd4, 0x58, 0x2c, 0xa5, 0xcc, 0x50, 0xc4, 0x1c, 0x7e,
|
||||
0x98, 0xa2, 0x0f, 0xe0, 0xc9, 0x94, 0x96, 0xa6, 0x9f, 0x2b, 0x11, 0x30, 0x09,
|
||||
0x02, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x02, 0x00,
|
||||
0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x05, 0x18, 0x20, 0x20, 0x8a, 0x09,
|
||||
0x95, 0x59, 0x68, 0x36, 0x7d, 0x00, 0x86, 0x7d, 0xd3, 0xe5, 0x62, 0xd7, 0x3a,
|
||||
0x5f, 0xe2, 0xa7, 0x8b, 0xd3, 0x38, 0x85, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02,
|
||||
0x00, 0x00, 0x00, 0x2c, 0x03, 0x00, 0x15, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00,
|
||||
0x05, 0x07, 0x20, 0x80, 0x5d, 0x23, 0x66, 0x01, 0x21, 0x00, 0x21, 0xf9, 0x04,
|
||||
0x05, 0x24, 0x00, 0x00, 0x00, 0x2c, 0x04, 0x00, 0x19, 0x00, 0x01, 0x00, 0x01,
|
||||
0x00, 0x00, 0x06, 0x03, 0x40, 0x54, 0x10, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02,
|
||||
0x00, 0x03, 0x00, 0x2c, 0x14, 0x00, 0x14, 0x00, 0x05, 0x00, 0x05, 0x00, 0x00,
|
||||
0x02, 0x07, 0x84, 0x31, 0x71, 0x27, 0xba, 0xac, 0x0a, 0x00, 0x21, 0xf9, 0x04,
|
||||
0x05, 0x02, 0x00, 0x05, 0x00, 0x2c, 0x13, 0x00, 0x14, 0x00, 0x06, 0x00, 0x06,
|
||||
0x00, 0x00, 0x03, 0x0d, 0x58, 0xb2, 0x3c, 0xe4, 0x01, 0x38, 0x28, 0x69, 0x7d,
|
||||
0x41, 0x81, 0x5d, 0x12, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x02, 0x00,
|
||||
0x2c, 0x13, 0x00, 0x14, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x04, 0x12, 0x10,
|
||||
0x10, 0x44, 0x49, 0x38, 0x05, 0x0f, 0x90, 0x8d, 0xd9, 0x98, 0x07, 0x76, 0x84,
|
||||
0x10, 0x9c, 0x67, 0x04, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x01, 0x00,
|
||||
0x2c, 0x13, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x04, 0x18, 0x30,
|
||||
0x04, 0x40, 0xa7, 0x51, 0x2a, 0x15, 0xd2, 0x96, 0x37, 0x43, 0xc7, 0x2c, 0xa0,
|
||||
0xe7, 0x29, 0x82, 0x72, 0x1e, 0x00, 0x31, 0xbc, 0x42, 0x04, 0x00, 0x21, 0xf9,
|
||||
0x04, 0x05, 0x02, 0x00, 0x01, 0x00, 0x2c, 0x13, 0x00, 0x13, 0x00, 0x07, 0x00,
|
||||
0x07, 0x00, 0x00, 0x04, 0x19, 0x30, 0x80, 0x09, 0x82, 0x55, 0x2d, 0x9f, 0x80,
|
||||
0x16, 0x73, 0x4e, 0x02, 0x0c, 0x1e, 0xa8, 0x70, 0x9f, 0x79, 0x79, 0x8b, 0x21,
|
||||
0x0d, 0xf0, 0x60, 0x45, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x04, 0x00,
|
||||
0x2c, 0x13, 0x00, 0x13, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x05, 0x1f, 0x20,
|
||||
0x11, 0x8c, 0x23, 0x81, 0x38, 0x8f, 0xe3, 0x34, 0x84, 0x01, 0x41, 0x51, 0xe4,
|
||||
0x00, 0x6e, 0x2c, 0xd3, 0x70, 0x3c, 0x17, 0x0f, 0xf5, 0x2e, 0xa2, 0x82, 0x61,
|
||||
0x38, 0x20, 0x84, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x13, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x05, 0x1a, 0x20,
|
||||
0x00, 0x10, 0x23, 0x90, 0x40, 0x51, 0xea, 0x34, 0x52, 0xe5, 0x52, 0x4b, 0xfb,
|
||||
0xb2, 0x6e, 0x05, 0x25, 0xe9, 0x34, 0x3d, 0x44, 0xa2, 0xfc, 0x87, 0x10, 0x00,
|
||||
0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x04, 0x00, 0x2c, 0x13, 0x00, 0x13, 0x00,
|
||||
0x07, 0x00, 0x07, 0x00, 0x00, 0x06, 0x22, 0x40, 0x82, 0x40, 0x38, 0x18, 0x2a,
|
||||
0x22, 0x92, 0xe4, 0x03, 0xc0, 0x70, 0x75, 0x9e, 0x91, 0x40, 0xf3, 0xd9, 0x89,
|
||||
0x4e, 0xa1, 0x80, 0x86, 0xa4, 0xc2, 0x85, 0x00, 0x08, 0x8d, 0x85, 0xd8, 0x40,
|
||||
0x08, 0x02, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x02, 0x00, 0x2c, 0x13,
|
||||
0x00, 0x13, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x06, 0x25, 0x40, 0x00, 0x41,
|
||||
0x40, 0x24, 0x36, 0x26, 0x15, 0x94, 0x80, 0x04, 0x70, 0x84, 0x38, 0xd0, 0x49,
|
||||
0xc0, 0xc9, 0x31, 0x99, 0xa4, 0x4e, 0xd3, 0x8a, 0x23, 0x5d, 0xa0, 0x4e, 0x60,
|
||||
0x41, 0x60, 0xb0, 0x60, 0x98, 0x13, 0x82, 0x20, 0x00, 0x21, 0xf9, 0x04, 0x05,
|
||||
0x02, 0x00, 0x00, 0x00, 0x2c, 0x13, 0x00, 0x13, 0x00, 0x07, 0x00, 0x07, 0x00,
|
||||
0x00, 0x06, 0x23, 0x40, 0x00, 0xa2, 0x30, 0x04, 0x00, 0x1c, 0x27, 0x8e, 0x72,
|
||||
0x12, 0xa0, 0x6c, 0x32, 0xd0, 0x53, 0x00, 0xf2, 0x8c, 0x4e, 0xab, 0x19, 0xe9,
|
||||
0xc3, 0xe4, 0xe9, 0x4a, 0x02, 0x08, 0x07, 0x65, 0xbc, 0x00, 0x04, 0x01, 0x00,
|
||||
0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x13, 0x00, 0x13, 0x00,
|
||||
0x07, 0x00, 0x07, 0x00, 0x00, 0x06, 0x23, 0x40, 0x40, 0xc1, 0x40, 0x24, 0x00,
|
||||
0x1e, 0x9c, 0x8d, 0xc7, 0x83, 0x02, 0x44, 0x32, 0x96, 0x28, 0x47, 0xf0, 0x8c,
|
||||
0x5a, 0xa6, 0x55, 0xa9, 0x80, 0xe4, 0xc9, 0x68, 0x32, 0x29, 0x21, 0x05, 0x42,
|
||||
0x66, 0x00, 0x82, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c,
|
||||
0x13, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1f, 0xc0, 0xc0,
|
||||
0xc1, 0x40, 0x1c, 0x50, 0x3c, 0x9a, 0x64, 0x25, 0x52, 0x52, 0x39, 0x4d, 0x93,
|
||||
0xe6, 0x33, 0xea, 0x54, 0x79, 0x20, 0x9a, 0xd1, 0xa8, 0xd4, 0x31, 0x40, 0x22,
|
||||
0x60, 0x47, 0x10, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c,
|
||||
0x13, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1d, 0x40, 0x80,
|
||||
0x21, 0x41, 0x04, 0x40, 0x36, 0x99, 0x64, 0x68, 0x02, 0xba, 0x5c, 0x3e, 0x1b,
|
||||
0xa6, 0x13, 0x2a, 0x7d, 0x46, 0x33, 0x96, 0x2c, 0x47, 0x11, 0x99, 0x78, 0x01,
|
||||
0x41, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x13, 0x00,
|
||||
0x13, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x06, 0x22, 0x40, 0x00, 0x40, 0x41,
|
||||
0x44, 0x08, 0x35, 0xa5, 0xd2, 0xa8, 0x03, 0x90, 0x7c, 0x5e, 0xac, 0x97, 0x46,
|
||||
0xe0, 0x64, 0x45, 0xa7, 0xd5, 0xab, 0xb0, 0x04, 0x52, 0x81, 0x4c, 0x02, 0xa1,
|
||||
0xf8, 0x01, 0x08, 0x02, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x13, 0x00, 0x13, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1e, 0x40,
|
||||
0x40, 0x02, 0x40, 0x2c, 0x02, 0x2c, 0xa5, 0x12, 0x47, 0x40, 0x64, 0x39, 0x8d,
|
||||
0x00, 0x11, 0x2b, 0x23, 0x40, 0x15, 0xa7, 0x82, 0x89, 0x45, 0xc5, 0x35, 0x4a,
|
||||
0x24, 0xc5, 0x20, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c,
|
||||
0x13, 0x00, 0x13, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1f, 0x40, 0x01,
|
||||
0x60, 0x48, 0x8c, 0x64, 0x2c, 0xc8, 0x61, 0xe5, 0x22, 0xc2, 0x88, 0x32, 0x82,
|
||||
0x25, 0xc6, 0x09, 0x95, 0x3a, 0x47, 0xc4, 0x8f, 0xd6, 0x33, 0x9c, 0x48, 0xbe,
|
||||
0x14, 0x40, 0x10, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x10, 0x00, 0x00, 0x00, 0x2c,
|
||||
0x15, 0x00, 0x14, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x06, 0x0d, 0x40, 0x80,
|
||||
0xd0, 0x84, 0x11, 0x1a, 0x8b, 0xc6, 0x24, 0x00, 0x65, 0x0c, 0x02, 0x00, 0x21,
|
||||
0xf9, 0x04, 0x05, 0x02, 0x00, 0x03, 0x00, 0x2c, 0x24, 0x00, 0x14, 0x00, 0x06,
|
||||
0x00, 0x06, 0x00, 0x00, 0x02, 0x0a, 0x44, 0x8e, 0xa2, 0xcb, 0xd6, 0xbe, 0xc6,
|
||||
0x00, 0x72, 0x14, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x09, 0x00, 0x2c,
|
||||
0x24, 0x00, 0x14, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x04, 0x10, 0x50, 0xa0,
|
||||
0x89, 0xa4, 0x39, 0xd8, 0x5e, 0xa3, 0xef, 0xd0, 0x85, 0x00, 0x04, 0x64, 0x90,
|
||||
0x44, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x05, 0x00, 0x2c, 0x24, 0x00,
|
||||
0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x04, 0x16, 0xb0, 0x80, 0x09, 0xca,
|
||||
0x48, 0x4a, 0x25, 0x74, 0x96, 0x5f, 0x47, 0xf7, 0x85, 0x1f, 0x88, 0x64, 0x19,
|
||||
0x12, 0x08, 0x2c, 0x1b, 0x01, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00,
|
||||
0x00, 0x2c, 0x24, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x04, 0x19,
|
||||
0x10, 0x04, 0x20, 0x81, 0x59, 0x78, 0x19, 0xf5, 0xdc, 0x7b, 0x09, 0xf7, 0x3d,
|
||||
0x8a, 0xf8, 0x29, 0x86, 0xa3, 0x3a, 0x86, 0x80, 0xbc, 0x48, 0x10, 0x01, 0x00,
|
||||
0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x24, 0x00, 0x13, 0x00,
|
||||
0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1f, 0x40, 0x00, 0x20, 0x20, 0x14, 0x3a,
|
||||
0x8e, 0x8c, 0x44, 0x83, 0x44, 0xa1, 0x90, 0x1a, 0x4b, 0x88, 0x14, 0x4a, 0x92,
|
||||
0x42, 0x1a, 0x89, 0x87, 0xf6, 0x91, 0x10, 0x14, 0xbe, 0x05, 0x41, 0x10, 0x00,
|
||||
0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x01, 0x00, 0x2c, 0x24, 0x00, 0x13, 0x00,
|
||||
0x06, 0x00, 0x07, 0x00, 0x00, 0x05, 0x18, 0x20, 0x20, 0x8c, 0xe3, 0x02, 0x9d,
|
||||
0xd0, 0xe2, 0x48, 0xac, 0xe4, 0xac, 0xed, 0xdb, 0xba, 0x4c, 0x64, 0x47, 0x0c,
|
||||
0xa2, 0xec, 0x09, 0x12, 0x02, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00,
|
||||
0x00, 0x2c, 0x24, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1f,
|
||||
0xc0, 0xc0, 0x80, 0x40, 0x0c, 0x38, 0x26, 0x12, 0xc9, 0xc4, 0x01, 0xe9, 0x38,
|
||||
0x43, 0x90, 0x26, 0x87, 0x03, 0x95, 0x52, 0x23, 0x94, 0x8a, 0xb6, 0x42, 0x31,
|
||||
0x2c, 0xbe, 0x8b, 0x43, 0x10, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00,
|
||||
0x00, 0x2c, 0x24, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1f,
|
||||
0x40, 0x00, 0x62, 0x88, 0x00, 0x40, 0x52, 0xa1, 0x24, 0x64, 0xe2, 0x69, 0x7a,
|
||||
0x24, 0x12, 0xe7, 0x33, 0xba, 0xa9, 0x4a, 0x22, 0x9c, 0x2c, 0x27, 0x92, 0x70,
|
||||
0x38, 0x1e, 0x0e, 0x45, 0x10, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00,
|
||||
0x00, 0x2c, 0x24, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x05, 0x1b,
|
||||
0xa0, 0x00, 0x14, 0x00, 0x20, 0x44, 0x1d, 0xa7, 0x46, 0x95, 0x96, 0x65, 0x5a,
|
||||
0xd5, 0xbe, 0xf1, 0x0c, 0x57, 0x93, 0xa7, 0x7b, 0x93, 0xf2, 0x50, 0x40, 0x45,
|
||||
0x08, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x24, 0x00,
|
||||
0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x20, 0x40, 0x40, 0x61, 0x58,
|
||||
0x00, 0x4c, 0x56, 0x26, 0x13, 0x67, 0x92, 0xca, 0x8c, 0x46, 0x99, 0x56, 0xf3,
|
||||
0x19, 0x9d, 0x42, 0x53, 0x92, 0x8d, 0x76, 0x23, 0x69, 0x50, 0x28, 0x24, 0x4a,
|
||||
0x23, 0x08, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x24,
|
||||
0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x20, 0x40, 0x80, 0x61,
|
||||
0x68, 0x20, 0x48, 0x36, 0x48, 0x8f, 0x84, 0x03, 0x6a, 0x82, 0x3a, 0x1c, 0x4b,
|
||||
0xd3, 0xc2, 0x89, 0x4e, 0x39, 0x95, 0x8c, 0x36, 0x53, 0x59, 0x40, 0x22, 0x11,
|
||||
0xc8, 0x22, 0x08, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x2c,
|
||||
0x24, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x20, 0x40, 0x02,
|
||||
0x20, 0x91, 0x00, 0x10, 0x2a, 0x99, 0x64, 0xa6, 0x62, 0xfa, 0x5c, 0x2e, 0x1f,
|
||||
0x53, 0xf3, 0x19, 0x9d, 0x42, 0x4d, 0xa1, 0x92, 0xc5, 0x52, 0x3a, 0x39, 0x26,
|
||||
0xe0, 0x08, 0x23, 0x08, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x24, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x1f, 0xc0,
|
||||
0x41, 0x42, 0x91, 0x48, 0x00, 0x52, 0xa3, 0xe4, 0xd1, 0xf3, 0x6a, 0x5e, 0x3c,
|
||||
0x9b, 0x8b, 0x13, 0x2a, 0x7d, 0x3d, 0x39, 0x16, 0x10, 0xc8, 0xd2, 0x71, 0x4c,
|
||||
0xbe, 0x13, 0x47, 0x10, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00,
|
||||
0x2c, 0x24, 0x00, 0x13, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x06, 0x21, 0x40,
|
||||
0x04, 0x40, 0xa1, 0x00, 0x20, 0x42, 0x25, 0x8b, 0x65, 0x74, 0xda, 0xb0, 0x44,
|
||||
0x22, 0xd6, 0xc6, 0x09, 0x95, 0x52, 0xa3, 0x9a, 0x95, 0x4a, 0xf5, 0x51, 0x71,
|
||||
0x1e, 0x92, 0xb0, 0x04, 0x10, 0x04, 0x00, 0x21, 0xf9, 0x04, 0x05, 0x02, 0x00,
|
||||
0x00, 0x00, 0x2c, 0x24, 0x00, 0x14, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x06,
|
||||
0x16, 0xc0, 0x0e, 0x60, 0x58, 0x0a, 0x69, 0x44, 0x48, 0x11, 0xe0, 0x88, 0xc1,
|
||||
0x28, 0x35, 0x80, 0xe6, 0xd0, 0x04, 0xf8, 0x0c, 0x57, 0x41, 0x00, 0x21, 0xf9,
|
||||
0x04, 0x05, 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x25, 0x00, 0x13, 0x00, 0x05, 0x00,
|
||||
0x06, 0x00, 0x00, 0x06, 0x12, 0x40, 0x80, 0x50, 0x21, 0x2c, 0x76, 0x44, 0x18,
|
||||
0x4c, 0xb1, 0xa8, 0x41, 0x62, 0x44, 0x9a, 0xcf, 0x32, 0x08, 0x00, 0x3b
|
||||
};
|
||||
|
||||
const lv_img_dsc_t icon_emotion_thinking_45 = {
|
||||
.header.cf = LV_IMG_CF_RAW_CHROMA_KEYED,
|
||||
.header.always_zero = 0,
|
||||
.header.reserved = 0,
|
||||
.header.w = 45,
|
||||
.header.h = 45,
|
||||
.data_size = 2534,
|
||||
.data = icon_emotion_thinking_45_map,
|
||||
};
|
||||
@ -94,14 +94,16 @@ static gd_GIF * gif_open(gd_GIF * gif_base)
|
||||
f_gif_read(gif_base, &fdsz, 1);
|
||||
/* Presence of GCT */
|
||||
if (!(fdsz & 0x80)) {
|
||||
LV_LOG_WARN("no global color table\n");
|
||||
goto fail;
|
||||
/* 无全局颜色表,各帧使用局部颜色表 */
|
||||
depth = 1;
|
||||
gct_sz = 0;
|
||||
} else {
|
||||
/* Color Space's Depth */
|
||||
depth = ((fdsz >> 4) & 7) + 1;
|
||||
/* Ignore Sort Flag. */
|
||||
/* GCT Size */
|
||||
gct_sz = 1 << ((fdsz & 0x07) + 1);
|
||||
}
|
||||
/* Color Space's Depth */
|
||||
depth = ((fdsz >> 4) & 7) + 1;
|
||||
/* Ignore Sort Flag. */
|
||||
/* GCT Size */
|
||||
gct_sz = 1 << ((fdsz & 0x07) + 1);
|
||||
/* Background Color Index */
|
||||
f_gif_read(gif_base, &bgidx, 1);
|
||||
/* Aspect Ratio */
|
||||
@ -122,7 +124,14 @@ static gd_GIF * gif_open(gd_GIF * gif_base)
|
||||
gif->depth = depth;
|
||||
/* Read GCT */
|
||||
gif->gct.size = gct_sz;
|
||||
f_gif_read(gif, gif->gct.colors, 3 * gif->gct.size);
|
||||
if (gct_sz > 0) {
|
||||
f_gif_read(gif, gif->gct.colors, 3 * gif->gct.size);
|
||||
} else {
|
||||
/* 无 GCT 时用黑色作为默认背景色 */
|
||||
memset(gif->gct.colors, 0, 3);
|
||||
gif->gct.size = 1;
|
||||
bgidx = 0;
|
||||
}
|
||||
gif->palette = &gif->gct;
|
||||
gif->bgindex = bgidx;
|
||||
gif->canvas = (uint8_t *) &gif[1];
|
||||
@ -138,25 +147,28 @@ static gd_GIF * gif_open(gd_GIF * gif_base)
|
||||
}
|
||||
bgcolor = &gif->palette->colors[gif->bgindex*3];
|
||||
|
||||
/* 初始 canvas 使用透明背景(alpha=0x00),
|
||||
* GIF 帧的非透明像素会以 alpha=0xff 覆盖。
|
||||
* 这样 GIF 透明区域真正透明,不会显示黑色方块。 */
|
||||
for (i = 0; i < gif->width * gif->height; i++) {
|
||||
#if LV_COLOR_DEPTH == 32
|
||||
gif->canvas[i*4 + 0] = *(bgcolor + 2);
|
||||
gif->canvas[i*4 + 1] = *(bgcolor + 1);
|
||||
gif->canvas[i*4 + 2] = *(bgcolor + 0);
|
||||
gif->canvas[i*4 + 3] = 0xff;
|
||||
gif->canvas[i*4 + 3] = 0x00;
|
||||
#elif LV_COLOR_DEPTH == 16
|
||||
lv_color_t c = lv_color_make(*(bgcolor + 0), *(bgcolor + 1), *(bgcolor + 2));
|
||||
gif->canvas[i*3 + 0] = c.full & 0xff;
|
||||
gif->canvas[i*3 + 1] = (c.full >> 8) & 0xff;
|
||||
gif->canvas[i*3 + 2] = 0xff;
|
||||
gif->canvas[i*3 + 2] = 0x00;
|
||||
#elif LV_COLOR_DEPTH == 8
|
||||
lv_color_t c = lv_color_make(*(bgcolor + 0), *(bgcolor + 1), *(bgcolor + 2));
|
||||
gif->canvas[i*2 + 0] = c.full;
|
||||
gif->canvas[i*2 + 1] = 0xff;
|
||||
gif->canvas[i*2 + 1] = 0x00;
|
||||
#elif LV_COLOR_DEPTH == 1
|
||||
lv_color_t c = lv_color_make(*(bgcolor + 0), *(bgcolor + 1), *(bgcolor + 2));
|
||||
gif->canvas[i*2 + 0] = c.ch.red > 128 ? 1 : 0;
|
||||
gif->canvas[i*2 + 1] = 0xff;
|
||||
gif->canvas[i*2 + 1] = 0x00;
|
||||
#endif
|
||||
}
|
||||
gif->anim_start = f_gif_seek(gif, 0, LV_FS_SEEK_CUR);
|
||||
|
||||
@ -132,6 +132,10 @@ static void next_frame_task_cb(lv_timer_t * t)
|
||||
{
|
||||
lv_obj_t * obj = t->user_data;
|
||||
lv_gif_t * gifobj = (lv_gif_t *) obj;
|
||||
if(gifobj->gif == NULL) {
|
||||
lv_timer_pause(t);
|
||||
return;
|
||||
}
|
||||
uint32_t elaps = lv_tick_elaps(gifobj->last_call);
|
||||
if(elaps < gifobj->gif->gce.delay * 10) return;
|
||||
|
||||
|
||||
21
sdkconfig
21
sdkconfig
@ -14,6 +14,7 @@ CONFIG_SOC_GDMA_SUPPORTED=y
|
||||
CONFIG_SOC_AHB_GDMA_SUPPORTED=y
|
||||
CONFIG_SOC_GPTIMER_SUPPORTED=y
|
||||
CONFIG_SOC_LCDCAM_SUPPORTED=y
|
||||
CONFIG_SOC_LCDCAM_CAM_SUPPORTED=y
|
||||
CONFIG_SOC_LCDCAM_I80_LCD_SUPPORTED=y
|
||||
CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED=y
|
||||
CONFIG_SOC_MCPWM_SUPPORTED=y
|
||||
@ -101,7 +102,7 @@ CONFIG_SOC_CPU_HAS_FPU=y
|
||||
CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y
|
||||
CONFIG_SOC_CPU_BREAKPOINTS_NUM=2
|
||||
CONFIG_SOC_CPU_WATCHPOINTS_NUM=2
|
||||
CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64
|
||||
CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x40
|
||||
CONFIG_SOC_SIMD_PREFERRED_DATA_ALIGNMENT=16
|
||||
CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096
|
||||
CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16
|
||||
@ -208,7 +209,7 @@ CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y
|
||||
CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y
|
||||
CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y
|
||||
CONFIG_SOC_LP_IO_CLOCK_IS_INDEPENDENT=y
|
||||
CONFIG_SOC_SDM_GROUPS=y
|
||||
CONFIG_SOC_SDM_GROUPS=1
|
||||
CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8
|
||||
CONFIG_SOC_SDM_CLK_SUPPORT_APB=y
|
||||
CONFIG_SOC_SPI_PERIPH_NUM=3
|
||||
@ -369,6 +370,9 @@ CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y
|
||||
CONFIG_SOC_BLUFI_SUPPORTED=y
|
||||
CONFIG_SOC_ULP_HAS_ADC=y
|
||||
CONFIG_SOC_PHY_COMBO_MODULE=y
|
||||
CONFIG_SOC_LCDCAM_CAM_SUPPORT_RGB_YUV_CONV=y
|
||||
CONFIG_SOC_LCDCAM_CAM_PERIPH_NUM=1
|
||||
CONFIG_SOC_LCDCAM_CAM_DATA_WIDTH_MAX=16
|
||||
CONFIG_IDF_CMAKE=y
|
||||
CONFIG_IDF_TOOLCHAIN="gcc"
|
||||
CONFIG_IDF_TOOLCHAIN_GCC=y
|
||||
@ -1033,6 +1037,7 @@ CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y
|
||||
CONFIG_BT_BLE_42_DTM_TEST_EN=y
|
||||
CONFIG_BT_BLE_42_ADV_EN=y
|
||||
CONFIG_BT_BLE_42_SCAN_EN=y
|
||||
CONFIG_BT_BLE_VENDOR_HCI_EN=y
|
||||
# CONFIG_BT_BLE_HIGH_DUTY_ADV_INTERVAL is not set
|
||||
# CONFIG_BT_ABORT_WHEN_ALLOCATION_FAILS is not set
|
||||
# end of Bluedroid Options
|
||||
@ -1254,6 +1259,7 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y
|
||||
# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
|
||||
# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
|
||||
# CONFIG_ESP_TLS_INSECURE is not set
|
||||
CONFIG_ESP_TLS_DYN_BUF_STRATEGY_SUPPORTED=y
|
||||
# end of ESP-TLS
|
||||
|
||||
#
|
||||
@ -1281,6 +1287,12 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
|
||||
CONFIG_ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y
|
||||
# end of Common ESP-related
|
||||
|
||||
#
|
||||
# ESP-Driver:Camera Controller Configurations
|
||||
#
|
||||
# CONFIG_CAM_CTLR_DVP_CAM_ISR_CACHE_SAFE is not set
|
||||
# end of ESP-Driver:Camera Controller Configurations
|
||||
|
||||
#
|
||||
# ESP-Driver:GPIO Configurations
|
||||
#
|
||||
@ -1598,8 +1610,11 @@ CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
|
||||
# CONFIG_ESP_PHY_RF_CAL_NONE is not set
|
||||
# CONFIG_ESP_PHY_RF_CAL_FULL is not set
|
||||
CONFIG_ESP_PHY_CALIBRATION_MODE=0
|
||||
CONFIG_ESP_PHY_PLL_TRACK_PERIOD_MS=1000
|
||||
# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
|
||||
# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
|
||||
CONFIG_ESP_PHY_IRAM_OPT=y
|
||||
# CONFIG_ESP_PHY_DEBUG is not set
|
||||
# end of PHY
|
||||
|
||||
#
|
||||
@ -2270,6 +2285,7 @@ CONFIG_MBEDTLS_DYNAMIC_BUFFER=y
|
||||
# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
|
||||
# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
|
||||
# CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE is not set
|
||||
# CONFIG_MBEDTLS_SSL_KEYING_MATERIAL_EXPORT is not set
|
||||
CONFIG_MBEDTLS_PKCS7_C=y
|
||||
# end of mbedTLS v3.x related
|
||||
|
||||
@ -3298,6 +3314,7 @@ CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y
|
||||
CONFIG_SW_COEXIST_ENABLE=y
|
||||
CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y
|
||||
CONFIG_ESP_WIFI_SW_COEXIST_ENABLE=y
|
||||
# CONFIG_CAM_CTLR_DVP_CAM_ISR_IRAM_SAFE is not set
|
||||
# CONFIG_MCPWM_ISR_IN_IRAM is not set
|
||||
# CONFIG_EVENT_LOOP_PROFILING is not set
|
||||
CONFIG_POST_EVENTS_FROM_ISR=y
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user