#define CHECK 0
#define HARD_OFF 1
#define TRAINING_PATH "user/userdata/sportdata/"
+
+#ifdef __cplusplus
extern "C"
{
+#endif
static void Notify(void *args, const Topic topic, Request *request);
+
+ using namespace OHOS;
+
+ Subscriber TraingSubscirber = {
+ .identity = NULL,
+ .args = NULL,
+ .Notify = Notify,
+ };
+
+ void TraingSubscribeTopic(Topic topic)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "stepsubscribeTopic, topic=%u", topic);
+ BroadcastApi *broadcastApi = NULL;
+ IUnknown *api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);
+ if (api == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stepsubscribeTopic, GetFeatureApi failed");
+ return;
+ }
+ int result = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);
+ if (result != 0 || broadcastApi == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stepsubscribeTopic, QueryInterface failed");
+ return;
+ }
+ broadcastApi->SubscribeTopic((IUnknown *)broadcastApi, topic, &TraingSubscirber);
+ broadcastApi->Release((IUnknown *)broadcastApi);
+ }
+
+ void TraingUnsubscribeTopic(Topic topic)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingUnsubscribeTopic, topic=%u", topic);
+ BroadcastApi *broadcastApi = NULL;
+ IUnknown *api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME, BROADCAST_FEATURE_NAME);
+ if (api == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingUnsubscribeTopic, GetFeatureApi failed");
+ return;
+ }
+ int result = api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);
+ if (result != 0 || broadcastApi == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingUnsubscribeTopic, QueryInterface failed");
+ return;
+ }
+ broadcastApi->UnsubscribeTopic((IUnknown *)broadcastApi, topic, &TraingSubscirber);
+ broadcastApi->Release((IUnknown *)broadcastApi);
+ }
+ static void Notify(void *args, const Topic topic, Request *request)
+ {
+ UNUSED(args);
+ UNUSED(topic);
+ if (request == NULL)
+ {
+ return;
+ }
+ cywee_activity_result_t *cyweeInfo = nullptr; // 在switch语句外部定义变量
+ int rets;
+ PRINT("request %d\r\n", request->msgId);
+ switch (request->msgId)
+ {
+ case TOPIC_EVENT_TREADMILL_UPDATE:
+ cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
+ rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
+ if (rets != EOK)
+ {
+ delete cyweeInfo; // 处理内存分配失败的情况
+ cyweeInfo = NULL;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_t fail! ret = %d", rets);
+ return;
+ }
+ TraingModel::GetInstance()->AnalysisData(cyweeInfo);
+ break;
+ case TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE:
+ cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
+ rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
+ if (rets != EOK)
+ {
+ delete cyweeInfo; // 处理内存分配失败的情况
+ cyweeInfo = NULL;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_t fail! ret = %d", rets);
+ return;
+ }
+ TraingModel::GetInstance()->AnalysisData(cyweeInfo);
+ break;
+ case TOPIC_EVENT_INDOOR_RUNNING_UPDATE:
+ cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
+ rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
+ if (rets != EOK)
+ {
+ delete cyweeInfo; // 处理内存分配失败的情况
+ cyweeInfo = NULL;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_t fail! ret = %d", rets);
+ return;
+ }
+ TraingModel::GetInstance()->AnalysisData(cyweeInfo);
+ break;
+ case TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE:
+ cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
+ rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
+ if (rets != EOK)
+ {
+ delete cyweeInfo; // 处理内存分配失败的情况
+ cyweeInfo = NULL;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_t fail! ret = %d", rets);
+ return;
+ }
+ TraingModel::GetInstance()->AnalysisData(cyweeInfo);
+ break;
+ case TOPIC_EVENT_FREE_TRAINING_UPDATE:
+ cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
+ rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
+ if (rets != EOK)
+ {
+ delete cyweeInfo; // 处理内存分配失败的情况
+ cyweeInfo = NULL;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_result_t fail! ret = %d", rets);
+ return;
+ }
+ TraingModel::GetInstance()->AnalysisData(cyweeInfo);
+ break;
+ default:
+ // 处理未知msgId的情况
+ break;
+ }
+ delete cyweeInfo; // 释放内存
+ }
+#ifdef __cplusplus
}
+#endif
+
namespace OHOS
{
#if TIMER
TraingModel ::~TraingModel()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::~TraingModel()");
+ // 取消订阅
+ TraingUnsubscribeTopic(TOPIC_EVENT_TREADMILL_UPDATE);
+ TraingUnsubscribeTopic(TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE);
+ TraingUnsubscribeTopic(TOPIC_EVENT_INDOOR_RUNNING_UPDATE);
+ TraingUnsubscribeTopic(TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE);
+ TraingUnsubscribeTopic(TOPIC_EVENT_FREE_TRAINING_UPDATE);
}
TraingModel *TraingModel::GetInstance(void)
{
static TraingModel instance;
return &instance;
}
+
+ void TraingModel ::Init()
+ {
+ // 进行消息订阅
+ TraingSubscribeTopic(TOPIC_EVENT_TREADMILL_UPDATE);
+ TraingSubscribeTopic(TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE);
+ TraingSubscribeTopic(TOPIC_EVENT_INDOOR_RUNNING_UPDATE);
+ TraingSubscribeTopic(TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE);
+ TraingSubscribeTopic(TOPIC_EVENT_FREE_TRAINING_UPDATE);
+ }
+
+ /* -------------------------------------------------------------------------- */
/***
* @description:
* @param {QuickTraining} *quickTraining
// 通用数据
sportdata->calories = cyweeInfo->calories;
sportdata->duration = cyweeInfo->duration;
- PRINT("normal sportdata->calories[%d],sportdata->duration[%d] \r\n",sportdata->calories,sportdata->duration);
+ PRINT("normal sportdata->calories[%d],sportdata->duration[%d] \r\n", sportdata->calories, sportdata->duration);
switch (type)
{
case ExerciseClass::OUTDOOR:
case ExerciseClass::INDOOR:
sportdata->distance = cyweeInfo->distance;
sportdata->steps = cyweeInfo->steps;
- PRINT("indoor sportdata->distance[%d],sportdata->steps[%d] \r\n",sportdata->distance,sportdata->steps);
+ PRINT("indoor sportdata->distance[%d],sportdata->steps[%d] \r\n", sportdata->distance, sportdata->steps);
break;
case ExerciseClass::FREE_TRAINING:
break;
{
return sportdata;
}
- static void Notify(void *args, const Topic topic, Request *request)
- {
- UNUSED(args);
- UNUSED(topic);
- if (request == NULL)
- {
- return;
- }
- cywee_activity_result_t *cyweeInfo = nullptr; // 在switch语句外部定义变量
- int rets;
- switch (request->msgId)
- {
- case TOPIC_EVENT_TREADMILL_UPDATE:
- cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
- rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
- if (rets != EOK)
- {
- delete cyweeInfo; // 处理内存分配失败的情况
- cyweeInfo = NULL;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_t fail! ret = %d", rets);
- return;
- }
- TraingModel::GetInstance()->AnalysisData(cyweeInfo);
- break;
- case TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE:
- cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
- rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
- if (rets != EOK)
- {
- delete cyweeInfo; // 处理内存分配失败的情况
- cyweeInfo = NULL;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_t fail! ret = %d", rets);
- return;
- }
- TraingModel::GetInstance()->AnalysisData(cyweeInfo);
- break;
- case TOPIC_EVENT_INDOOR_RUNNING_UPDATE:
- cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
- rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
- if (rets != EOK)
- {
- delete cyweeInfo; // 处理内存分配失败的情况
- cyweeInfo = NULL;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_t fail! ret = %d", rets);
- return;
- }
- TraingModel::GetInstance()->AnalysisData(cyweeInfo);
- break;
- case TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE:
- cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
- rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
- if (rets != EOK)
- {
- delete cyweeInfo; // 处理内存分配失败的情况
- cyweeInfo = NULL;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_activity_result_t fail! ret = %d", rets);
- return;
- }
- TraingModel::GetInstance()->AnalysisData(cyweeInfo);
- break;
- case TOPIC_EVENT_FREE_TRAINING_UPDATE:
- cyweeInfo = new cywee_activity_result_t(); // 在case块内分配内存
- rets = memcpy_s(cyweeInfo, sizeof(cywee_activity_result_t), (cywee_activity_result_t *)request->data, request->len);
- if (rets != EOK)
- {
- delete cyweeInfo; // 处理内存分配失败的情况
- cyweeInfo = NULL;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "memcpy_s cywee_result_t fail! ret = %d", rets);
- return;
- }
- TraingModel::GetInstance()->AnalysisData(cyweeInfo);
- break;
- default:
- // 处理未知msgId的情况
- break;
- }
- delete cyweeInfo; // 释放内存
- }
+
/* -------------------------------------------------------------------------- */
#if TIMER
/* 时间显示 */