}
/*更新表盘*/
void SetDialModel::UpdateDialSetting(uint16_t ID) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: ========== Start ==========");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Input ID = %d, currentDialID = %d",
+ ID, currentDialID);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: registeredDials.size() = %zu, dialInfoList.size() = %zu",
+ registeredDials.size(), dialInfoList.size());
+
+ uint16_t originalID = ID;
if (ID <= 4) {
ID++;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: ID adjusted from %d to %d (ID <= 4)",
+ originalID, ID);
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: ID unchanged = %d (ID > 4)", ID);
}
/*判断是否为当前表盘 如果是自定义表盘 需要更新*/
if (currentDialID == ID && ID >= 5) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "UpdateDialSetting: Current dial %d cannot be updated %d",
+ "UpdateDialSetting: FAILED - Current dial %d cannot be updated (same as target %d, ID >= 5)",
currentDialID, ID);
#ifdef SUPPORT_BLE_SERVICE
reply_app_send_switchDialCmd(false);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Sent switchDialCmd(false) to app");
#endif
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: ========== End (Same dial) ==========");
return;
}
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateDialSetting: ID %d", ID);
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Searching for ID %d in registeredDials", ID);
+
+ // 打印 registeredDials 的内容用于调试
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: registeredDials contents:");
+ for (const auto &pair : registeredDials) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ " ID=%d -> Name=%s", pair.first, pair.second.c_str());
+ }
+
if (registeredDials.find(ID) != registeredDials.end()) {
std::string dialname = registeredDials[ID]; // 根据ID找到对应的表盘名称
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
- "UpdateDialSetting: Dial %s is already registered",
- dialname.c_str());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Found dial in registeredDials: ID=%d -> Name=%s",
+ ID, dialname.c_str());
+
// 在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,
- "dialInfoList name %s is already registered",
- (dialInfoList[i].dialName).c_str());
+ "UpdateDialSetting: Checking dialInfoList[%zu]: name='%s', id=%d, flag=%d",
+ i, dialInfoList[i].dialName.c_str(), dialInfoList[i].id, dialInfoList[i].dialFlag);
+
+ // 匹配逻辑:完全匹配 或 dialName 以 dialname 开头(处理文件头中的名称包含额外描述的情况)
+ // 例如:registeredDials 中是 "classic_elegance",dialInfoList 中是 "classic_elegance鎏金简约"
+ bool nameMatches = false;
if (dialInfoList[i].dialName == dialname) {
+ nameMatches = true;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Exact match found");
+ } else if (dialInfoList[i].dialName.length() >= dialname.length() &&
+ dialInfoList[i].dialName.substr(0, dialname.length()) == dialname) {
+ nameMatches = true;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Prefix match found: dialName='%s' starts with '%s'",
+ dialInfoList[i].dialName.c_str(), dialname.c_str());
+ }
+
+ if (nameMatches) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: MATCH FOUND at index %zu: name='%s', id=%d, flag=%d",
+ i, dialInfoList[i].dialName.c_str(), dialInfoList[i].id, dialInfoList[i].dialFlag);
+ foundInList = true;
+
DialSetting diagSetting;
SetDialInfo &info = dialInfoList[i];
diagSetting.dialFlag = info.dialFlag;
diagSetting.dialId = info.id;
diagSetting.dialFullName = info.dialFullName;
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Setting dial - dialFlag=%d, dialId=%d, dialFullName=%s",
+ diagSetting.dialFlag, diagSetting.dialId, diagSetting.dialFullName.c_str());
+
+ uint16_t oldDialID = currentDialID;
currentDialID = ID;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Updated currentDialID from %d to %d",
+ oldDialID, currentDialID);
+
uapi_set_screen_on_api(); // 更新当前表盘Id
- MainModel::GetInstance().AddDialSetting(diagSetting,
- currentDialID); // 更新表盘设置
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Called uapi_set_screen_on_api()");
+
+ MainModel::GetInstance().AddDialSetting(diagSetting, currentDialID); // 更新表盘设置
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Called AddDialSetting(dialId=%d, currentDialID=%d)",
+ diagSetting.dialId, currentDialID);
+
//运动状态下不进行页面切换
- if (uapi_dev_runtime_get_train_status() != 1) {
+ int trainStatus = uapi_dev_runtime_get_train_status();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Train status = %d", trainStatus);
+ if (trainStatus != 1) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Changing slice to VIEW_MAIN");
NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);// 目前切换到主界面,按键监听有问题
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Skipping slice change (training in progress)");
}
+
#ifdef SUPPORT_BLE_SERVICE
svr_ble_read_data_value_updata_noyify(); // app切换表盘增加id更新
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Called svr_ble_read_data_value_updata_noyify()");
reply_app_send_switchDialCmd(true);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Sent switchDialCmd(true) to app - SUCCESS");
#endif
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: ========== End (SUCCESS) ==========");
return; // 更新成功后直接返回
}
}
-//没有在列表找到名称
+
+ //没有在列表找到名称
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: FAILED - Dial name '%s' found in registeredDials but NOT in dialInfoList",
+ dialname.c_str());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: dialInfoList contents:");
+ for (size_t i = 0; i < dialInfoList.size(); i++) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ " [%zu] name='%s', id=%d, flag=%d",
+ i, dialInfoList[i].dialName.c_str(), dialInfoList[i].id, dialInfoList[i].dialFlag);
+ }
#ifdef SUPPORT_BLE_SERVICE
reply_app_send_switchDialCmd(false);
-#endif
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "dialInfoList name %s is already registered",
- dialname.c_str());
+ "UpdateDialSetting: Sent switchDialCmd(false) to app");
+#endif
} else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: FAILED - Cannot find dial ID %d in registeredDials",
+ ID);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Available IDs in registeredDials:");
+ for (const auto &pair : registeredDials) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " ID=%d", pair.first);
+ }
#ifdef SUPPORT_BLE_SERVICE
reply_app_send_switchDialCmd(false);
-#endif
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "SetDialModel UpdateDialSetting: Cannot find dial %d", ID);
+ "UpdateDialSetting: Sent switchDialCmd(false) to app");
+#endif
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: ========== End (FAILED) ==========");
}
/*加载所有表盘*/
void SetDialModel::LoadAllDial() {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDial: Start loading dials");
dialInfoList.clear();
size_t dialSize = dialInfoList.size();
size_t aodSize = aodDialInfoList.size();
+
// 加载默认表盘
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDial: Loading default dials");
LoadAllDialFromDefult();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDial: After default dials, count = %d", dialInfoList.size());
+
// 加载自定义表盘
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDial: Loading RAM dials");
LoadAllDialFromRam();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDial: After RAM dials, count = %d", dialInfoList.size());
+
// 加载离线表盘
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDial: Loading FS dials");
LoadAllDialFromFs();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDial: After FS dials, count = %d", dialInfoList.size());
+
/* 排序离线表盘
std::sort(dialInfoList.begin() + dialSize, dialInfoList.end(),
[](const SetDialInfo &f, const SetDialInfo &n) {
[](const SetDialInfo &f, const SetDialInfo &n) {
return f.dialName < n.dialName;
});
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDial: Finished loading, total dial count = %d", dialInfoList.size());
}
/*加载离线表盘*/
void SetDialModel::LoadAllDialFromFs() {
dialInfo.id = 0;
dialInfo.resId = preInfo.imgId;
dialInfo.dialFullName = dialFullName;
- dialInfo.dialName = preInfo.dialName;
- dialInfo.description = preInfo.description;
+
+ // 使用文件名(去掉 .bin 后缀)作为 dialName,而不是文件头中的 dialName
+ // 这样可以保证与 registeredDials 中的名称一致(registeredDials 使用文件名)
+ // 文件头中的 dialName 可能包含额外描述(如 "classic_elegance鎏金简约"),
+ // 而文件名是 "classic_elegance.bin",去掉后缀后是 "classic_elegance"
+ std::string fileName = dialFileName;
+ size_t dotPos = fileName.find_last_of('.');
+ if (dotPos != std::string::npos) {
+ fileName = fileName.substr(0, dotPos); // 去掉 .bin 后缀
+ }
+ dialInfo.dialName = fileName; // 使用文件名作为 dialName,确保与 registeredDials 一致
+ dialInfo.description = preInfo.description; // 保留文件头中的 description 用于显示
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "ParseDialHeader: Using filename as dialName: '%s' (file header dialName was '%s')",
+ dialInfo.dialName.c_str(), preInfo.dialName);
+
dialInfo.preImageInfo = info;
dialInfo.capability = preInfo.capability;
/*获取表盘的总数*/
size_t SetDialModel::GetDialCount(void) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " %d ", dialInfoList.size());
- return dialInfoList.size();
+ size_t count = dialInfoList.size();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialCount: dialInfoList.size() = %d", count);
+
+ // 如果表盘列表为空,尝试重新加载
+ 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);
+ }
+
+ return count;
}
/*获取表盘列表*/
}
void ble_set_dial_by_id__(uint16_t id) {
- printf("ble_set_dial_by_id_ %d\n", id);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_set_dial_by_id__: Called with id=%d", id);
OHOS::SetDialModel::GetInstance().UpdateDialSetting(id);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_set_dial_by_id__: UpdateDialSetting returned");
}
void ble_set_dial_by_id_(uint16_t id) {
- printf("ble_set_dial_by_id %d\n", id);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_set_dial_by_id_: Called with id=%d, posting to graphic event", id);
GraphicService::GetInstance()->PostGraphicEvent(
std::bind(ble_set_dial_by_id__, id));
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_set_dial_by_id_: Graphic event posted");
}
void ble_get_custom_dial_(uint16_t id, char *buf) {