1/*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifdef DEVICE_STATUS_SENSOR_ENABLE
17#include "algo_base.h"
18
19#include "devicestatus_define.h"
20
21#undef LOG_TAG
22#define LOG_TAG "AlgoBase"
23
24namespace OHOS {
25namespace Msdp {
26namespace DeviceStatus {
27
28void AlgoBase::Unsubscribe(int32_t sensorTypeId)
29{
30    CALL_DEBUG_ENTER;
31    CHKPV(algoCallback_);
32    SENSOR_DATA_CB.UnsubscribeSensorEvent(sensorTypeId, algoCallback_);
33}
34
35bool AlgoBase::SetData(int32_t sensorTypeId, AccelData* sensorData)
36{
37    CALL_DEBUG_ENTER;
38    if (sensorTypeId != SENSOR_TYPE_ID_ACCELEROMETER) {
39        FI_HILOGE("sensorTypeId:%{public}d", sensorTypeId);
40        return false;
41    }
42    CHKPF(sensorData);
43    AccelData* data = sensorData;
44    if ((abs(data->x) > ACC_VALID_THRHD) ||
45        (abs(data->y) > ACC_VALID_THRHD) ||
46        (abs(data->z) > ACC_VALID_THRHD)) {
47        FI_HILOGE("Acc data is invalid");
48        return false;
49    }
50
51    algoPara_.x = data->y;
52    algoPara_.y = data->x;
53    algoPara_.z = -(data->z);
54    FI_HILOGD("x:%{public}f, y:%{public}f, z:%{public}f", algoPara_.x, algoPara_.y, algoPara_.z);
55    return true;
56}
57
58void AlgoBase::RegisterCallback(const std::shared_ptr<IMsdp::MsdpAlgoCallback> callback)
59{
60    CALL_DEBUG_ENTER;
61    callback_ = callback;
62}
63
64void AlgoBase::UpdateStateAndReport(OnChangedValue value, int32_t state, Type type)
65{
66    CALL_DEBUG_ENTER;
67    CHKPV(callback_);
68    state_ = state;
69    reportInfo_.type = type;
70    reportInfo_.value = value;
71    FI_HILOGI("type:%{public}d, value:%{public}d", type, value);
72    callback_->OnResult(reportInfo_);
73}
74} // namespace DeviceStatus
75} // namespace Msdp
76} // namespace OHOS
77#endif // DEVICE_STATUS_SENSOR_ENABLE
78