#include "DialBinParser.h"
#include "MainModel.h"
#include "NativeAbility.h"
+#include "bleEvent.h"
+#include "bleService.h"
#include "clock/include/MainClockView.h"
#include "custom_runtime.h"
#include "custom_utils.h"
#include <sys/stat.h>
#include <unistd.h>
#include <unordered_set>
-#include "bleEvent.h"
-#include "bleService.h"
extern "C" {
void check_dial_space() { OHOS::SetDialModel::GetInstance().CheckDialSpace(); }
}
};
// 表盘市场UID 对应表盘name
+// 存储表盘到文件
bool SetDialModel::saveDialfile() {
- FILE *fp = fopen(DIAL_ID_PATH, "wb+");
+ FILE *fp = fopen(DIAL_ID_PATH, "wb");
+ if (!fp) {
+ WEARABLE_LOGE("File I/O", "Failed to open file for writing: %s",
+ DIAL_ID_PATH);
+ return false;
+ }
for (const auto &entry : registeredDials) {
char buf[DIAL_ID_LENGTH + DIAL_NAME_LENGTH] = {0};
- memcpy_s(buf, DIAL_ID_LENGTH + DIAL_NAME_LENGTH, &entry.first, 2);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uid %d", entry.first);
- memcpy_s(buf + DIAL_ID_LENGTH, DIAL_ID_LENGTH + DIAL_NAME_LENGTH,
- entry.second.c_str(), entry.second.length());
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uid %s", entry.second.c_str());
- int size = fwrite(buf, 1, DIAL_ID_LENGTH + DIAL_NAME_LENGTH, fp);
- if (DIAL_ID_LENGTH + DIAL_NAME_LENGTH != size) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " fwrite is fail! %d", size);
+ // 复制UID
+ memcpy_s(buf, DIAL_ID_LENGTH, &entry.first, DIAL_ID_LENGTH);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RegisterDial %d %s is ok!", ID,
+ "uid %d", entry.first);
+
+ // 复制表盘名称,确保不越界
+ size_t name_length =
+ entry.second.copy(buf + DIAL_ID_LENGTH, DIAL_NAME_LENGTH - 1);
+ buf[DIAL_ID_LENGTH + name_length] = '\0'; // 确保字符串以null结尾
+
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RegisterDial %d %s is ok!", ID,
+ "uid %s", entry.second.c_str());
+
+ // 写入文件
+ size_t size =
+ fwrite(buf, sizeof(char), DIAL_ID_LENGTH + DIAL_NAME_LENGTH, fp);
+ if (size != (DIAL_ID_LENGTH + DIAL_NAME_LENGTH)) {
+ WEARABLE_LOGE("File I/O", "fwrite failed! Written bytes: %zu", size);
fclose(fp);
return false;
} else {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " fwrite is succ %d !",
- entry.first);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RegisterDial %d %s is ok!", ID,
+ "fwrite succeeded for uid %d!", entry.first);
}
}
fclose(fp);
return true;
}
+// 从文件读取表盘
bool SetDialModel::readDialfile() {
- FILE *fp = fopen(DIAL_ID_PATH, "rb+");
- if (fp == NULL)
+ FILE *fp = fopen(DIAL_ID_PATH, "rb");
+ if (!fp) {
+ WEARABLE_LOGE("File I/O", "Failed to open file for reading: %s",
+ DIAL_ID_PATH);
return false;
+ }
+
fseek(fp, 0, SEEK_END);
- int size = ftell(fp);
+ long file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
- // char * buf=(char *)malloc(size);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " readDialfile size is %d !", size);
+ WEARABLE_LOGD("Log", "readDialfile size is %ld!", file_size);
- while (size) {
+ while (file_size > 0) {
uint16_t uid = 0;
- if (DIAL_ID_LENGTH != fread((void *)&uid, 1, DIAL_ID_LENGTH, fp)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " fread is fail!");
+ if (fread(&uid, 1, DIAL_ID_LENGTH, fp) != DIAL_ID_LENGTH) {
+ WEARABLE_LOGE("File I/O", "fread failed for uid!");
+ break; // 读取出错,停止循环
}
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uid %d", uid);
-
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uid %d", uid);
char name_buf[DIAL_NAME_LENGTH] = {0};
- if (DIAL_NAME_LENGTH != fread((void *)name_buf, 1, DIAL_NAME_LENGTH, fp)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " fread is fail!");
+ if (fread(name_buf, 1, DIAL_NAME_LENGTH, fp) != DIAL_NAME_LENGTH) {
+ WEARABLE_LOGE("File I/O", "fread failed for name_buf!");
+ break; // 读取出错,停止循环
}
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "name_buf %s", name_buf);
-
- if (uid != 0) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "name_buf %s", name_buf);
+ // 检查UID和名称的有效性
+ if (uid != 0 && name_buf[0] != '\0') {
if (!IsDialInstalled(uid)) {
RegisterDial(uid, name_buf);
}
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Invalid uid or empty name. uid: %d, name: %s", uid, name_buf);
}
- size -= (DIAL_ID_LENGTH + DIAL_NAME_LENGTH);
+
+ file_size -= (DIAL_ID_LENGTH + DIAL_NAME_LENGTH);
}
fclose(fp);
/*判断是否为当前表盘 如果是自定义表盘 需要更新*/
if (currentDialID == ID && ID >= 5) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "UpdateDialSetting: Current dial %d cannot be updated %d",currentDialID,ID);
- reply_app_send_switchDialCmd(false);
+ "UpdateDialSetting: Current dial %d cannot be updated %d",
+ currentDialID, ID);
+ reply_app_send_switchDialCmd(false);
return;
}
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateDialSetting: ID %d",ID);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateDialSetting: ID %d", ID);
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_LOGD(WEARABLE_LOG_MODULE_APP,
+ "UpdateDialSetting: Dial %s is already registered",
+ dialname.c_str());
// 在dialInfoList中查找同名表盘
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());
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+ "dialInfoList name %s is already registered",
+ (dialInfoList[i].dialName).c_str());
if (dialInfoList[i].dialName == dialname) {
DialSetting diagSetting;
SetDialInfo &info = dialInfoList[i];
MainModel::GetInstance().AddDialSetting(diagSetting,
currentDialID); // 更新表盘设置
NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
- svr_ble_read_data_value_updata_noyify(); //app切换表盘增加id更新
- reply_app_send_switchDialCmd(true);
+ svr_ble_read_data_value_updata_noyify(); // app切换表盘增加id更新
+ reply_app_send_switchDialCmd(true);
return; // 更新成功后直接返回
}
}
//没有在列表找到名称
reply_app_send_switchDialCmd(false);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "dialInfoList name %s is already registered", dialname.c_str());
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+ "dialInfoList name %s is already registered",
+ dialname.c_str());
} else {
- reply_app_send_switchDialCmd(false);
- WEARABLE_LOGE( WEARABLE_LOG_MODULE_APP,"SetDialModel UpdateDialSetting: Cannot find dial %d", ID);
+ reply_app_send_switchDialCmd(false);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "SetDialModel UpdateDialSetting: Cannot find dial %d", ID);
}
}
SetDialInfo dialInfo{0};
int ret = ParseDialHeader(DEFULTDIAL, fullDialName, dialInfo);
if (ret == 0) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Adding dial %s", fullDialName.c_str());
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Adding dial %s",
+ fullDialName.c_str());
dialInfoList.push_back(dialInfo);
} else {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,