typedef enum
{
DIAL_CLOCK = 0,
- DIAL_CLOCK_2 = 1,
- DIAL_CLOCK_3 = 2,
- DIAL_CLOCK_4 = 3,
- DIAL_CLOCK_5 = 4,
+ DIAL_CLOCK_1 = 1,
+ DIAL_CLOCK_2 = 2,
+ DIAL_CLOCK_3 = 3,
+ DIAL_CLOCK_4 = 4,
DIAL_MAX,
} DialId;
#define APP_RES_PATH "/user/res"
#define APP_MUSIC_PATH "/user/music"
#define APP_VIDEO_PATH "/user/video"
-#define APP_DEFAULT_DIAL_PATH "/user/dial" /*默认表盘安装路径*/
-#define APP_DOWNLOAD_DIAL_PATH "/user/userdata/dial" /*表盘市场安装路径*/
-#define APP_CUSTOM_DIAL_PATH "/user/userdata/constom_dial" /*自定义表盘安装路径*/
+#define APP_DEFAULT_DIAL_PATH "/user/dial" /*默认表盘安装路径*/
+#define APP_DOWNLOAD_DIAL_PATH "/user/userdata/dial" /*表盘市场安装路径*/
+#define APP_CUSTOM_DIAL_PATH "/user/userdata/custom_dial" /*自定义表盘安装路径*/
#define APP_LIST_PATH "/user/res/applist_icon"
- /* ---------------------------------- 卡片管理 --------------------------------- */
+
static constexpr const char *CARD_CONFIG_PATH = "/user/cardconfig.bin";
- static constexpr const char *DEFAULT_DIAL_PATH = APP_RES_PATH "/dial_soures/KUMI.bin";
+
+ /* --------------------------------- 自定义表盘配置 -------------------------------- */
#ifdef CUSTOM_Z1
static constexpr const char *DEFAULT_DIALBACK_PATH = APP_RES_PATH "/dial_soures/z1background.bin";
static constexpr const char *DEFAULT_DIALPER_PATH = APP_RES_PATH "/dial_soures/Z1VIEW.bin";
static constexpr const char *DEFAULT_DIALBACK_PATH = APP_RES_PATH "/dial_soures/MAIN_FACE_IMAGE.bin";
static constexpr const char *DEFAULT_DIALPER_PATH = APP_RES_PATH "/dial_soures/KUMIVIEW.bin";
#endif
-
- // static constexpr const char *DEFAULT_DIALPER_PATH_TEST = APP_CUSTOM_DIAL_PATH"/Classic_Geometry.bin";
- // static constexpr const char *DEFAULT_DIALPER_PATH_TEST = APP_CUSTOM_DIAL_PATH"/Classic_Geometry.bin";
-
+ static constexpr const char *CUSTOM_CLOCK1_DIALBACK_PATH = APP_CUSTOM_DIAL_PATH "/1/main_bg.bin";
+ static constexpr const char *CUSTOM_CLOCK1_DIALPER_PATH = APP_CUSTOM_DIAL_PATH "/1/thumbnail.bin";
+ static constexpr const char *CUSTOM_CLOCK2_DIALBACK_PATH = APP_CUSTOM_DIAL_PATH "/2/main_bg.bin";
+ static constexpr const char *CUSTOM_CLOCK2_DIALPER_PATH = APP_CUSTOM_DIAL_PATH "/2/thumbnail.bin";
+ static constexpr const char *CUSTOM_CLOCK3_DIALBACK_PATH = APP_CUSTOM_DIAL_PATH "/3/main_bg.bin";
+ static constexpr const char *CUSTOM_CLOCK3_DIALPER_PATH = APP_CUSTOM_DIAL_PATH "/3/thumbnail.bin";
+ static constexpr const char *CUSTOM_CLOCK4_DIALBACK_PATH = APP_CUSTOM_DIAL_PATH "/4/main_bg.bin";
+ static constexpr const char *CUSTOM_CLOCK4_DIALPER_PATH = APP_CUSTOM_DIAL_PATH "/4/thumbnail.bin";
+ /* -------------------------------------------------------------------------- */
+ /*卡片管理*/
static constexpr const char *PNG_SET_CARD_ADD = APP_RES_PATH "/MainCard/CARD_ADD.bin";
static constexpr const char *PNG_SET_CARD_DEL = APP_RES_PATH "/MainCard/CARD_DEL.bin";
static constexpr const char *PNG_SET_CARD_HEART = APP_RES_PATH "/MainCard/HeartCard.bin";
void UpdateBatteryColor(void);
/*配置文件*/
void SetDialPath(std::string dialpath);
-
+
+ /*配置自定义表盘*/
+ void SetCustomId(int Id);
+
/*配置函数*/
bool InitBackground(const char *filename);
bool InitTimeView(TimeDisplayPosition type); // 时间
bool InitBatteryView(BatteryDisplayType type); // 电量
bool InitColor(ColorTypeSet type); // 颜色
-
private:
void InitStepValue();
bool InitLabelView(void);
bool InitClock(void);
bool LoadClockImage(Image *view, uint32_t resId);
bool LoadClockImage(UIImageView *view, uint32_t resId);
-
/*表盘背景*/
UIImageView *curFace{nullptr};
#include "main/include/PullUpDownView.h"
#include "battery_hal.h"
#include "message/include/MessageControlView.h"
+#include "SetDialModel.h"
extern uint8_t battery_get_voltage(float *voltage);
#define TIMEVIEW_UP 0
{
return g_pMainClockView;
}
+ /*配置自定义表盘*/
+ void MainClockView::SetCustomId(int Id)
+ {
+ // 默认表盘和异常表盘采用原表盘配置
+ if (Id == DIAL_CLOCK || Id > DIAL_MAX)
+ return;
+
+ DialLayout dialconfig;
+ SetDialModel::GetInstance().loadDialConfig(Id, dialconfig);
+
+ // 设置背景
+ dialFile = SetDialModel::GetInstance().GetSaveDir(Id) + "/" + "main_bg.bin";
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dialFile is %s", dialFile.c_str());
+
+ // 设置表盘配置
+ timePosition = static_cast<TimeDisplayPosition>(dialconfig.timeDisplay);
+ batterySetting = static_cast<BatteryDisplayType>(dialconfig.batteryDisplay);
+ colorType = static_cast<ColorTypeSet>(dialconfig.colorTypeSet);
+ }
+
/*设置表盘背景*/
void MainClockView::SetDialPath(std::string dialpath)
{
ImageInfo *image = ImageCacheManager::GetInstance().LoadSingleRes(filename, false);
if (image == nullptr)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam loadimage %s fail",
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam loadimage %s fail",
filename);
curFace->SetSrc(DEFAULT_DIALBACK_PATH);
Add(curFace);
-/*** \r
- * @Date: 2024-06-21 09:56:18\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-07-06 15:15:38\r
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainModel.h\r
- */\r
-/***\r
- * @Date: 2024-06-21 09:56:18\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-06-28 16:36:39\r
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainModel.h\r
- */\r
-/***\r
- * @Date: 2024-06-21 09:56:18\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-06-27 09:38:03\r
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainModel.h\r
- */\r
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: MainModel.h\r
- * Author:\r
- * Create: 2021-11-23\r
- */\r
+\r
\r
#ifndef MAIN_MODEL_H\r
#define MAIN_MODEL_H\r
CardId id;\r
bool isVisible;\r
};\r
+ // 自定义表盘配置\r
typedef struct\r
{\r
DialId id;\r
const bool GetCardInfoSet(uint8_t index) const;\r
\r
private:\r
- void InitDialSettingDefault(void);\r
+ void InitDialSettingDefault(int Id);\r
MainModel();\r
MainModel(const MainModel &);\r
MainModel &operator=(const MainModel &);\r
{GOAL, false},\r
{SLEEP, false},\r
};\r
- /*自定义map?*/\r
+ /*自定义map配置*/\r
const DialInfo dialInfoMap[] = {\r
- #ifdef CUSTOM_Z1\r
+#ifdef CUSTOM_Z1\r
{DIAL_CLOCK, "Z1", DEFAULT_DIALPER_PATH, DEFAULT_TASK_PERIOD},\r
- #else\r
- {DIAL_CLOCK, "KUMI", DEFAULT_DIALPER_PATH, DEFAULT_TASK_PERIOD},//默认\r
+#else\r
+ {DIAL_CLOCK, "KUMI", DEFAULT_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 默认表盘 Id 0\r
+ {DIAL_CLOCK_1, "Custom_1", CUSTOM_CLOCK1_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 1\r
+ {DIAL_CLOCK_2, "Custom_2", CUSTOM_CLOCK2_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 2\r
+ {DIAL_CLOCK_3, "Custom_3", CUSTOM_CLOCK3_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 3\r
+ {DIAL_CLOCK_4, "Custom_4", CUSTOM_CLOCK4_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 4\r
\r
- #endif\r
+#endif\r
};\r
\r
const CardInfo printfMap[] = {\r
return nullptr;\r
}\r
\r
- void MainModel::InitDialSettingDefault(void)\r
+ void MainModel::InitDialSettingDefault(int id)\r
{\r
+ if (id < DIAL_CLOCK || id >= DIAL_MAX)\r
+ id = DIAL_CLOCK;\r
+\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "InitDialSettingDefault");\r
dialSetting.dialFlag = 0;\r
- dialSetting.dialId = DIAL_CLOCK;\r
- dialSetting.dialFullName = "";\r
+ dialSetting.dialId = id;\r
+ dialSetting.dialFullName.clear(); // 用 clear() 替代空字符串\r
}\r
\r
- /*更新表盘设置*/\r
+ /* 更新表盘设置 */\r
void MainModel::AddDialSetting(const DialSetting &setting, const int id)\r
{\r
- std::string tmp;\r
- tmp += std::to_string(setting.dialFlag) + ",";\r
- tmp += std::to_string(setting.dialId) + ",";\r
- tmp += setting.dialFullName + ",";\r
+ std::string tmp = std::to_string(setting.dialFlag) + "," + std::to_string(setting.dialId) + "," + setting.dialFullName + ",";\r
\r
- (void)UtilsSetValue("dial_setting", tmp.c_str());\r
- (void)UtilsSetValue("dial_id", std::to_string(id).c_str());\r
+ (void)UtilsSetValue("dial_setting", tmp.c_str()); // 存储表盘配置\r
+ (void)UtilsSetValue("dial_id", std::to_string(id).c_str()); // 存储当前表盘Id\r
}\r
- /*加载kvstore里面的dial*/\r
+\r
+ /* 加载 kvstore 里面的 dial */\r
void MainModel::InitDialSettings(void)\r
{\r
- char temp[DIAL_SETTING_VALUE_LEN] = {0};\r
- int len;\r
- len = UtilsGetValue("dial_setting", temp, DIAL_SETTING_VALUE_LEN);\r
- if (len >= 0)\r
+ char temp[DIAL_SETTING_VALUE_LEN] = {0}; // 创建一个临时字符数组用于存储拨号设置的字符串\r
+ int len = UtilsGetValue("dial_setting", temp, DIAL_SETTING_VALUE_LEN);\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Attempting to load dial settings from kvstore. Length: %d\r\n", len);\r
+\r
+ if (len < 0)\r
{\r
- char *setBuffer = nullptr;\r
- char *setValue = strtok_s(temp, ",", &setBuffer);\r
- if (setValue != nullptr)\r
- {\r
- dialSetting.dialFlag = atoi(setValue);\r
- }\r
- else\r
- {\r
- InitDialSettingDefault();\r
- return;\r
- }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to retrieve dial settings. Initializing to default settings.\r\n");\r
+ InitDialSettingDefault(DIAL_CLOCK);\r
+ return;\r
+ }\r
\r
- setValue = strtok_s(nullptr, ",", &setBuffer);\r
- if (setValue != nullptr)\r
- {\r
- dialSetting.dialId = atoi(setValue);\r
- }\r
- else\r
- {\r
- InitDialSettingDefault();\r
- return;\r
- }\r
+ char *setBuffer = nullptr; // 字符指针用于 strtok_s 的存储\r
+ char *setValue;\r
\r
- setValue = strtok_s(nullptr, ",", &setBuffer);\r
- if (setValue != nullptr)\r
- {\r
- dialSetting.dialFullName = setValue;\r
- if (!((dialSetting.dialFullName.length() > 0) &&\r
- (access(dialSetting.dialFullName.c_str(), F_OK) == 0)))\r
- {\r
- InitDialSettingDefault();\r
- return;\r
- }\r
- }\r
- else\r
+ // 从字符串中读取三个值\r
+ // 1.读取表盘标志位\r
+ setValue = strtok_s(temp, ",", &setBuffer);\r
+ if (setValue)\r
+ {\r
+ dialSetting.dialFlag = atoi(setValue); // 将字符串转换为整数\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Dial flag loaded: %d\r\n", dialSetting.dialFlag);\r
+ }\r
+ else\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: First value is empty. Initializing to default settings.\r\n");\r
+ InitDialSettingDefault(DIAL_CLOCK);\r
+ return;\r
+ }\r
+\r
+ // 读取表盘Id\r
+ setValue = strtok_s(nullptr, ",", &setBuffer);\r
+ if (setValue)\r
+ {\r
+ dialSetting.dialId = atoi(setValue); // 将字符串转换为整数\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Dial ID loaded: %d\r\n", dialSetting.dialId);\r
+ }\r
+ else\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Second value is empty. Initializing to default settings.\r\n");\r
+ InitDialSettingDefault(DIAL_CLOCK);\r
+ return;\r
+ }\r
+\r
+ // 读取表盘名\r
+ setValue = strtok_s(nullptr, ",", &setBuffer);\r
+ if (setValue)\r
+ {\r
+ dialSetting.dialFullName = setValue; // 将完整名称赋值\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Dial full name loaded: %s\r\n", dialSetting.dialFullName.c_str());\r
+\r
+ if (dialSetting.dialFullName.empty() || access(dialSetting.dialFullName.c_str(), F_OK) != 0)\r
{\r
- InitDialSettingDefault();\r
- return;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Dial full name is invalid or file does not exist. Initializing to default settings.\r\n");\r
+ InitDialSettingDefault(dialSetting.dialId);\r
}\r
}\r
else\r
{\r
- InitDialSettingDefault();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Third value is empty. Initializing to default settings.\r\n");\r
+ InitDialSettingDefault(dialSetting.dialId);\r
}\r
}\r
\r
{\r
return dialSetting;\r
}\r
-\r
}\r
-\r
#if 0\r
void MainModel::DeleteCardSetting(uint8_t index)\r
{\r
bool MainViewSample::HorizontalViewInit(void)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::HorizontalViewInit");
+ /*读取kvstore里面的配置*/
presenter_->InitDialSettings();
presenter_->InitCardSettings();
uint8_t cardSettingNum = presenter_->GetCardSettingCount();
UICardPage *MainViewSample::InitWatchDial(DialSetting &setting)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitWathDial");
-#if 0
- switch (setting.dialId)
- {
- case DIAL_CLOCK:
- {
- return new MainClockView();
- }
- break; // 添加 break 语句
- default:
- return nullptr;
- }
-#endif
+
MainClockView *clock = new MainClockView();
- clock->SetDialPath(setting.dialFullName);
- // clock->InitialConfig(setting.dialId); //配置文件
+ clock->SetCustomId(setting.dialId);
return clock;
}
UICardPage *MainViewSample::InitWatchFacePage(void)
#include <vector>\r
#include <string>\r
#include "common/image_cache_manager.h"\r
-namespace OHOS {\r
- typedef struct {\r
- uint8_t dialFlag; /* 1:离线表盘 0:预制表盘 */\r
- uint8_t id; /* 仅预制表盘使用 */\r
- std::string dialFullName; /* 仅离线表盘使用 */\r
- std::string imageFullName; /* 仅预制表盘使用 */\r
- std::string dialName;\r
- std::string description; /* 仅离线表盘使用 */\r
+namespace OHOS\r
+{\r
+ typedef struct\r
+ {\r
+ uint8_t dialFlag; // 表盘标志 1:离线表盘 0:预制表盘\r
+ uint8_t id; // 表盘Id 仅预制表盘使用\r
+ std::string dialFullName; // 表盘路径 仅离线表盘使用\r
+ std::string imageFullName; // 表盘缩约图 仅预制表盘使用\r
+ std::string dialName; // 表盘名\r
+ std::string description; // 表盘描述 仅离线表盘使用\r
ImageInfo *preImageInfo;\r
} SetDialInfo;\r
}\r
-/***
- * @Date: 2024-06-17 11:38:34
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-07-02 20:41:18
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialModel.h
- */
-/***
- * @Date: 2024-06-17 11:38:34
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-06-21 11:13:24
- * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialModel.h
- */
-/***
- * @Date: 2024-05-30 15:59:37
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-06-14 16:51:13
- * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialModel.h
- */
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: SetDialModel.h
- * Author:
- * Create: 2021-11-23
- */
#ifndef SET_DIAL_MODEL_H
#define SET_DIAL_MODEL_H
struct DialLayout
{
uint8_t dialId;
- uint8_t batteryDisplay; // 电池配置
- uint8_t timeDisplay; // 时间位置
- uint8_t colorTypeSet; // 颜色配置
+ uint8_t batteryDisplay; // 电池配置 [0:无 1:白 2:黑]
+ uint8_t timeDisplay; // 时间位置 [0:上 1:下]
+ uint8_t colorTypeSet; // 颜色配置 [0:白 1:黑 2:灰 3:绿 4:橙 5:蓝]
};
class SetDialModel
{
std::string GetSaveDir(int Id);
/*【判断文件夹是否存在 不存在创建】*/
void CreateDirectoryIfNotExists(const std::string &path);
+ /*判断文件是否存在*/
+ bool CheckFileExists(const std::string &filePath);
+ /*获取自定义表盘名*/
+ std::string GetCustomName(int Id);
+ void TestDialConfig(void);
private:
void LoadAllDialFromRam(void);
-/***
- * @Date: 2024-06-17 19:06:05
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-06-17 19:06:53
- * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp
- */
-/***
- * @Date: 2024-05-30 15:59:37
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-06-12 10:26:15
- * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp
- */
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: SetDialModel.cpp
- * Author:
- * Create: 2021-11-23
- */
+
#include <algorithm>
#include "MainModel.h"
#include "SetDialModel.h"
size -= (DIAL_ID_LENGTH + DIAL_NAME_LENGTH);
}
- // free(buf);
fclose(fp);
return true;
}
SetDialModel::SetDialModel()
{
- readDialfile();
- LoadAllDial();
- char idBuffer[10];
+ readDialfile(); // 读取表盘map配置文件
+ LoadAllDial(); // 更新表盘个数 当前表盘
+ char idBuffer[10]; // 读取表盘Id配置文件
int len = UtilsGetValue("dial_id", idBuffer, sizeof(idBuffer));
if (len >= 0)
{
saveDialfile();
}
+
/* 打印map */
void SetDialModel::PrintRegisteredDials(const std::unordered_map<uint16_t, std::string> &dials)
{
printf("ID: %u | Name: %s\n", entry.first, entry.second.c_str());
}
}
+
/* 通过名字查询Id */
uint16_t SetDialModel::GetDialIdFromName(const std::string &dialName)
{
}
return 0; // 如果未找到对应的表盘名称,返回0或者其他适当的默认值
}
+
/* 获取当前表盘Id */
uint16_t SetDialModel::GetCurrentDialID()
{
void SetDialModel::LoadAllDial()
{
dialInfoList.clear();
+ // 加载自定义表盘
LoadAllDialFromRam();
size_t dialSize = dialInfoList.size();
+ // 加载默认表盘
LoadAllDialFromDefult();
+ // 加载离线表盘
LoadAllDialFromFs();
- /* 只排序离线表盘 */
+ /* 排序离线表盘 */
std::sort(dialInfoList.begin() + dialSize, dialInfoList.end(), [](const SetDialInfo &f, const SetDialInfo &n)
{ return f.dialName < n.dialName; });
+
// 表盘Id以及表盘map打印
char dialId[128];
GetAllDialIDs(dialId);
PrintRegisteredDials(registeredDials);
}
- /*加载自定义表盘*/
- void SetDialModel::LoadAllDialFromRam()
- {
- for (uint8_t i = DIAL_CLOCK; i < DIAL_MAX; i++)
- {
- // 获取表盘信息
- const DialInfo *info = MainModel::GetInstance().GetDialInfo((DialId)i);
- if (info == nullptr)
- {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam: Dial info for ID %u is nullptr", i);
- continue;
- }
-
- // 初始化表盘信息
- SetDialInfo dialInfo{0};
- dialInfo.dialFlag = 0;
- dialInfo.id = i;
- dialInfo.dialName = info->dialName;
- dialInfo.imageFullName = info->dialImg;
-
- // 加载图像资源
- ImageInfo *imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(info->dialImg, false);
- if (imageInfo == nullptr)
- {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam load image %s failed", info->dialImg.c_str());
- continue;
- }
-
- // 设置图像信息
- dialInfo.preImageInfo = imageInfo;
-
- // 添加到表盘列表
- dialInfoList.push_back(dialInfo);
-
- // 日志输出
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Parsed Dial: ID: %u, Name: %s, Image: %s",
- dialInfo.id, dialInfo.dialName.c_str(), dialInfo.imageFullName.c_str());
- }
- }
/*加载离线表盘*/
void SetDialModel::LoadAllDialFromFs()
{
closedir(dirp);
return;
}
- /*通过表盘名称解析表盘*/
+ /*通过表盘名称解析表盘 [离线表盘]*/
int32_t SetDialModel::ParseDialHeader(int type, const std::string &dialFileName, SetDialInfo &dialInfo)
{
std::string dialFullName;
FILE *fp = fopen(dialFullName.c_str(), "rb");
if (fp == nullptr)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader cannot open file: %s",
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ParseDialHeader cannot open file: %s",
dialFullName.c_str());
return -1;
}
bool ret = DialBinParser::GetInstance()->GetDialPreviewInfo(fp, &preInfo);
if (!ret)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetDialPreviewInfo %s fail",
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetDialPreviewInfo %s fail",
dialFullName.c_str());
return -1;
}
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ParseDialHeader dialFullName: %s",
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader dialFullName: %s",
dialFullName.c_str());
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ParseDialHeader dialName: %s",
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader dialName: %s",
preInfo.dialName);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ParseDialHeader description: %s",
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader description: %s",
preInfo.description);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ParseDialHeader previewImgId: %u",
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader previewImgId: %u",
preInfo.imgId);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ParseDialHeader imageOffset: %u",
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader imageOffset: %u",
preInfo.offset);
ImageInfo *info = ImageCacheManager::GetInstance().LoadOneInMultiRes(
preInfo.imgId, dialFullName, fp, false, preInfo.offset);
dialInfo.description = preInfo.description;
dialInfo.preImageInfo = info;
-#if 0
- // 需要判断表盘是否存在 不存在->新表盘注册
- if (GetDialIdFromName(dialInfo.dialName) == 0)
- {
- // 找到已注册表盘中最大的ID
- uint16_t maxDialId = 103;
- for (auto it = registeredDials.begin(); it != registeredDials.end(); ++it)
- {
- if (it->first >= maxDialId && it->first != DEFAULT_DIAL_ID_1 && it->first != DEFAULT_DIAL_ID_2)
- {
- maxDialId = it->first;
- }
- }
- // 分配新的表盘ID为最大ID加1
- uint16_t newDialId = maxDialId + 1;
- // 注册表盘,将表盘ID和表盘文件名添加到 registeredDials 中
- RegisterDial(newDialId, (dialInfo.dialName).c_str());
- }
-#endif
fclose(fp);
return 0;
}
- /*设置表盘*/
+ /*设置当前表盘*/
void SetDialModel::SaveDialSetting(uint8_t pageIndex)
{
if (pageIndex >= dialInfoList.size())
diagSetting.dialId = info.id;
diagSetting.dialFullName = info.dialFullName;
currentDialID = GetDialIdFromName(info.dialName); // 更新表盘Id
+
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "info.dialName %s info.id %d ", info.dialName.c_str(), info.id);
MainModel::GetInstance().AddDialSetting(diagSetting, currentDialID);
}
return 0;
}
/* --------------------------------- 自定义表盘配置 -------------------------------- */
+ /*加载自定义表盘*/
+ void SetDialModel::LoadAllDialFromRam()
+ {
+ for (uint8_t i = DIAL_CLOCK; i < DIAL_MAX; i++)
+ {
+ // 获取表盘列表 读取自定义表盘配置
+ const DialInfo *info = MainModel::GetInstance().GetDialInfo((DialId)i);
+ if (info == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam: Dial info for ID %u is nullptr", i);
+ continue;
+ }
+
+ // 处理自定义配置文件
+ if (i != DIAL_CLOCK)
+ {
+ std::string customFilePath = GetSaveDir(i) + "/" + std::to_string(i) + ".bin";
+ if (!CheckFileExists(customFilePath))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Custom config file does not exist for ID: %u, filename: %s", i, customFilePath.c_str());
+ continue;
+ }
+ }
+
+ // 初始化表盘信息
+ SetDialInfo dialInfo;
+ dialInfo.dialFlag = 0;
+ dialInfo.id = i;
+ dialInfo.dialName = info->dialName;
+ dialInfo.imageFullName = info->dialImg;
+
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Processing Dial ID %u: Name: %s", i, dialInfo.dialName.c_str());
+
+ // 加载图像资源
+ ImageInfo *imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(info->dialImg, false);
+ if (imageInfo == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam load image %s failed", info->dialImg);
+ continue;
+ }
+
+ // 设置图像信息
+ dialInfo.preImageInfo = imageInfo;
+
+ // 添加到表盘列表
+ dialInfoList.push_back(dialInfo);
+
+ // 注册到map
+ // RegisterDial(dialInfo.id, dialInfo.dialName.c_str());
+
+ // 日志输出
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Parsed Dial: ID: %u, Name: %s, Image: %s",
+ dialInfo.id, dialInfo.dialName.c_str(), dialInfo.imageFullName.c_str());
+ }
+ }
+
+ // 检查文件是否存在的辅助函数
+ bool SetDialModel::CheckFileExists(const std::string &filePath)
+ {
+ std::ifstream file(filePath);
+ return file.is_open();
+ }
+ // 测试表盘配置写文件
+ void SetDialModel::TestDialConfig()
+ {
+ DialLayout dialconfig;
+
+ /*设置表盘参数*/
+ dialconfig.dialId = 1;
+ dialconfig.batteryDisplay = 1;
+ dialconfig.timeDisplay = 0;
+ dialconfig.colorTypeSet = 5;
+
+ if (!saveDialConfig(dialconfig))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to save dial config");
+ }
+ }
// 保存自定义表盘配置到文件
bool SetDialModel::saveDialConfig(const DialLayout &layout)
{
- std::string filename = APP_CUSTOM_DIAL_PATH + std::to_string(layout.dialId) + ".bin";
+
+ std::string filename = GetSaveDir(layout.dialId) + "/" + std::to_string(layout.dialId) + ".bin";
// 创建或打开文件
std::ofstream configFile(filename, std::ios::binary | std::ios::out | std::ios::trunc);
*/
bool SetDialModel::loadDialConfig(int Id, DialLayout &layout)
{
- std::string filename = APP_CUSTOM_DIAL_PATH + std::to_string(Id) + ".bin";
+ std::string filename = std::string(APP_CUSTOM_DIAL_PATH) + "/" + std::to_string(Id) + ".bin";
// 打开文件
std::ifstream configFile(filename, std::ios::binary);
}
else if (info.st_mode & S_IFDIR)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Directory already exists: %s", path.c_str());
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Directory already exists: %s", path.c_str());
}
}
/*
获取存储文件夹
Id(0~4)通过ID返回对应的文件夹路径
- 0
+ 0 {已经被用}
1
2
3
std::string SetDialModel::GetSaveDir(int Id)
{
// 首先检查Id是否在0~4的范围内
- if (Id < 0 || Id > 4)
+ if (Id <= 0 || Id > 4)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Id must be between 0 and 4.");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Id must be between 1 and 4.");
return ""; // 或者返回一个空字符串
}
// 检查 APP_CUSTOM_DIAL_PATH 是否存在
CreateDirectoryIfNotExists(APP_CUSTOM_DIAL_PATH);
- std::string folderPath = std::string(APP_CUSTOM_DIAL_PATH) + "/" + std::to_string(Id); // 修复这一行
- CreateDirectoryIfNotExists(folderPath); // 确保目录存在
+ std::string folderPath = std::string(APP_CUSTOM_DIAL_PATH) + "/" + std::to_string(Id);
+ CreateDirectoryIfNotExists(folderPath); // 确保目录存在
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Directory is %s", folderPath.c_str());
return folderPath; // 返回目录路径
}
+ /*获取自定义表盘名*/
+ std::string SetDialModel::GetCustomName(int Id)
+ {
+ // 首先检查Id是否在0~4的范围内
+ if (Id <= 0 || Id > 4)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Id must be between 1 and 4.");
+ return ""; // 或者返回一个空字符串
+ }
+
+ // 获取表盘列表 读取自定义表盘配置
+ const DialInfo *info = MainModel::GetInstance().GetDialInfo((DialId)Id);
+
+ if (info == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam: Dial info for ID %u is nullptr", Id);
+ return "";
+ }
+
+ return (info->dialName);
+ }
}