From 6ec16cc674f4e951926d84c8513f4a31e0d2b71c Mon Sep 17 00:00:00 2001 From: Caisking Date: Mon, 16 Mar 2026 11:49:45 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E8=A1=A8=E7=9B=98=E4=B8=8B?= =?utf8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/set_dial/src/SetDialModel.cpp | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/code/sdk/application/wearable/n9/nativeapp/nativeui/set_dial/src/SetDialModel.cpp b/code/sdk/application/wearable/n9/nativeapp/nativeui/set_dial/src/SetDialModel.cpp index eab6997d6..d25a1b9f3 100644 --- a/code/sdk/application/wearable/n9/nativeapp/nativeui/set_dial/src/SetDialModel.cpp +++ b/code/sdk/application/wearable/n9/nativeapp/nativeui/set_dial/src/SetDialModel.cpp @@ -39,9 +39,9 @@ std::unordered_map registeredDials{ {DEFAULT_DIAL_ID_0, "N9"}, {DEFAULT_DIAL_ID_1, "eagle"}, {DEFAULT_DIAL_ID, "lake"}, - {DEFAULT_DIAL_ID_2, "vibrant_number"}, + {DEFAULT_DIAL_ID_2, "vibrantnumber"}, {DEFAULT_DIAL_ID_3, "distortion"}, - {DEFAULT_DIAL_ID_MAX, "science"}, + {MAX_DEFAULT_DIAL_ID, "science"}, }; // 表盘市场UID 对应表盘name // 存储表盘到文件 @@ -401,12 +401,19 @@ void SetDialModel::UpdateDialSetting(uint16_t ID) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateDialSetting: Found dial in registeredDials: ID=%d -> Name=%s", ID, dialname.c_str()); - + + // 若 dialInfoList 为空(如 BLE 切表盘早于/晚于列表加载),先重载再查找,避免 registeredDials 有数据但 dialInfoList 未同步 + if (dialInfoList.empty()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "UpdateDialSetting: dialInfoList is empty, calling LoadAllDial() before lookup"); + LoadAllDial(); + } + // 在dialInfoList中查找同名表盘 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateDialSetting: Searching for dial name '%s' in dialInfoList (size=%zu)", dialname.c_str(), dialInfoList.size()); - + bool foundInList = false; for (size_t i = 0; i < dialInfoList.size(); i++) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, @@ -597,7 +604,7 @@ void SetDialModel::LoadAllDialFromFs() { 加载默认表盘 */ const std::vector defaultDials = { - "lake", "eagle", "vibrant_number", "distortion", "science", + "lake", "eagle", "vibrantnumber", "distortion", "science", }; void SetDialModel::LoadAllDialFromDefult(void) { @@ -763,19 +770,23 @@ void SetDialModel::SaveDialSetting(uint8_t pageIndex) { MainModel::GetInstance().AddDialSetting(diagSetting, currentDialID); } -/*获取表盘的总数*/ +/*获取表盘的总数 + * 注意:BLE 侧用此值分配缓冲区并调用 GetAllDialIDs 写入 ID 列表, + * 因此必须与 GetAllDialIDs 使用同一数据源(registeredDials), + * 否则会出现 dial_num 与实际写入字节数不一致的 err。*/ size_t SetDialModel::GetDialCount(void) { - size_t count = dialInfoList.size(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialCount: dialInfoList.size() = %d", count); - - // 如果表盘列表为空,尝试重新加载 + size_t count = registeredDials.size(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialCount: registeredDials.size() = %zu (dialInfoList.size() = %zu)", + count, dialInfoList.size()); + + // 若持久化表盘列表为空,尝试从文件恢复后再取数量 if (count == 0) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialCount: dialInfoList is empty, try to reload"); - LoadAllDial(); - count = dialInfoList.size(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialCount: After reload, dialInfoList.size() = %d", count); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialCount: registeredDials is empty, try readDialfile"); + readDialfile(); + count = registeredDials.size(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialCount: After readDialfile, registeredDials.size() = %zu", count); } - + return count; } @@ -1200,7 +1211,6 @@ bool ble_delete_dial_(uint16_t id) { case OHOS::DEFAULT_DIAL_ID_1: case OHOS::DEFAULT_DIAL_ID_2: case OHOS::DEFAULT_DIAL_ID_3: - case OHOS::DEFAULT_DIAL_ID_MAX: WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UninstallDial: Default dial %d cannot be uninstalled", id); return false; -- 2.17.1