1/*
2 * Copyright (c) 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#include "active_info.h"
17
18#include "sensor_errors.h"
19
20#undef LOG_TAG
21#define LOG_TAG "ActiveInfo"
22
23namespace OHOS {
24namespace Sensors {
25using namespace OHOS::HiviewDFX;
26
27ActiveInfo::ActiveInfo(int32_t pid, int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs)
28    :pid_(pid), sensorId_(sensorId), samplingPeriodNs_(samplingPeriodNs), maxReportDelayNs_(maxReportDelayNs)
29{}
30
31int32_t ActiveInfo::GetPid() const
32{
33    return pid_;
34}
35
36void ActiveInfo::SetPid(int32_t pid)
37{
38    pid_ = pid;
39}
40
41int32_t ActiveInfo::GetSensorId() const
42{
43    return sensorId_;
44}
45
46void ActiveInfo::SetSensorId(int32_t sensorId)
47{
48    sensorId_ = sensorId;
49}
50
51int64_t ActiveInfo::GetSamplingPeriodNs() const
52{
53    return samplingPeriodNs_;
54}
55
56void ActiveInfo::SetSamplingPeriodNs(int64_t samplingPeriodNs)
57{
58    samplingPeriodNs_ = samplingPeriodNs;
59}
60
61int64_t ActiveInfo::GetMaxReportDelayNs() const
62{
63    return maxReportDelayNs_;
64}
65
66void ActiveInfo::SetMaxReportDelayNs(int64_t maxReportDelayNs)
67{
68    maxReportDelayNs_ = maxReportDelayNs;
69}
70
71bool ActiveInfo::Marshalling(Parcel &parcel) const
72{
73    if (!parcel.WriteInt32(pid_)) {
74        SEN_HILOGE("Write pid failed");
75        return false;
76    }
77    if (!parcel.WriteInt32(sensorId_)) {
78        SEN_HILOGE("Write sensorId failed");
79        return false;
80    }
81    if (!parcel.WriteInt64(samplingPeriodNs_)) {
82        SEN_HILOGE("Write samplingPeriodNs failed");
83        return false;
84    }
85    if (!parcel.WriteInt64(maxReportDelayNs_)) {
86        SEN_HILOGE("Write maxReportDelayNs failed");
87        return false;
88    }
89    return true;
90}
91
92std::unique_ptr<ActiveInfo> ActiveInfo::Unmarshalling(Parcel &parcel)
93{
94    int32_t pid = -1;
95    int32_t sensorId = -1;
96    int64_t samplingPeriodNs = -1;
97    int64_t maxReportDelayNs = -1;
98    if (!(parcel.ReadInt32(pid) && parcel.ReadInt32(sensorId) &&
99          parcel.ReadInt64(samplingPeriodNs) && parcel.ReadInt64(maxReportDelayNs))) {
100        SEN_HILOGE("Read from parcel is failed");
101        return nullptr;
102    }
103    auto activeInfo = std::make_unique<ActiveInfo>();
104    activeInfo->SetPid(pid);
105    activeInfo->SetSensorId(sensorId);
106    activeInfo->SetSamplingPeriodNs(samplingPeriodNs);
107    activeInfo->SetMaxReportDelayNs(maxReportDelayNs);
108    return activeInfo;
109}
110} // namespace Sensors
111} // namespace OHOS