HOMEDIR=$PWD
DEFAULT_BUILD_TYPE=release
DEFAULT_TARGET_PACK_NAME=pack_brandy_native_js
-DEFAULT_CUSTOM_FW_VERSION=1.0.8
+DEFAULT_CUSTOM_FW_VERSION=1.0.9
TARGET_PACK_NAME=$DEFAULT_TARGET_PACK_NAME
RELEASE_BUILD=$DEFAULT_BUILD_TYPE
static void get_avg_voltage(float *vol)
{
uint32_t current_time = 0;
+ float max_vol = 0;
+ float min_vol = 0;
uapi_get_timestampe_ss(¤t_time);
if(history_time == 0)
history_time = current_time;
if(sample_time >= 10)
{
sample_time = 0;
- if(vol_num == 5)
+ if(vol_num == 7)
{
sum_vol -= history_data[left];
history_data[left] = 0;
left++;
- left = left % 5;
+ left = left % 7;
vol_num--;
}
vol_num++;
right++;
- right = right % 5;
+ right = right % 7;
history_data[right] = *vol;
sum_vol += history_data[right];
}
- if(vol_num != 0)
- *vol = sum_vol / vol_num;
-
+ if(vol_num > 0)
+ {
+ if(vol_num > 2)
+ {
+ min_vol = history_data[0];
+ max_vol = history_data[0];
+ for (int i = 0;i < vol_num; i++)
+ {
+ if (history_data[i] < min_vol)
+ min_vol = history_data[i];
+ if (history_data[i] > max_vol)
+ max_vol = history_data[i];
+ }
+ *vol = (sum_vol - max_vol - min_vol) / (vol_num - 2);
+ }
+ else
+ *vol = sum_vol / vol_num;
+ }
}
+/***
+ * @Date: 2024-05-30 15:59:37
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-29 14:46:02
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/add_card/include/AddCardPresenter.h
+ */
/*
* Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
* Description: AddCardPresenter.h
#include "KeyInputListener.h"
#include "ModelListenerSample.h"
-#define TOAST_KEEP_TIME 1000
-
-namespace OHOS {
-static const char *ADD_CARD_ADD = "addcardadd";
-
-class AddCardView;
-class AddCardModel;
-class AddCardPresenter : public Presenter<AddCardView>, public ModelListenerSample,
- public UIView::OnClickListener, public UIView::OnDragListener,
- public ListScrollListener {
-public:
- AddCardPresenter();
- ~AddCardPresenter() override;
-
- void OnStart() override;
- void OnResume() override;
- void OnStop() override;
- void OnTickEvent() override;
- void Notify() override {}
- bool OnClick(UIView &view, const ClickEvent &event) override;
- void OnScrollStart(int16_t index, UIView *view) override;
- void OnScrollEnd(int16_t index, UIView *view) override;
- void OnItemSelected(int16_t index, UIView* view) override;
- bool OnDrag(UIView& view, const DragEvent& event) override;
-private:
- void ResetTickTimer(void);
- AddCardModel *model{nullptr};
- uint64_t startTime{0};
- bool cardCountEvent{false};
-};
+#define TOAST_KEEP_TIME 1000
+
+namespace OHOS
+{
+ static const char *ADD_CARD_ADD = "addcardadd";
+
+ class AddCardView;
+ class AddCardModel;
+ class AddCardPresenter : public Presenter<AddCardView>, public ModelListenerSample, public UIView::OnClickListener, public UIView::OnDragListener, public ListScrollListener
+ {
+ public:
+ AddCardPresenter();
+ ~AddCardPresenter() override;
+
+ void OnStart() override;
+ void OnResume() override;
+ void OnStop() override;
+ void OnTickEvent() override;
+ void Notify() override {}
+ bool OnClick(UIView &view, const ClickEvent &event) override;
+ void OnScrollStart(int16_t index, UIView *view) override;
+ void OnScrollEnd(int16_t index, UIView *view) override;
+ void OnItemSelected(int16_t index, UIView *view) override;
+ bool OnDrag(UIView &view, const DragEvent &event) override;
+
+ private:
+ void ResetTickTimer(void);
+ AddCardModel *model{nullptr};
+ uint64_t startTime{0};
+ bool cardCountEvent{false};
+ KeyInputListener *keyActListenr{nullptr};
+ };
}
#endif // ADD_CARD_PRESENTER_H
\ No newline at end of file
+/*** \r
+ * @Date: 2024-04-15 10:55:58\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-07-02 16:12:03\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/add_card/src/AddCardItem.cpp\r
+ */\r
/***\r
* @Date: 2024-04-15 10:55:58\r
* @LastEditors: Caisking 3449750381@qq.com\r
cardImg_.SetResizeMode(UIImageView::FILL);\r
cardImg_.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE);\r
\r
- cardToggleButton_.SetPosition(133, 366);\r
- cardToggleButton_.Resize(200, 100);\r
+ cardToggleButton_.SetPosition(33, 366);\r
+ cardToggleButton_.Resize(400, 100);\r
cardToggleButton_.SetViewId("toggleButton1");\r
cardToggleButton_.SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
\r
AddCardPresenter::~AddCardPresenter()
{
+ if (keyActListenr != nullptr)
+ {
+ delete keyActListenr;
+ keyActListenr = nullptr;
+ }
}
void AddCardPresenter::OnStart()
{
Presenter<AddCardView>::OnStart();
+ if (keyActListenr == nullptr)
+ {
+ keyActListenr = new KeyInputListener();
+ if (keyActListenr != nullptr)
+ {
+ RootView::GetInstance()->SetOnKeyActListener(keyActListenr);
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnStart: new KeyInputListener fail");
+ }
+ }
}
void AddCardPresenter::OnResume(void)
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2024-06-07 11:18:25\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2024-06-29 14:34:23\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include/AlarmClockTimerConfig.h\r
+ * @Description: \r
+ * \r
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. \r
+ */\r
/*\r
* Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
* Description: AlarmClockTimer\r
int32_t SetZeroAlarm(void);\r
int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute);\r
int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo);\r
-\r
+void set_sleep_and_wake_time(void);\r
+void get_sleep_time_notify(void);\r
#ifdef __cplusplus\r
}\r
#endif\r
+/***\r
+ * @Date: 2024-06-29 15:06:13\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-07-01 17:31:58\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp\r
+ */\r
/*\r
* Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
* Description: AlarmClockTimer\r
#include "graphic_service.h"\r
\r
#include "AlarmClockTimerConfig.h"\r
+#include "cywee_service.h"\r
+#include "ConfigModelC.h"\r
+#include "ConfigModel.h"\r
+#include "heartrate/include/HeartModel.h"\r
+#include "sleep/include/SleepModel.h"\r
+#include "cat1_server_hal.h"\r
\r
#ifdef __cplusplus\r
-extern "C" {\r
+extern "C"\r
+{\r
#endif\r
\r
-static AlarmCtrl g_alarmCtrA;\r
-static AlarmCtrl g_alarmCtrB;\r
-static osTimerId_t g_AlarmHandle = nullptr;\r
+ static AlarmCtrl g_alarmCtrA;\r
+ static AlarmCtrl g_alarmCtrB;\r
+ static osTimerId_t g_AlarmHandle = nullptr;\r
\r
-void AlarmTimerEventPublish(uint16 topic, AlarmClockEventData data)\r
-{\r
- int32 ret;\r
- uint32 size = sizeof(AlarmClockEventData);\r
- Request *request = nullptr;\r
- BroadcastApi *broadcastApi = nullptr;\r
- IUnknown *api = nullptr;\r
-\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish topic=%u!!", topic);\r
-\r
- /* alloc request */\r
- request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);\r
- if (request == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");\r
- return;\r
- }\r
- request->msgId = topic;\r
- ret = memcpy_s(request->data, size, (const void *)&data, size);\r
- if (ret != EOK) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);\r
- return;\r
- }\r
- request->len = size;\r
- request->msgValue = 0;\r
-\r
- /* public request */\r
- api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);\r
- if (api == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");\r
- SAMGR_FreeRequestMsg(request);\r
- return;\r
- }\r
- ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);\r
- if (ret != 0 || broadcastApi == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");\r
- SAMGR_FreeRequestMsg(request);\r
- return;\r
+#define SLEPPNOTIFY 20\r
+\r
+ static int sleep_time = 0;\r
+ static int wake_up_time = 0;\r
+ static int sleep_notify_time = 0;\r
+ static int sleep_time_hour = 0;\r
+ static int sleep_time_min = 0;\r
+\r
+ // 设置目标睡眠时间\r
+ void set_sleep_and_wake_time(void)\r
+ {\r
+ sleep_time = get_sleep_time_from_config_model();\r
+ wake_up_time = get_wake_up_time_from_config_model();\r
}\r
- broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);\r
- broadcastApi->Release((IUnknown *)broadcastApi);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish end!!");\r
+ // 设置睡眠提醒时间\r
+ void get_sleep_time_notify(void)\r
+ {\r
+ int goal_hour = sleep_time >> 16;\r
+ int goal_min = (sleep_time & 0X00FF);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "goal_hour:%d goal_min:%d", goal_hour, goal_min);\r
\r
- return;\r
-}\r
+ sleep_time_min = (goal_min >= SLEPPNOTIFY) ? goal_min - SLEPPNOTIFY : ((goal_min + 60) - SLEPPNOTIFY); // 避免分钟数为负\r
+ sleep_time_hour = goal_hour;\r
+ if (goal_min < SLEPPNOTIFY)\r
+ { // 如果需要借位\r
+ sleep_time_hour -= 1; // 小时减1\r
+ }\r
+ // 确保小时数正确\r
+ sleep_time_hour = (sleep_time_hour < 0) ? 23 : sleep_time_hour; // 处理从0点前20分钟的情况,变为前一天的23点40分\r
\r
-static void AlarmCallBackProcA(void)\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcA");\r
- AlarmClockEventData unuse;\r
- GraphicService::GetInstance()->PostGraphicEvent(\r
- std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ALARM_RING, unuse));\r
-}\r
+ sleep_notify_time = (sleep_time_hour << 16) | sleep_time_min;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleep_time_hour:%d sleep_time_min:%d sleep_notify_time:%d", sleep_time_hour, sleep_time_min, sleep_notify_time);\r
+ }\r
+ void AlarmEventPublish(uint16_t topic, uint8_t *data, uint32_t size)\r
+ {\r
+ int32 ret;\r
\r
-static void AlarmCallBackProcB(void)\r
-{\r
- AlarmClockEventData unuse;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcB");\r
- GraphicService::GetInstance()->PostGraphicEvent(\r
- std::bind(AlarmTimerEventPublish, TOPIC_EVENT_NEXTDAY_UPDATE, unuse));\r
- GraphicService::GetInstance()->PostGraphicEvent(SetZeroAlarm);\r
-}\r
+ Request *request = NULL;\r
+ BroadcastApi *broadcastApi = NULL;\r
+ IUnknown *api = NULL;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish topic=%u!!", topic);\r
\r
-static void on_time_CallBackProc(void)\r
-{\r
- AlarmClockEventData unuse;\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc");\r
- GraphicService::GetInstance()->PostGraphicEvent(\r
- std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse));\r
-}\r
+ /* alloc request */\r
+ request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);\r
+ if (request == NULL)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");\r
+ return;\r
+ }\r
+ request->msgId = topic;\r
+ if (size > 0)\r
+ {\r
+ ret = memcpy_s(request->data, size, (const void *)data, size);\r
+ if (ret != EOK)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);\r
+ return;\r
+ }\r
+ }\r
\r
+ request->len = size;\r
+ request->msgValue = 0;\r
+\r
+ /* public request */\r
+ api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);\r
+ if (api == NULL)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");\r
+ SAMGR_FreeRequestMsg(request);\r
+ return;\r
+ }\r
+ ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);\r
+ if (ret != 0 || broadcastApi == NULL)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");\r
+ SAMGR_FreeRequestMsg(request);\r
+ return;\r
+ }\r
+ broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);\r
+ broadcastApi->Release((IUnknown *)broadcastApi);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish end!!");\r
\r
-void AlarmScan(void *arg)\r
-{\r
- struct tm curTime;\r
- int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
- if (ret != ERRCODE_SUCC) {\r
return;\r
}\r
+ void AlarmTimerEventPublish(uint16 topic, AlarmClockEventData data)\r
+ {\r
+ int32 ret;\r
+ uint32 size = sizeof(AlarmClockEventData);\r
+ Request *request = nullptr;\r
+ BroadcastApi *broadcastApi = nullptr;\r
+ IUnknown *api = nullptr;\r
\r
- if (g_alarmCtrA.state == ALARM_STATUS_RUNNING) {\r
- if ((g_alarmCtrA.callback != nullptr) &&\r
- (g_alarmCtrA.info.hour == curTime.tm_hour) &&\r
- (g_alarmCtrA.info.minute == curTime.tm_min)) {\r
- g_alarmCtrA.callback();\r
- g_alarmCtrA.state = ALARM_STATUS_CREATED;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish topic=%u!!", topic);\r
+\r
+ /* alloc request */\r
+ request = SAMGR_AllocRequestMsg(0, PLATFORM_CORE, BROADCAST_SVR_ID, size);\r
+ if (request == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SAMGR_AllocRequestMsg failed");\r
+ return;\r
}\r
- }\r
+ request->msgId = topic;\r
+ ret = memcpy_s(request->data, size, (const void *)&data, size);\r
+ if (ret != EOK)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);\r
+ return;\r
+ }\r
+ request->len = size;\r
+ request->msgValue = 0;\r
\r
- if (g_alarmCtrB.state == ALARM_STATUS_RUNNING) {\r
- if ((g_alarmCtrB.callback != NULL) &&\r
- //(g_alarmCtrB.info.week == curTime.tm_wday) &&\r
- (g_alarmCtrB.info.hour == curTime.tm_hour) &&\r
- (g_alarmCtrB.info.minute == curTime.tm_min) &&\r
- (g_alarmCtrB.info.second == curTime.tm_sec)) {\r
- g_alarmCtrB.callback();\r
- g_alarmCtrB.state = ALARM_STATUS_CREATED;\r
+ /* public request */\r
+ api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);\r
+ if (api == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetFeatureApi failed");\r
+ SAMGR_FreeRequestMsg(request);\r
+ return;\r
}\r
+ ret = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);\r
+ if (ret != 0 || broadcastApi == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "QueryInterface failed");\r
+ SAMGR_FreeRequestMsg(request);\r
+ return;\r
+ }\r
+ broadcastApi->PublishTopic((IUnknown *)broadcastApi, request);\r
+ broadcastApi->Release((IUnknown *)broadcastApi);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmTimerEventPublish end!!");\r
+\r
+ return;\r
}\r
- if(curTime.tm_min==0 && curTime.tm_sec==0)\r
+ /*闹钟*/\r
+ static void AlarmCallBackProcA(void)\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d : %d",curTime.tm_hour,curTime.tm_min);\r
- on_time_CallBackProc();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcA");\r
+ AlarmClockEventData unuse;\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ALARM_RING, unuse));\r
}\r
-}\r
\r
-static int32_t AlarmCreate(AlarmCtrl *alarmCtrl, AlarmCallBack callback)\r
-{\r
- if (alarmCtrl == nullptr) {\r
- return ERRCODE_FAIL;\r
- }\r
- if (alarmCtrl->state == ALARM_STATUS_UNUSED) {\r
- alarmCtrl->state = ALARM_STATUS_CREATED;\r
- alarmCtrl->callback = callback;\r
+ /*NextDay*/\r
+ static void AlarmCallBackProcB(void)\r
+ {\r
+ AlarmClockEventData unuse;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmCallBackProcB");\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(AlarmTimerEventPublish, TOPIC_EVENT_NEXTDAY_UPDATE, unuse));\r
+ GraphicService::GetInstance()->PostGraphicEvent(SetZeroAlarm);\r
}\r
- return ERRCODE_SUCC;\r
-}\r
\r
-int32_t AlarmTimerInit(void)\r
-{\r
- int32_t timerStatus;\r
- int32_t ret;\r
-\r
- g_alarmCtrA.state = ALARM_STATUS_UNUSED;\r
- g_alarmCtrB.state = ALARM_STATUS_UNUSED;\r
- g_AlarmHandle = osTimerNew(AlarmScan, osTimerPeriodic, nullptr, nullptr);\r
- if (g_AlarmHandle == nullptr) {\r
- return ERRCODE_FAIL;\r
+ static void on_time_CallBackProc(void)\r
+ {\r
+ AlarmClockEventData unuse;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc");\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse));\r
}\r
- timerStatus = osTimerStart(g_AlarmHandle, ALARM_INTERVAL_MS);\r
- if (timerStatus != osOK) {\r
- return ERRCODE_FAIL;\r
+\r
+ void AlarmScan(void *arg)\r
+ {\r
+ struct tm curTime;\r
+ int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ return;\r
+ }\r
+\r
+ if (g_alarmCtrA.state == ALARM_STATUS_RUNNING)\r
+ {\r
+ if ((g_alarmCtrA.callback != nullptr) &&\r
+ (g_alarmCtrA.info.hour == curTime.tm_hour) &&\r
+ (g_alarmCtrA.info.minute == curTime.tm_min))\r
+ {\r
+ g_alarmCtrA.callback();\r
+ g_alarmCtrA.state = ALARM_STATUS_CREATED;\r
+ }\r
+ }\r
+\r
+ if (g_alarmCtrB.state == ALARM_STATUS_RUNNING)\r
+ {\r
+ if ((g_alarmCtrB.callback != NULL) &&\r
+ //(g_alarmCtrB.info.week == curTime.tm_wday) &&\r
+ (g_alarmCtrB.info.hour == curTime.tm_hour) &&\r
+ (g_alarmCtrB.info.minute == curTime.tm_min) &&\r
+ (g_alarmCtrB.info.second == curTime.tm_sec))\r
+ {\r
+ g_alarmCtrB.callback();\r
+ g_alarmCtrB.state = ALARM_STATUS_CREATED;\r
+ }\r
+ }\r
+ // 整点回调\r
+ if (curTime.tm_min == 0 && curTime.tm_sec == 0)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d : %d", curTime.tm_hour, curTime.tm_min);\r
+ on_time_CallBackProc();\r
+ }\r
+ // 睡眠总开关\r
+ if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP))\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CONFIGMODEL_ITEM_SLEEP is OK");\r
+ // 睡眠提醒[前提开启睡眠提醒]\r
+ if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_REMIND))\r
+ {\r
+ // 提醒一次\r
+ if ((curTime.tm_hour == sleep_time_hour) && (curTime.tm_min == sleep_time_min) && (curTime.tm_sec == 0))\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "It's bedtime in 20 minutes");\r
+ printf("20分钟后要睡觉啦!\r\n");\r
+ AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
+ // 设置状态为睡眠提醒\r
+ OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::SLEEPNOTIFY);\r
+ }\r
+ }\r
+ // 进入睡眠模式\r
+ if ((curTime.tm_hour == (sleep_time >> 16)) && (curTime.tm_min == (sleep_time & 0X00FF)) && (curTime.tm_sec == 0))\r
+ {\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SLEEPING_MODE, NULL);\r
+ // 睡眠弹窗\r
+ printf("要睡觉啦!\r\n");\r
+ AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
+ // 设置状态为睡眠\r
+ OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::SLEPP);\r
+ }\r
+ // 退出睡眠模式\r
+ if ((curTime.tm_hour == (wake_up_time >> 16)) && (curTime.tm_min == (wake_up_time & 0X00FF)) && (curTime.tm_sec == 0))\r
+ {\r
+ printf("起床啦!\r\n");\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL);\r
+ // 早安提醒\r
+ AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
+ // 设置状态为睡眠\r
+ OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::WALK);\r
+ }\r
+ }\r
+\r
+ // 心率周期检测 [0 1 5 10]\r
+ if (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED))\r
+ {\r
+ if (curTime.tm_min % (OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED)) == 0 && curTime.tm_sec == 0)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Automatic heart rate detection starts");\r
+ // 开启心率检测 如果有其他心率检测在进行,则不会进行检测[低优先级]\r
+ OHOS::HeartModel::GetInstance()->Heart_Control(OHOS::HeartState::Start, OHOS::HeartCheck::PASSIVITY);\r
+ }\r
+ }\r
}\r
- ret = AlarmCreate(&g_alarmCtrA, AlarmCallBackProcA);\r
- if (ret != ERRCODE_SUCC) {\r
- return ERRCODE_FAIL;\r
+\r
+ static int32_t AlarmCreate(AlarmCtrl *alarmCtrl, AlarmCallBack callback)\r
+ {\r
+ if (alarmCtrl == nullptr)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ if (alarmCtrl->state == ALARM_STATUS_UNUSED)\r
+ {\r
+ alarmCtrl->state = ALARM_STATUS_CREATED;\r
+ alarmCtrl->callback = callback;\r
+ }\r
+ return ERRCODE_SUCC;\r
}\r
- ret = AlarmCreate(&g_alarmCtrB, AlarmCallBackProcB);\r
- if (ret != ERRCODE_SUCC) {\r
- return ERRCODE_FAIL;\r
+\r
+ int32_t AlarmTimerInit(void)\r
+ {\r
+ int32_t timerStatus;\r
+ int32_t ret;\r
+\r
+ g_alarmCtrA.state = ALARM_STATUS_UNUSED;\r
+ g_alarmCtrB.state = ALARM_STATUS_UNUSED;\r
+ g_AlarmHandle = osTimerNew(AlarmScan, osTimerPeriodic, nullptr, nullptr);\r
+ if (g_AlarmHandle == nullptr)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ timerStatus = osTimerStart(g_AlarmHandle, ALARM_INTERVAL_MS);\r
+ if (timerStatus != osOK)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ ret = AlarmCreate(&g_alarmCtrA, AlarmCallBackProcA);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ ret = AlarmCreate(&g_alarmCtrB, AlarmCallBackProcB);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ set_sleep_and_wake_time();\r
+ get_sleep_time_notify();\r
+ return ERRCODE_SUCC;\r
}\r
- return ERRCODE_SUCC;\r
-}\r
\r
-int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute)\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetAlarm %d %d %d %d", type, week, hour, minute);\r
- if (type == ALARM_A) {\r
- g_alarmCtrA.state = ALARM_STATUS_RUNNING;\r
- g_alarmCtrA.info.hour = hour;\r
- g_alarmCtrA.info.minute = minute;\r
- } else if (type == ALARM_B) {\r
- g_alarmCtrB.state = ALARM_STATUS_RUNNING;\r
- g_alarmCtrB.info.week = week;\r
- g_alarmCtrB.info.hour = hour;\r
- g_alarmCtrB.info.minute = minute;\r
- g_alarmCtrB.info.second = 1;\r
- } else {\r
- return ERRCODE_FAIL;\r
+ int32_t SetAlarm(AlarmType type, uint8_t week, uint8_t hour, uint8_t minute)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetAlarm %d %d %d %d", type, week, hour, minute);\r
+ if (type == ALARM_A)\r
+ {\r
+ g_alarmCtrA.state = ALARM_STATUS_RUNNING;\r
+ g_alarmCtrA.info.hour = hour;\r
+ g_alarmCtrA.info.minute = minute;\r
+ }\r
+ else if (type == ALARM_B)\r
+ {\r
+ g_alarmCtrB.state = ALARM_STATUS_RUNNING;\r
+ g_alarmCtrB.info.week = week;\r
+ g_alarmCtrB.info.hour = hour;\r
+ g_alarmCtrB.info.minute = minute;\r
+ g_alarmCtrB.info.second = 1;\r
+ }\r
+ else\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ return ERRCODE_SUCC;\r
}\r
- return ERRCODE_SUCC;\r
-}\r
\r
-int32_t SetZeroAlarm(void)\r
-{\r
- struct tm curTime;\r
- int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
- if (ret != ERRCODE_SUCC) {\r
- return ERRCODE_FAIL;\r
+ int32_t SetZeroAlarm(void)\r
+ {\r
+ struct tm curTime;\r
+ int32_t ret = AlarmGetCurrentTimeInfo(&curTime);\r
+ if (ret != ERRCODE_SUCC)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ int32_t weekday = (++curTime.tm_wday) % 7;\r
+ return SetAlarm(ALARM_B, weekday, 0, 0);\r
}\r
- int32_t weekday = (++curTime.tm_wday) % 7;\r
- return SetAlarm(ALARM_B, weekday, 0, 0);\r
-}\r
\r
-int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo)\r
-{\r
- if (timeInfo == nullptr) {\r
- return ERRCODE_FAIL;\r
+ int32_t AlarmGetCurrentTimeInfo(struct tm *timeInfo)\r
+ {\r
+ if (timeInfo == nullptr)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ time_t sec = time(nullptr);\r
+ localtime_r(&sec, timeInfo);\r
+ return ERRCODE_SUCC;\r
}\r
- time_t sec = time(nullptr);\r
- localtime_r(&sec, timeInfo);\r
- return ERRCODE_SUCC;\r
-}\r
\r
#ifdef __cplusplus\r
}\r
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-29 16:47:41
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h
+ */
#ifndef BLOOD_OXYGEN_MODEL_H
#define BLOOD_OXYGEN_MODEL_H
namespace OHOS
{
+ // 血氧检测状态
+ enum class BloodState
+ {
+ End = 0,
+ Start,
+ };
class BloodOxygenModel
{
public:
void Blood_Stop();
void Blood_Start();
+ void Blood_Control(BloodState state);
+
private:
bool OxygenView;
bool BandoffView;
uint16_t SPO2_;
uint64_t timestamp_ms;
int32_t wear_;
+ bool startspo2{false};
uint8_t unwear_counter_;
uint8_t valid_counter_;
#include "heart_blood/health_service/health_service.h"
#include "custom_utils.h"
extern "C" errcode_t uapi_get_timestamp_ms(uint64_t *tm);
+#include "custom_utils.h"
+#include "ppg_service.h"
#define MAX_UNWARE_COUNT 30
#define MAX_VALID_HRS_COUNT 30
}
/* ---------------------------------- 状态检测 ---------------------------------- */
+ // 血氧监控
+ void BloodOxygenModel::Blood_Control(BloodState state)
+ {
+ if (state == BloodState::End && startspo2 == true)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 End");
+ uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
+ send_ppg_cmd_msg(md);
+ startspo2 = false;
+ }
+ else if (state == BloodState::Start && startspo2 == false)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 Start");
+ uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
+ send_ppg_cmd_msg(md);
+ startspo2 = true;
+ }
+ }
void BloodOxygenModel::Blood_Start()
{
// 进行初始化操作
data->timestamp = BloodOxygenPresenter::GetInstance()->GetCurrentTime();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%d %d", spo2, data->timestamp);
SetCheckTime(data->timestamp);
- HealthService::GetInstance()->UpdateBloodOxygenData(*data);
+ HealthService::GetInstance()->UpdateHealthData(*data);
delete data;
/* -------------------------------------------------------------------------- */
}
}
+
}
#include "custom_utils.h"
#include "cywee_service.h"
-#define BLOODKEYABLE 0
+#define BLOODKEYABLE 1
namespace OHOS
{
static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
BloodOxygenPresenter::~BloodOxygenPresenter()
{
-#if BLOODKEYABLE
- if (keyActListenr != nullptr)
- {
- delete keyActListenr;
- keyActListenr = nullptr;
- }
-#endif
g_pMainView = nullptr;
}
BloodOxygenPresenter *BloodOxygenPresenter::GetInstance()
{
Presenter<BloodOxygenView>::OnStart();
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::On Start ");
-#if BLOODKEYABLE
- if (keyActListenr == nullptr)
- {
- keyActListenr = new KeyInputListener();
- if (keyActListenr != nullptr)
- {
- RootView::GetInstance()->SetOnKeyActListener(keyActListenr);
- }
- else
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::OnStart: new KeyInputListener fail");
- }
- }
-#endif
}
void BloodOxygenPresenter::OnPause(void) {}
bool BloodOxygenPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
{
#if BLOODKEYABLE
- WEARABLE_LOGD("", "into the view is: %s\n", typeid(view).name());
- uint16 keyID = event.GetKeyId();
- WEARABLE_LOGD("", "into key! keyID %u\n", keyID);
- // 如果是power键就返回上一级
- if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))
+ unsigned short keyID = event.GetKeyId();
+ unsigned short keyState = event.GetState();
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
{
- // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
- NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+ // 关闭血氧检测
+ BloodOxygenModel::GetInstance()->Blood_Control(BloodState::End);
+ // 回退
+ NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
}
-#endif
return true;
+#endif
}
/* ---------------------------------- 状态监听 ---------------------------------- */
bool BloodOxygenPresenter::OnClick(UIView &view, const ClickEvent &event)
{
BloodCheckView::GetInstance()->GetImageAnimator()->Stop();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : false");
- uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
- send_ppg_cmd_msg(md);
+ // 关闭血氧检测
+ BloodOxygenModel::GetInstance()->Blood_Control(BloodState::End);
+
startspo2 = true;
}
}
if (startspo2 == true)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true");
- uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
- send_ppg_cmd_msg(md);
+ // 开启血氧检测
+ BloodOxygenModel::GetInstance()->Blood_Control(BloodState::Start);
+
startspo2 = false;
}
}
BloodOxygenModel::GetInstance()->Blood_Stop();
}
}
+
void BloodOxygenPresenter::Notify(void)
{
ProgressNotify();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStart");
display_time = DisplayBrightnessModel::GetInstance()->GetScreenDurationTime();
display_api->set_screen_auto_off_timeout(300 * 1000); // 设置常亮
+
View<BloodOxygenPresenter>::OnStart();
if (!InitBloodView())
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::InitBloodView fail");
}
+ // 增加按键监听
+ RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BloodOxygenPresenter::GetInstance();
+ RootView::GetInstance()->SetOnKeyActListener(keyactListener);
}
void BloodOxygenView::OnSetUpView()
void BtGapDiscoveryResultCallback(const bd_addr_t *bdAddr)\r
{\r
if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device");\r
- return;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device");\r
+ //return;\r
}\r
\r
if (bdAddr == nullptr) {\r
// 回调:ACL连接状态上报\r
void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason)\r
{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
return;\r
}\r
GraphicService::GetInstance()->PostGraphicEvent(\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtGattsRequestWriteCallback");\r
}\r
\r
+/* 与设备建立A2DP连接 */\r
+static int wstp_a2dp_snk_connect(const bd_addr_t *bd_addr)\r
+{\r
+ int ret = a2dp_snk_connect(bd_addr);\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"a2dp_snk_connect ret(int): %x\n", ret);\r
+ return ret;\r
+}\r
+\r
+/* 与设备断开A2DP连接 */\r
+static int wstp_a2dp_snk_disconnect(const bd_addr_t *bd_addr)\r
+{\r
+ int ret = a2dp_snk_disconnect(bd_addr);\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,"a2dp_snk_disconnect ret(int): %x\n", ret);\r
+ return ret;\r
+}\r
+\r
static void BtA2dpSnkAcceptTimerStop(void)\r
{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "stop timer\n");\r
{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x conn_state: %x\n",\r
bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], conn_state); /* 3 2 1 0 idx */\r
+ \r
}\r
\r
static void BtA2dpSnkStartStreamReqCb(bd_addr_t *bd_addr)\r
\r
void BtA2dpDeInit(void)\r
{\r
-\r
- \r
- \r
a2dp_src_deregister_callbacks(&g_a2dpSrcCallbacks);\r
a2dp_snk_deregister_callbacks(&g_a2dp_snk_callbacks);\r
\r
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-04-10 11:58:15
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-07 18:46:54
+ * @LastEditTime: 2024-06-29 16:04:53
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/include/DnotDisturbView.h
*/
#ifndef DNOTDISTURB_VIEW_H
void ClearAll(void);
UIScrollView *scrollView = nullptr;
UILabelExt *showTitleLabel{nullptr};
- UIImageView *background{nullptr};
UIImageView *DnotDisturbImage{nullptr};
- UILabel *AttentionLabel{nullptr};
+ UILabelExt *AttentionLabel{nullptr};
UILabelButtonExt *ButtonOn;
UILabelButtonExt *ButtonOff;
};
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-04-10 11:58:21
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-07 18:51:22
+ * @LastEditTime: 2024-06-29 16:30:35
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp
*/
#include "dnotdisturb/include/DnotDisturbView.h"
namespace OHOS
{
+ static constexpr const char *DROPDOWN_DNOTDISTURB_IMAGE = "/user/res/dropdown/DROPDOWN_DNOTDISTURB.bin";
static DnotDisturbView *g_pDnotDisturbView{nullptr};
DnotDisturbView::DnotDisturbView()
DnotDisturbView::~DnotDisturbView()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::~DnotDisturbView");
- ClearAll();
g_pDnotDisturbView = nullptr;
}
showTitleLabel = nullptr;
}
- if (background != nullptr)
- {
- delete background;
- background = nullptr;
- }
-
if (DnotDisturbImage != nullptr)
{
delete DnotDisturbImage;
void DnotDisturbView::DnotDisturbViewInit(void)
{
-
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::DnotDisturbViewInit");
if (scrollView == nullptr)
{
scrollView = new UIScrollView();
showTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
showTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
/* -------------------------------------------------------------------------- */
- background = new UIImageView();
- if (background == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::background new fail!!");
- return;
- }
- background->SetPosition(186, 116);
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, background, DROPDOWN_ICONELLIPSEPURPLE);
- /* -------------------------------------------------------------------------- */
DnotDisturbImage = new UIImageView();
if (DnotDisturbImage == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::DnotDisturbImage new fail!!");
return;
}
- DnotDisturbImage->SetPosition(186, 116, 94, 94);
+ DnotDisturbImage->SetPosition(186, 110);
+ DnotDisturbImage->Resize(94, 94);
+ DnotDisturbImage->SetStyle(STYLE_BACKGROUND_COLOR, 0xff8120e2);
+ DnotDisturbImage->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ DnotDisturbImage->SetStyle(STYLE_BORDER_RADIUS, 100);
DnotDisturbImage->SetAutoEnable(false);
DnotDisturbImage->SetResizeMode(UIImageView::CENTER);
- ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, DnotDisturbImage, DROPDOWN_DNOTDISTURB);
+ DnotDisturbImage->SetSrc(DROPDOWN_DNOTDISTURB_IMAGE);
/* -------------------------------------------------------------------------- */
- AttentionLabel = new UILabel();
+ AttentionLabel = new UILabelExt();
if (AttentionLabel == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::AttentionLabel new fail!!");
AttentionLabel->SetPosition(33, 228, 400, 70);
AttentionLabel->SetStyle(STYLE_TEXT_FONT, 30);
AttentionLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
- // AttentionLabel->SetText("开启勿扰模式,手表将不会发出震动与铃声,是否开启");
- SetLabelId(AttentionLabel, STR_DO_NOT_DISTURB_MODE);
+ AttentionLabel->SetTextId(STR_DO_NOT_DISTURB_MODE); // 开启勿扰模式,手表将不会发出震动与铃声,是否开启
AttentionLabel->SetLineBreakMode(UILabelExt::LINE_BREAK_WRAP);
AttentionLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
AttentionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
{
View<DnotDisturbPresenter>::OnSetUpView();
scrollView->Add(showTitleLabel);
- scrollView->Add(background);
scrollView->Add(DnotDisturbImage);
scrollView->Add(AttentionLabel);
scrollView->Add(ButtonOn);
View<DnotDisturbPresenter>::OnStop();
RootView::GetInstance()->RemoveAll();
RootView::GetInstance()->ClearOnKeyActListener();
+ ClearAll();
return;
}
}
\ No newline at end of file
#endif
}
// static char *JSON_F_buf=NULL;
- cJSON *heart_root = NULL;
- cJSON *oxygen_root = NULL;
+
HealthService::HealthService()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HealthService::HealthService");
if (mkdir(HEALTH_JSON_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH is error");
- return false; // Failed to create folder
+ return false;
}
}
if (stat(HEALTH_JSON_PATH_HEART, &info) != 0)
if (mkdir(HEALTH_JSON_PATH_HEART, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_HEART is error");
- return false; // Failed to create folder
+ return false;
}
}
if (stat(HEALTH_JSON_PATH_OXYGEN, &info) != 0)
if (mkdir(HEALTH_JSON_PATH_OXYGEN, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir HEALTH_JSON_PATH_OXYGEN is error");
- return false; // Failed to create folder
+ return false;
}
}
return true;
}
- /*生成文件*/
- std::string GetJsonFilePath(uint8_t type)
- {
- std::string currentDate = GetCurrentDate();
- const char *healthTypePath = (type == HEALTH_TYPE_HEART) ? HEALTH_JSON_PATH_HEART : HEALTH_JSON_PATH_OXYGEN;
- return healthTypePath + currentDate + ".json";
- }
/*生成bin*/
std::string GetBinFilePath(uint8_t type)
{
return healthTypePath + currentDate + ".bin";
}
- // 加载 JSON 数据
- bool HealthService::LoadJsonData(uint8_t type)
+
+ /* --------------------------------- json操作 --------------------------------- */
+ static constexpr const char *HEART_JSON_PATH = "/user/userdata/health/heart.json";
+ static constexpr const char *BLOOD_JSON_PATH = "/user/userdata/health/blood.json";
+
+ // 读取血氧数据
+ BloodOxygenData *HealthService::ReadBloodOxygenData()
{
+ // 判断文件夹是否存在
if (!CreateHealthFolder())
{
- return false;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
+ return nullptr;
}
- std::string jsonFilePath = GetJsonFilePath(type);
- printf("GetJsonFilePath:%s\r\n", jsonFilePath.c_str());
-
- std::ifstream inFile(jsonFilePath);
+ // 读取文件
+ std::ifstream inFile(BLOOD_JSON_PATH);
if (!inFile.is_open())
{
- printf("Failed to open JSON file.\r\n");
- return false;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open JSON file");
+ return nullptr;
}
// 读取文件内容到字符串
buffer << inFile.rdbuf();
std::string jsonDataString = buffer.str();
const char *jsonData = jsonDataString.c_str();
- printf("jsonData:%s\r\n", jsonData);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData: %s", jsonData);
+
+ // 关闭文件
+ inFile.close();
if (jsonDataString.empty())
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonDataString is empty");
- inFile.close();
- return false;
+ return nullptr;
}
- cJSON *root = cJSON_Parse(jsonData);
- if (root == NULL)
+ cJSON *oxygen_root = cJSON_Parse(jsonData);
+ if (oxygen_root == NULL)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to parse JSON data");
- inFile.close();
- return false;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "oxygen_root is empty");
+ return nullptr;
}
- if (type == HEALTH_TYPE_HEART)
- {
- heart_root = root;
- }
- else if (type == HEALTH_TYPE_OXYGEN)
- {
- oxygen_root = root;
- }
+ BloodOxygenData *data = new BloodOxygenData();
- // 释放 cJSON 对象内存
- cJSON_Delete(root);
- // 关闭文件
- inFile.close();
- return true;
- }
- // 释放 JSON 数据
- void HealthService::ReleaseJsonData(uint8_t type)
- {
- if (type == HEALTH_TYPE_HEART)
+ cJSON *value_item = cJSON_GetObjectItem(oxygen_root, "value");
+ cJSON *timestamp_item = cJSON_GetObjectItem(oxygen_root, "timestamp");
+
+ if (value_item && timestamp_item)
{
- cJSON_Delete(heart_root);
+ data->SPO2 = value_item->valueint;
+ data->timestamp = timestamp_item->valuedouble;
}
- if (type == HEALTH_TYPE_OXYGEN)
+ else
{
+ // 读取的数据异常
cJSON_Delete(oxygen_root);
- }
- }
-
- // 读取血氧数据
- BloodOxygenData *HealthService::ReadBloodOxygenData()
- {
- if (!LoadJsonData(HEALTH_TYPE_OXYGEN))
- {
+ delete data;
return nullptr;
}
-
- BloodOxygenData *data = new BloodOxygenData();
- cJSON *latestData = cJSON_GetObjectItem(oxygen_root, "spo2_latest_data");
- if (latestData != NULL)
- {
- data->SPO2 = cJSON_GetObjectItem(latestData, "value")->valueint;
- data->timestamp = cJSON_GetObjectItem(latestData, "timestamp")->valuedouble;
- }
-
- ReleaseJsonData(HEALTH_TYPE_OXYGEN);
+ cJSON_Delete(oxygen_root);
return data;
}
+ // 读取心率数据
HeartRateData *HealthService::ReadHeartRateData()
{
- if (!LoadJsonData(HEALTH_TYPE_HEART))
+ // 判断文件夹是否存在
+ if (!CreateHealthFolder())
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error ");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
return nullptr;
}
- HeartRateData *data = new HeartRateData();
- cJSON *latestData = cJSON_GetObjectItem(heart_root, "heart_latest_data");
- if (latestData != NULL)
+ // 读取文件
+ std::ifstream inFile(HEART_JSON_PATH);
+ if (!inFile.is_open())
{
- // 读取心率值
- data->Heart = cJSON_GetObjectItem(latestData, "value")->valueint;
- data->timestamp = static_cast<uint32_t>(cJSON_GetObjectItem(latestData, "timestamp")->valueint);
-
- char *jsonStr = cJSON_Print(heart_root);
- if (jsonStr != NULL)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartRootJSONData: %s", jsonStr);
- cJSON_free(jsonStr);
- }
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ReadHeartRateData: value %d timestamp %d", data->Heart, data->timestamp);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open JSON file");
+ // 创建一个默认值为 0的数据 存储到json里面 ?
+ return nullptr;
}
- ReleaseJsonData(HEALTH_TYPE_HEART);
- return data;
- }
+ // 读取文件内容到字符串
+ std::stringstream buffer;
+ buffer << inFile.rdbuf();
+ std::string jsonDataString = buffer.str();
+ const char *jsonData = jsonDataString.c_str();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData: %s", jsonData);
- bool HealthService::UpdateBloodOxygenData(const BloodOxygenData &data)
- {
- if (!LoadJsonData(HEALTH_TYPE_OXYGEN))
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error");
- // return false;
- }
+ // 关闭文件
+ inFile.close();
- if (oxygen_root == nullptr)
+ if (jsonDataString.empty())
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "oxygen_root is first");
- oxygen_root = cJSON_CreateObject();
- if (oxygen_root == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create cJSON object for oxygen_root");
- return false;
- }
- cJSON_AddItemToObject(oxygen_root, "spo2_latest_data", cJSON_CreateObject());
- cJSON_AddItemToObject(oxygen_root, "spo2_data_list", cJSON_CreateArray());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonDataString is empty");
+ return nullptr;
}
- cJSON *latestData = cJSON_GetObjectItemCaseSensitive(oxygen_root, "spo2_latest_data");
- if (latestData == NULL || !cJSON_IsObject(latestData))
+ cJSON *heart_root = cJSON_Parse(jsonData);
+ if (heart_root == NULL)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get spo2_latest_data object");
- cJSON_Delete(oxygen_root);
- oxygen_root = nullptr;
- return false;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_root is empty");
+ return nullptr;
}
- cJSON *SPO2 = cJSON_GetObjectItemCaseSensitive(latestData, "value");
- if (SPO2 == nullptr && !cJSON_IsNumber(SPO2))
- {
- // Add spo2_latest_data
- cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.SPO2));
- cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
- }
- else
- {
- cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.SPO2));
- cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
- }
+ HeartRateData *data = new HeartRateData();
- // Update or add to spo2_data_list
- cJSON *dataList = cJSON_GetObjectItem(oxygen_root, "spo2_data_list");
- if (dataList != NULL && cJSON_IsArray(dataList))
- {
- // Check if data already exists in the list
- bool dataExists = false;
- cJSON *dataItem = NULL;
- cJSON_ArrayForEach(dataItem, dataList)
- {
- cJSON *timestampItem = cJSON_GetObjectItemCaseSensitive(dataItem, "timestamp");
- if (timestampItem != NULL && cJSON_IsNumber(timestampItem) && timestampItem->valuedouble == data.timestamp)
- {
- cJSON_ReplaceItemInObject(dataItem, "value", cJSON_CreateNumber(data.SPO2));
- dataExists = true;
- break;
- }
- }
+ cJSON *value_item = cJSON_GetObjectItem(heart_root, "value");
+ cJSON *timestamp_item = cJSON_GetObjectItem(heart_root, "timestamp");
- if (!dataExists)
- {
- cJSON *newData = cJSON_CreateObject();
- cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.SPO2));
- cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
- cJSON_AddItemToArray(dataList, newData);
- }
+ if (value_item && timestamp_item)
+ {
+ data->Heart = value_item->valueint;
+ data->timestamp = timestamp_item->valuedouble;
}
-
- if (!UpdateJsonData(HEALTH_TYPE_OXYGEN))
+ else
{
- printf("UpdateJsonData failed.\r\n");
- ReleaseJsonData(HEALTH_TYPE_OXYGEN);
- return false;
+ // 读取的数据异常
+ cJSON_Delete(heart_root);
+ delete data;
+ return nullptr;
}
- /*存储bin*/
- std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART);
- FILE *fp = fopen(binFilePath.c_str(), "ab+");
- if (fp == NULL)
- return false;
- fwrite(&data.timestamp, 1, 4, fp);
- fwrite(&data.SPO2, 1, 1, fp);
- fclose(fp);
-
- ReleaseJsonData(HEALTH_TYPE_OXYGEN);
-
- return true;
+ cJSON_Delete(heart_root);
+ return data;
}
-
- bool HealthService::UpdateHeartRateData(const HeartRateData &data)
+ // 保存血氧数据
+ bool HealthService::UpdateHealthData(const BloodOxygenData &data)
{
- if (!LoadJsonData(HEALTH_TYPE_HEART))
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadJsonData is error");
- // return false;
- }
-
- if (heart_root == nullptr)
+ // 判断文件夹是否存在
+ if (!CreateHealthFolder())
{
- heart_root = cJSON_CreateObject();
- if (heart_root == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create cJSON object for heart_root");
- return false;
- }
-
- cJSON_AddItemToObject(heart_root, "heart_latest_data", cJSON_CreateObject());
- cJSON_AddItemToObject(heart_root, "heart_data_list", cJSON_CreateArray());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
+ return false;
}
- cJSON *latestData = cJSON_GetObjectItemCaseSensitive(heart_root, "heart_latest_data");
- if (latestData == NULL || !cJSON_IsObject(latestData))
+ // 判断文件是否存在 不存在即创建 并打开以输出模式
+ std::ofstream outFile(BLOOD_JSON_PATH, std::ios::app);
+ if (!outFile.is_open())
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get heart_latest_data object");
- cJSON_Delete(heart_root);
- heart_root = nullptr;
+ // 文件创建失败
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create or open JSON file for writing");
return false;
}
- cJSON *Heart = cJSON_GetObjectItemCaseSensitive(latestData, "value");
- if (Heart == nullptr && !cJSON_IsNumber(Heart))
- {
- // Add heart_latest_data
- cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.Heart));
- cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
- }
- else
+ // 创建一个 JSON 对象
+ cJSON *oxygen_root = cJSON_CreateObject();
+ if (oxygen_root == NULL)
{
- cJSON_ReplaceItemInObject(latestData, "value", cJSON_CreateNumber(data.Heart));
- cJSON_ReplaceItemInObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
+ outFile.close();
+ return false;
}
- // // 更新heart_latest_data中的value和timestamp值
- // cJSON_AddItemToObject(latestData, "value", cJSON_CreateNumber(data.Heart));
- // cJSON_AddItemToObject(latestData, "timestamp", cJSON_CreateNumber(data.timestamp));
+ cJSON_AddItemToObject(oxygen_root, "value", cJSON_CreateNumber(data.SPO2));
+ cJSON_AddItemToObject(oxygen_root, "timestamp", cJSON_CreateNumber(data.timestamp));
- cJSON *dataList = cJSON_GetObjectItem(heart_root, "heart_data_list");
- if (dataList == NULL || !cJSON_IsArray(dataList))
+ char *jsonData = cJSON_Print(oxygen_root);
+ if (jsonData == NULL)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_data_list is null or not an array");
- cJSON_Delete(heart_root);
- heart_root = nullptr;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data");
+ cJSON_free(oxygen_root);
+ outFile.close();
return false;
}
- int numData = cJSON_GetArraySize(dataList);
- if (numData >= 360)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Data list is full (360 items)");
- return false;
- }
+ // 写入 JSON 数据到文件
+ outFile << jsonData;
- // 添加新数据到dataList中
- cJSON *newData = cJSON_CreateObject();
- cJSON_AddItemToObject(newData, "value", cJSON_CreateNumber(data.Heart));
- cJSON_AddItemToObject(newData, "timestamp", cJSON_CreateNumber(data.timestamp));
- cJSON_AddItemToArray(dataList, newData);
+ cJSON_free(oxygen_root);
+ free(jsonData);
+ outFile.close();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData JSON is ok");
- if (UpdateJsonData(HEALTH_TYPE_HEART) == false)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to update JSON data for heart rate");
- cJSON_Delete(heart_root);
- heart_root = nullptr;
- return false;
- }
- /*存储bin*/
- std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART);
+ /* 存储bin文件[协议使用] */
+ std::string binFilePath = GetBinFilePath(HEALTH_TYPE_OXYGEN);
FILE *fp = fopen(binFilePath.c_str(), "ab+");
if (fp == NULL)
+ {
return false;
- fwrite(&data.timestamp, 1, 4, fp);
- fwrite(&data.Heart, 1, 1, fp);
+ }
+
+ fwrite(&data.timestamp, 4, 1, fp);
+ fwrite(&data.SPO2, 1, 1, fp);
+
fclose(fp);
return true;
}
- bool HealthService::UpdateJsonData(uint8_t type)
+ // 存储心率
+ bool HealthService::UpdateHealthData(const HeartRateData &data)
{
- std::string jsonFilePath = GetJsonFilePath(type);
- std::ofstream outFile(jsonFilePath);
+ // 判断文件夹是否存在
+ if (!CreateHealthFolder())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
+ return false;
+ }
+ // 判断文件是否存在 不存在即创建 并打开以输出模式
+ std::ofstream outFile(HEART_JSON_PATH, std::ios::app);
if (!outFile.is_open())
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file %s", jsonFilePath.c_str());
- // 创建新文件
- outFile.open(jsonFilePath);
- if (!outFile.is_open())
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create file %s", jsonFilePath.c_str());
- return false;
- }
+ // 文件创建失败
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create or open JSON file for writing");
+ return false;
}
- char *jsonData = NULL;
- cJSON *root = (type == HEALTH_TYPE_HEART) ? heart_root : oxygen_root;
- if (root == NULL)
+ // 创建一个 JSON 对象
+ cJSON *heart_root = cJSON_CreateObject();
+ if (heart_root == NULL)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JSON root is NULL");
outFile.close();
return false;
}
- jsonData = cJSON_Print(root);
- printf("jsonData:%s\r\n", jsonData);
+ cJSON_AddItemToObject(heart_root, "value", cJSON_CreateNumber(data.Heart));
+ cJSON_AddItemToObject(heart_root, "timestamp", cJSON_CreateNumber(data.timestamp));
+
+ char *jsonData = cJSON_Print(heart_root);
if (jsonData == NULL)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data");
+ cJSON_free(heart_root);
outFile.close();
return false;
}
+ // 写入 JSON 数据到文件
outFile << jsonData;
+
+ cJSON_free(heart_root);
+ free(jsonData);
outFile.close();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData JSON is ok");
+
+ /* 存储bin文件[协议使用] */
+ std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART);
+ FILE *fp = fopen(binFilePath.c_str(), "ab+");
+ if (fp == NULL)
+ {
+ return false;
+ }
+
+ fwrite(&data.timestamp, 4, 1, fp);
+ fwrite(&data.Heart, 1, 1, fp);
+
+ fclose(fp);
- cJSON_free(jsonData);
return true;
}
-/***
+/***
+ * @Date: 2024-06-14 11:34:19
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-28 19:49:27
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.h
+ */
+/***
* @Date: 2024-06-14 11:34:19
* @LastEditors: Caisking 3449750381@qq.com
* @LastEditTime: 2024-06-24 16:08:36
~HealthService();
static HealthService *GetInstance(void);
bool CreateHealthFolder();
- bool LoadJsonData(uint8_t type); // 加载json
- BloodOxygenData *ReadBloodOxygenData(); // 读取血氧数据
- bool UpdateBloodOxygenData(const BloodOxygenData &data); // 更新血氧数据
- HeartRateData *ReadHeartRateData(); // 读取心率数据
- HeartPoints *ReadHeartRateDataList(); // 读取心率列表
- bool UpdateHeartRateData(const HeartRateData &data); // 更新心率数据
- void ReleaseJsonData(uint8_t type); // 释放json
- bool UpdateJsonData(uint8_t type); // 更新json
+ bool LoadJsonData(uint8_t type); // 加载json
+ BloodOxygenData *ReadBloodOxygenData(); // 读取血氧数据
+ HeartRateData *ReadHeartRateData(); // 读取心率数据
+ bool UpdateHealthData(const HeartRateData &data); // 更新心率数据
+ bool UpdateHealthData(const BloodOxygenData &data);
+ void ReleaseJsonData(uint8_t type); // 释放json
+ bool UpdateJsonData(uint8_t type); // 更新json
};
}
#endif // HEALTH_MODEL_H
\ No newline at end of file
End = 0,\r
Start,\r
};\r
+ enum class HeartCheck\r
+ {\r
+ RESTSTSTE = 0, // 未检测状态\r
+ PASSIVITY, // 被动检测心率\r
+ INITIATIVE, // 主动检测心率\r
+ EXERCISE, // 运动心率\r
+ };\r
+ // 控制心率检测\r
typedef struct\r
{\r
uint32_t heartRatePerSec;\r
void SetCheckTime(uint64_t time); // 设置本次测试完的时间\r
uint16_t GetIndex(); // 测试点位\r
void SetIndex(uint16_t index);\r
- void Heart_Control(HeartState state);\r
+ void Heart_Control(HeartState state, HeartCheck check);\r
\r
private:\r
HealthAllDatas healthDatas;\r
uint8_t valid_counter_ = 0; // 有效数计数器\r
uint8_t disvalid_counter_ = 0; // 无效数计数器\r
uint8_t unwear_counter_ = 0; // 佩戴错误计数器\r
+\r
+ HeartCheck checkstate = HeartCheck::RESTSTSTE; // 目前检测状态\r
};\r
}\r
\r
/* ---------------------------------- 状态检测 ---------------------------------- */\r
\r
// 控制心率检测\r
- void HeartModel::Heart_Control(HeartState state)\r
+ void HeartModel::Heart_Control(HeartState state, HeartCheck check)\r
{\r
+ if (check < checkstate)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Higher execution instruction exists");\r
+ return;\r
+ }\r
if (state == HeartState::End && heartstate == true)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartState End");\r
uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;\r
send_ppg_cmd_msg(md);\r
heartstate = false;\r
+ // 复原检测状态\r
+ checkstate = HeartCheck::RESTSTSTE;\r
}\r
else if (state == HeartState::Start && heartstate == false)\r
{\r
// 结束本次测试\r
PRINT("MAX_DISVALID_HRS_COUNT\r\n");\r
Heart_Stop();\r
+ // 关闭自动检测心率 如果有其他高级心率检测在进行,则不会进行关闭[低优先级]\r
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY);\r
return;\r
}\r
#if HEARTTEST\r
data->timestamp = HeartPresenter::GetInstance()->GetCurrentTime();\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " Save %d %d", data->Heart, data->timestamp);\r
SetCheckTime(data->timestamp);\r
- HealthService::GetInstance()->UpdateHeartRateData(*data);\r
- // 更新卡片心率值\r
- // SetHeartRatePerSec(heart);\r
+ HealthService::GetInstance()->UpdateHealthData(*data);\r
+ // 关闭自动检测心率 如果有其他高级心率检测在进行,则不会进行关闭[低优先级]\r
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY);\r
}\r
#endif\r
}\r
#include "cywee_service.h"
#include "custom_utils.h"
-#define HEARTKEYABLE 0
+#define HEARTKEYABLE 1
namespace OHOS
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
return 0;
}
-
+
return time;
}
// 秒级时间戳的差
int time_diff_seconds = new_time - old_time;
// 转换为分钟的差值
- int time_diff_minutes = time_diff_seconds / 60;
+ int time_diff_minutes = time_diff_seconds / 60;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time_diff_seconds is %d time_diff_minute is %d", time_diff_seconds, time_diff_minutes);
return time_diff_minutes;
}
HeartPresenter::~HeartPresenter()
{
-#if HEARTKEYABLE
- if (keyActListenr != nullptr)
- {
- delete keyActListenr;
- keyActListenr = nullptr;
- }
-#endif
g_pMainView = nullptr;
}
{
Presenter<HeartView>::OnStart();
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartPresenter::On Start ");
-#if HEARTKEYABLE
- if (keyActListenr == nullptr)
- {
- keyActListenr = new KeyInputListener();
- if (keyActListenr != nullptr)
- {
- RootView::GetInstance()->SetOnKeyActListener(keyActListenr);
- }
- else
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartPresenter::OnStart: new KeyInputListener fail");
- }
- }
-#endif
}
void HeartPresenter::OnPause(void) {}
bool HeartPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
{
#if HEARTKEYABLE
- WEARABLE_LOGD("", "into the view is: %s\n", typeid(view).name());
- uint16 keyID = event.GetKeyId();
- WEARABLE_LOGD("", "into key! keyID %u\n", keyID);
- // 如果是power键就返回上一级
- if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))
+ unsigned short keyID = event.GetKeyId();
+ unsigned short keyState = event.GetState();
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
{
- // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
- NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+ // 关闭心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
+ // 回退
+ NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
}
-#endif
return true;
+#endif
}
bool HeartPresenter::OnClick(UIView &view, const ClickEvent &event)
if (startheart == false)
{
HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : false");
- uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;
- send_ppg_cmd_msg(md);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus false");
+ // 关闭心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
startheart = true;
}
}
HeartCheckView::GetInstance()->UpShowHeartText(); // 更新检测界面
if (startheart == true)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true");
- uint8_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
- send_ppg_cmd_msg(md);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus true");
+ // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE);
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE);
startheart = false;
}
}
{
if (HeartModel::GetInstance()->GetHeartCheckViewStatus() == true)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetWearStatus : false");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetWearStatus false");
HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
// 跳转到异常检测界面
HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTRESULT);
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartView::InitHeartView fail");
}
+ // 增加按键监听
+ RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::HeartPresenter::GetInstance();
+ RootView::GetInstance()->SetOnKeyActListener(keyactListener);
}
void HeartView::OnSetUpView()
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-03-01 15:10:34
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-05-09 10:00:40
+ * @LastEditTime: 2024-06-29 11:19:40
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
*/
static constexpr const char *DROPDOWN_CLICK_BRIGHTENSCREEN = "dropdownclickbrightscreen";
static constexpr const char *DROPDOWN_CLICK_SETTING = "dropdownclicksetting"; // 设置
- static constexpr const char *DROPDOWN_CLICK_LIGHTING = "dropdownclicklighting"; // 手电筒
+ static constexpr const char *DROPDOWN_CLICK_BLUETOOTH = "dropdownclickbluetooth"; // 蓝牙
static constexpr const char *DROPDOWN_CLICK_DNOTDISTURB = "dropdownclickdnotdisturb"; // 勿扰
static constexpr const char *DROPDOWN_CLICK_SAVEELE = "dropdownclicksaveele"; // 省电
static constexpr const char *DROPDOWN_CLICK_FINDMYPHONE = "dropdownclickfindmyphone"; // 找手机
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-04-17 15:26:49
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-29 15:08:34
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h
+ */
+
+#if 1
+#ifndef PULL_UP_DOWN_VIEW_H
+#define PULL_UP_DOWN_VIEW_H
+
+#include "graphic_types.h"
+#include "wearable_log.h"
+#include "components/ui_card_page.h"
+#include "components/ui_view_group.h"
+#include "components/ui_image_view.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_label_button.h"
+#include "components/ui_box_progress.h"
+#include "components/ui_image_animator.h"
+#include "battery_hal.h"
+#include "main/include/ConnectedStatusView.h"
+
+extern uint8_t battery_get_voltage(float *voltage);
+
+namespace OHOS
+{
+ static constexpr int16_t SETTING_INDEX = 0;
+ static constexpr int16_t LIGHTING_INDEX = 1;
+ static constexpr int16_t DNOTDISTURB_INDEX = 2;
+ static constexpr int16_t SAVEPOWER_INDEX = 3;
+ static constexpr int16_t FINDPHONE_INDEX = 4;
+ static constexpr int16_t MAX_INDEX = 5;
+
+ typedef enum : uint8_t
+ {
+ DROPDOWNVIEW = 0,
+ CONNECTEDSTATUSVIEW,
+ MAX_DROPDOWNVIEWID,
+ } DROPDOWNVIEWID;
+
+ class PullUpDownView : public UICardPage
+ {
+ public:
+ PullUpDownView();
+ ~PullUpDownView() override;
+ static PullUpDownView *GetInstance(void);
+ void PreLoad(void) override;
+ void UnLoad(void) override;
+ void UpdatePhoneStatus(int status);
+ void UpdateEarPhoneStatus(int status);
+ void UpdateBlueToothStatus(int status);
+ void UpdateDnotDisturbStatus(int status);
+ void UpdateSignalStrengthStatusAndBatteryPosition();
+ bool ChangeDropDownView(int16_t thisView); // 切换到"下拉控制中心"视图
+ bool ChangeConnectedStatusView(int16_t thisView); // 切换到"连接状态"视图
+ bool ClickFunc(int16_t interface);
+ void ChangeView(int16_t hideView, int16_t showView);
+ ConnectedStatusView *GetConnectedStatusView(void);
+
+ UILabel *GetTimeLabel();
+ UILabel *GetDateLabel();
+ UILabel *GetWeekLabel();
+ UIBoxProgress *GetProgress();
+
+ bool GetPhoneConnectedStatus(void);
+ bool GetEarPhoneConnectedStatus(void);
+ bool GetBlueToothConnectedStatus(void);
+ struct ImageConfig
+ {
+ int16_t x;
+ int16_t y;
+ int16_t w;
+ int16_t h;
+ const char *viewid;
+ const char *src;
+ UIView::OnClickListener *clicklistener;
+ };
+
+ private:
+ bool PullUpDownViewInit();
+ bool InitBaseData(); // 初始化基础数据组件
+ UIImageView *dropDownIconImageViweInit(ImageConfig &imageconfig);
+ void createDropDownIconImageViwe(void);
+ UIImageView *dropDownConnectedStatusImageViweInit(int16_t x, int16_t y, int16_t w, int16_t h);
+ void createDropDownConnectedStatusImageViwe(void);
+
+ bool InitSingalComponentsView();
+ void ClearAllConnectedStatusComponentsView();
+ void ClearAllSingalComponentsView();
+ void ClearAll();
+
+ int GetSignalStrength(void);
+ int CalculateSignalBars(int signalStrength);
+ void UpdateSignalBarDisplay(int signalBars, bool state);
+ void UpdateBatteryPosition(int signalBars);
+ void updateSignalDisplay();
+ void UpdateCat1NoSignalisplay(bool state);
+ void UpdateCat14GDisplay(bool state);
+
+ void PreLoadPullUpDownImageRes(void);
+ void UnLoadPullUpDownImageRes(void);
+
+ private:
+ ConnectedStatusView *connectedStatusView{nullptr};
+
+ private:
+ UIViewGroup *group[MAX_DROPDOWNVIEWID]{nullptr};
+ UIImageView *dropSetting{nullptr}; // 设置
+ UIImageView *dropBluetooth{nullptr}; // 蓝牙
+ UIImageView *dropDnotDisturb{nullptr}; // 勿扰模式
+ UIImageView *dropSavePower{nullptr}; // 省电
+ UIImageView *drofindPhone{nullptr}; // 找手机
+ UIImageView *dropLine{nullptr}; // 线
+ UIButton *connectedStatusBackgroundButton{nullptr}; // 放置连接状态icon的背景按钮
+ UIImageView *showPhoneConnectedStatus{nullptr}; // 显示手机连接状态
+ UIImageView *showEarPhoneConnectedStatus{nullptr}; // 显示耳机连接状态
+ UIImageView *showBluetoothConnectedStatus{nullptr}; // 显示蓝牙连接状态
+ UILabel *showTimeLabel{nullptr}; // 显示时间
+ UILabel *showDateLabel{nullptr}; // 显示日期
+ UILabel *showWeekLabel{nullptr}; // 显示星期
+ UIImageView *showSignalStrength[4]{nullptr}; // 信号强度
+ UILabel *Singal_4{nullptr}; // 4G图标
+ UIImageView *NoSignal{nullptr}; // 无信号
+
+ UIImageView *batteryimage = nullptr;
+ UIBoxProgress *progress = nullptr;
+
+ bool viewiInitStatus{false};
+ };
+}
+#endif
+
+#else
/*
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-04-17 15:26:49
};
}
#endif
+#endif
\ No newline at end of file
{
std::map<std::string, AppViewId> g_jumpView = {
- {DROPDOWN_CLICK_SETTING, VIEW_SETTING}, // 设置
- {DROPDOWN_CLICK_LIGHTING, VIEW_CLASSIC_BLUETOOTH}, // 蓝牙
- {DROPDOWN_CLICK_DNOTDISTURB, VIEW_DNOTDISTURB}, // 勿扰
- {DROPDOWN_CLICK_SAVEELE, VIEW_SAVEELE}, // 省电模式
- {DROPDOWN_CLICK_FINDMYPHONE, VIEW_FIND_PHONE}, // 查找手机
+ {DROPDOWN_CLICK_SETTING, VIEW_SETTING}, // 设置
+ {DROPDOWN_CLICK_BLUETOOTH, VIEW_CLASSIC_BLUETOOTH}, // 蓝牙
+ {DROPDOWN_CLICK_DNOTDISTURB, VIEW_DNOTDISTURB}, // 勿扰
+ {DROPDOWN_CLICK_SAVEELE, VIEW_SAVEELE}, // 省电模式
+ {DROPDOWN_CLICK_FINDMYPHONE, VIEW_FIND_PHONE}, // 查找手机
};
static MainPresenterSample *g_pMainPresenterSample = nullptr;
if (curViewId == CONNECTEDSTATUSBACKGROUNDBUTTON)
{
PullUpDownView::GetInstance()->ChangeView(DROPDOWNVIEW, CONNECTEDSTATUSVIEW);
- PullUpDown_StopTimer(); //切换到连接状态视图时停止定时器
+ PullUpDown_StopTimer(); // 切换到连接状态视图时停止定时器
return true;
}
else if (curViewId == CONNECTEDSTATUSVIEWCLOSEBUTTON)
{
PullUpDownView::GetInstance()->ChangeView(CONNECTEDSTATUSVIEW, DROPDOWNVIEW);
- PullUpDown_StartTimer(1000);//切回下拉控制中心视图开启定时器
+ PullUpDown_StartTimer(1000); // 切回下拉控制中心视图开启定时器
return true;
}
// if(&view == PullUpDownView::GetInstance()->GetConnectedStatusView()->GetCloseButton())
if (cardId != WATCH_FACE)
{
SetCardModel::GetInstance().SetSelectedCard(cardId);
- NativeAbility::GetInstance().ChangeSlice(VIEW_SET_CARD);
+ // NativeAbility::GetInstance().ChangeSlice(VIEW_ADD_CARD);
}
else
{
if (previousCardId == HEART_RATE && cardId != HEART_RATE)
{
// 从心率卡片变为其他卡片时调用关闭心率检测的函数
- HeartModel::GetInstance()->Heart_Control(HeartState::End);
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
}
// 更新上一个卡片的值
switch (cardId)
{
case HEART_RATE:
- // 开启心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::Start);
+ // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
+ HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE);
break;
case COMPASS:
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-26 18:14:24
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-07-01 09:30:03
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp
+ */
+
+#if 1
+#include "PullUpDownView.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "common/screen.h"
+#include "main/include/MainPresenterSample.h"
+#include "screensetting/include/ScreenModels.h"
+#include "settings/include/SettingModel.h"
+#include "ui_resource_image.h"
+#include "dnotdisturb/include/DnotDisturbModel.h"
+#include "custom_utils.h"
+#include "custom_runtime.h"
+namespace OHOS
+{
+
+ /* ---------------------------------- 坐标位置 ---------------------------------- */
+ // 设置
+ static constexpr uint16_t SETTING_IMG_X = 30;
+ static constexpr uint16_t SETTING_IMG_Y = 186;
+ static constexpr const char *DROPDOWN_SETTING_IMAGE = "/user/res/dropdown/DROPDOWN_SETTING.bin";
+
+ // 蓝牙
+ static constexpr uint16_t BLUETOOTH_IMG_X = 76;
+ static constexpr uint16_t BLUETOOTH_IMG_Y = 76;
+ static constexpr const char *DROPDOWN_BLUETOOTH_IMAGE = "/user/res/dropdown/DROPDOWN_BLUETOOTH.bin";
+
+ // 勿扰
+ static constexpr uint16_t DNOTDISTURB_IMG_X = 186;
+ static constexpr uint16_t DNOTDISTURB_IMG_Y = 30;
+ static constexpr const char *DROPDOWN_DNOTDISTURB_IMAGE = "/user/res/dropdown/DROPDOWN_DNOTDISTURB.bin";
+
+ // 省电
+ static constexpr uint16_t SAVEPOWER_IMG_X = 296;
+ static constexpr uint16_t SAVEPOWER_IMG_Y = 76;
+ static constexpr const char *DROPDOWN_SAVEPOWER_IMAGE = "/user/res/dropdown/DROPDOWN_SAVEPOWER.bin";
+
+ // 找手机
+ static constexpr uint16_t FINDPHONE_IMG_X = 342;
+ static constexpr uint16_t FINDPHONE_IMG_Y = 186;
+ static constexpr const char *DROPDOWN_FINDPHONE_IMAGE = "/user/res/dropdown/DROPDOWN_FINDPHONE.bin";
+
+ // line
+ static constexpr uint16_t LINE_IMG_X = 193;
+ static constexpr uint16_t LINE_IMG_Y = 430;
+ static constexpr const char *DROPDOWN_LINE_IMAGE = "/user/res/dropdown/DROPDOWN_LINE.bin";
+
+ // icon图片大小
+ static constexpr uint16_t ICON_IMG_SIZE_W = 94;
+ static constexpr uint16_t ICON_IMG_SIZE_H = 94;
+
+ // 电池
+ static constexpr uint16_t BATTERY_X = 209;
+ static constexpr uint16_t BATTERY_Y = 180;
+
+ // 时间
+ static constexpr uint16_t TIME_LABEL_X = 172;
+ static constexpr uint16_t TIME_LABEL_Y = 230;
+
+ // 日期
+ static constexpr uint16_t DATE_LABEL_X = 110;
+ static constexpr uint16_t DATE_LABEL_Y = 300;
+
+ // 星期
+ static constexpr uint16_t WEEK_LABEL_X = 295;
+ static constexpr uint16_t WEEK_LABEL_Y = 300;
+
+ // 手机连接状态
+ static constexpr uint16_t PHONECONNECTSTATUS_IMG_X = 123;
+ static constexpr uint16_t PHONECONNECTSTATUS_IMG_Y = 350;
+ static constexpr const char *DROPDOWN_PHONECONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_PHONECONNECTED.bin";
+ static constexpr const char *DROPDOWN_PHONEDISCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_PHONEDISCONNECTED.bin";
+
+ // 耳机连接状态
+ static constexpr uint16_t EARPHONESCONNECTSTATUS_IMG_X = 203;
+ static constexpr uint16_t EARPHONESCONNECTSTATUS_IMG_Y = 350;
+ static constexpr const char *DROPDOWN_EARPHONESCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_EARPHONESCONNECTED.bin";
+ static constexpr const char *DROPDOWN_EARPHONESDISCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_EARPHONESDISCONNECTED.bin";
+
+ // 蓝牙连接状态
+ static constexpr uint16_t BLUETOOTHCONNECTSTATUS_IMG_X = 283;
+ static constexpr uint16_t BLUETOOTHCONNECTSTATUS_IMG_Y = 350;
+ static constexpr const char *DROPDOWN_BLUETOOTHCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_BLUETOOTHCONNECTED.bin";
+ static constexpr const char *DROPDOWN_BLUETOOTHDISCONNECTED_IMAGE = "/user/res/dropdown/DROPDOWN_BLUETOOTHDISCONNECTED.bin";
+
+ static constexpr uint16_t CONNECTSTATUS_IMG_W = 60;
+ static constexpr uint16_t CONNECTSTATUS_IMG_H = 60;
+
+ static constexpr const char *DROPDOWN_NOSIGNAL_IMAGE = "/user/res/dropdown/DROPDOWN_NOSIGNAL.bin";
+ static const int64_t COLOR_SIGNAL_ON = 0xffffffff;
+ static const int64_t COLOR_SIGNAL_OFF = 0xff383838;
+ static const int BATTERY_IMAGE_WIDTH = 48;
+ static const int BATTERY_IMAGE_HEIGHT = 30;
+ static const int PROGRESS_WIDTH = 30;
+ static const int PROGRESS_HEIGHT = 18;
+ /* -------------------------------------------------------------------------- */
+ std::string getWeekString(int wday)
+ {
+ std::string weekDays[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+ return weekDays[wday];
+ }
+ /* -------------------------------------------------------------------------- */
+ static PullUpDownView *g_pPullUpDownView = nullptr;
+ PullUpDownView::PullUpDownView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PullUpDownView");
+ g_pPullUpDownView = this;
+ }
+
+ PullUpDownView::~PullUpDownView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::~PullUpDownView");
+ ClearAll();
+ g_pPullUpDownView = nullptr;
+ }
+
+ PullUpDownView *PullUpDownView::GetInstance(void)
+ {
+ return g_pPullUpDownView;
+ }
+
+ // 清除信号强度相关组件
+ void PullUpDownView::ClearAllSingalComponentsView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAllSingalComponentsView");
+ if (NoSignal != nullptr)
+ {
+ delete NoSignal;
+ NoSignal = nullptr;
+ }
+
+ for (int i = 0; i < 4; i++)
+ {
+ if (showSignalStrength[i] != nullptr)
+ {
+ delete showSignalStrength[i];
+ showSignalStrength[i] = nullptr;
+ }
+ }
+
+ if (Singal_4 != nullptr)
+ {
+ delete Singal_4;
+ Singal_4 = nullptr;
+ }
+ }
+
+ // 清除所有与连接状态相关的视图组件
+ void PullUpDownView::ClearAllConnectedStatusComponentsView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAllConnectedStatusComponentsView");
+ if (connectedStatusBackgroundButton != nullptr)
+ {
+ delete connectedStatusBackgroundButton;
+ connectedStatusBackgroundButton = nullptr;
+ }
+
+ if (showPhoneConnectedStatus != nullptr)
+ {
+ delete showPhoneConnectedStatus;
+ showPhoneConnectedStatus = nullptr;
+ }
+
+ if (showEarPhoneConnectedStatus != nullptr)
+ {
+ delete showEarPhoneConnectedStatus;
+ showEarPhoneConnectedStatus = nullptr;
+ }
+
+ if (showBluetoothConnectedStatus != nullptr)
+ {
+ delete showBluetoothConnectedStatus;
+ showBluetoothConnectedStatus = nullptr;
+ }
+ }
+
+ void PullUpDownView::ClearAll()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll");
+ RemoveAll();
+ if (group[DROPDOWNVIEW] != nullptr)
+ {
+ group[DROPDOWNVIEW]->RemoveAll();
+ group[DROPDOWNVIEW]->ClearBackgroundBlur();
+ delete group[DROPDOWNVIEW];
+ group[DROPDOWNVIEW] = nullptr;
+ }
+
+ if (dropSetting != nullptr)
+ {
+ delete dropSetting;
+ dropSetting = nullptr;
+ }
+
+ if (dropBluetooth != nullptr)
+ {
+ delete dropBluetooth;
+ dropBluetooth = nullptr;
+ }
+
+ if (dropDnotDisturb != nullptr)
+ {
+ delete dropDnotDisturb;
+ dropDnotDisturb = nullptr;
+ }
+
+ if (dropSavePower != nullptr)
+ {
+ delete dropSavePower;
+ dropSavePower = nullptr;
+ }
+
+ if (drofindPhone != nullptr)
+ {
+ delete drofindPhone;
+ drofindPhone = nullptr;
+ }
+
+ if (dropLine != nullptr)
+ {
+ delete dropLine;
+ dropLine = nullptr;
+ }
+
+ if (showTimeLabel != nullptr)
+ {
+ delete showTimeLabel;
+ showTimeLabel = nullptr;
+ }
+
+ if (showDateLabel != nullptr)
+ {
+ delete showDateLabel;
+ showDateLabel = nullptr;
+ }
+
+ if (showWeekLabel != nullptr)
+ {
+ delete showWeekLabel;
+ showWeekLabel = nullptr;
+ }
+ /* -------------------------------------------------------------------------- */
+ ClearAllSingalComponentsView();
+ ClearAllConnectedStatusComponentsView();
+ /* -------------------------------------------------------------------------- */
+ if (batteryimage != nullptr)
+ {
+ delete batteryimage;
+ batteryimage = nullptr;
+ }
+
+ if (progress != nullptr)
+ {
+ delete progress;
+ progress = nullptr;
+ }
+
+ if (connectedStatusView != nullptr)
+ {
+ delete connectedStatusView;
+ connectedStatusView = nullptr;
+ group[CONNECTEDSTATUSVIEW] = nullptr;
+ }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll end!!");
+ }
+
+ UIImageView *PullUpDownView::dropDownIconImageViweInit(ImageConfig &imageconfig)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropDownIconImageViweInit");
+ UIImageView *Image = new UIImageView();
+ if (Image == nullptr)
+ {
+ return nullptr;
+ }
+ Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h);
+ Image->SetViewId(imageconfig.viewid);
+ Image->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+ Image->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ Image->SetStyle(STYLE_BORDER_RADIUS, 100);
+ Image->SetAutoEnable(false);
+ Image->SetResizeMode(UIImageView::CENTER);
+ Image->SetSrc(imageconfig.src);
+ Image->SetTouchable(true);
+ Image->SetOnClickListener(imageconfig.clicklistener);
+
+ return Image;
+ }
+
+ /// @brief 创建icon图标
+ void PullUpDownView::createDropDownIconImageViwe(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitViewImg");
+ UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance();
+ if (clickListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::GetInstance fail!!");
+ return;
+ }
+ /* ---------------------------------- 下拉设置图片 ---------------------------------- */
+ ImageConfig imageconfig = {
+ .x = SETTING_IMG_X,
+ .y = SETTING_IMG_Y,
+ .w = ICON_IMG_SIZE_W,
+ .h = ICON_IMG_SIZE_H,
+ .viewid = DROPDOWN_CLICK_SETTING,
+ .src = DROPDOWN_SETTING_IMAGE,
+ .clicklistener = clickListener,
+ };
+ dropSetting = dropDownIconImageViweInit(imageconfig);
+ if (dropSetting == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropSetting new fail");
+ return;
+ }
+ /* ----------------------------------- 蓝牙 ----------------------------------- */
+ imageconfig = {
+ .x = BLUETOOTH_IMG_X,
+ .y = BLUETOOTH_IMG_Y,
+ .w = ICON_IMG_SIZE_W,
+ .h = ICON_IMG_SIZE_H,
+ .viewid = DROPDOWN_CLICK_BLUETOOTH,
+ .src = DROPDOWN_BLUETOOTH_IMAGE,
+ .clicklistener = clickListener,
+ };
+ dropBluetooth = dropDownIconImageViweInit(imageconfig);
+ if (dropBluetooth == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropBluetooth new fail");
+ return;
+ }
+ /* ----------------------------------- 勿扰模式 ----------------------------------- */
+ imageconfig = {
+ .x = DNOTDISTURB_IMG_X,
+ .y = DNOTDISTURB_IMG_Y,
+ .w = ICON_IMG_SIZE_W,
+ .h = ICON_IMG_SIZE_H,
+ .viewid = DROPDOWN_CLICK_DNOTDISTURB,
+ .src = DROPDOWN_DNOTDISTURB_IMAGE,
+ .clicklistener = clickListener,
+ };
+ dropDnotDisturb = dropDownIconImageViweInit(imageconfig);
+ if (dropDnotDisturb == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropDnotDisturb new fail");
+ return;
+ }
+ UpdateDnotDisturbStatus(DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled());
+ /* ----------------------------------- 省电 ----------------------------------- */
+ imageconfig = {
+ .x = SAVEPOWER_IMG_X,
+ .y = SAVEPOWER_IMG_Y,
+ .w = ICON_IMG_SIZE_W,
+ .h = ICON_IMG_SIZE_H,
+ .viewid = DROPDOWN_CLICK_SAVEELE,
+ .src = DROPDOWN_SAVEPOWER_IMAGE,
+ .clicklistener = clickListener,
+ };
+ dropSavePower = dropDownIconImageViweInit(imageconfig);
+ if (dropSavePower == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::dropSavePower new fail");
+ return;
+ }
+ /* ----------------------------------- 找手机 ---------------------------------- */
+ imageconfig = {
+ .x = FINDPHONE_IMG_X,
+ .y = FINDPHONE_IMG_Y,
+ .w = ICON_IMG_SIZE_W,
+ .h = ICON_IMG_SIZE_H,
+ .viewid = DROPDOWN_CLICK_FINDMYPHONE,
+ .src = DROPDOWN_FINDPHONE_IMAGE,
+ .clicklistener = clickListener,
+ };
+ drofindPhone = dropDownIconImageViweInit(imageconfig);
+ if (drofindPhone == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::drofindPhone new fail");
+ return;
+ }
+ /* -------------------------------- dropLine -------------------------------- */
+ dropLine = new UIImageView();
+ if (dropLine == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropLine new fail");
+ return;
+ }
+ dropLine->SetPosition(LINE_IMG_X, LINE_IMG_Y, ICON_IMG_SIZE_W, ICON_IMG_SIZE_H);
+ dropLine->SetSrc(DROPDOWN_LINE_IMAGE);
+ /* -------------------------------- 添加组件到视图上 -------------------------------- */
+ group[DROPDOWNVIEW]->Add(dropSetting);
+ group[DROPDOWNVIEW]->Add(dropBluetooth);
+ group[DROPDOWNVIEW]->Add(dropDnotDisturb);
+ group[DROPDOWNVIEW]->Add(dropSavePower);
+ group[DROPDOWNVIEW]->Add(drofindPhone);
+ group[DROPDOWNVIEW]->Add(dropLine);
+ }
+
+ // 获取手机连接状态
+ bool PullUpDownView::GetPhoneConnectedStatus(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetPhoneConnectedStatus");
+ // uint8_t ret = uapi_dev_runtime_get_ble_connect_stat();
+ // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ble phone connect stat = %d", ret);
+ // if (ret == 1)
+ // return true;
+ // else
+ // return false;
+
+ return SettingModel::GetInstance().GetPhoneConnectStatus();
+ }
+
+ // 获取蓝牙耳机连接状态
+ bool PullUpDownView::GetEarPhoneConnectedStatus(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetEarPhoneConnectedStatus");
+ // uint8_t ret = uapi_dev_runtime_get_earphone_connect_stat();
+ // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "earphone connect stat = %d", ret);
+ // if (ret == 1)
+ // return true;
+ // else
+ // return false;
+
+ return SettingModel::GetInstance().GetEarPhoneConnectStatus();
+ }
+
+ // 获取蓝牙连接状态
+ bool PullUpDownView::GetBlueToothConnectedStatus(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetBlueToothConnectedStatus");
+ // uint8_t ret = uapi_dev_runtime_get_br_connect_stat();
+ // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "br connect stat = %d [0 no connect, 1 a2dp, 2 hfp, 3 both]", ret);
+ // if (ret != 0)
+ // return true;
+ // else
+ // return false;
+
+ return SettingModel::GetInstance().GetBlueToothConnectStatus();
+ }
+
+ UIImageView *PullUpDownView::dropDownConnectedStatusImageViweInit(int16_t x, int16_t y, int16_t w, int16_t h)
+ {
+ UIImageView *img = new UIImageView();
+ if (img == nullptr)
+ {
+ return nullptr;
+ }
+ img->SetPosition(x, y, w, h);
+ img->SetAutoEnable(false);
+ img->SetResizeMode(UIImageView::CENTER);
+ img->SetStyle(STYLE_BORDER_RADIUS, 100);
+
+ return img;
+ }
+
+ /// @brief 创建与连接状态相关组件
+ void PullUpDownView::createDropDownConnectedStatusImageViwe(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitConnectedStatusImage");
+ connectedStatusBackgroundButton = new UIButton();
+ if (connectedStatusBackgroundButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connectedStatusBackgroundButton new fail");
+ return;
+ }
+ connectedStatusBackgroundButton->SetPosition(113, 348, 240, 64);
+ connectedStatusBackgroundButton->SetViewId(CONNECTEDSTATUSBACKGROUNDBUTTON);
+ connectedStatusBackgroundButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ connectedStatusBackgroundButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+ connectedStatusBackgroundButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);
+ connectedStatusBackgroundButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+ connectedStatusBackgroundButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED);
+ connectedStatusBackgroundButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED);
+ UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance();
+ if (clickListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::GetInstance fail!!");
+ return;
+ }
+ connectedStatusBackgroundButton->SetOnClickListener(clickListener);
+ /* -------------------------------- 显示手机连接状态 -------------------------------- */
+
+ showPhoneConnectedStatus = dropDownConnectedStatusImageViweInit(PHONECONNECTSTATUS_IMG_X, PHONECONNECTSTATUS_IMG_Y, CONNECTSTATUS_IMG_W, CONNECTSTATUS_IMG_H);
+ if (showPhoneConnectedStatus == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showPhoneConnectedStatus new fail");
+ return;
+ }
+ /* -------------------------------- 显示耳机连接状态 -------------------------------- */
+ showEarPhoneConnectedStatus = dropDownConnectedStatusImageViweInit(EARPHONESCONNECTSTATUS_IMG_X, EARPHONESCONNECTSTATUS_IMG_Y, CONNECTSTATUS_IMG_W, CONNECTSTATUS_IMG_H);
+ if (showEarPhoneConnectedStatus == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showEarPhoneConnectedStatus new fail");
+ return;
+ }
+ /* -------------------------------- 显示蓝牙连接状态 -------------------------------- */
+ showBluetoothConnectedStatus = dropDownConnectedStatusImageViweInit(BLUETOOTHCONNECTSTATUS_IMG_X, BLUETOOTHCONNECTSTATUS_IMG_Y, CONNECTSTATUS_IMG_W, CONNECTSTATUS_IMG_H);
+ if (showBluetoothConnectedStatus == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showBluetoothConnectedStatus new fail");
+ return;
+ }
+ /* -------------------------------------------------------------------------- */
+ UpdatePhoneStatus(GetPhoneConnectedStatus());
+ UpdateEarPhoneStatus(GetEarPhoneConnectedStatus());
+ UpdateBlueToothStatus(GetBlueToothConnectedStatus());
+ /* -------------------------------------------------------------------------- */
+ group[DROPDOWNVIEW]->Add(connectedStatusBackgroundButton);
+ group[DROPDOWNVIEW]->Add(showPhoneConnectedStatus);
+ group[DROPDOWNVIEW]->Add(showEarPhoneConnectedStatus);
+ group[DROPDOWNVIEW]->Add(showBluetoothConnectedStatus);
+ }
+
+ /***
+ * @brief 初始化时间,日期,星期,电池,信号强度
+ */
+ bool PullUpDownView::InitBaseData()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitBaseData");
+ if (!InitSingalComponentsView())
+ {
+ return false;
+ }
+
+ /* ---------------------------------- 时间显示 ---------------------------------- */
+ showTimeLabel = new UILabel();
+ if (showTimeLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showTimeLabel new fail");
+ return false;
+ }
+ showTimeLabel->SetPosition(TIME_LABEL_X, TIME_LABEL_Y);
+ showTimeLabel->SetStyle(STYLE_TEXT_FONT, 50);
+ showTimeLabel->SetStyle(STYLE_LINE_HEIGHT, 59);
+ showTimeLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ showTimeLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ showTimeLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 50);
+ /* ---------------------------------- 日期显示 ---------------------------------- */
+ showDateLabel = new UILabel();
+ if (showDateLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showDateLabel new fail");
+ return false;
+ }
+ showDateLabel->SetPosition(DATE_LABEL_X, DATE_LABEL_Y);
+ showDateLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ showDateLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ showDateLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ showDateLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ showDateLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* ---------------------------------- 星期显示 ---------------------------------- */
+ showWeekLabel = new UILabel();
+ if (showWeekLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showWeekLabel new fail");
+ return false;
+ }
+ showWeekLabel->SetPosition(WEEK_LABEL_X, WEEK_LABEL_Y);
+ showWeekLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ showWeekLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ showWeekLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ showWeekLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ showWeekLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28);
+ /* ----------------------------------- 电池 ----------------------------------- */
+ batteryimage = new UIImageView();
+ if (batteryimage == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryimage new fail");
+ return false;
+ }
+ batteryimage->SetPosition(258, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT);
+ std::string batteryimagesPath = "/user/res/Battery/Battery-E.bin";
+ batteryimage->SetSrc(batteryimagesPath.c_str());
+ /* -------------------------------------------------------------------------- */
+ progress = new UIBoxProgress();
+ if (progress == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "progress new fail");
+ return false;
+ }
+ progress->SetPosition(206, 180, PROGRESS_WIDTH, PROGRESS_HEIGHT);
+ progress->SetValidHeight(PROGRESS_HEIGHT);
+ progress->SetValidWidth(PROGRESS_WIDTH);
+
+ // progress->SetValue(value);
+ const char *progressImageSrc = "/user/res/Battery/Battery_Normal.bin";
+ progress->SetImage(progressImageSrc, nullptr);
+ progress->SetBackgroundStyle(STYLE_BACKGROUND_OPA, 0x00);
+ progress->SetBackgroundStyle(STYLE_TEXT_COLOR, 0xff000000);
+ progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ progress->SetForegroundStyle(STYLE_TEXT_COLOR, 0xff000000);
+ progress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff45A5FF);
+
+ group[DROPDOWNVIEW]->Add(progress);
+ group[DROPDOWNVIEW]->Add(batteryimage);
+ group[DROPDOWNVIEW]->Add(showTimeLabel);
+ group[DROPDOWNVIEW]->Add(showDateLabel);
+ group[DROPDOWNVIEW]->Add(showWeekLabel);
+
+ /* -------------------------------------------------------------------------- */
+ UpdateSignalStrengthStatusAndBatteryPosition();
+ /* -------------------------------------------------------------------------- */
+
+ return true;
+ }
+
+ // 初始化信号强度相关组件
+ bool PullUpDownView::InitSingalComponentsView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitSingalComponentsView");
+ /* -------------------------------------------------------------------------- */
+ NoSignal = new UIImageView();
+ if (NoSignal == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NoSignal new fail");
+ return false;
+ }
+ NoSignal->SetPosition(160, 176, 36, 38);
+ NoSignal->SetAutoEnable(false);
+ NoSignal->SetResizeMode(UIImageView::CENTER);
+ NoSignal->SetSrc(DROPDOWN_NOSIGNAL_IMAGE);
+ NoSignal->SetVisible(false);
+ group[DROPDOWNVIEW]->Add(NoSignal);
+ /* -------------------------------------------------------------------------- */
+ // 定义一个结构体,用于存储 ImageView 的信息
+ struct ImageViewInfo
+ {
+ int posX;
+ int posY;
+ int width;
+ int height;
+ };
+ // 待添加的 ImageView 信息列表
+ std::vector<ImageViewInfo> imageViewList = {
+ {160, 204, 6, 6},
+ {170, 196, 6, 14},
+ {180, 188, 6, 22},
+ {190, 180, 6, 30},
+ };
+
+ // 循环添加 ImageView 到相应的容器中
+ for (int i = 0; i < 4; i++)
+ {
+ if (showSignalStrength[i] == nullptr)
+ {
+ showSignalStrength[i] = new UIImageView();
+ if (showSignalStrength[i] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d] new fail", i);
+ return false;
+ }
+ }
+ showSignalStrength[i]->SetPosition(imageViewList[i].posX, imageViewList[i].posY, imageViewList[i].width, imageViewList[i].height);
+ showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ showSignalStrength[i]->SetStyle(STYLE_BORDER_RADIUS, 10);
+ group[DROPDOWNVIEW]->Add(showSignalStrength[i]);
+ showSignalStrength[i]->SetVisible(false);
+ }
+ /* -------------------------------------------------------------------------- */
+ if (Singal_4 == nullptr)
+ {
+ Singal_4 = new UILabel();
+ }
+ Singal_4->SetPosition(201, 176, 40, 47);
+ Singal_4->SetStyle(STYLE_TEXT_FONT, 34);
+ Singal_4->SetStyle(STYLE_LINE_HEIGHT, 40);
+ Singal_4->SetText("4G");
+ Singal_4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ Singal_4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ Singal_4->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 34);
+ Singal_4->SetVisible(false);
+ group[DROPDOWNVIEW]->Add(Singal_4);
+
+ return true;
+ }
+
+ // 获取信号强度
+ int PullUpDownView::GetSignalStrength(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetSignalStrength");
+ int SignalStrength = uapi_dev_runtime_get_cat1_signal(); // 信号强度
+ return CalculateSignalBars(SignalStrength);
+ }
+
+ // 计算信号格
+ int PullUpDownView::CalculateSignalBars(int signalStrength)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CalculateSignalBars");
+ if (signalStrength < 0 || signalStrength > 32 || signalStrength == 0)
+ return 99; // 无信号 or Invalid signal strength
+
+ // if (signalStrength == 32)
+ // return 4; // Edge case where signalStrength is exactly at the upper boundary
+
+ return (signalStrength / 8) + 1;
+ }
+
+#if 0
+ // 函数用于更新信号显示的UI
+ void PullUpDownView::updateSignalDisplay()
+ {
+ int sim = uapi_dev_runtime_get_cat1_simstat();
+ int cat1_powerOn = uapi_dev_runtime_get_cat1_powerstat();
+ int signal = uapi_dev_runtime_get_cat1_signal();
+ int network_on = uapi_dev_runtime_get_cat1_networkstat();
+ int cat1_network_type = uapi_dev_runtime_get_cat1_networtype();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sim = %d", sim);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_powerOn = %d", cat1_powerOn);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "signal = %d", signal);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "network_on = %d", network_on);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_network_type = %d", cat1_network_type);
+
+ const int SIGNAL_NO_SIGNAL = 99;
+ const int NETWORK_TYPE_NO_NETWORK = 0;
+ const int NETWORK_TYPE_4G = 4;
+
+ if (sim == 0 || cat1_powerOn == 0)
+ {
+ // 无信号,无4G图标
+ UpdateCat1NoSignalisplay(true);
+ UpdateCat14GDisplay(false);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+ }
+ else if (cat1_powerOn == 1 && sim == 1)
+ {
+ if (signal == SIGNAL_NO_SIGNAL)
+ {
+ // 无信号UI显示
+ UpdateCat1NoSignalisplay(true);
+ UpdateCat14GDisplay(false);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+ }
+ else
+ {
+ // 信号强度显示
+ UpdateCat1NoSignalisplay(false);
+ UpdateCat14GDisplay(true);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), true);
+ }
+ if (network_on == 0)
+ {
+ // 无信号,无4G图标 显示
+ UpdateCat1NoSignalisplay(true);
+ UpdateCat14GDisplay(false);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+ }
+ else
+ {
+ if (cat1_network_type == NETWORK_TYPE_NO_NETWORK)
+ {
+ // 无信号,无4G图标 显示
+ UpdateCat1NoSignalisplay(true);
+ UpdateCat14GDisplay(false);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+ }
+ else if (cat1_network_type == NETWORK_TYPE_4G)
+ {
+ // 有4G图标,正常显示信号
+ UpdateCat1NoSignalisplay(false);
+ UpdateCat14GDisplay(true);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), true);
+ }
+ else
+ {
+ // 无4G图标,正常显示信号
+ UpdateCat1NoSignalisplay(false);
+ UpdateCat14GDisplay(false);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), true);
+ }
+ }
+ }
+ }
+#else
+ // 函数用于更新信号显示的UI
+ void PullUpDownView::updateSignalDisplay()
+ {
+ int sim = uapi_dev_runtime_get_cat1_simstat();
+ int cat1_powerOn = uapi_dev_runtime_get_cat1_powerstat();
+ int signal = uapi_dev_runtime_get_cat1_signal();
+ int network_on = uapi_dev_runtime_get_cat1_networkstat();
+ int cat1_network_type = uapi_dev_runtime_get_cat1_networtype();
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sim = %d", sim);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_powerOn = %d", cat1_powerOn);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "signal = %d", signal);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "network_on = %d", network_on);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cat1_network_type = %d", cat1_network_type);
+
+ const int SIGNAL_NO_SIGNAL = 99;
+ const int NETWORK_TYPE_NO_NETWORK = 0;
+ const int NETWORK_TYPE_4G = 4;
+
+ bool showNoSignalUI = (sim == 0 || cat1_powerOn == 0 || signal == SIGNAL_NO_SIGNAL);
+ bool showNoNetworkUI = (network_on == 0 || cat1_network_type == NETWORK_TYPE_NO_NETWORK);
+
+ bool show4GIcon = (cat1_network_type == NETWORK_TYPE_4G);
+
+ UpdateCat1NoSignalisplay(showNoSignalUI);
+ UpdateCat14GDisplay(show4GIcon);
+ UpdateSignalBarDisplay(CalculateSignalBars(signal), !(showNoSignalUI || showNoNetworkUI));
+ }
+#endif
+
+ // 更新信号强度显示
+ void PullUpDownView::UpdateSignalBarDisplay(int signalBars, bool state)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalBarDisplay");
+ for (int i = 0; i < 4; i++)
+ {
+ showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, (i < signalBars) ? COLOR_SIGNAL_ON : COLOR_SIGNAL_OFF);
+ showSignalStrength[i]->Invalidate();
+ showSignalStrength[i]->SetVisible(state);
+ }
+ }
+
+ // 更新无信号图标显示
+ void PullUpDownView::UpdateCat1NoSignalisplay(bool state)
+ {
+ if (NoSignal != nullptr)
+ {
+ NoSignal->SetVisible(state);
+ }
+ }
+
+ // 更新4G图标显示
+ void PullUpDownView::UpdateCat14GDisplay(bool state)
+ {
+ if (Singal_4 != nullptr)
+ {
+ Singal_4->SetVisible(state);
+ }
+ }
+
+ // 更新电池位置
+ void PullUpDownView::UpdateBatteryPosition(int signalBars)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateBatteryPosition");
+ if (signalBars == 99)
+ {
+ batteryimage->SetPosition(209, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT);
+ progress->SetPosition(215, 186, PROGRESS_WIDTH, PROGRESS_HEIGHT);
+ }
+ else
+ {
+ batteryimage->SetPosition(258, 180, BATTERY_IMAGE_WIDTH, BATTERY_IMAGE_HEIGHT);
+ progress->SetPosition(264, 186, PROGRESS_WIDTH, PROGRESS_HEIGHT);
+ }
+ batteryimage->Invalidate();
+ progress->Invalidate();
+ }
+
+ // 更新信号强度和电池位置
+ void PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition");
+ updateSignalDisplay();
+ UpdateBatteryPosition(GetSignalStrength());
+ }
+
+ // 下拉视图初始化
+ bool PullUpDownView::PullUpDownViewInit()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitView");
+
+ group[DROPDOWNVIEW] = new UIViewGroup();
+ if (group[DROPDOWNVIEW] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group[DROPDOWNVIEW] new fail!!");
+ return false;
+ }
+ group[DROPDOWNVIEW]->SetPosition(0, 0, 466, 466);
+ group[DROPDOWNVIEW]->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+ group[DROPDOWNVIEW]->SetViewIndex(0);
+ group[DROPDOWNVIEW]->SetFullScreenBlur(true);
+ createDropDownIconImageViwe();
+ createDropDownConnectedStatusImageViwe();
+
+ if (InitBaseData())
+ {
+ MainPresenterSample::GetInstance()->UpdataBaseData();
+ }
+ else
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitBaseData Error!");
+ return false;
+ }
+ SetTouchable(true);
+ SetIntercept(true);
+ Add(group[DROPDOWNVIEW]);
+ return true;
+ }
+
+ void PullUpDownView::PreLoad(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PreLoad");
+ if (!viewiInitStatus)
+ {
+ PullUpDownViewInit();
+ viewiInitStatus = true;
+ }
+ }
+
+ void PullUpDownView::UnLoad(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UnLoad");
+ }
+
+ // 更新手机连接状态
+ void PullUpDownView::UpdatePhoneStatus(int status)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdatePhoneStatus");
+ if (showPhoneConnectedStatus == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showPhoneConnectedStatus nullptr");
+ return;
+ }
+ showPhoneConnectedStatus->SetSrc(status ? DROPDOWN_PHONECONNECTED_IMAGE : DROPDOWN_PHONEDISCONNECTED_IMAGE);
+ showPhoneConnectedStatus->Invalidate();
+
+ if (GetConnectedStatusView() != nullptr)
+ GetConnectedStatusView()->UpdatePhoneConnectedStatus(status);
+
+ return;
+ }
+
+ // 更新蓝牙耳机连接状态
+ void PullUpDownView::UpdateEarPhoneStatus(int status)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateEarPhoneStatus");
+ if (showEarPhoneConnectedStatus == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showEarPhoneConnectedStatus nullptr");
+ return;
+ }
+ showEarPhoneConnectedStatus->SetSrc(status ? DROPDOWN_EARPHONESCONNECTED_IMAGE : DROPDOWN_EARPHONESDISCONNECTED_IMAGE);
+ showEarPhoneConnectedStatus->Invalidate();
+
+ if (GetConnectedStatusView() != nullptr)
+ GetConnectedStatusView()->UpdateEarPhoneConnectedStatus(status);
+
+ return;
+ }
+
+ // 更新蓝牙连接状态
+ void PullUpDownView::UpdateBlueToothStatus(int status)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateBlueToothStatus");
+ if (showBluetoothConnectedStatus == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showBluetoothConnectedStatus nullptr");
+ return;
+ }
+ showBluetoothConnectedStatus->SetSrc(status ? DROPDOWN_BLUETOOTHCONNECTED_IMAGE : DROPDOWN_BLUETOOTHDISCONNECTED_IMAGE);
+ showBluetoothConnectedStatus->Invalidate();
+
+ if (GetConnectedStatusView() != nullptr)
+ GetConnectedStatusView()->UpdateBlueToothConnectedStatus(status);
+
+ return;
+ }
+
+ /*更新勿扰模式状态*/
+ void PullUpDownView::UpdateDnotDisturbStatus(int status)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateDnotDisturbStatus");
+ if (dropDnotDisturb != nullptr)
+ {
+ dropDnotDisturb->SetStyle(STYLE_BACKGROUND_COLOR, status ? 0xff8e20e2 : 0xff191919);
+ dropDnotDisturb->Invalidate();
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropIconBackground[DNOTDISTURB_INDEX] is nullptr");
+ return;
+ }
+ }
+
+ UILabel *PullUpDownView::GetTimeLabel()
+ {
+ return showTimeLabel;
+ }
+ UILabel *PullUpDownView::GetDateLabel()
+ {
+ return showDateLabel;
+ }
+ UILabel *PullUpDownView::GetWeekLabel()
+ {
+ return showWeekLabel;
+ }
+ UIBoxProgress *PullUpDownView::GetProgress()
+ {
+ return progress;
+ }
+ /* ------------------------------ 下拉界面切换到连接状态视图 ----------------------------- */
+ // 切换到"下拉控制中心"视图
+ bool PullUpDownView::ChangeDropDownView(int16_t thisView)
+ {
+ if (group[thisView] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeDropDownView");
+ Add(group[thisView]);
+ }
+ return true;
+ }
+
+ // 切换到"连接状态"视图
+ bool PullUpDownView::ChangeConnectedStatusView(int16_t thisView)
+ {
+ if (group[thisView] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeConnectedStatusView");
+ connectedStatusView = new ConnectedStatusView();
+ if (connectedStatusView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView:: new scrollView[%d] fail", thisView);
+ return false;
+ }
+ group[thisView] = connectedStatusView->ConnectedStatusViewInit();
+ Add(group[thisView]);
+ }
+ return true;
+ }
+
+ struct PullUpDownViewMapper
+ {
+ const int16_t viewId;
+ bool (PullUpDownView::*func)(int16_t thisView);
+ };
+
+ static const PullUpDownViewMapper ViewMapper[] = {
+ {DROPDOWNVIEW, &PullUpDownView::ChangeDropDownView},
+ {CONNECTEDSTATUSVIEW, &PullUpDownView::ChangeConnectedStatusView},
+ };
+
+ bool PullUpDownView::ClickFunc(int16_t interface)
+ {
+ int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]);
+ for (int i = 0; i < funcSize; i++)
+ {
+ if (interface == ViewMapper[i].viewId)
+ {
+ bool jug = (this->*(ViewMapper[i].func))(interface);
+ if (jug == false)
+ {
+ return false;
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void PullUpDownView::ChangeView(int16_t hideView, int16_t showView)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeView");
+ if (hideView > MAX_DROPDOWNVIEWID)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView:: SystemViewId Overstep ones bounds");
+ return;
+ }
+ group[hideView]->SetVisible(false);
+ ClickFunc(showView);
+ group[showView]->SetVisible(true);
+ Invalidate();
+ }
+
+ ConnectedStatusView *PullUpDownView::GetConnectedStatusView(void)
+ {
+ return connectedStatusView;
+ }
+ /* -------------------------------------------------------------------------- */
+}
+#else
/*
* Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
* Description: WeekStep
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll");
RemoveAll();
- UnLoadPullUpDownImageRes(); //切换slice的时候也要卸载资源放在ImageCach空间不够
+ UnLoadPullUpDownImageRes(); // 切换slice的时候也要卸载资源放在ImageCach空间不够
if (group[DROPDOWNVIEW] != nullptr)
{
group[DROPDOWNVIEW]->RemoveAll();
dropLighting->SetAutoEnable(false);
dropLighting->SetResizeMode(UIImageView::CENTER);
// ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, dropLighting, DROPDOWN_BLUETOOTH);
- dropLighting->SetViewId(DROPDOWN_CLICK_LIGHTING); // 进入亮屏界面
+ dropLighting->SetViewId(DROPDOWN_CLICK_BLUETOOTH); // 进入亮屏界面
dropLighting->SetTouchable(true);
dropLighting->SetOnClickListener(clickListener);
/* ----------------------------------- 勿扰模式 ----------------------------------- */
}
/* -------------------------------------------------------------------------- */
}
+#endif
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-01 09:48:06
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelHeartRate.cpp
+ */
/*
* Copyright (c) CompanyNameMagicTag 2023. All rights reserved.
* Description: DialModelHeartRate
void DialModelHeartRate::UpdateHeartRate(int16_t heartRate)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHeartRate = %d", heartRate);
+ // 筛选表盘心率数据
+ if (heartRate == 0)
+ return;
heartRate_ = static_cast<float>(heartRate);
if (onChangeListener_ != nullptr)
{
#define MESSAGE_JSON_FILE "user/userdata/message/ancs.json"
#define PRINTFDATA 1
-extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds);
+extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year);
namespace OHOS
{
MessageData message_;
uint32 timestamp = cJSON_GetObjectItem(item, "time")->valueint;
messagedata.timestamp = timestamp;
char labelTime[20];
- if (uapi_get_TIME_STR(timestamp, labelTime, '.', false) != ERRCODE_SUCC)
+ if (uapi_get_TIME_STR(timestamp, labelTime, '.', false, false) != ERRCODE_SUCC)
{
messagedata.labelTime = std::string("2024.1.1 00:00");
}
label1_phone_name = new UILabel();\r
}\r
label1_phone_name->SetPosition(173, 53); // widget's left position and top position\r
- label1_phone_name->Resize(120, 35); // widget's width and height\r
+ label1_phone_name->Resize(120, 55); // widget's width and height\r
label1_phone_name->SetViewId("label1");// Set style\r
label1_phone_name->SetStyle(STYLE_TEXT_FONT, 50);\r
\r
{\r
if(strcmp("container_one_page",idstr)==0)\r
{\r
- // container_->SetVisible(true);\r
- // container_one_page->SetVisible(false);\r
+ container_->SetVisible(true);\r
+ container_one_page->SetVisible(false);\r
return;\r
\r
}\r
UIScrollView *testLCDInitIView(void);
void ClearAll(void);
- void set_LCD_color();
+ void set_LCD_color(int);
+ void LCDHideNextButton(void);
private:
bool testLCDScrollViewcrollViewinit(void);
UIScrollView *testLCDScrollView{nullptr};
--- /dev/null
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-06-07 11:18:25
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-07-02 18:04:42
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testLCDC.h
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ */
+#ifndef TEST_LCD_H
+#define TEST_LCD_H
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+ void factorytest_set_LCD_color(int color);
+ void factorytest_hide_test_lcd_button(void);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
--- /dev/null
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-06-07 11:18:25
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-07-02 18:04:51
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testPresenterC.h
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ */
+#ifndef TEST_PRESENTER_H
+#define TEST_PRESENTER_H
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+ void factorytest_enter_test_tp_view(void);
+ void factorytest_enter_test_lcd_view(void);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
UIScrollView *testTPInitIView(void);
void ClearAll(void);
+ void TPHideNextButton(void);
private:
UIButton *SetTheButton_ext(ButtonConfig_ext_t &buttonconfig, UIView::OnTouchListener *clickListener);
bool testTPScrollViewcrollViewinit(void);
--- /dev/null
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-06-07 11:18:25
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-07-02 18:05:11
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testTPC.h
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ */
+#ifndef TEST_TP_H
+#define TEST_TP_H
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+
+ void factorytest_hide_test_tp_button(void);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
testLCDScrollView=nullptr;
}
}
-
- void colorTimerCallBack(int data)
+ uint8_t LCD_TEST_FALG=0;
+ void colorTimerCallBack(int data)
{
testLCDView* t= testLCDView::GetInstance();
if(t!=NULL)
- t->set_LCD_color();
+ t->set_LCD_color(LCD_TEST_FALG);
+ LCD_TEST_FALG++;
}
- uint8_t LCD_TEST_FALG=0;
- void testLCDView :: set_LCD_color(void)
+
+ void testLCDView :: set_LCD_color(int color)
{
- switch (LCD_TEST_FALG)
+ switch (color)
{
case 0:
testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
case 2:
testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Yellow().full);
break;
+ case 3:
+ testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Red().full);
+ break;
+ case 4:
+ testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::White().full);
+ break;
+ case 5:
+ testLCDScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+ break;
default:
break;
}
RootView::GetInstance()->Invalidate();
- LCD_TEST_FALG++;
+ //LCD_TEST_FALG++;
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::draglistener can not be nullptr!");
return false;
}
- testLCDScrollView->SetOnDragListener(draglistener);
+ testLCDScrollView->SetOnDragListener(draglistener);
testLCDScrollView->SetTouchable(true);
testLCDScrollView->SetDraggable(true);
}
return testLCDScrollView;
}
+
+ void testLCDView::LCDHideNextButton(void)
+ {
+ labelButton_next->SetVisible(false);
+ testLCDScrollView->Remove(Title);
+ }
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+#endif /* __cplusplus */
+
+ void factorytest_set_LCD_color(int color)
+ {
+ testLCDView* t= testLCDView::GetInstance();
+
+ if(t!=NULL)
+ t->set_LCD_color(color);
+ }
+
+ void factorytest_hide_test_lcd_button(void)
+ {
+ testLCDView::GetInstance()->LCDHideNextButton();
+ osTimerStop(MG_TEST_timer);
+ }
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __cplusplus */
}
\ No newline at end of file
//language *g_planguage = new language;\r
/* -------------------------------------------------------------------------- */\r
// 用来监听语言切换\r
- \r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+extern "C"\r
+{\r
+#endif /* __cplusplus */\r
+#endif /* __cplusplus */\r
+\r
+ void factorytest_enter_test_tp_view(void)\r
+ {\r
+ testView::GetInstance()->ChangeView(TESTVIEW,TP);\r
+ }\r
+\r
+ void factorytest_enter_test_lcd_view(void)\r
+ {\r
+ testView::GetInstance()->ChangeView(TESTVIEW,LCD);\r
+ }\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+#endif /* __cplusplus */\r
}
\ No newline at end of file
}
return testTPScrollView;
}
+
+ void testTPView::TPHideNextButton(void)
+ {
+ labelButton_next->SetVisible(false);
+ testTPScrollView->Remove(Title);
+ }
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+#endif /* __cplusplus */
+
+ void factorytest_hide_test_tp_button(void)
+ {
+ testTPView::GetInstance()->TPHideNextButton();
+ }
+
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __cplusplus */
}
\ No newline at end of file
char buf[128]={0};
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "rssi %d",rssi);
- sprintf_s(buf,128,"addr:%02X%02X%02X%02X%02X%02X\nRssi:%d",name,addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],rssi);
+ sprintf_s(buf,128,"addr:%02X %02X %02X %02X %02X %02X\nRssi:%d",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5],rssi);
label_BR_SCAN[i]->SetText(buf);
RootView::GetInstance()->Invalidate();
{
Time = 5;
START_FLAG = false;
- HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测
}
/* -------------------------------------------------------------------------- */
/*定时器到期时的处理*/
RespiratoryTrainingModel::GetInstance().RT_StopTimer(); // 停止定时器
RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes(); // 呼吸训练次数加1
p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop(); // 关闭呼吸动画
- HeartModel::GetInstance()->Heart_Control(HeartState::End); // 关闭心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::INITIATIVE); // 关闭心率检测
p_RespiratoryTrainingView->ChangeView(RESPIRATORYTRAINING, RESPIRATORYTRAININGCOMPLETED);
}
else
Time = ONE_MINUTE;
p_RespiratoryTrainingView->StartRespiratoryTraining(); // 开始呼吸训练
START_FLAG = true;
- HeartModel::GetInstance()->Heart_Control(HeartState::Start); // 开启心率检测
+ HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::INITIATIVE); // 开启心率检测
}
}
}
return ERRCODE_SUCC;
}
- static uint32_t rtc_restore_factory_settings(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
- {
- UNUSED(para);
- UNUSED(paraLen);
- UNUSED(strCommonCmd);
-
- // 执行恢复出厂设置的操作
- uapi_restore_factory_setting();
- PRINT("Restoring Factory Settings...\n");
- return ERRCODE_SUCC;
- }
static const at_cmd_table_t g_rtc_cmd[] = {
{(char *)"AT^RTCTEST", rtc_do_test, (char *)"enable"},
- {(char *)"AT^RESTORE", rtc_restore_factory_settings, NULL},
};
at_cmd_table_t *get_rtc_cmd_table(uint32_t *cmd_count)
void ScreenModels::PreLoadAppimages(void)
{
LoadAppMultiImages(PLAYER_IAMGES, PLAYER_BACKGROUND, PLAYER_PLAYING);
- LoadAppMultiImages(CLOCK_IAMGES, CLOCK_CLOCK0, CLOCK_SECOND);
+ //LoadAppMultiImages(CLOCK_IAMGES, CLOCK_CLOCK0, CLOCK_SECOND);
LoadAppMultiImages(COMPASS_IAMGES, COMPASS_COMPASS0, COMPASS_COMPASS2);
LoadAppMultiImages(DROPDOWN_IAMGES, DROPDOWN_BLUETOOTHCONNECTED, DROPDOWN_SETTING);
LoadAppMultiImages(HEART_IAMGES, HEART_HEARTRATECOOR, HEART_HEARTRATE_TOP);
/* 注册表盘map */
void SetDialModel::RegisterDial(uint16_t ID, const char *dialname)
{
+ if(ID==0 || strlen(dialname)==0)
+ return;
registeredDials[ID] = std::string(dialname); // 唯一性
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RegisterDial %s is ok!", dialname);
-
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RegisterDial %d %s is ok!",ID, dialname);
+
LoadAllDial();
saveDialfile();
/* 获取当前表盘Id */
uint16_t SetDialModel::GetCurrentDialID()
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentDialID is %d,name is %s", currentDialID, registeredDials[currentDialID].c_str());
+ if (registeredDials.find(currentDialID) != registeredDials.end())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentDialID is %d,name is %s", currentDialID, registeredDials[currentDialID].c_str());
+ }
return currentDialID;
}
/* 获取所有表盘Id 每个表盘Id 2个字节 拼接为字符串 */
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UninstallDial the dial %d is ok", ID);
registeredDials.erase(ID);
+ LoadAllDial();
+
return true;
}
/*更新表盘*/
void SetDialModel::UpdateDialSetting(uint16_t ID)
{
- std::string dialname = registeredDials[ID]; // 根据ID找到对应的表盘名称
- // 在dialInfoList中查找同名表盘
- for (size_t i = 0; i < dialInfoList.size(); i++)
+ if (registeredDials.find(ID) != registeredDials.end())
{
- if (dialInfoList[i].dialName == dialname)
+ std::string dialname = registeredDials[ID]; // 根据ID找到对应的表盘名称
+ // 在dialInfoList中查找同名表盘
+ for (size_t i = 0; i < dialInfoList.size(); i++)
{
- DialSetting diagSetting;
- SetDialInfo &info = dialInfoList[i];
- diagSetting.dialFlag = info.dialFlag;
- diagSetting.dialId = info.id;
- diagSetting.dialFullName = info.dialFullName;
- MainModel::GetInstance().AddDialSetting(diagSetting); // 更新表盘设置
- currentDialID = ID; // 更新当前表盘Id
- NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
- return; // 更新成功后直接返回
+ if (dialInfoList[i].dialName == dialname)
+ {
+ DialSetting diagSetting;
+ SetDialInfo &info = dialInfoList[i];
+ diagSetting.dialFlag = info.dialFlag;
+ diagSetting.dialId = info.id;
+ diagSetting.dialFullName = info.dialFullName;
+ MainModel::GetInstance().AddDialSetting(diagSetting); // 更新表盘设置
+ currentDialID = ID; // 更新当前表盘Id
+ NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
+ return; // 更新成功后直接返回
+ }
}
+ NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetDialModel UpdateDialSetting: Cannot find dial with name %s", dialname.c_str());
}
- NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetDialModel UpdateDialSetting: Cannot find dial with name %s", dialname.c_str());
}
/*加载所有表盘*/
* @LastEditors: penglei 1624952103@qq.com
* @LastEditTime: 2024-06-28 15:51:01
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepModel.h
- * @Description:
- *
- * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
*/
/***
* @Date: 2024-06-25 10:34:10
#include <cstdint>
#include <map>
-//#include "AppViewIDs.h"
-//#include "UiConfig.h"
-//#include "sleep/include/SleepView.h"
-//#include "sleep/include/SleepControlPresenter.h"
+// #include "AppViewIDs.h"
+// #include "UiConfig.h"
+// #include "sleep/include/SleepView.h"
+// #include "sleep/include/SleepControlPresenter.h"
#include "string"
-
#define SLEEP_PATH "user/userdata/sleep/%s/sleep_%d.bin"
#define SLEEP_DIR_PATH "user/userdata/sleep/%s"
-
namespace OHOS
{
- #pragma pack(1)
+#pragma pack(1)
typedef struct
{
- uint32_t fall_asleep_timestamp; //入睡
- uint32_t wake_up_timestamp; //出睡
- uint16_t total_time; //总时长
+ uint32_t fall_asleep_timestamp; // 入睡
+ uint32_t wake_up_timestamp; // 出睡
+ uint16_t total_time; // 总时长
} NAP_T;
typedef struct
{
uint32_t timestamp; //
- uint8_t stat; //状态
-
+ uint8_t stat; // 状态
+
} SLEEP_STATE_T;
typedef struct
{
SLEEP_STATE_T sleep_status[20];
uint8_t status_num;
- uint32_t fall_asleep_timestamp; //入睡
- uint32_t wake_up_timestamp; //出睡
- uint16_t total_time; //总时长
- uint16_t total_deep_sleep_time;//深睡
- uint16_t total_mild_sleep_time;//浅睡
- uint16_t total_rem_sleep_time;//清醒
- uint16_t total_wake_time;//动眼
+ uint32_t fall_asleep_timestamp; // 入睡
+ uint32_t wake_up_timestamp; // 出睡
+ uint16_t total_time; // 总时长
+ uint16_t total_deep_sleep_time; // 深睡
+ uint16_t total_mild_sleep_time; // 浅睡
+ uint16_t total_rem_sleep_time; // 清醒
+ uint16_t total_wake_time; // 动眼
} SLEEP_T;
-
- #pragma pack()
- bool save_nap_data(NAP_T *data);
+#pragma pack()
- uint32_t read_sleep_nap_data(char *data,uint32_t size,FILE *fp);
-
+ bool save_nap_data(NAP_T *data);
+ uint32_t read_sleep_nap_data(char *data, uint32_t size, FILE *fp);
void set_nap_data(NAP_T *data);
-
void set_sleep_data(SLEEP_T *data);
-
bool save_sleep_data(SLEEP_T *data);
+ // 睡眠状态
+ enum class SLEEPSTATE
+ {
+ NOSLEEP = 0,
+ SLEEPNOTIFY,
+ SLEPP,
+ WALK,
+ };
+
class SleepModel
{
public:
static SleepModel &GetInstance(void);
- void GetSleepTime(); // 获取睡眠时间
- std::string GetSleepStr(); // 解析睡眠时间
- void GetRestTime(); // 获取入睡时间
- std::string GetRestStr(); // 解析入睡时间
- void GetWalkTime(); // 获取醒来时间
- std::string GetWalkStr(); // 解析醒来时间
- void GetGoalTime(); // 获取目标休息时间(xx-xx)
- std::string GetGoalStr(); // 解析目标休息时间
+ void update_time_info(uint32_t timestamp, std::string &timeStr);
+ void update_sleep(SLEEP_T *data);
+ void set_sleep_goal();
+
+ int get_sleep_hour();
+ int get_sleep_min();
+ int get_sleep_goal();
+ int get_sleep_total();
+
+ std::string get_rest_str(); // 解析入睡时间
+ std::string get_walk_str(); // 解析醒来时间
+ std::string get_goal_str(); // 解析目标休息时间
+ std::string get_notifiy(); // 获取提醒时间
+ std::string get_sleep_notifiy(); // 获取睡眠时间
+ std::string get_walk_notifiy(); // 获取起床时间
+
+ void set_sleep_state(SLEEPSTATE state);
+ SLEEPSTATE get_sleep_state();
private:
SleepModel();
SleepModel &operator=(const SleepModel &);
virtual ~SleepModel();
- std::string sleepStr;
- std::string restStr;
- std::string walkStr;
- std::string goalsleepStr;
- std::string goalwalkStr;
+ std::string sleepStr{"--"};
+ std::string walkStr{"--"};
+ std::string goalStr{"--"};
+
+ std::string goalnotifyStr{"--"};
+ std::string goalsleepStr{"--"};
+ std::string goalwalkStr{"--"};
+
+ uint8_t sleep_total_time = 0;
+ uint8_t goal_total_time = 0;
+
+ SLEEPSTATE sleepstate_ = SLEEPSTATE::NOSLEEP;
};
}
+/***
+ * @Date: 2024-06-25 14:50:26
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-01 15:10:12
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepTimeView.h
+ */
/***
* @Date: 2024-06-25 14:50:26
* @LastEditors: Caisking 3449750381@qq.com
UILabelExt *sleeptitle{nullptr}; // 入睡时间标题
UILabelExt *walktitle{nullptr}; // 醒来标题
UILabelExt *apptitle{nullptr}; // 详情
- UILabelExt *rest{nullptr}; // 作息时间
+ UILabelExt *goal{nullptr}; // 作息时间
UILabelExt *sleep{nullptr}; // 入睡时间
UILabelExt *walk{nullptr}; // 醒来时间
UIImageView *transverseline_1{nullptr}; // 横线1
/*
* @Author: penglei 1624952103@qq.com
- * @Date: 2024-06-26 19:36:48
+ * @Date: SLEPPNOTIFY24-06-26 19:36:48
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-06-28 16:52:58
+ * @LastEditTime: SLEPPNOTIFY24-06-28 16:52:58
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp
- * @Description:
- *
- * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ * @Description:
+ *
+ * Copyright (c) SLEPPNOTIFY24 by ${git_name_email}, All Rights Reserved.
*/
#include "sleep/include/SleepModel.h"
#include "sleep/include/SleepControlPresenter.h"
#include "custom_utils.h"
#include <sys/stat.h>
-
-
+#include "UiConfig.h"
+#include "ui_resource_image.h"
+#include "samgr_lite.h"
+#include <vector>
+#include <sstream>
+#include <iomanip>
+#include <fstream>
+#include <iostream>
+#include <string>
+#include "wearable_log.h"
+#include "ConfigModel.h"
+
+extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year);
+extern "C" int get_sleep_time_from_config_model(void);
+extern "C" int get_wake_up_time_from_config_model();
namespace OHOS
{
- static NAP_T nap_data = {0};
- static SLEEP_T sleep_data = {0};
- static SLEEP_STATE_T sleep_status = {0};
+#define SLEPPNOTIFY 20
+
+ static NAP_T nap_data = {0};
+ static SLEEP_T sleep_data = {0};
+ static SLEEP_STATE_T sleep_status = {0};
+
bool save_nap_data(NAP_T *data)
{
struct stat info;
- char dir_path[64]={0};
- char file_path[64]={0};
- char day[12]={0};
- uapi_get_YYMMDD_Time(day,'\0');
+ char dir_path[64] = {0};
+ char file_path[64] = {0};
+ char day[12] = {0};
+ uapi_get_YYMMDD_Time(day, '\0');
- sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+ sprintf_s(dir_path, 64, SLEEP_DIR_PATH, day);
if (stat("user/userdata/sleep", &info) != 0)
{
if (mkdir("user/userdata/sleep", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
if (mkdir(dir_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s",dir_path);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s", dir_path);
return false; // Failed to create folder
}
}
uint32_t creationTime;
- int ret =uapi_get_timestampe_ss(&creationTime);
+ int ret = uapi_get_timestampe_ss(&creationTime);
- sprintf_s(file_path,64,SLEEP_PATH,day,creationTime);
+ sprintf_s(file_path, 64, SLEEP_PATH, day, creationTime);
FILE *fp;
- fp=fopen(file_path,"wb+");
- if(fp==NULL)
+ fp = fopen(file_path, "wb+");
+ if (fp == NULL)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data fopen fail");
return false;
}
- uint8_t sleep_type=0;
- fwrite(&sleep_type,1,1,fp);
+ uint8_t sleep_type = 0;
+ fwrite(&sleep_type, 1, 1, fp);
uint32_t fall_asleep_timestamp = data->fall_asleep_timestamp;
- fwrite(&fall_asleep_timestamp,1,4,fp);
+ fwrite(&fall_asleep_timestamp, 1, 4, fp);
uint32_t wake_up_timestamp = data->wake_up_timestamp;
- fwrite(&wake_up_timestamp,1,4,fp);
-
- uint16_t total_time=data->total_time;
- fwrite(&total_time,1,2,fp);
+ fwrite(&wake_up_timestamp, 1, 4, fp);
+ uint16_t total_time = data->total_time;
+ fwrite(&total_time, 1, 2, fp);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data succ");
fclose(fp);
return true;
-
}
void set_nap_data(NAP_T *data)
- {
- memset(&nap_data,0,sizeof(NAP_T));
- memcpy_s(&nap_data,sizeof(NAP_T),data,sizeof(NAP_T));
+ {
+ memset(&nap_data, 0, sizeof(NAP_T));
+ memcpy_s(&nap_data, sizeof(NAP_T), data, sizeof(NAP_T));
save_nap_data(&nap_data);
}
- uint32_t read_sleep_nap_data(char *data,uint32_t size,FILE *fp)
+ uint32_t read_sleep_nap_data(char *data, uint32_t size, FILE *fp)
{
- return fread(data,1,size,fp);
+ return fread(data, 1, size, fp);
}
-
+
bool save_sleep_data(SLEEP_T *data)
{
struct stat info;
- char dir_path[64]={0};
- char file_path[64]={0};
- char day[12]={0};
- uapi_get_YYMMDD_Time(day,'\0');
+ char dir_path[64] = {0};
+ char file_path[64] = {0};
+ char day[12] = {0};
+ uapi_get_YYMMDD_Time(day, '\0');
- sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+ sprintf_s(dir_path, 64, SLEEP_DIR_PATH, day);
if (stat("user/userdata/sleep", &info) != 0)
{
if (mkdir("user/userdata/sleep", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
if (mkdir(dir_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s",dir_path);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mkdir fail %s", dir_path);
return false; // Failed to create folder
}
}
-
+
uint32_t creationTime;
- int ret =uapi_get_timestampe_ss(&creationTime);
+ int ret = uapi_get_timestampe_ss(&creationTime);
- sprintf_s(file_path,64,SLEEP_PATH,day,creationTime);
+ sprintf_s(file_path, 64, SLEEP_PATH, day, creationTime);
FILE *fp;
- fp=fopen(file_path,"wb+");
- if(fp==NULL)
+ fp = fopen(file_path, "wb+");
+ if (fp == NULL)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "save_nap_sleep_data fopen fail");
return false;
}
uint8_t sleep_type = 1;
- fwrite(&sleep_type,1,1,fp);
+ fwrite(&sleep_type, 1, 1, fp);
uint32_t fall_asleep_timestamp = data->fall_asleep_timestamp;
- fwrite(&fall_asleep_timestamp,1,4,fp);
+ fwrite(&fall_asleep_timestamp, 1, 4, fp);
uint32_t wake_up_timestamp = data->wake_up_timestamp;
- fwrite(&wake_up_timestamp,1,4,fp);
+ fwrite(&wake_up_timestamp, 1, 4, fp);
- uint16_t total_time=data->total_time;
- fwrite(&total_time,1,2,fp);
+ uint16_t total_time = data->total_time;
+ fwrite(&total_time, 1, 2, fp);
- uint16_t total_deep_sleep_time=data->total_deep_sleep_time;
- fwrite(&total_deep_sleep_time,1,2,fp);
+ uint16_t total_deep_sleep_time = data->total_deep_sleep_time;
+ fwrite(&total_deep_sleep_time, 1, 2, fp);
- uint16_t total_mild_sleep_time=data->total_mild_sleep_time;
- fwrite(&total_mild_sleep_time,1,2,fp);
+ uint16_t total_mild_sleep_time = data->total_mild_sleep_time;
+ fwrite(&total_mild_sleep_time, 1, 2, fp);
- uint16_t total_rem_sleep_time=data->total_rem_sleep_time;
- fwrite(&total_rem_sleep_time,1,2,fp);
+ uint16_t total_rem_sleep_time = data->total_rem_sleep_time;
+ fwrite(&total_rem_sleep_time, 1, 2, fp);
- uint16_t total_wake_time=data->total_wake_time;
- fwrite(&total_wake_time,1,2,fp);
+ uint16_t total_wake_time = data->total_wake_time;
+ fwrite(&total_wake_time, 1, 2, fp);
- fwrite(data->sleep_status,sizeof(SLEEP_STATE_T),data->status_num,fp);
+ fwrite(data->sleep_status, sizeof(SLEEP_STATE_T), data->status_num, fp);
fclose(fp);
return true;
}
void set_sleep_data(SLEEP_T *data)
- {
- memset(&sleep_data,0,sizeof(SLEEP_T));
- memcpy_s(&sleep_data,sizeof(SLEEP_T),data,sizeof(SLEEP_T));
+ {
+ memset(&sleep_data, 0, sizeof(SLEEP_T));
+ memcpy_s(&sleep_data, sizeof(SLEEP_T), data, sizeof(SLEEP_T));
save_sleep_data(&sleep_data);
+ // 刷新model里面的数据
+ SleepModel::GetInstance().update_sleep(&sleep_data);
+ }
+ SleepModel::SleepModel()
+ {
+ set_sleep_goal();
}
-
- SleepModel::SleepModel() {}
SleepModel::~SleepModel() {}
SleepModel &SleepModel::GetInstance()
{
static SleepModel instance;
return instance;
}
+
+ void SleepModel::update_sleep(SLEEP_T *data)
+ {
+ if (data == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid input data");
+ return;
+ }
+
+ // 打印数据
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fall_asleep_timestamp:%d wake_up_timestamp:%d total_time:%d",
+ data->fall_asleep_timestamp, data->wake_up_timestamp, data->total_time);
+
+ update_time_info(data->fall_asleep_timestamp, sleepStr);
+ update_time_info(data->wake_up_timestamp, walkStr);
+
+ // 更新睡眠总时间
+ sleep_total_time = data->total_time;
+
+ // 更新一下配置
+ set_sleep_goal();
+ }
+
+ void SleepModel::update_time_info(uint32_t timestamp, std::string &timeStr)
+ {
+ char labelTime[20];
+ if (uapi_get_TIME_STR(timestamp, labelTime, '.', false, false) == ERRCODE_SUCC)
+ {
+ timeStr = std::string(labelTime);
+ }
+ else
+ {
+ timeStr = "--";
+ }
+ }
+
+ /*
+ 设置睡眠目标
+ 前2个字节是显示睡眠小时
+ 后2个字节显示睡眠分钟
+ 需要单独解析出来。
+ */
+ void SleepModel::set_sleep_goal()
+ {
+ // 将原3个字符串清空
+ goalnotifyStr.clear();
+ goalsleepStr.clear();
+ goalwalkStr.clear();
+
+ int goal_sleep = get_sleep_time_from_config_model();
+ int goal_walk = get_wake_up_time_from_config_model();
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "goal_sleep:%d goal_walk:%d", goal_sleep, goal_walk);
+ /* -------------------------------------------------------------------------- */
+ // 提取小时部分(前2字节)
+ int goal_sleep_hour = goal_sleep >> 16;
+ // 提取分钟部分(后2字节)
+ int goal_sleep_min = goal_sleep & 0x00FF;
+ std::ostringstream sleeposs;
+ sleeposs << std::setfill('0') << std::setw(2) << goal_sleep_hour << ":" << std::setw(2) << goal_sleep_min;
+ // 睡眠时间点字符串
+ goalsleepStr = sleeposs.str();
+
+ /* -------------------------------------------------------------------------- */
+ // 需要配置提醒字符串 减去SLEPPNOTIFY分钟的计算
+ int notify_min = (goal_sleep_min >= SLEPPNOTIFY) ? goal_sleep_min - SLEPPNOTIFY : ((goal_sleep_min + 60) - SLEPPNOTIFY); // 避免分钟数为负
+ int notify_hour = goal_sleep_hour;
+ if (goal_sleep_min < SLEPPNOTIFY)
+ { // 如果需要借位
+ notify_hour -= 1; // 小时减1
+ }
+ // 确保小时数正确
+ notify_hour = (notify_hour < 0) ? 23 : notify_hour; // 处理从0点前SLEPPNOTIFY分钟的情况,变为前一天的23点40分
+ // 格式化提醒时间字符串
+ std::ostringstream notifyoss;
+ notifyoss << std::setfill('0') << std::setw(2) << notify_hour << ":" << std::setw(2) << notify_min;
+ // 设置提醒字符串
+ goalnotifyStr = notifyoss.str();
+ /* -------------------------------------------------------------------------- */
+
+ int goal_walk_hour = goal_walk >> 16;
+ int goal_walk_min = goal_walk & 0x00FF;
+ std::ostringstream walkoss;
+ walkoss << std::setfill('0') << std::setw(2) << goal_walk_hour << ":" << std::setw(2) << goal_walk_min;
+ // 起床时间点字符串
+ goalwalkStr = walkoss.str();
+ /* -------------------------------------------------------------------------- */
+
+ // 睡眠字符串 以及总时长
+ goalStr = goalsleepStr + "-" + goalwalkStr;
+ goal_total_time = goal_walk_hour * 60 + goal_walk_min;
+ }
+ // 获取睡眠总时长(小时)
+ int SleepModel::get_sleep_hour()
+ {
+ return sleep_total_time / 60;
+ }
+ // 获取睡眠总时长(分钟)
+ int SleepModel::get_sleep_min()
+ {
+ return sleep_total_time % 60;
+ }
+ // 获取睡眠总时长(目标)
+ int SleepModel::get_sleep_goal()
+ {
+ return goal_total_time;
+ }
+ // 获取睡眠总时长(实际)
+ int SleepModel::get_sleep_total()
+ {
+ return sleep_total_time;
+ }
+ // 获取实际入睡时间str
+ std::string SleepModel::get_rest_str()
+ {
+ return sleepStr;
+ }
+ // 获取实际醒来时间str
+ std::string SleepModel::get_walk_str()
+ {
+ return walkStr;
+ }
+ // 获取目标休息时间str
+ std::string SleepModel::get_goal_str()
+ {
+ return goalStr;
+ }
+ // 获取 目标睡眠提醒 时间点str
+ std::string SleepModel::get_notifiy()
+ {
+ return goalnotifyStr;
+ }
+ // 获取 目标睡眠 时间点str
+ std::string SleepModel::get_sleep_notifiy()
+ {
+ return goalsleepStr;
+ }
+
+ // 获取 目标起床 时间点str
+ std::string SleepModel::get_walk_notifiy()
+ {
+ return goalwalkStr;
+ }
+ // 设置睡眠状态
+ void SleepModel::set_sleep_state(SLEEPSTATE state)
+ {
+ sleepstate_ = state;
+ }
+ // 获取睡眠状态
+ SLEEPSTATE SleepModel::get_sleep_state()
+ {
+ return sleepstate_;
+ }
}
\ No newline at end of file
void SleepTimeView::SleepDataRefresh()
{
-#if 0
- rest->SetText();
- sleep->SetText();
- walk->SetText();
-#endif
+ sleep->SetText((SleepModel::GetInstance().get_rest_str()).c_str());
+ walk->SetText((SleepModel::GetInstance().get_walk_str()).c_str());
+ goal->SetText((SleepModel::GetInstance().get_goal_str()).c_str());
}
void SleepTimeView::ClearAll()
delete apptitle;
apptitle = nullptr;
}
- if (rest != nullptr)
+ if (goal != nullptr)
{
- delete rest;
- rest = nullptr;
+ delete goal;
+ goal = nullptr;
}
if (sleep != nullptr)
apptitle->SetTextColor(Color::Gray());
/* ------------------------------- 数据label初始化 ------------------------------- */
restStr = "--";
- InitLabelAdapt(rest, 211, 95, 230, 47, "restlabel", restStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30);
- rest->SetTextColor(Color::Gray());
+ InitLabelAdapt(goal, 117, 95, 300, 50, "restlabel", restStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 40);
+ // goal->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+ goal->SetTextColor(Color::Gray());
sleepStr = "--";
InitLabelAdapt(sleep, 99, 238, 230, 47, "sleeplabel", sleepStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30);
sleep->SetTextColor(Color::Purple());
Add(sleeptitle);
Add(walktitle);
Add(apptitle);
- Add(rest);
+ Add(goal);
Add(sleep);
Add(walk);
Add(transverseline_1);
}
SetDraggable(true);
SetTouchable(true);
+ SleepDataRefresh();
return true;
}
g_pSleepView = nullptr;
}
+ // 刷新UI数据
void SleepView::SleepDataRefresh()
{
-#if 0
- time_minute->SetText(SleepModel::GetInstance().getstepnew());
- time_hour->SetText(SleepModel::GetInstance().getstepSleep());
- circleProgress_->SetValue(SleepModel::GetInstance().getstepvalue());
-#endif
- Invalidate();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Updata SleppTime!");
- RootView::GetInstance()->Invalidate();
+ int sleep_hour = SleepModel::GetInstance().get_sleep_hour();
+ int sleep_min = SleepModel::GetInstance().get_sleep_min();
+ // 有数据则刷新
+ if (sleep_hour != 0 || sleep_min != 0)
+ {
+ time_hour->SetText(std::to_string(sleep_hour).c_str());
+ time_minute->SetText(std::to_string(sleep_min).c_str());
+
+ int value = (float(SleepModel::GetInstance().get_sleep_total()) / float(SleepModel::GetInstance().get_sleep_goal())) * 100;
+ circleProgress_->SetValue(value);
+ Invalidate();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Updata SleppTime!");
+ RootView::GetInstance()->Invalidate();
+ }
}
void SleepView::ClearAll()
circleProgress_->SetRadius(205);
circleProgress_->SetStartAngle(320);
circleProgress_->SetEndAngle(40);
- circleProgress_->SetValue(50);
+ circleProgress_->SetValue(0);
circleProgress_->SetBackgroundImagePosition(36, 26);
/* -------------------------------- 将组件添加到根视图 ------------------------------- */
Add(progress_image);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepView::InitPage fail");
return false;
}
+ SleepDataRefresh(); // 刷新数据
SetDraggable(true);
SetTouchable(true);
return true;
--- /dev/null
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-06-07 11:18:25
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-07-02 11:07:00
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenterC.h
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ */
+#ifndef SYSTEM_PRESENTER_H
+#define SYSTEM_PRESENTER_H
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+ void factorytest_enter_test_view(int cmd);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
// {\r
// isSystemUpgradeState = falg;\r
// }\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+extern "C"\r
+{\r
+#endif /* __cplusplus */\r
+#endif /* __cplusplus */\r
+\r
+ void factorytest_enter_test_view(int cmd)\r
+ {\r
+ if(cmd == 1)\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TEST);\r
+ else\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);\r
+ }\r
+\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+#endif /* __cplusplus */\r
}
\ No newline at end of file
-
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-29 17:46:18
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataPresenter.h
+ */
#ifndef _TraingEnddata_PRESENTER_H
#define _TraingEnddata_PRESENTER_H
class TraingEnddataView;
class TraingEnddataPresenter : public Presenter<TraingEnddataView>,
- public UIView::OnClickListener,
- public UIView::OnDragListener
+ public UIView::OnClickListener,
+ public RootView::OnKeyActListener,
+ public UIView::OnDragListener
{
public:
TraingEnddataPresenter();
// 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
bool OnClick(UIView &view, const ClickEvent &event) override;
bool OnDrag(UIView &view, const DragEvent &event) override;
- //bool OnDragEnd(UIView& view, const DragEvent& event) override;
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+ // bool OnDragEnd(UIView& view, const DragEvent& event) override;
};
} // namespace OHOS
-/***
+/***
* @Date: 2024-04-15 10:55:58
* @LastEditors: Caisking 3449750381@qq.com
* @LastEditTime: 2024-04-17 14:18:05
class TraingNomalPresenter : public Presenter<TraingNomalView>,
public UIView::OnClickListener,
+ public RootView::OnKeyActListener,
public UIView::OnDragListener
{
public:
// 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
bool OnClick(UIView &view, const ClickEvent &event) override;
bool OnDrag(UIView &view, const DragEvent &event) override;
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
// bool OnDragEnd(UIView& view, const DragEvent& event) override;
};
} // namespace OHOS
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-29 17:42:47
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingPresenter.h
+ */
#ifndef _Traing_PRESENTER_H
#define _Traing_PRESENTER_H
class TraingPresenter : public Presenter<TraingView>,
public UIView::OnClickListener,
- public UIView::OnDragListener
+ public UIView::OnDragListener,
+ public RootView::OnKeyActListener
{
public:
TraingPresenter();
bool OnClick(UIView &view, const ClickEvent &event) override;
bool OnDrag(UIView &view, const DragEvent &event) override;
bool OnDragEnd(UIView &view, const DragEvent &event) override;
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
};
} // namespace OHOS
class TraingSetView;
class TraingSetPresenter : public Presenter<TraingSetView>,
public UIView::OnClickListener,
+ public RootView::OnKeyActListener,
public UIView::OnDragListener
{
public:
void OnStop() override;
static TraingSetPresenter *GetInstance();
-
+
const char *GetButtonIdFromCard(int cardID);
int GetTagFromCard(int cardID);
ExerciseTag GetExerciseTagFromCard(int cardID);
bool OnClick(UIView &view, const ClickEvent &event) override;
bool OnDrag(UIView &view, const DragEvent &event) override;
bool OnDragEnd(UIView &view, const DragEvent &event) override;
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
};
} // namespace OHOS
#include "components/ui_label_ext.h"
#include "language/font/ui_resource_string.h"
#include "NativeAbility.h"
+#include "KeyInputListener.h"
+#include "custom_utils.h"
+#include "common/key_code.h"
#include <iostream>
#include <chrono>
}
return true;
}
+ bool TraingEnddataPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+ {
+ unsigned short keyID = event.GetKeyId();
+ unsigned short keyState = event.GetState();
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
+ {
+ // 回退
+ NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
+ }
+ return true;
+ }
}
delete scrollView_;
scrollView_ = nullptr;
}
-
+
delete container_;
container_ = nullptr;
}
PreLoad();
InitData();
RootView::GetInstance()->Add(container_);
+
+ // 增加按键监听
+ RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingEnddataPresenter::GetInstance();
+ RootView::GetInstance()->SetOnKeyActListener(keyactListener);
}
void TraingEnddataView::OnSetUpView()
#include "components/ui_label_ext.h"\r
#include "language/font/ui_resource_string.h"\r
#include "NativeAbility.h"\r
+#include "KeyInputListener.h"\r
+#include "custom_utils.h"\r
+#include "common/key_code.h"\r
+\r
\r
#include <iostream>\r
#include <chrono>\r
}\r
return true;\r
}\r
+ bool TraingNomalPresenter::OnKeyAct(UIView &view, const KeyEvent &event)\r
+ {\r
+ unsigned short keyID = event.GetKeyId();\r
+ unsigned short keyState = event.GetState();\r
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级\r
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)\r
+ {\r
+ // 回退\r
+ NativeAbility::GetInstance().Back();\r
+ }\r
+ return true;\r
+ }\r
}\r
PreLoad();
RootView::GetInstance()->Add(container_);
+
+ // 增加按键监听
+ RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingNomalPresenter::GetInstance();
+ RootView::GetInstance()->SetOnKeyActListener(keyactListener);
}
void TraingNomalView::OnSetUpView()
#include "components/ui_label_ext.h"
#include "language/font/ui_resource_string.h"
#include "NativeAbility.h"
+#include "KeyInputListener.h"
+#include "custom_utils.h"
+#include "common/key_code.h"
#include <iostream>
#include <chrono>
TraingModel::GetInstance()->SetSportType(Exercisetype::FITNESS);
return true;
}
+
+ // 增加按键事件
+ bool TraingPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+ {
+ unsigned short keyID = event.GetKeyId();
+ unsigned short keyState = event.GetState();
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
+ {
+ // 回退
+ NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
+ }
+ return true;
+ }
}
#include "components/ui_label_ext.h"\r
#include "language/font/ui_resource_string.h"\r
#include "NativeAbility.h"\r
+#include "KeyInputListener.h"\r
+#include "custom_utils.h"\r
+#include "common/key_code.h"\r
\r
#include <iostream>\r
#include <chrono>\r
{\r
return true;\r
}\r
-\r
+ // 增加按键事件\r
+ bool TraingSetPresenter::OnKeyAct(UIView &view, const KeyEvent &event)\r
+ {\r
+ int CardID = TraingSetView::GetInstance()->GetCurrentViewId();\r
+ unsigned short keyID = event.GetKeyId();\r
+ unsigned short keyState = event.GetState();\r
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级\r
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)\r
+ {\r
+ // 不在设置页面\r
+ if (CardID != SET_VIEW)\r
+ {\r
+ TraingSetView::GetInstance()->ChangeView(CardID, SET_VIEW);\r
+ }\r
+ else\r
+ {\r
+ NativeAbility::GetInstance().Back();\r
+ }\r
+ }\r
+ return true;\r
+ }\r
bool TraingSetPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
{\r
int CardID = TraingSetView::GetInstance()->GetCurrentViewId();\r
bool TraingView::AddLabel()\r
{\r
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::AddLabel");\r
- // 初始化标签\r
+ // 初始化标签\r
InitLabelExt(title_label, TITLE_LABEL_X, TITLE_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "title_label", STR_RAPID_TRAINING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
\r
InitLabelExt(btn1_label, BTN1_LABEL_X, BTN1_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu1_label", STR_EXERCISE_OUTDOORWALKING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE);\r
return;\r
}\r
container_->SetOnDragListener(draglistener);\r
-\r
container_->SetTouchable(true);\r
container_->SetDraggable(true);\r
\r
\r
RootView::GetInstance()->Add(container_);\r
SetContainerView(container_);\r
+ // 增加按键监听\r
+ RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingPresenter::GetInstance();\r
+ RootView::GetInstance()->SetOnKeyActListener(keyactListener);\r
}\r
\r
void TraingView::OnSetUpView()\r
${ROOT_DIR}/application/wearable/nativeapp/nativeui/heartrate/include
${ROOT_DIR}/application/wearable/fd230app/nativeui/weather/include
${ROOT_DIR}/application/wearable/fd230app/nativeui/heart_blood/health_service
+${ROOT_DIR}/application/wearable/fd230app/nativeui/sleep/include/
${ROOT_DIR}/application/wearable/fd230app/nativeui/phone/include
${ROOT_DIR}/application/wearable/fd230app/nativeui/language/include
${ROOT_DIR}/application/wearable/fd230app/nativeui/language
${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include/common
${ROOT_DIR}/application/wearable/fd230app/nativeui/set_dial/include
-#/home/hcj/FD230/code/sdk/middleware/services/gui/uikit/proprietary/include/common/image_cache_manager.h
+${ROOT_DIR}/application/wearable/fd230app/nativeui/aivoice/include
+
+
)
#include "uiservice/include/ui_service.h"
#include "TraingModel.h"
#include "WeatherModel.h"
+#include "SleepModel.h"
#endif
#include "AlmmgrAlarmClockManage.h"
+#include "AlarmClockTimerConfig.h"
#include "AlarmClockManage.h"
#include "SetDialModel.h"
+#include "AiVoiceModel.h"
#include "SleepModel.h"
//#include "AlarmClockModel.h"
#ifdef __cplusplus
#include <dirent.h>
+void ble_set_ai_Question_str(char *buf)
+{
+ OHOS::AiVoiceModel::GetInstance().SetUserQuestionStr(std::string(buf));
+}
+
+void ble_set_ai_Answer_str(char *buf)
+{
+ OHOS::AiVoiceModel::GetInstance().SetaiAnswerStrStr(std::string(buf));
+}
+
+// {
+// "type":3,
+// "list":[
+// {
+// "uid":3758,
+// "name":"plate_3758.bin",
+// "size":129600
+// },
+// {
+// "uid":3759,
+// "name":"plate_3759.bin",
+// "size":129600
+// }
+// ]
+// }
+// 注:MP3文件目录格式
+// {
+// "type":2,
+// "list": [
+// {
+// "uid":2461, //指定唯一编号,便于APP发送编号删除文件
+// "name":"夜曲.mp3",
+// "size":3894464,
+// "artist":"周杰伦",
+// "dur":223000 //歌曲时长,单位毫秒
+// },
+// {
+// "uid":2465, //指定唯一编号,便于APP发送编号删除文件
+// "name":"告白气球.mp3",
+// "size":3894464,
+// "artist":"周杰伦",
+// "dur":223000 //歌曲时长,单位毫秒
+// }
+// ]
+// }
+// Tag_Trailer_t Mp3Trailer;
+
+// void Tag_GetTrailer( FILE *fp)
+// {
+// // Get Header
+// fseek(fp,-128,SEEK_END);
+// fread(Mp3Trailer.Header,3,1,fp);
+// // Get Title
+// fseek(fp,-125,SEEK_END);
+// fread(Mp3Trailer.Title,30,1,fp);
+// // Get Artist
+// fseek(fp,-95,SEEK_END);
+// fread(Mp3Trailer.Artist,30,1,fp);
+// // Get Album
+// fseek(fp,-65,SEEK_END);
+// fread(Mp3Trailer.Album,30,1,fp);
+// // Get Year
+// fseek(fp,-35,SEEK_END);
+// fread(Mp3Trailer.Year,4,1,fp);
+// // Get Comment
+// fseek(fp,-31,SEEK_END);
+// fread(Mp3Trailer.Comment,30,1,fp);
+// // Get Cenre
+// fseek(fp,-1,SEEK_END);
+// fread(Mp3Trailer.Cenre,1,1,fp);
+// }
+
+
+
+char * dir_to_json_buf_malloc_(uint8_t type)
+{
+ char dir_path[128]={0};
+ type=2;
+ switch (type)
+ {
+ case 2: //
+ sprintf_s(dir_path,64,"%s","user/music");
+ break;
+ case 3: //
+ sprintf_s(dir_path,64,"%s","user/userdata/dial");
+ break;
+ default:
+ break;
+ }
+ cJSON *dataJSON = cJSON_CreateObject();
+ cJSON* data_arryJSON = cJSON_CreateArray();
+
+ struct DIR *dir;
+ struct dirent *ent;
+ uint32_t file_size=0;
+ uint8_t file_index=1;
+ if ((dir = opendir(dir_path)) != NULL)
+ {
+ while ((ent = readdir(dir)) != NULL)
+ {
+ std::string fileName = ent->d_name;
+
+ if (fileName != "." && fileName != "..")
+ {
+ //std::string filePath = directory + fileName;
+
+
+ if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN ) // 普通文件
+ {
+ char file_path[128]={0};
+ sprintf_s(file_path,128,"%s/%s","user/music",ent->d_name);
+
+ FILE * fp = fopen(file_path,"rb+");
+ if(fp==NULL)
+ {
+ printf(" fopen fail %s\r\n",file_path);
+ return NULL;
+ }
+ if (fp != NULL)
+ {
+ fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+ file_size = ftell(fp); // 获取当前文件指针位置,即文件大小
+ fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+ }
+ //Tag_GetTrailer(fp);
+
+ fclose(fp);
+
+ cJSON* itemJSON = cJSON_CreateObject();
+ cJSON_AddNumberToObject(itemJSON,"uid",file_index);
+ cJSON_AddStringToObject(itemJSON,"name",fileName.c_str());
+ cJSON_AddNumberToObject(itemJSON,"size",file_size);
+ cJSON_AddStringToObject(itemJSON,"artist", "未知");
+ cJSON_AddStringToObject(itemJSON,"dur", "未知");
+ cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);
+ file_index++;
+
+ }
+ else if (ent->d_type == DT_DIR) // 目录
+ {
+ continue;
+ }
+ }
+ }
+ closedir(dir);
+ }
+ else
+ {
+ printf("opendir fail\r\n");
+ }
+ cJSON_AddNumberToObject(dataJSON,"type",2);
+
+ cJSON_AddItemToObject(dataJSON,"list",data_arryJSON);
+
+ char *json_format = cJSON_PrintUnformatted(dataJSON);
+
+ int pSize = cJSON_GetArraySize(dataJSON);
+ cJSON_Delete(dataJSON);
+ printf("mp3 :%s\r\n",json_format);
+ return json_format;
+}
+
+
+
+
uint8_t ble_AT_add_nap_data(uint16_t time)
{
OHOS::NAP_T data;
printf("睡前提醒 %d\r\n",data.bedtime_alarm);
p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_REMIND,data.bedtime_alarm);
+
+ //更新睡眠配置
+ OHOS::SleepModel::GetInstance().set_sleep_goal();
+ set_sleep_and_wake_time();
+ get_sleep_time_notify();
}
return;
}
printf("开始时间:%d\r\n",data->bedtime_min);
uint32_t wakettime= p_ConfigModel->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_GET_UP);
- data->waketime_hour=bedtime>>16;
- data->waketime_min=bedtime&0x00ff;
+ data->waketime_hour=wakettime>>16;
+ data->waketime_min=wakettime&0x00ff;
printf("结束时间:%d\r\n",data->waketime_hour);
printf("结束时间:%d\r\n",data->waketime_min);
cJSON_AddNumberToObject(itemJSON,"di",data->di);
cJSON_AddNumberToObject(itemJSON,"hr",data->hr);
cJSON_AddNumberToObject(itemJSON,"stp",data->stp);
+ cJSON_AddNumberToObject(itemJSON,"ti",data->ti);
+ cJSON_AddNumberToObject(itemJSON,"cir",data->cir);
+ cJSON_AddNumberToObject(itemJSON,"alt",data->alt);
+ cJSON_AddNumberToObject(itemJSON,"fpc",data->fpc);
+ cJSON_AddNumberToObject(itemJSON,"spc",data->spc);
+ cJSON_AddNumberToObject(itemJSON,"std",data->std);
+ cJSON_AddNumberToObject(itemJSON,"cdc",data->cdc);
cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);
free(data);
uint8_t ble_AT_add_nap_data(uint16_t time);
+/////////////////////////////AI相关/////////////////////////
+void ble_set_ai_Question_str(char *buf);
+
+void ble_set_ai_Answer_str(char *buf);
+
+/////////////////////////////MP3相关/////////////////////////
+
+typedef struct Tag_Trailer
+{
+char Header[3];
+char Title[30];
+char Artist[30];
+char Album[30];
+char Year[4];
+char Comment[30];
+char Cenre[1];
+}Tag_Trailer_t;
+
+char * dir_to_json_buf_malloc_(uint8_t type);
+
+char * dir_to_json_buf_malloc_(uint8_t type);
+
#ifdef __cplusplus
#if __cplusplus
}
uint8_t flag = 0;\r
// printf("jsonCheck_weather:len: json:%f jsonlen:%d\r\n",0.011,strlen((char *)json));\r
#if 0\r
- FILE *fp=fopen("user/weather.json","wb+");\r
- printf("jsonCheck_weather len %d",strlen((char *)buf)+1);\r
- //fwrite((void*)buf,1,strlen((char *)buf)+1,fp);\r
- fputs((char *)buf,fp);\r
+ FILE *fp=fopen("user/AI.txt","wb+");\r
+ printf("binCheck_AI len %d\r\n",len);\r
+ fwrite((void*)buf,1,len,fp);\r
+ //fputs((char *)buf,fp);\r
fclose(fp);\r
- 1+1+2\r
#endif\r
+\r
uint16_t offset=0;\r
\r
while (len>offset)\r
if(buf[offset]==1)\r
{\r
offset++;\r
- uint16_t txt_len=buf[offset];\r
- offset++;\r
- char buf[128]={0};\r
- memcpy_s(buf,128,buf[offset],txt_len);\r
- printf("%s\r\n",buf);\r
+ uint16_t txt_len;\r
+ memcpy_s(&txt_len,2,&buf[offset],2);\r
+\r
+ offset+=2;\r
+ char txt_buf[128]={0};\r
+ memcpy_s(txt_buf,128,&buf[offset],txt_len);\r
+ printf("binCheck_AI txtbuf:%s %d\r\n",txt_buf,txt_len);\r
+ ble_set_ai_Question_str(txt_buf);\r
offset+=txt_len;\r
offset+=1;\r
}\r
else if(buf[offset]==2)\r
{\r
offset++;\r
- uint16_t txt_len=buf[offset];\r
- offset++;\r
- char buf[128]={0};\r
- memcpy_s(buf,128,buf[offset],txt_len);\r
- printf("%s\r\n",buf);\r
+ uint16_t txt_len=buf[offset]+buf[offset+1]*256;\r
+ offset+=2;\r
+\r
+ char txt_buf[128]={0};\r
+ memcpy_s(txt_buf,128,&buf[offset],txt_len);\r
+ printf("%s %d\r\n",txt_buf,txt_len);\r
+ ble_set_ai_Answer_str(txt_buf);\r
offset+=txt_len;\r
offset+=1;\r
}\r
// printf("GetWeatherCmd:len:%d data:%s\r\n",len,data);\r
if(Check_CRC(data,len,crcvalue))\r
{\r
+ // uint32_t y=(0xff00);\r
+ // uint32_t x =(0xff00& 0Xff00)>>16;\r
+ // printf("GetWeatherCmd %u\r\n",x);\r
uint8_t check = 1;\r
jsonCheck_weather(data,&check);\r
sendBuf[17] = check;\r
}\r
\r
\r
-void GetAiResultCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取天气数据\r
+void GetAiResultCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
memset(sendBuf,0,19);\r
sendBuf[0] = 0x72;\r
sendBuf[1] = 0x02;\r
- sendBuf[2] = 0x20;\r
+ sendBuf[2] = 0x1f;\r
memcpy(sendBuf+3,&tmp,4);\r
memcpy(sendBuf+7,&tmp,4);\r
memcpy(sendBuf+11,&tmp,4);\r
void type2AE4Data(ble_read_data *buffer_handle,uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue)\r
{\r
uint16_t typeID = buf_cmd[1]*256+buf_cmd[2];\r
- #ifdef BLE_LOG\r
+\r
printf("type2AE4Data typeID:0x%04X\r\n",typeID);\r
- #endif\r
switch (typeID) //ID\r
{\r
case USER_INFOR_CMD://app下发的获取用户信息\r
FILE *fp=fopen(file_name,"rb+");\r
\r
printf("GetAiRecordCmd size %d\r\n",file_size);\r
- uint16_t pack=file_size/num+1;\r
- uint8_t pack_id=1;\r
+ uint32_t pack=file_size/num+1;\r
+ uint32_t pack_id=1;\r
if(fp==NULL)\r
{\r
printf("fopen fail %s\r\n",file_name);\r
goto GetAiRecordFail;\r
}\r
+\r
do\r
{\r
memset_s(data,num+1,0,num+1);\r
\r
send_big_data(1,data,read_size,file_size,pack_id,pack,0x34,1);\r
pack_id++;\r
- msleep(50);\r
+ msleep(10);\r
\r
} while (read_size==num);\r
free(data);\r
json_format=struct_to_json_buf_malloc_Alarm();\r
break;\r
case 0x21:\r
- json_format=NULL;\r
+ json_format=dir_to_json_buf_malloc_(day);\r
break;\r
\r
default:\r
case REVOKE_CURR_FILE_TRANS_CMD://撤销文件传输\r
RemoveFileCmd(buffer_handle,cmd,data,datalen,totaldata,crcvalue);\r
break;\r
- case GET_SPECIF_TYPE_FILE_CMD://获取指定类型文件目录 \r
- GetFileTypeCmd(data,datalen); //\r
- break;\r
case DELETE_SPECIF_TYPE_FILE_CMD://删除指定类型的所有文件\r
DeleteFileTypeCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
case GET_PASSWORD_CMD: //获取手表密码\r
GetPasswordCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
- case AI_IS_READ_DATA_CMD:\r
+ case APP_GET_AI_PCM_DATA_CMD:\r
GetAiRecordCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
- case APP_GET_AI_PCM_DATA_CMD://获取手表闹钟//同步闹钟\r
+ case GET_SPECIF_TYPE_FILE_CMD://获取指定类型文件目录 \r
+ case AI_IS_READ_DATA_CMD:\r
case SYN_HEART_HISTORY_DATA_CMD://同步心率历史数据\r
//heartDataCmd(cmd,data,datalen,totaldata,crcvalue);\r
case SYN_SPO2_HISTORY_DATA_CMD://同步血氧历史数据\r
buf = (char *)ym_malloc(sizeof(char)*num+1);\r
if(buf==NULL)return false;\r
\r
- uint16_t pack=1;\r
+ uint32_t pack=1;\r
if(file_size%num==0)\r
pack=data_len/num;\r
else\r
pack=data_len/num+1;\r
- uint8_t pack_id=1;\r
+ uint32_t pack_id=1;\r
uint32_t read_size=0;\r
do\r
{\r
\r
printf("Read_tar_file_buf_send_Data size %d\r\n",file_size);\r
\r
- uint16_t pack=file_size/pack_size+1;\r
- uint8_t pack_id=1;\r
+ uint32_t pack=file_size/pack_size+1;\r
+ uint32_t pack_id=1;\r
if(fp==NULL)\r
{\r
printf("fopen fail %s\r\n",file_name);\r
#include "build_version.h"\r
#include "custom_runtime.h"\r
#include "custom_utils.h"\r
-\r
+#include "bletest.h"\r
\r
\r
// extern void bts_data_to_uuid_len2(uint16_t uuid_data, bt_uuid_t *out_uuid);\r
uint16_t data2ae3Cmd = 0;//2ae3短指令特征值\r
uint16_t data2ae4Cmd = 0;\r
uint16_t data2ae5Cmd = 0;\r
+uint16_t data2ae2Cmd = 0;//read\r
uint16_t data2ae1Cmd = 0;//安卓消息来电\r
uint16_t data2ae0Cmd = 0;//OTA\r
\r
BLE_CHARACTERISTIC_SNED_LONG_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
BLE_CHARACTERISTIC_SNED_OTA_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
BLE_CHARACTERISTIC_SNED_ANDRIOD_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
- BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ,\r
+ BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ|GATT_CHARACTER_PROPERTY_BIT_NOTIFY,\r
};\r
static uint8_t ble_adv_falg = 0;\r
void svr_ble_adv_stop(void)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae2 result->value_handle6 %d\r\n",result->value_handle);\r
// shortCmdChara = result->value_handle;\r
+ if(data2ae2Cmd == 0){\r
+ data2ae2Cmd = result->value_handle;\r
+ }\r
}\r
if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data_2ae4))\r
{\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
g_ble_conn_id, g_ble_server_handle,data_len);\r
\r
- return ret;\r
+ return ret; \r
+}\r
+\r
+errcode_t svr_ble_read_data_value_updata_noyify(void)//2ae2\r
+{\r
+ gatts_ntf_ind_t data_info;\r
+ data_info.attr_handle = data2ae2Cmd;\r
+ static uint8_t battery_point_val[20] = {0};\r
+ // 获取电池电压值\r
+ float voltage = 0.0F;\r
+ uint8_t power = 0;\r
+ power =battery_get_voltage(&voltage);\r
+ battery_point_val[0] +=1;//power ;//power;//电量90\r
+ uint16_t dial = ble_get_dial_id();\r
+ memcpy_s(&battery_point_val[1],2,&dial,2);\r
+\r
+ uint8_t _major,_mid,_minor;\r
+ uapi_get_fw_version(&_major,&_mid,&_minor);\r
+\r
+ battery_point_val[3] = _major;//固件版本号\r
+ battery_point_val[4] = _mid;\r
+ battery_point_val[5] = _minor;\r
+\r
+ bd_addr_t addr_info;\r
+ errcode_t ret = gap_ble_get_local_addr(&addr_info);\r
+ battery_point_val[6] = addr_info.addr[5];\r
+ battery_point_val[7] = addr_info.addr[4];\r
+ battery_point_val[8] = addr_info.addr[3];\r
+ battery_point_val[9] = addr_info.addr[2];\r
+ battery_point_val[10] = addr_info.addr[1];\r
+ battery_point_val[11] = addr_info.addr[0];\r
+\r
+ battery_point_val[12] = 0;//消息推送开关 默认是关闭 0\r
+ battery_point_val[13] = 0;//多媒体开关\r
+ battery_point_val[14] = 5;//客户编号\r
+ battery_point_val[15] = 5;//产品编号\r
+\r
+ battery_point_val[16] = 0;//硬件版本号\r
+ battery_point_val[17] = 1;\r
+\r
+ battery_point_val[18] = 0;//ble版本号\r
+ battery_point_val[19] = 1;\r
+\r
+\r
+ data_info.value = battery_point_val;\r
+ data_info.value_len = 20;\r
+ ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
+ g_ble_conn_id, g_ble_server_handle,20);\r
\r
+ return ret; \r
}\r
+\r
+\r
static void svr_ble_bt_gatts_req_read_cb(uint8_t server_id, uint16_t conn_id, gatts_req_read_cb_t *read_cb_para,\r
errcode_t status)\r
{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_req_read_cb ret:is_long:%d",read_cb_para->is_long);\r
+\r
+ //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_req_read_cb ret:is_long:%d 2ae2 %d read_cb_para->handle :%d",read_cb_para->is_long,data2ae2Cmd,read_cb_para->handle);\r
+ if(read_cb_para->handle!=data2ae2Cmd)\r
+ return;\r
+\r
+ static uint8_t battery_point_val[20] = {0};\r
+ // 获取电池电压值\r
+ float voltage = 0.0F;\r
+ uint8_t power = 0;\r
+ power =battery_get_voltage(&voltage);\r
+ battery_point_val[0] =power;//power ;//power;//电量90\r
+ uint16_t dial = ble_get_dial_id();\r
+ memcpy_s(&battery_point_val[1],2,&dial,2);\r
+\r
+ uint8_t _major,_mid,_minor;\r
+ uapi_get_fw_version(&_major,&_mid,&_minor);\r
+\r
+ battery_point_val[3] = _major;//固件版本号\r
+ battery_point_val[4] = _mid;\r
+ battery_point_val[5] = _minor;\r
+\r
+ bd_addr_t addr_info;\r
+ errcode_t ret = gap_ble_get_local_addr(&addr_info);\r
+ battery_point_val[6] = addr_info.addr[5];\r
+ battery_point_val[7] = addr_info.addr[4];\r
+ battery_point_val[8] = addr_info.addr[3];\r
+ battery_point_val[9] = addr_info.addr[2];\r
+ battery_point_val[10] = addr_info.addr[1];\r
+ battery_point_val[11] = addr_info.addr[0];\r
+\r
+ battery_point_val[12] = 0;//消息推送开关 默认是关闭 0\r
+ battery_point_val[13] = 0;//多媒体开关\r
+ battery_point_val[14] = 5;//客户编号\r
+ battery_point_val[15] = 5;//产品编号\r
+\r
+ battery_point_val[16] = 0;//硬件版本号\r
+ battery_point_val[17] = 1;\r
+\r
+ battery_point_val[18] = 0;//ble版本号\r
+ battery_point_val[19] = 1;\r
+\r
+ static gatts_ntf_ind_t gatts_ntf_ind;\r
+ gatts_ntf_ind.attr_handle=read_cb_para->handle;\r
+ gatts_ntf_ind.value=battery_point_val;\r
+ gatts_ntf_ind.value_len=20;\r
+ //read_cb_para->need_rsp=0;\r
+ gatts_notify_indicate(server_id,conn_id,&gatts_ntf_ind);\r
}\r
\r
\r
TOPIC_EVENT_CANCEL_FIND_WATCH,//取消查找
TOPIC_EVENT_DRINKREMINDER,//喝水提醒
TOPIC_EVENT_MESSAGENOTE, //消息通知
+ TOPIC_EVENT_SLEEPNOTE, //睡眠通知
TOPIC_END_NUM = 20000,
} TopicNum;
{TOPIC_EVENT_CANCEL_FIND_WATCH,A_CORE_MASK, 1},
{TOPIC_EVENT_DRINKREMINDER,A_CORE_MASK, 1},
{TOPIC_EVENT_MESSAGENOTE,A_CORE_MASK, 1},
+ {TOPIC_EVENT_SLEEPNOTE,A_CORE_MASK, 1},
#ifdef SUPPORT_CAT1_MODEM
{TOPIC_EVENT_CAT1_INCOMMING, A_CORE_MASK, 1},
{TOPIC_EVENT_CAT1_CALLCONNTED, A_CORE_MASK, 1},
* @Author: penglei 1624952103@qq.com\r
* @Date: 2024-06-17 14:31:08\r
* @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2024-06-22 15:27:12\r
+ * @LastEditTime: 2024-07-02 17:31:37\r
* @FilePath: /FD230/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c\r
* @Description: \r
* \r
{\r
//LCD显示颜色\r
uint8_t send_data = 0x00;\r
- char *color_buf[5] ={"0Xffff0000","0xff00ff00","0xff0000ff","0xffffffff","0xff000000"};\r
- ScreenAlwaysOnCtr(1);\r
+\r
switch (*data)\r
{\r
case 1:\r
- lcd_fill((uint8_t *)color_buf[0], 11);\r
+ uapi_factorytest_set_lcd_color(3);\r
break;\r
case 2:\r
- lcd_fill((uint8_t *)color_buf[1], 11);\r
+ uapi_factorytest_set_lcd_color(0);\r
break;\r
case 3:\r
- lcd_fill((uint8_t *)color_buf[2], 11);\r
+ uapi_factorytest_set_lcd_color(1);\r
break;\r
case 4:\r
- lcd_fill((uint8_t *)color_buf[3], 11);\r
+ uapi_factorytest_set_lcd_color(4);\r
break;\r
case 5:\r
- lcd_fill((uint8_t *)color_buf[4], 11);\r
+ uapi_factorytest_set_lcd_color(5);\r
break;\r
\r
default:\r
0x05,\r
&send_data,\r
1);\r
+ } else if(testitem == 0x06)\r
+ {\r
+ //进入lcd测试\r
+ uint8_t send_data = 0;\r
+\r
+ mcu_pm_lcd_on(0,0);\r
+ uapi_factorytest_enter_test_view(1);\r
+ uapi_factorytest_enter_test_lcd_view();\r
+ uapi_factorytest_hide_test_lcd_button();\r
+\r
+ factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+ BLE_TEST_CMD_SOFT_TEST_SUB_MODE_LCD,\r
+ 0x06,\r
+ &send_data,\r
+ 1);\r
+ } else if(testitem == 0x07)\r
+ {\r
+ //退出lcd测试\r
+ uint8_t send_data = 0;\r
+\r
+ uapi_factorytest_enter_test_view(0);\r
+\r
+ factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+ BLE_TEST_CMD_SOFT_TEST_SUB_MODE_LCD,\r
+ 0x07,\r
+ &send_data,\r
+ 1);\r
}\r
\r
break;\r
} else if(testitem == 0x03)\r
{\r
//触摸测试\r
- uint8_t send_data = 0x01;\r
-\r
+ uint8_t send_data = 0;\r
+ mcu_pm_lcd_on(0,0);\r
+ uapi_factorytest_enter_test_view(1);\r
+ uapi_factorytest_enter_test_tp_view();\r
+ uapi_factorytest_hide_test_tp_button();\r
factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
BLE_TEST_CMD_SOFT_TEST_SUB_MODE_TP,\r
0x03,\r
&send_data,\r
1);\r
\r
- send_data = 0x00;\r
+ \r
+ } else if(testitem == 0x04)\r
+ {\r
+ //退出触摸测试\r
+ uint8_t send_data = 0;\r
+\r
+ uapi_factorytest_enter_test_view(0);\r
+\r
factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
BLE_TEST_CMD_SOFT_TEST_SUB_MODE_TP,\r
- 0x03,\r
+ 0x04,\r
&send_data,\r
1);\r
\r
case BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS:\r
if(testitem == 0x01)\r
{\r
- //获取 hx3695 chip_id\r
- uint8_t chip_id;\r
- chip_id = hx3695_get_chip_id();\r
+ //获取 ppg_id\r
+ uint8_t ppg_id;\r
+ uapi_ppg_get_id(&ppg_id);\r
\r
factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS,\r
0x01,\r
- &chip_id,\r
- sizeof(chip_id));\r
+ &ppg_id,\r
+ sizeof(ppg_id));\r
\r
} else if(testitem == 0x02)\r
{\r
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sedentaryReminder_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/transmitting.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/message_notification.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sleep_notification.cpp
)
else()
set(SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sedentaryReminder_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/transmitting.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/message_notification.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sleep_notification.cpp
)
endif()
--- /dev/null
+/***
+ * @Date: 2024-07-02 10:15:59
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-02 17:27:39
+ * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/sleep_notification.h
+ */
+/***
+ * @Date: 2024-07-02 10:15:59
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-02 11:27:01
+ * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/sleep_notification.h
+ */
+/***
+ * @Date: 2024-06-20 09:43:23
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-20 09:47:45
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/service/msg_center/include/notify/message_notification.h
+ */
+#ifndef SLEEP_NOTIFICATION
+#define SLEEP_NOTIFICATION
+
+#include "BaseView.h"
+namespace OHOS
+{
+ UIViewGroup *CreateSleepNotifyView(void);
+ void FreeSleepView(void);
+ void SetAlarmClockView();
+
+ class SleepViewEventListener : public UIView::OnTouchListener, public UIView::OnDragListener
+ {
+ public:
+ static SleepViewEventListener &GetInstance();
+ bool OnRelease(UIView &view, const ReleaseEvent &event) override;
+ bool OnDrag(UIView &view, const DragEvent &event) override;
+ bool OnDragEnd(UIView &view, const DragEvent &event) override;
+
+ private:
+ SleepViewEventListener();
+ ~SleepViewEventListener();
+ SleepViewEventListener(const SleepViewEventListener &) = delete;
+ const SleepViewEventListener &operator=(const SleepViewEventListener &) = delete;
+ bool X_DRAG_FLAG{false};
+ };
+
+}
+
+#endif
\ No newline at end of file
#include "power_display_service.h"
#include "cat1_server.h"
#include "testchanging.h"
+
#include "message_notification.h"
+#include "sleep_notification.h"
+
#include "testcat1.h"
#include "testold.h"
#include "testhrsenson.h"
{TOPIC_EVENT_CANCEL_FIND_WATCH,PRIORITY_TWO},
{TOPIC_EVENT_DRINKREMINDER,PRIORITY_TWO},
{TOPIC_EVENT_MESSAGENOTE,PRIORITY_TWO},
+ {TOPIC_EVENT_SLEEPNOTE,PRIORITY_TWO},
};
static bool CheckPriority(const Topic topic)
MsgCenterSubscribeTopic(TOPIC_EVENT_CANCEL_FIND_WATCH);
MsgCenterSubscribeTopic(TOPIC_EVENT_DRINKREMINDER);
MsgCenterSubscribeTopic(TOPIC_EVENT_MESSAGENOTE);
+ MsgCenterSubscribeTopic(TOPIC_EVENT_SLEEPNOTE);
}
static OHOS::UIViewGroup* ShowAlarmNotify(void)
{
return OHOS::CreateMessageView();
}
-
+/*显示睡眠提醒*/
+static OHOS::UIViewGroup* showSleepNotify(void)
+{
+ return OHOS::CreateSleepNotifyView();
+}
void MsgCenterNotifyAlarmProc(const Topic topic, Request* req)
{
unused(req);
//if(req->data);
uint8 *x= (uint8 *)(req->data);
const power_display_svr_api_t *display_api = power_display_svr_get_api();
- if (display_api->get_screen_state() != SCREEN_ON)
- {
- display_api->turn_on_screen();
- }
- display_api->set_screen_set_keepon_timeout(1000*5);
+
if(*x==3)
{
+ if (display_api->get_screen_state() != SCREEN_ON)
+ {
+ display_api->turn_on_screen();
+ }
+ display_api->set_screen_set_keepon_timeout(1000*5);
//倒计时结束后,直接执行关机动画
low_power_play();
}
else if(*x==0)
{
//提醒低电充电
+ if (display_api->get_screen_state() != SCREEN_ON)
+ {
+ display_api->turn_on_screen();
+ }
+ display_api->set_screen_set_keepon_timeout(1000*5);
+
set_lowpower_falg(0);
- // if (NotificationManager::GetInstance()->HasNotifyShowing())
- // NotificationManager::GetInstance()->StopNotify();
- NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_ONE);
+ NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
NotificationManager::GetInstance()->ShowNotify(showlowpowerNotify, (uint16_t)topic, true);
}
else
{
//电量过低,直接提醒关机
+ if (display_api->get_screen_state() != SCREEN_ON)
+ {
+ display_api->turn_on_screen();
+ }
+ display_api->set_screen_set_keepon_timeout(1000*10);
+
set_lowpower_falg(1);
- // if (NotificationManager::GetInstance()->HasNotifyShowing())
- // NotificationManager::GetInstance()->StopNotify();
+ if (NotificationManager::GetInstance()->HasNotifyShowing())
+ NotificationManager::GetInstance()->StopNotify();
+
NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_ONE);
NotificationManager::GetInstance()->ShowNotify(showlowpowerNotify, (uint16_t)topic, true);
NotificationManager::GetInstance()->ShowNotify(showMessageNotify, (uint16_t)topic, true);
}
+//睡眠提醒通知
+void MsgCenterNotifySleepProc(const Topic topic, Request* req)
+{
+ unused(topic);
+ unused(req);
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifySleepProc !");
+ //亮屏显示新信息弹窗
+ const power_display_svr_api_t *display_api = power_display_svr_get_api();
+ if (display_api->get_screen_state() != SCREEN_ON)
+ {
+ display_api->turn_on_screen();
+ }
+ display_api->set_screen_set_keepon_timeout(1000*5);
+ NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_TWO);
+ NotificationManager::GetInstance()->ShowNotify(showSleepNotify, (uint16_t)topic, true);
+}
#endif
#ifdef SUPPORT_CAT1_MODEM
{TOPIC_EVENT_CANCEL_FIND_WATCH,MsgCenterNotifyCanCelFindWatchProc},
{TOPIC_EVENT_DRINKREMINDER,MsgCenterNotifyDrinkReminderProc},
{TOPIC_EVENT_MESSAGENOTE,MsgCenterNotifyMessageProc},
+ {TOPIC_EVENT_SLEEPNOTE,MsgCenterNotifySleepProc},
};
static MsgCenterNotifyTable *MsgCenterGetNotifyTblCb(uint8_t idx)
#include "battery_service.h"
#include "NativeAbility.h"
#include "custom_utils.h"
+#include "cmsis_os2.h"
+#include "linux/delay.h"
namespace OHOS
{
UIImageView *imageCharge = nullptr;
UIViewGroup *group=nullptr;
UIImageAnimatorView *ShutDownImageAnimatorView=nullptr;
static constexpr char *ShutDownPaths = "/user/res/RebootAndShutDown/ShutDown/"; //关机图片路径
- static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 30; // 图片帧数
- static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 150; // 图片更新间隔
- ImageAnimatorInfo ShutDownImageInfo[SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 关机图像的信息
+ #define SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES 30 // 图片帧数
+ static int16_t SHUTDOWN_IMAGE_ANIMATOR_TIME = 130; // 图片更新间隔
+
static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_X = 0;
static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y = 0;
static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_W = 466;
static constexpr int16_t SHUTDOWN_IMAGE_ANIMATOR_VIEW_H = 466;
const char **ShutDownPathsArray{nullptr}; // 关机图片路径数组
-
+ ImageAnimatorInfo ShutDownImageInfo[SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES]; // 关机图像的信息
#define LOW_POWER_BUTTON "LOW_POWER_BUTTON"
// UIViewGroup *ChargingStatuShow()
// {
// imageCharge->SetVisible(true);
// }
// }
+
+ static void FreeImagePathsArray(const char **imagePaths, const int numImages)
+ {
+ for (int i = 0; i < numImages; i++)
+ {
+ // ImageCacheManager::GetInstance().UnloadSingleRes(imagePaths[i]);
+ delete imagePaths[i];
+ imagePaths[i] = nullptr;
+ }
+ }
+
static const char ** CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages)
{
const char **imagePaths = new const char *[numImages];
return imagePaths;
}
- UIViewGroup * ShowUpShutDownAnimatorView()
+ void ShowUpShutDownAnimatorView()
{
group = new UIViewGroup();
if (group == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
- return nullptr;
+ return ;
}
- group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+ group->SetPosition(0, 0, 466, 466);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShutDownAnimatorView::ShowUpShutDownAnimatorView");
ShutDownPathsArray = CreateImagePathsArray(ShutDownPaths, "bin", SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
if (ShutDownImageAnimatorView == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BluetoothEarPhoneView new ShutDownImageAnimatorView fail");
- return NULL;
+ return ;
}
+
for (uint8_t i = 0; i < SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES; i++)
{
ShutDownImageInfo[i].imagePath = (ShutDownPathsArray[i]);
ShutDownImageAnimatorView->SetPosition(SHUTDOWN_IMAGE_ANIMATOR_VIEW_X, SHUTDOWN_IMAGE_ANIMATOR_VIEW_Y, SHUTDOWN_IMAGE_ANIMATOR_VIEW_W, SHUTDOWN_IMAGE_ANIMATOR_VIEW_H);
ShutDownImageAnimatorView->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
ShutDownImageAnimatorView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
- ShutDownImageAnimatorView->SetImageAnimatorSrc(ShutDownImageInfo, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, 100);
+ ShutDownImageAnimatorView->SetImageAnimatorSrc(ShutDownImageInfo, SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, SHUTDOWN_IMAGE_ANIMATOR_TIME);
ShutDownImageAnimatorView->SetRepeat(false);
ShutDownImageAnimatorView->SetRepeatTimes(1);
}
+ UIImageAnimatorView::AnimatorStopListener *stoplistener = static_cast<UIImageAnimatorView::AnimatorStopListener *>(lowppowrAnimatorStopListener::GetInstance());
+ ShutDownImageAnimatorView->SetAnimatorStopListener(stoplistener);
+ if (stoplistener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to Create stoplistener!!");
+ return;
+ }
+
ShutDownImageAnimatorView->SetVisible(true);
//ShutDownImageAnimatorView->Start();
group->SetVisible(false);
group->Add(ShutDownImageAnimatorView);
- return group;
+ return ;
}
static uint8_t battery_falg=0;
if(group)
{
group->RemoveAll();
+ ShutDownImageAnimatorView->Stop();
if(ShutDownImageAnimatorView)
{
delete ShutDownImageAnimatorView;
group = nullptr;
}
+ FreeImagePathsArray(ShutDownPathsArray,SHUTDOWN_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
RootView::GetInstance()->Remove(UIViewGroup_lowpower);
delete UIViewGroup_lowpower;
if(battery_falg>=3)
{
group->SetVisible(true);
- UIImageAnimatorView::AnimatorStopListener *stoplistener = static_cast<UIImageAnimatorView::AnimatorStopListener *>(lowppowrAnimatorStopListener::GetInstance());
- ShutDownImageAnimatorView->SetAnimatorStopListener(stoplistener);
- if (stoplistener == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to Create stoplistener!!");
- return NULL;
- }
ShutDownImageAnimatorView->Start();
}
return UIViewGroup_lowpower;
void lowppowrAnimatorStopListener::OnAnimatorStop(UIView &view)
{
//UNUSED(view);
+ NotificationManager::GetInstance()->StopNotify();
+ msleep(500);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxxxxxxxxxOnAnimatorStop");
+
if(battery_falg==4)
uapi_reboot_device();
else
uapi_poweroff_device(); // 关机
+
+
+
//NotificationManager::GetInstance()->StopNotify();
//
// if(strcmp(view.GetViewId(),LOW_POWER_BUTTON)!=0)
--- /dev/null
+#include "notification_manager.h"
+#include "wearable_log.h"
+#include "components/ui_button.h"
+#include <iostream>
+#include "ui_service.h"
+#include <graphic_service.h>
+#include "bleEvent.h"
+#include "components/ui_label_ext.h"
+#include "uicomponents/UIComponents.h"
+#include "sleep/include/SleepModel.h"
+#include "sleep_notification.h"
+#include "string"
+#include "vibrator_service.h"
+#include "UiConfig.h"
+#include "ConfigModel.h"
+extern "C" void custom_VibratorFunc(OHOS::VibratorType vibratorType);
+
+namespace OHOS
+{
+
+ UIViewGroup *SleepGroupView{nullptr};
+
+ UILabel *sleeptitle{nullptr}; // 标题
+ UIImageView *sleepicon{nullptr}; // 睡眠图标
+ UILabelExt *sleepnotifylabel{nullptr}; // 详细label
+ UILabelButtonExt *sleepbutton{nullptr}; // 删除按键
+
+ UILabelExt *alarmtitle{nullptr}; // 标题
+ UIImageView *backimage{nullptr};
+ UIImageView *sunnyicon{nullptr};
+ UIImageView *alarmicon{nullptr};
+ UILabelExt *nowlabel{nullptr};
+ UILabelExt *walklabel{nullptr}; // 早安时间
+ UILabelButtonExt *closebutton{nullptr}; // 关闭按键
+ UILabelButtonExt *nopbutton{nullptr}; // 小睡按键
+
+ static std::string titleStr;
+ static constexpr const char *PNG_SLEEP_SUUNY_IMAGE = "/user/res/Sleep/sunny.bin";
+ static constexpr const char *PNG_SLEEP_ALARM_IMAGE = "/user/res/Sleep/alarmicon.bin";
+ static constexpr const char *PNG_SLEEP_BACK_IMAGE = "/user/res/Sleep/goodmorning.bin";
+
+#define DELETEBUTTON "delete_button"
+#define NOPBUTTON "nop_button"
+
+ SleepViewEventListener::SleepViewEventListener()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::SleepViewEventListener");
+ }
+
+ SleepViewEventListener::~SleepViewEventListener()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::~SleepViewEventListener");
+ }
+
+ SleepViewEventListener &SleepViewEventListener::GetInstance()
+ {
+ static SleepViewEventListener instance;
+ return instance;
+ }
+ bool SleepViewEventListener::OnRelease(UIView &view, const ReleaseEvent &event)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::OnRelease");
+ UNUSED(event);
+ if (strcmp(view.GetViewId(), DELETEBUTTON) == 0)
+ {
+ NotificationManager::GetInstance()->StopNotify();
+ }
+ return true;
+ }
+ bool SleepViewEventListener::OnDrag(UIView &view, const DragEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::OnDrag");
+ UNUSED(view);
+ return true;
+ }
+
+ bool SleepViewEventListener::OnDragEnd(UIView &view, const DragEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SleepViewEventListener::OnDragEnd");
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+ {
+ NotificationManager::GetInstance()->StopNotify();
+ }
+ return true;
+ }
+
+ /*创建信息弹窗*/
+ UIViewGroup *CreateSleepNotifyView(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateSleepNotifyView");
+ SleepGroupView = new UIViewGroup();
+ if (SleepGroupView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSleepNotifyView] SleepGroupView new fail!!");
+ return nullptr;
+ }
+ SleepGroupView->SetPosition(0, 0, 466, 466);
+ SleepGroupView->SetViewId("sleepnotify");
+ SleepGroupView->SetTouchable(true);
+ SleepGroupView->SetDraggable(true);
+ UIView::OnDragListener *dragListener = static_cast<UIView::OnDragListener *>(&SleepViewEventListener::GetInstance());
+ if (dragListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSleepNotifyView] dragListener new fail!!");
+ return nullptr;
+ }
+ SleepGroupView->SetOnDragListener(dragListener);
+ /*获取最新sleep*/
+ SLEEPSTATE sleepsate = SleepModel::GetInstance().get_sleep_state();
+ UIResourceTextId textId = STR_MORNNING;
+ switch (sleepsate)
+ {
+ case SLEEPSTATE::SLEEPNOTIFY:
+ titleStr = SleepModel::GetInstance().get_notifiy();
+ textId = STR_DISTURB; // 即将开启勿扰
+ break;
+ case SLEEPSTATE::SLEPP:
+ titleStr = SleepModel::GetInstance().get_sleep_notifiy();
+ textId = STR_DISTURBNOTE; // 开启勿扰
+ ConfigModel::GetInstance()->SetDnotdisturb(true);
+ break;
+ case SLEEPSTATE::WALK:
+ titleStr = SleepModel::GetInstance().get_walk_notifiy();
+ textId = STR_MORNNING;
+ ConfigModel::GetInstance()->SetDnotdisturb(false); // 关闭勿扰
+ SetAlarmClockView(); // 设置为早安视图
+ return SleepGroupView;
+ break;
+ default:
+ break;
+ }
+
+ /*初始化label*/
+ /* -------------------------------------------------------------------------- */
+ sleeptitle = new UILabel();
+ if (sleeptitle == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleeptitle:: new UILabel fail");
+ return nullptr; // 内存分配失败,返回
+ }
+ sleeptitle->SetPosition(83, 60, 300, 35);
+ sleeptitle->SetText(titleStr.c_str());
+ sleeptitle->SetStyle(STYLE_TEXT_FONT, 30);
+ sleeptitle->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+ sleeptitle->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ sleeptitle->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40);
+ sleeptitle->SetVisible(true);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleeptitle is ok!");
+ /* -------------------------------------------------------------------------- */
+ /*初始化图片*/
+ InitImageView(sleepicon, 193, 130, 80, 80, "image", PNG_APPLIST_SLEEP_IMAGE);
+ sleepicon->SetResizeMode(UIImageView::ImageResizeMode::SCALE_DOWN);
+ /* -------------------------------------------------------------------------- */
+ /*初始化消息内容*/
+ sleepnotifylabel = new UILabelExt();
+ if (sleepnotifylabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleepnotifylabel:: new UILabel fail");
+ return nullptr; // 内存分配失败,返回
+ }
+ sleepnotifylabel->SetPosition(53, 220, 360, 144);
+ sleepnotifylabel->SetViewId("sleepnotifylabel");
+ sleepnotifylabel->SetTextId(textId);
+ sleepnotifylabel->SetTextColor(Color::Gray());
+ sleepnotifylabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ sleepnotifylabel->SetLineBreakMode(UILabel::LINE_BREAK_CLIP); // 换行裁剪
+ sleepnotifylabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); // 居中显示
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleepnotifylabel is ok");
+
+ /*加载清除按键*/
+ InitButtonExt(sleepbutton, 0, 366, 466, 100, DELETEBUTTON, STR_KONW, 30);
+ const char *buttonImgSrc = "/user/res/466x100button.bin";
+ sleepbutton->SetImageSrc(buttonImgSrc, buttonImgSrc);
+ UIView::OnTouchListener *TouchListener = static_cast<UIView::OnTouchListener *>(&SleepViewEventListener::GetInstance());
+ if (TouchListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSleepView] TouchListener new fail!!");
+ return nullptr;
+ }
+ sleepbutton->SetOnTouchListener(TouchListener);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleepbutton");
+ /* -------------------------------------------------------------------------- */
+ SleepGroupView->Add(sleeptitle);
+ SleepGroupView->Add(sleepicon);
+ SleepGroupView->Add(sleepnotifylabel);
+ SleepGroupView->Add(sleepbutton);
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Create SleepGroupView succeed!!");
+ custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); // 震动提醒
+ return SleepGroupView;
+ }
+ void SetAlarmClockView()
+ {
+ /*初始化图片*/
+ InitImageView(backimage, 0, 0, 466, 466, "image", PNG_SLEEP_BACK_IMAGE);
+ InitImageView(sunnyicon, 153, 95, 160, 160, "image", PNG_SLEEP_SUUNY_IMAGE);
+ InitImageView(alarmicon, 149, 260, 29, 29, "image", PNG_SLEEP_ALARM_IMAGE);
+ /*初始化固定label*/
+ InitLabelExt(alarmtitle, 83, 50, 300, 35, "labletitle", STR_MORNNING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ InitLabelExt(nowlabel, 110, 243, 200, 60, "labletitle", STR_NOW, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /*获取起床时间labe*/
+ std::string walkStr = SleepModel::GetInstance().get_walk_notifiy();
+ InitLabel(walklabel, 190, 245, 200, 60, "labletitle", walkStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /*设置按键*/
+ InitButtonExt(nopbutton, 58, 320, 170, 90, NOPBUTTON, STR_NAP, 30);
+ nopbutton->SetOnTouchListener(static_cast<UIView::OnTouchListener *>(&SleepViewEventListener::GetInstance()));
+ nopbutton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff4fc34c);
+ nopbutton->SetStyle(STYLE_BORDER_RADIUS, 100);
+
+ InitButtonExt(closebutton, 238, 320, 170, 90, DELETEBUTTON, STR_CLOSE, 30);
+ closebutton->SetOnTouchListener(static_cast<UIView::OnTouchListener *>(&SleepViewEventListener::GetInstance()));
+ closebutton->SetStyle(STYLE_BORDER_RADIUS, 100);
+
+ /* -------------------------------------------------------------------------- */
+ SleepGroupView->Add(backimage);
+ SleepGroupView->Add(sunnyicon);
+ SleepGroupView->Add(alarmicon);
+ SleepGroupView->Add(nowlabel);
+ SleepGroupView->Add(walklabel);
+ SleepGroupView->Add(nopbutton);
+ SleepGroupView->Add(closebutton);
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Create SleepGroupView succeed!!");
+ custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); // 震动提醒
+ }
+ /*释放消息弹窗视图*/
+ void FreeSleepView(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FreeSleepView(void)");
+ if (SleepGroupView != nullptr)
+ {
+ SleepGroupView->RemoveAll();
+
+ delete sleeptitle;
+ sleeptitle = nullptr;
+
+ delete sleepicon;
+ sleepicon = nullptr;
+
+ delete sleepnotifylabel;
+ sleepnotifylabel = nullptr;
+
+ delete sleepbutton;
+ sleepbutton = nullptr;
+
+ delete alarmtitle;
+ alarmtitle = nullptr;
+
+ delete backimage;
+ backimage = nullptr;
+
+ delete sunnyicon;
+ sunnyicon = nullptr;
+
+ delete alarmicon;
+ alarmicon = nullptr;
+
+ delete nowlabel;
+ nowlabel = nullptr;
+
+ delete walklabel;
+ walklabel = nullptr;
+
+ delete closebutton;
+ closebutton = nullptr;
+
+ delete nopbutton;
+ nopbutton = nullptr;
+
+ RootView::GetInstance()->Remove(SleepGroupView);
+ delete SleepGroupView;
+ SleepGroupView = nullptr;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Free SleepView succeed!!");
+ }
+ return;
+ }
+}
\ No newline at end of file
if ((errcode_t)uapi_flash_exit_from_xip_mode(0) != ERRCODE_SUCC) {
goto end;
}
- if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) {
+ if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) {
real_read = uapi_flash_read_data_without_align(0, fota_address, (uint8_t *)(upg_flag_info),
sizeof(fota_upgrade_flag_area_t));
} else {
+/*\r
+ * @Author: penglei 1624952103@qq.com\r
+ * @Date: 2024-06-29 17:26:01\r
+ * @LastEditors: penglei 1624952103@qq.com\r
+ * @LastEditTime: 2024-07-02 16:41:57\r
+ * @FilePath: /FD230/code/sdk/bootloader/flashboot/brandy/nandflash/include/nandflash_ds35x1g.h\r
+ * @Description: \r
+ * \r
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. \r
+ */\r
/*\r
* Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved.\r
* Description: NON-OS NANDFLASH DRIVER\r
#define DS35X1G_BYTES_PER_OOB 64\r
#define DS35X1G_PAGES_PER_BLOCK 64\r
#define DS35X1G_TOTAL_BLOCKS 1024\r
-#define DS35X1G_CHIP_ID 0xE521\r
+#define DS35X1G_CHIP_ID 0xE521//0xE521,6161 id 没有check\r
#define DS35X1G_OOB_TOTAL_LEN 4\r
#define DS35X1G_OOB_PER_SIZE 8\r
#define DS35X1G_OOB_1_OFFSET 0\r
# 要升级的image列表,需根据升级的实际情况进行增删
image_list = []
if os.path.exists(os.path.join(info.root_path,"output","ota_all")) :
+ print( os.path.join(info.root_path,"output","ota_all")+" exist ")
image_list.append("=".join([info.ssb_bin, "ssb"]))
image_list.append("=".join([info.recovery_bin, "recovery"]))
image_list.append("=".join([info.app_bin, "application"]))
image_list.append("=".join([info.dsp_main_bin, "dsp_main"]))
image_list.append("=".join([info.dsp_overlay_bin, "dsp_overlay"]))
image_list.append("=".join([info.nv_bin, "nv"]))
+ elif os.path.exists(os.path.join(info.root_path,"output","res_only")) :
+ print( os.path.join(info.root_path,"output","res_only")+" exist ")
+ print("update resource only")
else:
+ print( "ota_all or res_only not exist in folder "+os.path.join(info.root_path,"output")+",application only!")
image_list.append("=".join([info.app_bin, "application"]))
if os.path.exists(info.res_dir) :
image_list.append("=".join([info.bt_old_bin, "bt"]))
image_list.append("=".join([info.dsp_main_old_bin, "dsp_main"]))
image_list.append("=".join([info.dsp_overlay_old_bin, "dsp_overlay"]))
+ elif os.path.exists(os.path.join(info.root_path,"output","res_only")) :
+ print("update resource only")
else:
- print( os.path.join(info.root_path,"output","ota_all")+" not exist ")
+ print( " ota_all or res_only not exist in folder "+os.path.join(info.root_path,"output")+",application only!")
image_list.append("=".join([info.app_old_bin, "application"]))
# image_list.append("=".join([info.app_old_sign, "application_sign"]))
# image_list.append("=".join([info.bt_old_sign, "bt_sign"]))
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:a69a4de1b30054eaf54864f8e8cd63ccb22149252ce50dc9ead369b6dd97aa14
+size 664
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:b010e39f71b93cd8b2d0341e0fed8ecdb098481384e574d199ff88557a5084fe
+size 146040
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:3a5a92b58e1e19d6430fae58dd7d4497b441ef72903038f9563152dd94e0a25d
+size 17304
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:6db591e3eb1bb54b9010e4c57c5b0f40d28a1290e95f28a9c0920ba7369e0171
+size 792
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:b21cd7b0da5006062af8f7efe3e791ee290322f31cde7581eed65bcc9ebf9df7
+size 2424
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:78a4a48c22d14d85354d1fe4d84b0c13244c47d9b1f5858227b63403fbad404d
+size 2424
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:50053d273b582b274ff2e748de6940cc52312ee25adff7bf2bbd2a9e9e27960f
+size 1560
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:34a4e1b063eda3fcb6ca9c2e223173e4550620182ecec675ddf8b4971bb6b1af
+size 2424
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:9fce27e93e1538cccc7da3120837858f59f48a9df2cedfc07992cacff34ae507
+size 2424
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:5be34fcd358e742d3a3cab6986d844cb5ccfc33f9c422b7c0ff22f35d63c3ea0
+size 1560
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:492d2eb4af52cf3ef0ddb43cb09a8af13629ec7d5b8d5f723358771f3441e65c
+size 472
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:905a252082ea4a712d68b34df64ce107350ba8def9e77b31e93d468d0cd6fe63
+size 984
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:52855c1d10dc754e635bc180a5ea72459697a83de535633b6fafd5bc8be26836
+size 2424
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:923ae93925394df078d1451f332acf9e74c49a23f881ae222c30b790d217fe24
+size 2424
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:08218c18c5b6abb4d2427c0e9694e0d97f0046f30ce7f7f3e291f322bc10542d
+size 1560
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:167523518e00aceaa0522319bbb7320b209c46a822635ddf99a1ac1041b967a1
+size 1560
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-06-07 11:18:26
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-07-02 16:42:22
+ * @FilePath: /FD230/code/sdk/drivers/drivers/driver/nand_flash/nand/include/nandflash_ds35x1g.h
+ * @Description:
+ *
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
+ */
/*
* Copyright (c) @CompanyNameMagicTag 2018-2020. All rights reserved.
* Description: NON-OS NANDFLASH DRIVER
#define DS35X1G_BYTES_PER_OOB 64
#define DS35X1G_PAGES_PER_BLOCK 64
#define DS35X1G_TOTAL_BLOCKS 1024
-#define DS35X1G_CHIP_ID 0xE521
+#define DS35X1G_CHIP_ID 0xE521//0xE521,6161 id 没有check
#define DS35X1G_OOB_TOTAL_LEN 4
#define DS35X1G_OOB_PER_SIZE 8
#define DS35X1G_OOB_1_OFFSET 0
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-04-17 09:32:03
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-06-21 20:17:12
+ * @LastEditTime: 2024-06-28 18:27:45
* @FilePath: /FD230/code/sdk/drivers/peripheral/config/include/ConfigModelC.h
*/
#ifndef _CONFIG_MODEL_C_H_
//cywee 获取用户信息
void get_user_info_from_config_model(int user_info[5]);
+int get_sleep_time_from_config_model(void);
+int get_wake_up_time_from_config_model(void);
+
+//设置睡眠频率
+void set_config_heart(int heartRateDetectionFreq);
+
#ifdef __cplusplus
#if __cplusplus
}
user_info[3] = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_CUSTOM_DATA_HEIGHT);
user_info[4] = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_CUSTOM_DATA_WEARING_MODE);
}
+
+//获取睡眠目标[入睡时间]
+int get_sleep_time_from_config_model(void)
+{
+ int sleep_time = 0;
+ sleep_time = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_BEDTIME);
+ return sleep_time;
+}
+//获取睡眠目标[醒来时间]
+int get_wake_up_time_from_config_model(void)
+{
+ int wake_up_time = 0;
+ wake_up_time = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_SLEEP_GET_UP);
+ return wake_up_time;
+}
+void set_config_heart(int heartRateDetectionFreq)
+{
+ // 设置心率检测频率
+ OHOS::ConfigModel::GetInstance()->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_HEARTRATE_DETECTED, heartRateDetectionFreq);
+}
#ifdef __cplusplus
#if __cplusplus
}
* @Author: penglei 1624952103@qq.com
* @Date: 2024-03-26 20:29:58
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-06-22 15:03:56
+ * @LastEditTime: 2024-06-28 18:00:01
* @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
* @Description:
*
#define CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE 0x21
#define CYWEE_SERVICE_CMD_SEDENTARY_MODE 0x22
-#define CYWEE_SERVICE_CMD_NAP_MODE 0x23
+#define CYWEE_SERVICE_CMD_NAP_MODE 0x32
+#define CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE 0x23
#define CYWEE_SERVICE_CMD_SLEEPING_MODE 0x24
#define CYWEE_SERVICE_CMD_OPEN_HAND_UPDOWN 0x25
case CYWEE_SERVICE_CMD_NAP_MODE:
cywee_inactivity_mode_change(INACTIVITY_MODE_NAP);
+
+ case CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE:
+ cywee_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY_AND_NAP);
break;
-
+
case CYWEE_SERVICE_CMD_SLEEPING_MODE:
cywee_inactivity_mode_change(INACTIVITY_MODE_SLEEPING);
break;
return 0;
}
typedef enum {
- CYWEE_SAVE_DATA_STEP,
- CYWEE_SAVE_DATA_DISTANCE,
- CYWEE_SAVE_DATA_CALORIES,
- CYWEE_SAVE_DATA_FAT,
+ CYWEE_DATA_STEP,
+ CYWEE_DATA_DISTANCE,
+ CYWEE_DATA_CALORIES,
+ CYWEE_DATA_FAT,
} CYWEE_SAVE_DATA_TYPE;
#define CWM_STEP_DATA_PATH "/user/userdata/sport/stepcount.bin"
FILE * fp=NULL;
switch (type)
{
- case CYWEE_SAVE_DATA_CALORIES:
+ case CYWEE_DATA_CALORIES:
fp = fopen(CWM_CALORIES_DATA_PATH,"wb");
break;
- case CYWEE_SAVE_DATA_STEP:
+ case CYWEE_DATA_STEP:
fp = fopen(CWM_STEP_DATA_PATH,"wb");
break;
- case CYWEE_SAVE_DATA_DISTANCE:
+ case CYWEE_DATA_DISTANCE:
fp = fopen(CWM_DISTANCE_DATA_PATH,"wb");
break;
- case CYWEE_SAVE_DATA_FAT:
+ case CYWEE_DATA_FAT:
fp = fopen(CWM_FAT_DATA_PATH,"wb");
break;
switch (type)
{
- case CYWEE_SAVE_DATA_CALORIES:
+ case CYWEE_DATA_CALORIES:
sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_CALORIES_PATH,timeday);
break;
- case CYWEE_SAVE_DATA_STEP:
+ case CYWEE_DATA_STEP:
sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_PATH,timeday);
break;
- case CYWEE_SAVE_DATA_DISTANCE:
+ case CYWEE_DATA_DISTANCE:
sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_DISTANCE_PATH,timeday);
break;
- case CYWEE_SAVE_DATA_FAT:
+ case CYWEE_DATA_FAT:
sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_FAT_PATH,timeday);
break;
CWM_OS_dbgPrintf(" save path %s \n",path_);
- int data= *new_data-*history;//新数据减去旧数据,作为这一个小时的步数值
- if(data<=0)
- {
- data=0;
- *history=0;
- CWM_OS_dbgPrintf("异常 清除步数数据\n");
- return;
+ // int data= *new_data-*history;//新数据减去旧数据,作为这一个小时的步数值
+ // if(data<=0)
+ // {
+ // data=0;
+ // *history=0;
+ // CWM_OS_dbgPrintf("异常 清除步数数据\n");
+ // return;
- }
+ // }
FILE * fp = fopen(path_,"ab+");
if(fp==NULL)
}
- ret =fwrite(&data,1,len,fp);
+ ret =fwrite(new_data,1,len,fp);
if(ret==0)
{
CWM_OS_dbgPrintf("fwrite failed %d\n",ret);
}
- CWM_OS_dbgPrintf("fwrite data %d\n",data);
+ CWM_OS_dbgPrintf("fwrite data %d\n",*new_data);
- *history=*new_data;
+ //*history=*new_data;
fclose(fp);
}
FILE * fp=NULL;
switch (type)
{
- case CYWEE_SAVE_DATA_CALORIES:
+ case CYWEE_DATA_CALORIES:
fp = fopen(CWM_CALORIES_DATA_PATH,"rb");
break;
- case CYWEE_SAVE_DATA_STEP:
+ case CYWEE_DATA_STEP:
fp = fopen(CWM_STEP_DATA_PATH,"rb");
break;
- case CYWEE_SAVE_DATA_DISTANCE:
+ case CYWEE_DATA_DISTANCE:
fp = fopen(CWM_DISTANCE_DATA_PATH,"rb");
break;
- case CYWEE_SAVE_DATA_FAT:
+ case CYWEE_DATA_FAT:
fp = fopen(CWM_FAT_DATA_PATH,"rb");
break;
default:
void set_distance_data(uint32_t data)
{
- new_fat++;
+ new_distance=data;
}
int get_distance_data(void )
void set_fat_time_data(void)
{
- new_calories++;
+ new_fat++;
+}
+
+int get_fat_time_data(void)
+{
+ return new_fat+history_fat;
}
void calories_history_save(void)
{
- CWM_OS_saveData_history(&new_calories,&history_calories_,sizeof(int),CYWEE_SAVE_DATA_CALORIES);
+
+ int data= get_calories_data();
+ CWM_OS_saveData_history(&data,&history_calories_,sizeof(int),CYWEE_SAVE_DATA_CALORIES);
}
void distances_history_save(void)
{
- CWM_OS_saveData_history(&new_distance,&history_calories_,sizeof(int),CYWEE_SAVE_DATA_DISTANCE);
+ int data= get_distance_data();
+ CWM_OS_saveData_history(&data,&history_calories_,sizeof(int),CYWEE_SAVE_DATA_DISTANCE);
}
void fat_history_save(void)
{
- CWM_OS_saveData_history(&new_fat,&history_fat_,sizeof(int),CYWEE_SAVE_DATA_FAT);
+ int data= get_fat_time_data();
+ CWM_OS_saveData_history(&data,&history_fat_,sizeof(int),CYWEE_SAVE_DATA_FAT);
}
void cywee_goal_history_save(void)
struct tm* timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
- CWM_OS_dbgPrintf("cywee_time_sync : year[%d], mon[%d], day[%d], hour[%d], min[%d], msc[%d] \r\n",
+ CWM_OS_dbgPrintf("cywee_time_sync : year[%d], mon[%d], day[%d], hour[%d], min[%d], sec[%d] \r\n",
timeinfo->tm_year+1900,timeinfo->tm_mon+1,timeinfo->tm_mday,
timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
return false;\r
}\r
\r
-uint8_t hx3695_get_chip_id(void)\r
-{\r
- uint8_t i = 0;\r
- uint8_t chip_id = 0;\r
- for(i=0; i<5; i++)\r
- {\r
- hx3695_ppg_on();\r
- chip_id = hx3695_read_reg(0x00);\r
-\r
- if (chip_id == 0x65)\r
- {\r
- return chip_id;\r
- }\r
- }\r
-\r
- return chip_id;\r
-}\r
-\r
uint8_t hx3695_read_fifo_size(void)\r
{\r
uint8_t data_len_h,data_len_l;\r
void wear_mode_timeout_handler(void * p_context);\r
void Efuse_Mode_Check(void);\r
\r
-uint8_t hx3695_get_chip_id(void);\r
-\r
-\r
#include "hx3695_hal.h"\r
\r
#endif\r
#include "soundandvibration/include/SoundAndVibrationVolumeSettingC.h"
#include "networkandcall/include/NetworkAndCallC.h"
#include "producttest/include/testmicrophoneC.h"
+#include "producttest/include/testLCDC.h"
+#include "producttest/include/testTPC.h"
+#include "system/include/SystemPresenterC.h"
+#include "producttest/include/testPresenterC.h"
#endif
#include <dirent.h>
#include <unistd.h>
/**
* @param {uint32_t} time 时间戳
* @param {char} *p_time 字符串
- * @param {bool} *include_seconds 是否包含秒
- * @param {char} 隔断符
+ * @param {bool} include_seconds 是否包含秒
+ * @param {bool} include_year 是否包含年份
+ * * @param {char} 隔断符
* @brief 通过时间戳获取日期
*/
-errcode_t uapi_get_TIME_STR(uint32_t time,char *p_time, char separator, bool include_seconds)
+errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year)
{
if (p_time == NULL)
{
// 根据需要格式化日期时间字符串,包括时分秒和分隔符
if (include_seconds)
{
- sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator,
- timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ if (include_year)
+ {
+ sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator,
+ timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ }
+ else
+ {
+ sprintf(p_time, "%02d%c%02d %02d%c%02d", timeinfo->tm_mon + 1, separator,
+ timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ }
}
else
{
- sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator,
- timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ if (include_year)
+ {
+ sprintf(p_time, "%04d%c%02d%c%02d %02d%c%02d", timeinfo->tm_year + 1900, separator, timeinfo->tm_mon + 1, separator,
+ timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ }
+ else
+ {
+ sprintf(p_time, "%02d%c%02d %02d%c%02d", timeinfo->tm_mon + 1, separator,
+ timeinfo->tm_mday, timeinfo->tm_hour, separator, timeinfo->tm_min);
+ }
}
return ERRCODE_SUCC;
}
+
/**
* @param {char} *p_time
* @param {char} 隔断符
return ERRCODE_SUCC;
}
+/*打印时间戳*/
+void print_current_time(void)
+{
+ char current_time[9]; // 分配内存给current_time
+ if (uapi_get_HHMMSS_Time(current_time, ':', true) != ERRCODE_SUCC)
+ {
+ return;
+ }
+ printf("Current_time: %s\n", current_time);
+ uint32_t tm;
+ if(uapi_get_timestampe_ms(&tm) != ERRCODE_SUCC)
+ {
+ return;
+ }
+ printf("Current timestamp in milliseconds: %u\n", tm);
+}
const char *weekDays[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
errcode_t uapi_get_WeekStr(char *p_week)
{
#endif
}
+void uapi_factorytest_set_lcd_color(int color)
+{
+ #ifdef FD230
+ factorytest_set_LCD_color(color);
+ #endif
+}
+
+void uapi_factorytest_enter_test_view(int cmd)
+{
+ #ifdef FD230
+ factorytest_enter_test_view(cmd);
+ #endif
+}
+
+void uapi_factorytest_enter_test_tp_view(void)
+{
+ #ifdef FD230
+ factorytest_enter_test_tp_view();
+ #endif
+}
+
+void uapi_factorytest_enter_test_lcd_view(void)
+{
+ #ifdef FD230
+ factorytest_enter_test_lcd_view();
+ #endif
+}
+
+void uapi_factorytest_hide_test_lcd_button(void)
+{
+ #ifdef FD230
+ factorytest_hide_test_lcd_button();
+ #endif
+}
+
+void uapi_factorytest_hide_test_tp_button(void)
+{
+ #ifdef FD230
+ factorytest_hide_test_tp_button();
+ #endif
+}
+
void uapi_efuse_test_write(uint8_t *data,uint32_t byte_number,uint8_t len)
{
uint8_t readdata[10] = {0};
uapi_ppg_get_id(&ppg_id);
if(ppg_id != 0x65)
return ERRCODE_FAIL;
-
+ PRINT("ppg_id[%x] \n",ppg_id);
mmc5603_getid(&mmc_id);
if(mmc_id != 0X10)
return ERRCODE_FAIL;
-
+ PRINT("mmc_id[%x] \n",mmc_id);
uapi_cywee_get_id(&cywee_id);
if(cywee_id != 0X44)
return ERRCODE_FAIL;
+ PRINT("cywee_id[%x] \n",cywee_id);
return ERRCODE_SUCC;
-}
\ No newline at end of file
+}
/**获取日期*/
errcode_t uapi_get_yyyymmddhhmmss_Date(char *date);
-
-/*获取日期*/
-errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator);
-
/*获取日期扩展版*/
errcode_t uapi_get_YYMMDD_Time_extend(char *p_time, char separator,uint8_t day);
-
+/*获取日期*/
+errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator);
/*获取时间*/
errcode_t uapi_get_HHMMSS_Time(char *p_time, char separator, bool include_seconds);
+/*打印时间戳*/
+void print_current_time(void);
/*获取星期*/
errcode_t uapi_get_WeekStr(char *p_week);
/*设置屏幕亮屏*/
void uapi_set_screen_on_api(void);
/*通过时间戳解析时间字符串*/
-errcode_t uapi_get_TIME_STR(uint32_t time,char *p_time, char separator, bool include_seconds);
+errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds, bool include_year);
char *uapi_get_local_yyyymmdd_date(void);
void uapi_microhone_switch(bool isopen);
void uapi_check_spk(bool isopen);
+void uapi_factorytest_set_lcd_color(int color);
+void uapi_factorytest_enter_test_view(int cmd);
+void uapi_factorytest_enter_test_tp_view(void);
+void uapi_factorytest_enter_test_lcd_view(void);
+void uapi_factorytest_hide_test_lcd_button(void);
+void uapi_factorytest_hide_test_tp_button(void);
void uapi_efuse_test_write(uint8_t *data,uint32_t byte_number,uint8_t len);
void uapi_efuse_test_read(uint32_t byte_number,uint8_t len);
#include "debug_print.h"
#include "custom_runtime.h"
#include "lwip/altcp_tls.h"
+#include "ConfigModelC.h"
#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
#define CUSTOM_UTILS_MAX_ARGC 8
return ERRCODE_SUCC;
}
+ /*恢复出厂设置*/
+ static uint32_t custom_restore_factory_settings(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+ {
+ UNUSED(para);
+ UNUSED(paraLen);
+ UNUSED(strCommonCmd);
+
+ // 执行恢复出厂设置的操作
+ uapi_restore_factory_setting();
+
+ PRINT("Restoring Factory Settings...\n");
+ return ERRCODE_SUCC;
+ }
+
+#if 1
+ /*设置心率检测频率*/
+ static uint32_t custom_set_heart(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+ {
+ UNUSED(strCommonCmd);
+
+ uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = {0};
+ uint32_t argc = 0;
+
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != CUSTOM_UTILS_SUCCESS)
+ {
+ PRINT("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+
+ if (argc != 1)
+ {
+ PRINT("CUSTOM_UTILSTEST power_test ATCMD Set Parameter Failed argc %d\r\n");
+ return ERRCODE_FAIL;
+ }
+ int heartRateDetectionFreq = atol((char *)argv[0]);
+
+ // 设置心率检测频率
+ set_config_heart(heartRateDetectionFreq);
+
+ PRINT("heartRateDetectionFreq is %d\n", heartRateDetectionFreq);
+ return ERRCODE_SUCC;
+ }
+#endif
+
+
static const at_cmd_table_t g_custom_utils_cmd[] = {
{ (char *)"AT^CUSTOM_SN", custom_utils_setsn, (char *)"123456789ABCDEF2345678" },
{ (char *)"AT^CUSTOM_SN_REQ", custom_utils_getsn, (char *)" " },
{ (char *)"AT^EFUSEWRITE", custom_uapi_efuse_test_write, (char *)" " },
{ (char *)"AT^SCHEDDEBUG", custom_task_sched_debug, (char *)" " },
{ (char *)"AT^MEMDEBUG", custom_mem_debug, (char *)" " },
-
+
+ {(char *)"AT^RESTORE", custom_restore_factory_settings, (char *)" "},
+ {(char *)"AT^SETHEART", custom_set_heart, (char *)" "},
};
#define FLASH_MANUFACTURER_XTX_XT25Q64D 0x17600B
#define FLASH_MANUFACTURER_XTX_XT25Q128D 0x18600B
+#define FLASH_MANUFACTURER_PUYA_PY25Q128LA 0x186585
+
#define FLASH_CMD_LEN_MAX 4
#define addr_unalign(Addr, Boundary) ((Addr) & ((Boundary) - 1))
FLASH_XTX_XT25Q128D,
FLASH_PUYA_P25Q64SL,
FLASH_MXIC_MX25U256,
+ FLASH_PUYA_PY25Q128LA,
FLASH_MANUFACTURER_MAX
} flash_support_manufacturer_t;
g_puya_p25q32lc_enter_qspi_mode_cmd, NULL, &g_puya_p25q32lc_config },
{ FLASH_MANUFACTURER_MXIC_MX25U256, FLASH_SIZE_32MB, 0xA5, 0xAA, WAIT_CYCLES_4, 0x2B, 0xB0, 0x30,
g_mxic_mx25uxx_enter_qspi_mode_cmd, NULL, &g_mxic_mx25uxx_config },
+ // { FLASH_MANUFACTURER_PUYA_PY25Q128LA, FLASH_SIZE_16MB, 0x38, 0xFF, WAIT_CYCLES_6, 0x48, 0x75, 0x7A,
+ // g_puya_py25q128la_enter_qspi_mode_cmd, NULL, &g_puya_py25q128la_config },
+ { FLASH_MANUFACTURER_PUYA_PY25Q128LA, FLASH_SIZE_16MB, 0x20, 0xFF, WAIT_CYCLES_4, 0x05, 0x75, 0x7A,
+ g_puya_py25q128la_enter_qspi_mode_cmd, NULL, &g_puya_py25q128la_config },
};
static const uint32_t g_xip_use_cmd_mode[] = {
FLASH_MANUFACTURER_ELITE_EN25S32A,
FLASH_MANUFACTURER_DOSILICON_DS25M4AB,
FLASH_MANUFACTURER_PUYA_P25Q64SL,
+ FLASH_MANUFACTURER_PUYA_PY25Q128LA,
};
static flash_cmd_exe_t g_winbond_w25qxx_set_qe_cmd[] = {
{ FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }
};
+static flash_cmd_exe_t g_puya_py25q128la_set_qe_cmd[] = {
+ /* Check QE bit. */
+ { FLASH_CMD_TYPE_CHECK, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } },
+ /* Write enable. */
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { FLASH_WREN_CMD } },
+ /* Write status register-2 to 0x2, set QE bit. */
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } },
+ /* Waite config done. */
+ { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } },
+ /* Check QE bit. */
+ { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR2_CMD, 0x1, 0x2 } },
+ /* End cmd, will not execute and need return. */
+ { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }
+};
+
+
static const flash_qe_config_t g_flash_need_set_qe[] = {
{FLASH_MANUFACTURER_WINBOND_W25Q32, g_winbond_w25qxx_set_qe_cmd},
{FLASH_MANUFACTURER_WINBOND_W25Q64, g_winbond_w25qxx_set_qe_cmd},
{FLASH_MANUFACTURER_DOSILICON_DS25M4AB, g_winbond_w25qxx_set_qe_cmd},
{FLASH_MANUFACTURER_ELITE_EN25SX128A, g_winbond_en25sx128a_set_qe_cmd},
{FLASH_MANUFACTURER_XTX_XT25Q128D, g_xtx_xt25q128d_set_qe_cmd},
+ {FLASH_MANUFACTURER_PUYA_PY25Q128LA, g_puya_py25q128la_set_qe_cmd}
};
#define FLASH_WIP (bit(0))
{ FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }
};
+/* PUYA config. */
+/* PY25Q128LA PUYA flash config. */
+static flash_cmd_exe_t g_puya_py25q128la_enter_qspi_mode_cmd[] = {
+ // /* Write enable for Volatils status register. */
+ // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } },
+ // /* Write status register-2 to 0x2, enable QPI write bit. */
+ // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x01, 0x02 } },
+ // /* Enable QPI. */
+ // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } },
+ // /* Set dummy 6, maxinum read freq 70MHZ. */
+ // { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x20} },
+ // /* End cmd, will not execute and need return. */
+ // { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }
+ /* Write enable for Volatils status register. */
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x50 } },
+ /* Write status register-2 to 0x2, enable QPI write bit. */
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 2, { 0x31, 0x02 } },
+ /* Waite config done. */
+ { FLASH_CMD_TYPE_PROCESSING, HAL_SPI_FRAME_FORMAT_STANDARD, 3, { FLASH_RDSR1_CMD, 0, 0 } },
+ /* Enable QPI. */
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_STANDARD, 1, { 0x38 } },
+ /* Set dummy 6, maxinum read freq 70MHZ. */
+ { FLASH_CMD_TYPE_CMD, HAL_SPI_FRAME_FORMAT_QUAD, 2, { 0xC0, 0x20} },
+ /* End cmd, will not execute and need return. */
+ { FLASH_CMD_TYPE_END, HAL_SPI_FRAME_FORMAT_MAX_NUM, 0, { 0 } }
+};
+
/* OTHERS enter xip mode config. */
/* Micro config. */
/* MT25QU128 Micro flash config. */
false,
false,
};
+
+/* PUYA config. */
+/* PY25Q128LA PUYA flash config. */
+static flash_qspi_xip_config_t g_puya_py25q128la_config = {
+ /* The config that before enter XIP mode. */
+ WAIT_CYCLES_6,
+ HAL_SPI_INST_LEN_8,
+ HAL_SPI_ADDR_LEN_24,
+ HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,
+ /* The config that after enter XIP mode. */
+ WAIT_CYCLES_6,
+ HAL_SPI_INST_LEN_8,
+ HAL_SPI_ADDR_LEN_24,
+ HAL_SPI_TRANS_TYPE_INST_Q_ADDR_Q,
+ /* XIP 32bit addr & wrap config. */
+ false,
+ false,
+};
/**
* @}
*/
}
uint32_t read_len = 0;
- if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) {
+ if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) {
read_len = uapi_flash_read_data_without_align(0, flash_offset, tmp_ram_data, size);
} else {
read_len = uapi_flash_read_data(0, flash_offset, tmp_ram_data, size);
goto end;
}
- if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) {
+ if (flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) {
write_len = uapi_flash_write_data_without_align(0, flash_offset, ram_data, size);
} else {
write_len = uapi_flash_write_data(0, flash_offset, ram_data, size);
uint32_t tail_size = UPG_FLASH_PAGE_SIZE - (flash_offset + UPG_FLASH_PAGE_SIZE) % UPG_FLASH_PAGE_SIZE;
if (tail_size < size) { /* 跨页时,按页读取 */
- if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) &&
+ if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) &&
(flash_offset < status_flag_offset + status_flag_size)) {
read_len = uapi_flash_read_data_without_align(0, flash_offset, ram_data, tail_size);
} else {
}
uint32_t remain_size = size - read_len;
- if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) &&
+ if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) &&
(flash_offset < status_flag_offset + status_flag_size)) {
read_len = uapi_flash_read_data_without_align(0, flash_offset, ram_data + read_len, remain_size);
} else {
}
uint32_t write_len = 0;
- if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) &&
+ if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) &&
(flash_offset < status_flag_offset + status_flag_size)) {
write_len = uapi_flash_write_data_without_align(0, flash_offset, ram_data, size);
} else {
}
uint32_t read_len = 0;
- if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) && (flash_offset >= status_flag_offset) &&
+ if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) && (flash_offset >= status_flag_offset) &&
(flash_offset < status_flag_offset + status_flag_size)) {
read_len = uapi_flash_read_data_without_align(0, flash_offset, cmp_data, size);
} else {
{
flash_info_t flash_info;
uapi_flash_get_info(0, &flash_info);
- if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) &&
+ if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) &&
((g_codeloader_flash_writing_commands_location >= NV_FLASH_REGION_START) &&
(g_codeloader_flash_writing_commands_location < (NV_FLASH_REGION_START + NV_FLASH_REGION_LENGTH)))) {
uapi_flash_write_data_without_align(CHIP_FLASH_ID,
/* puya flash do not verification */
flash_info_t flash_info;
uapi_flash_get_info(0, &flash_info);
- if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL) &&
+ if ((flash_info.flash_id == FLASH_MANUFACTURER_PUYA_P25Q64SL || flash_info.flash_id == FLASH_MANUFACTURER_PUYA_PY25Q128LA) &&
((g_codeloader_data_save_position.load_start_addr >= NV_FLASH_REGION_START) &&
(g_codeloader_data_save_position.load_length <= NV_FLASH_REGION_LENGTH))) {
(void)uapi_flash_exit_from_xip_mode(0);
<dial title="asteroid" description="asteroid clock" size="466 466" version="1.0" preview_img="./instance/asteroid/asteroid.png">\r
\r
- <video id="video" rect="0 0 466 466" source="./instance/asteroid/asteroid.mp4" color_key="0xff212324" preview_frame="./instance/asteroid/asteroid.png"></video>\r
+ <video id="video" rect="0 0 466 466" source="./instance/asteroid/asteroid.mp4" color_key="0xff212324" preview_frame="./instance/asteroid/preview_asteroid.png"></video>\r
\r
<label id="month_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="142 390 60 30" text="%2.0f月" font_size="26" align="center" bind_data="18" period="10"></label>\r
<label id="day_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="179 390 60 30" text="%2.0f号" font_size="26" align="center" bind_data="16" period="10"></label>\r
\r
<!-- <label id="week_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="262 390 60 30" text="星期%2.0f" font_size="26" align="center" bind_data="17" period="10"></label> -->\r
\r
- <box_progress id="battery_progress" rect="180 43 31 19" gradient_colors="0xFFFF0000 0xFF00FF00 0xFF0000FF" gradient_stops="0.0 0.67 1.0" cap_type="none" direction="left_to_right" background_color="0x00FFFFFF" bind_data="8" period="10"></box_progress>\r
+ <box_progress id="battery_progress" rect="180 43 31 19" color="0xFFFFFFFF" cap_type="none" direction="left_to_right" background_color="0x00FFFFFF" bind_data="25" period="10"></box_progress>\r
<option_img position="174 37" img_names="./instance/asteroid/Battery/Battery.png,./instance/asteroid/Battery/BatteryCharge.png" bind_data="20" period="10"></option_img>\r
<label id="battery_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="226 35 200 60" text="%2.0f%%" font_size="26" align="center" bind_data="8" period="10"></label>\r
<label id="hour_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="100 300 200 60" text="%02.0f" font_size="90" align="center" bind_data="15" period="10"></label>\r
<dial title="satellite" description="satellite clock" size="466 466" version="1.0" preview_img="./instance/satellite/satellite.png">\r
\r
- <video id="video" rect="0 0 466 466" source="./instance/satellite/satellite.mp4" color_key="0xff212324" preview_frame="./instance/satellite/satellite.png"></video>\r
+ <video id="video" rect="0 0 466 466" source="./instance/satellite/satellite.mp4" color_key="0xff212324" preview_frame="./instance/satellite/preview_satellite.png"></video>\r
\r
<label id="month_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="142 390 60 30" text="%2.0f月" font_size="26" align="center" bind_data="18" period="10"></label>\r
<label id="day_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="179 390 60 30" text="%2.0f号" font_size="26" align="center" bind_data="16" period="10"></label>\r
\r
<!-- <label id="week_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="262 390 60 30" text="星期%2.0f" font_size="26" align="center" bind_data="17" period="10"></label> -->\r
\r
- <box_progress id="battery_progress" rect="180 43 31 19" gradient_colors="0xFFFF0000 0xFF00FF00 0xFF0000FF" gradient_stops="0.0 0.67 1.0" cap_type="none" direction="left_to_right" background_color="0x00FFFFFF" bind_data="8" period="10"></box_progress>\r
+ <box_progress id="battery_progress" rect="180 43 31 19" color="0xFFFFFFFF" cap_type="none" direction="left_to_right" background_color="0x00FFFFFF" bind_data="25" period="10"></box_progress>\r
<option_img position="174 37" img_names="./instance/satellite/Battery/Battery.png,./instance/satellite/Battery/BatteryCharge.png" bind_data="20" period="10"></option_img>\r
<label id="battery_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="226 35 200 60" text="%2.0f%%" font_size="26" align="center" bind_data="8" period="10"></label>\r
<label id="hour_label" color="0xFFFFFFFF" font="HarmonyOS_Sans_SC_Regular.ttf" break_mode="adapt" rect="100 300 200 60" text="%02.0f" font_size="90" align="center" bind_data="15" period="10"></label>\r