static constexpr const char *COMPASS_IAMGES = APP_RES_PATH "/compass/compass.bin";
static constexpr const char *DROPDOWN_IAMGES = APP_RES_PATH "/dropdown/dropdown.bin";
static constexpr const char *HEART_IAMGES = APP_RES_PATH "/heart/heart.bin";
- static constexpr const char *BLOOD_IAMGES = APP_RES_PATH "/Blood/BloodOxygen.bin";
- static constexpr const char *TRAINING_IAMGES = APP_RES_PATH "/Training/Training.bin";
- static constexpr const char *MESSAGE_IAMGES = APP_RES_PATH "/Message/Message.bin";
+ static constexpr const char *BLOOD_IAMGES = APP_RES_PATH "/maincard/BloodOxygen.bin";
+ static constexpr const char *TRAINING_IAMGES = APP_RES_PATH "/maincard/Training.bin";
+ static constexpr const char *MESSAGE_IAMGES = APP_RES_PATH "/maincard/Message.bin";
/* ----------------------------------- 打电话图片 ---------------------------------- */
static constexpr const char *PNG_AGREEING_IMAGE_PATH = APP_RES_PATH "/AGREEING.bin";
static constexpr const char *PNG_DISSGREE_IMAGE_PATH = APP_RES_PATH "/DISSGREE.bin";
{VIEW_COMPASS, PNG_APPLIST_COMPASS_IMAGE, PNG_APPLIST_COMPASS_IMAGE, "指南针", nullptr},
{VIEW_INDOORWALK, PNG_APPLIST_WALK_IMAGE, PNG_APPLIST_WALK_IMAGE, "室内步行", nullptr},
{VIEW_WEATHER, PNG_APPLIST_WEATHER_IMAGE, PNG_APPLIST_WEATHER_IMAGE, "天气", nullptr},
- {VIEW_HEART, PNG_APPLIST_HEART_IMAGE, PNG_APPLIST_HEART_IMAGE, "心率检测", nullptr},
+ // {VIEW_HEART, PNG_APPLIST_HEART_IMAGE, PNG_APPLIST_HEART_IMAGE, "心率检测", nullptr},
{VIEW_RECORD, PNG_APPLIST_RECORD_IMAGE, PNG_APPLIST_RECORD_IMAGE, "录音", nullptr},
{VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_SETTING_IMAGE, "设置", nullptr},
{VIEW_DIALUPDATE, PNG_APPLIST_UI_SAMPLE_IMAGE, PNG_APPLIST_UI_SAMPLE_IMAGE, "表盘切换", nullptr},
namespace OHOS
{
DialUpdateModel::DialUpdateModel() {}
-
DialUpdateModel::~DialUpdateModel() {}
-
DialUpdateModel *DialUpdateModel::GetInstance()
{
static DialUpdateModel instance;
bool initstatus = true;\r
bool wearstatus;\r
uint8_t wear_;\r
- uint64 timestamp_ms;\r
- uint8_t wear_error;\r
+ uint8_t valid_counter_ = 0;//有效数计数器\r
+ uint8_t wear_counter_ = 0;//佩戴错误计数器\r
};\r
}\r
\r
return nullptr;
}
imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_Time, CHECKIMAGEANIMATORVIEW_SIZE, CHECKIMAGEANIMATORVIEW_SPEED);
- imageAnimator->SetRepeatTimes(30);
- imageAnimator->SetRepeat(false);
+ //imageAnimator->SetRepeatTimes(30);
+ imageAnimator->SetRepeat(true);
imageAnimator->Start();
HeartCheckScrollView->Add(imageAnimator);
/* -------------------------------------------------------------------------- */
CheckView = false;\r
ResultView = false;\r
CheckStatus = false;\r
+ wearStatus = true;\r
// 初始化血氧值\r
- HeartRateData *data = new HeartRateData;\r
+ HeartRateData *data;\r
data = HeartService::GetInstance()->ReadHeartRateData();\r
Heart_ = data->Heart;\r
TIME_ = data->timestamp;\r
}\r
}\r
/* ---------------------------------- 状态检测 ---------------------------------- */\r
- /**\r
- * @brief 设置佩戴状态\r
- */\r
+\r
void HeartModel::Heart_Start()\r
{\r
- //进行初始化操作\r
- timestamp_ms=0;\r
-\r
+ // 进行初始化操作\r
+ SetCheckStatus(true);\r
}\r
- /**\r
- * @brief 设置结束状态\r
- */\r
+\r
void HeartModel::Heart_Stop()\r
{\r
- \r
+ valid_counter_ = 0;\r
+ wear_counter_ = 0;\r
+ SetCheckStatus(false);\r
}\r
\r
- /**\r
- * @brief 设置佩戴状态\r
- *\r
- * @param wear 佩戴状态值\r
- */\r
void HeartModel::SetWearStatus(uint8_t wear)\r
{\r
// 设置佩戴状态\r
if (wear_ != 1)\r
{\r
// 佩戴错误计时器计数\r
- wear_error++;\r
+ wear_counter_++;\r
// 计数达到10次,停止检测\r
- if (wear_error >= 10)\r
+ if (wear_counter_ >= 10)\r
{\r
wearStatus = false;\r
}\r
wearStatus = true;\r
}\r
\r
- /**\r
- * @brief 获取佩戴状态\r
- *\r
- * @return 佩戴状态\r
- */\r
- bool HeartModel::GetWearStatus(void) { return wearStatus; }\r
-\r
- /**\r
- * @brief 设置心率带视图状态\r
- *\r
- * @param bandoffViewStatus 心率带视图状态值\r
- */\r
- void HeartModel::SetHeartBandoffViewStatus(bool bandoffViewStatus) { BandoffView = bandoffViewStatus; }\r
-\r
- /**\r
- * @brief 获取心率带视图状态\r
- *\r
- * @return 心率带视图状态\r
- */\r
- bool HeartModel::GetHeartBandoffViewStatus() { return BandoffView; }\r
-\r
- /**\r
- * @brief 获取心率视图状态\r
- *\r
- * @return 心率视图状态\r
- */\r
- bool HeartModel::GetHeartViewStatus() { return HeartView; }\r
-\r
- /**\r
- * @brief 设置心率视图状态\r
- *\r
- * @param heartViewStatus 心率视图状态值\r
- */\r
- void HeartModel::SetHeartViewStatus(bool heartViewStatus) { HeartView = heartViewStatus; }\r
-\r
- /**\r
- * @brief 获取心率检测视图状态\r
- *\r
- * @return 心率检测视图状态\r
- */\r
- bool HeartModel::GetHeartCheckViewStatus() { return CheckView; }\r
-\r
- /**\r
- * @brief 设置心率检测视图状态\r
- *\r
- * @param checkViewStatus 心率检测视图状态值\r
- */\r
- void HeartModel::SetHeartCheckViewStatus(bool checkViewStatus) { CheckView = checkViewStatus; }\r
-\r
- /**\r
- * @brief 获取心率结果视图状态\r
- *\r
- * @return 心率结果视图状态\r
- */\r
- bool HeartModel::GetHeartResultViewStaus() { return ResultView; }\r
-\r
- /**\r
- * @brief 设置心率结果视图状态\r
- *\r
- * @param resultViewStatus 心率结果视图状态值\r
- */\r
- void HeartModel::SetHeartResultViewStatus(bool resultViewStatus) { ResultView = resultViewStatus; }\r
-\r
- /**\r
- * @brief 获取检测状态\r
- *\r
- * @return 检测状态\r
- */\r
- bool HeartModel::GetCheckStatus() { return CheckStatus; }\r
-\r
- /**\r
- * @brief 设置检测状态\r
- *\r
- * @param checkStatus 检测状态值\r
- */\r
- void HeartModel::SetCheckStatus(bool checkStatus) { CheckStatus = checkStatus; }\r
-\r
- /**\r
- * @brief 获取心率数据\r
- *\r
- * @return 心率数据\r
- */\r
- uint16_t HeartModel::GetHeartdata() { return Heart_; }\r
-\r
- /**\r
- * @brief 获取显示的心率数据\r
- *\r
- * @return 显示的心率数据\r
- */\r
- uint16_t HeartModel::GetShowHeartdata() { return Show_Heart_; }\r
-\r
- /**\r
- * @brief 更新心率数据\r
- *\r
- * @param heart 心率值\r
- */\r
+ bool HeartModel::GetWearStatus()\r
+ {\r
+ return wearStatus;\r
+ }\r
+\r
+ void HeartModel::SetHeartBandoffViewStatus(bool bandoffViewStatus)\r
+ {\r
+ BandoffView = bandoffViewStatus;\r
+ }\r
+\r
+ bool HeartModel::GetHeartBandoffViewStatus()\r
+ {\r
+ return BandoffView;\r
+ }\r
+\r
+ void HeartModel::SetHeartViewStatus(bool heartViewStatus)\r
+ {\r
+ HeartView = heartViewStatus;\r
+ }\r
+\r
+ bool HeartModel::GetHeartViewStatus()\r
+ {\r
+ return HeartView;\r
+ }\r
+\r
+ void HeartModel::SetHeartCheckViewStatus(bool checkViewStatus)\r
+ {\r
+ CheckView = checkViewStatus;\r
+ }\r
+\r
+ bool HeartModel::GetHeartCheckViewStatus()\r
+ {\r
+ return CheckView;\r
+ }\r
+\r
+ void HeartModel::SetHeartResultViewStatus(bool resultViewStatus)\r
+ {\r
+ ResultView = resultViewStatus;\r
+ }\r
+\r
+ bool HeartModel::GetHeartResultViewStaus()\r
+ {\r
+ return ResultView;\r
+ }\r
+\r
+ void HeartModel::SetCheckStatus(bool checkStatus)\r
+ {\r
+ CheckStatus = checkStatus;\r
+ }\r
+\r
+ bool HeartModel::GetCheckStatus()\r
+ {\r
+ return CheckStatus;\r
+ }\r
+\r
+ uint16_t HeartModel::GetHeartdata()\r
+ {\r
+ return Heart_;\r
+ }\r
+\r
+ uint16_t HeartModel::GetShowHeartdata()\r
+ {\r
+ return Show_Heart_;\r
+ }\r
+\r
+ uint64_t HeartModel::GetCheckTime()\r
+ {\r
+ return TIME_;\r
+ }\r
+\r
+ void HeartModel::SetCheckTime(uint64_t time)\r
+ {\r
+ TIME_ = time;\r
+ }\r
+\r
void HeartModel::UpHeartdata(uint16_t heart)\r
{\r
Show_Heart_ = heart;\r
if (Show_Heart_ != 0)\r
{\r
Heart_ = heart;\r
+ valid_counter_++; // 增加有效计数器\r
+ }\r
+ else\r
+ {\r
+ valid_counter_ = 0; // 清零有效计数器\r
}\r
- }\r
\r
- /**\r
- * @brief 获取检测时间\r
- *\r
- * @return 检测时间\r
- */\r
- uint64_t HeartModel::GetCheckTime()\r
- {\r
- if (initstatus)\r
+ if (valid_counter_ >= 10)\r
{\r
- // 获取当前时间\r
- TIME_ = HeartPresenter::GetInstance()->GetCurrentTime();\r
- initstatus = false;\r
+ // 结束本次测试,将最后一次有效数作为本次测量结果\r
+ Heart_Stop();\r
+ HeartRateData *data;\r
+ data->Heart = heart;\r
+ data->timestamp = HeartPresenter::GetInstance()->GetCurrentTime();\r
+ SetCheckTime(data->timestamp);\r
+ HeartService::GetInstance()->UpdateHeartRateData(*data);\r
}\r
- return TIME_;\r
}\r
\r
- /**\r
- * @brief 设置检测时间\r
- *\r
- * @param time 检测时间值\r
- */\r
- void HeartModel::SetCheckTime(uint64_t time) { TIME_ = time; }\r
-\r
}\r
std::string HeartPresenter::GetTDOA(uint16_t new_time, uint16_t old_time)
{
- if (new_time == old_time)
+ if (new_time == old_time || old_time > new_time)
{
return "刚刚";
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTCHECKVIEW->HEARTVIEW");
HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTVIEW);
HeartModel::GetInstance()->SetHeartCheckViewStatus(false);
- HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
- return true;
+ HeartModel::GetInstance()->Heart_Stop();
}
// 从检测失败界面回到检测界面
if (strcmp(view.GetViewId(), "ReCheck") == 0)
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTRESULT->HEARTCHECKVIEW");
HeartView::GetInstance()->ChangeView(HEARTRESULT, HEARTCHECKVIEW);
HeartCheckView::GetInstance()->GetImageAnimator()->Start(); // 播放检测界面动画
- HeartModel::GetInstance()->SetCheckStatus(true); // 开始检测
+ HeartModel::GetInstance()->Heart_Start(); // 开始检测
return true;
}
// 从检测失败界面回到主界面
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTRESULT->HEARTVIEW");
HeartView::GetInstance()->ChangeView(HEARTRESULT, HEARTVIEW);
- HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
+ HeartModel::GetInstance()->Heart_Stop();
return true;
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartPresenter::OnClick");
// 当检测状态为开始检测,开始检测
if (HeartModel::GetInstance()->GetCheckStatus() == true)
{
- HeartCheckView::GetInstance()->UpShowHeartText(); // 更新
+ HeartCheckView::GetInstance()->UpShowHeartText(); // 更新检测界面
if (startheart == true)
{
uint8_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
- //send_ppg_cmd_msg(md);
+ send_ppg_cmd_msg(md);
startheart = false;
}
}
// 当检测状态为结束检测,结束检测
if (HeartModel::GetInstance()->GetCheckStatus() == false)
{
- HeartView::GetInstance()->UpHeartText(); // 更新主界面
+ if (HeartCheckView::GetInstance()->GetImageAnimator()->GetState() == true)
+ {
+ HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
+ }
if (startheart == false)
{
uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;
- //send_ppg_cmd_msg(md);
+ send_ppg_cmd_msg(md);
startheart = true;
}
}
+
+ // 监测佩戴状态
+ if (HeartModel::GetInstance()->GetWearStatus() == false)
+ {
+ HeartModel::GetInstance()->Heart_Stop();
+ if (HeartCheckView::GetInstance()->GetImageAnimator()->GetState() == true)
+ {
+ HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
+ }
+ }
}
void HeartPresenter::ReturnInterface()
HeartModel::GetInstance()->SetHeartCheckViewStatus(true);
// 播放检测界面动画
HeartCheckView::GetInstance()->GetImageAnimator()->Start();
- HeartModel::GetInstance()->SetCheckStatus(true); // 开始检测
+ HeartModel::GetInstance()->Heart_Start(); // 开始检测
}
}
else
{
HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTVIEW);
+ HeartView::GetInstance()->UpHeartText();
}
HeartModel::GetInstance()->SetHeartCheckViewStatus(false);
- HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
+ HeartModel::GetInstance()->Heart_Stop();
}
- uint16_t time = GetCurrentTime();
- HeartModel::GetInstance()->SetCheckTime(time); // 更新时间
}
if (HeartModel::GetInstance()->GetHeartResultViewStaus() == true)
{
- HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
+ HeartModel::GetInstance()->Heart_Stop();
}
}
void HeartPresenter::Notify(void)
#include "heartrate/include/HeartView.h"
#include "heartrate/include/HeartPresenter.h"
-#include "HeartModel.h"
+#include "heartrate/include/HeartModel.h"
#include "displaybrightness/include/DisplayBrightnessModel.h"
#include "power_display_service.h"
-#include "HeartBandoffView.h"
-#include "HeartCheckView.h"
-#include "HeartRateView.h"
+#include "heartrate/include/HeartBandoffView.h"
+#include "heartrate/include/HeartCheckView.h"
+#include "heartrate/include/HeartRateView.h"
namespace OHOS
{
{
// 更新血氧数据
uint16_t heart_ = HeartModel::GetInstance()->GetHeartdata();
+ std::string heartStr;
+ std::string TimeStr;
if (heart_ != 0) // 判断是否为默认数据
{
- std::string heartStr = std::to_string(heart_);
- percent->SetText(heartStr.c_str());
+ heartStr = std::to_string(heart_);
+ // 更新时间
+ uint16_t time = HeartPresenter::GetInstance()->GetCurrentTime();
+ uint16_t check_time = HeartModel::GetInstance()->GetCheckTime();
+ TimeStr = HeartPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";
}
- // 更新时间
- uint16_t time = HeartPresenter::GetInstance()->GetCurrentTime();
- uint16_t check_time = HeartModel::GetInstance()->GetCheckTime();
- std::string TimeStr = HeartPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";
+ else
+ {
+ heartStr = "--";
+ TimeStr = "暂无检测记录";
+ }
+ percent->SetText(heartStr.c_str());
timeLabel->SetText(TimeStr.c_str());
}
percent->Resize(300, 250); // widget's width and height
percent->SetViewId("label2"); // Set style
percent->SetStyle(STYLE_TEXT_FONT, PERCENT_FONT_SIZE);
- uint16_t heart_ = HeartModel::GetInstance()->GetHeartdata();
- std::string heartStr = std::to_string(heart_);
- percent->SetText(heartStr.c_str());
percent->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
percent->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
percent->SetRollSpeed(0);
timeLabel->SetViewId("label1"); // Set style
timeLabel->SetStyle(STYLE_TEXT_FONT, TIMELABEL_FONT_SIZE);
/* -------------------------------------------------------------------------- */
- // 更新时间
- uint16_t on_time = HeartPresenter::GetInstance()->GetCurrentTime();
- uint16_t check_time = HeartModel::GetInstance()->GetCheckTime();
- std::string TimeStr = HeartPresenter::GetInstance()->GetTDOA(on_time, check_time);
- timeLabel->SetText(TimeStr.c_str());
- /* -------------------------------------------------------------------------- */
timeLabel->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
timeLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
timeLabel->SetRollSpeed(0);
titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
titleLabel->SetRollSpeed(0);
titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, TITLE_FONT_SIZE);
+ /* -------------------------------------------------------------------------- */
+ uint16_t heart_ = HeartModel::GetInstance()->GetHeartdata();
+ std::string heartStr;
+ std::string TimeStr;
+ if (heart_ != 0) // 判断是否为默认数据
+ {
+ heartStr = std::to_string(heart_);
+ // 更新时间
+ uint16_t time = HeartPresenter::GetInstance()->GetCurrentTime();
+ uint16_t check_time = HeartModel::GetInstance()->GetCheckTime();
+ TimeStr = HeartPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";
+ }
+ else
+ {
+ heartStr = "--";
+ TimeStr = "暂无检测记录";
+ }
+ percent->SetText(heartStr.c_str());
+
+ timeLabel->SetText(TimeStr.c_str());
+
/* -------------------------------------------------------------------------- */
return true;
}
HeartScrollView[showView]->SetVisible(true);
Draw();
}
- /* -------------------------------------------------------------------------- */
bool HeartView::SetOnDragListener()
{
UIView::OnDragListener *dragListener = (UIView::OnDragListener *)OHOS::HeartPresenter::GetInstance();
return true;
}
+ /* -------------------------------------------------------------------------- */
void HeartView::OnStart()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartView::OnStart");
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTVIEW:: OnSetUpView has nullptr");
return;
}
+
HeartScrollView[HEARTVIEW]->Add(imageViewMain);
HeartScrollView[HEARTVIEW]->Add(percent);
HeartScrollView[HEARTVIEW]->Add(timeLabel);
HeartScrollView[HEARTVIEW]->Add(titleLabel);
HeartScrollView[HEARTVIEW]->Add(testButton);
+
RootView::GetInstance()->Add(HeartScrollView[HEARTVIEW]);
+
Draw();
}
}
else if (view_->GetHorCurrentPage() == BloodOxygen)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodCardView");
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodCardView");
// BloodCardView::GetInstance()->UpSPO2data();
}
}
LoadAppMultiImages(DROPDOWN_IAMGES, DROPDOWN_BLUETOOTHCONNECTED, DROPDOWN_SETTING);
LoadAppMultiImages(HEART_IAMGES, HEART_HEARTRATECOOR, HEART_HEARTRATE_TOP);
LoadAppMultiImages(BLOOD_IAMGES, BLOODOXYGEN_BACKGOUND, BLOODOXYGEN_BACKGOUND);
- //LoadAppMultiImages(TRAINING_IAMGES, TRAINING_BOUTTONGROUND, TRAINING_WALKING_BIG);
+ LoadAppMultiImages(TRAINING_IAMGES, TRAINING_BOUTTONGROUND, TRAINING_WALKING_BIG);
LoadAppMultiImages(MESSAGE_IAMGES, MESSAGE_MESSAGE, MESSAGE_WECHAT);
}
}
{
unused(topic);
unused(req);
- // if (topic == TOPIC_EVENT_SPO2_UPDATE && req != nullptr && req->data != nullptr)
- // {
- // u_int8_t sp02 = *((u_int8_t*)(req->data)); // 进行类型转换
- // DialModelSPO2::GetInstance()->UpdateSPO2(sp02);
- // BloodOxygenModel::GetInstance()->UpSPO2data(sp02);
- // }
}
void MsgCenterNotifyleaklighthProc(const Topic topic, Request* req)
{
unused(topic);
unused(req);
- // if (topic == TOPIC_EVENT_SPO2_UPDATE && req != nullptr && req->data != nullptr)
- // {
- // u_int8_t sp02 = *((u_int8_t*)(req->data)); // 进行类型转换
- // DialModelSPO2::GetInstance()->UpdateSPO2(sp02);
- // BloodOxygenModel::GetInstance()->UpSPO2data(sp02);
- // }
}
//穿戴状态
if ( topic == TOPIC_EVENT_WEARSTATE_UPDATE)
{
int32_t wear = *((int32_t*)(req->data)); // 进行类型转换
-
+
BloodOxygenModel::GetInstance()->SetWearStatus(wear);
HeartModel::GetInstance()->SetWearStatus(wear);
}
--- /dev/null
+{
+ "RaiseToBrightnessCheckBoxButtonState": false,
+ "ScreenBrightnessValue": 255,
+ "ScreenDurationRadioButtonSlectValue": 1,
+ "TradionalBlueToothToggleButtonState": false,
+ "HeartRateOrBloodOxygenQuickAccessSwitch": 0,
+ "Dial_Id":0
+}
\ No newline at end of file