1bae4d13cSopenharmony_ci/*
2bae4d13cSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3bae4d13cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4bae4d13cSopenharmony_ci * you may not use this file except in compliance with the License.
5bae4d13cSopenharmony_ci * You may obtain a copy of the License at
6bae4d13cSopenharmony_ci *
7bae4d13cSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8bae4d13cSopenharmony_ci *
9bae4d13cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10bae4d13cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11bae4d13cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12bae4d13cSopenharmony_ci * See the License for the specific language governing permissions and
13bae4d13cSopenharmony_ci * limitations under the License.
14bae4d13cSopenharmony_ci */
15bae4d13cSopenharmony_ci
16bae4d13cSopenharmony_ci#include "sensor.h"
17bae4d13cSopenharmony_ci
18bae4d13cSopenharmony_ci#include "sensor_errors.h"
19bae4d13cSopenharmony_ci
20bae4d13cSopenharmony_ci#undef LOG_TAG
21bae4d13cSopenharmony_ci#define LOG_TAG "Sensor"
22bae4d13cSopenharmony_ci
23bae4d13cSopenharmony_cinamespace OHOS {
24bae4d13cSopenharmony_cinamespace Sensors {
25bae4d13cSopenharmony_ciusing namespace OHOS::HiviewDFX;
26bae4d13cSopenharmony_ci
27bae4d13cSopenharmony_ciSensor::Sensor()
28bae4d13cSopenharmony_ci    : sensorId_(0),
29bae4d13cSopenharmony_ci      sensorTypeId_(0),
30bae4d13cSopenharmony_ci      sensorName_(""),
31bae4d13cSopenharmony_ci      vendorName_(""),
32bae4d13cSopenharmony_ci      firmwareVersion_(""),
33bae4d13cSopenharmony_ci      hardwareVersion_(""),
34bae4d13cSopenharmony_ci      maxRange_(0.0),
35bae4d13cSopenharmony_ci      resolution_(0.0),
36bae4d13cSopenharmony_ci      power_(0.0),
37bae4d13cSopenharmony_ci      flags_(0),
38bae4d13cSopenharmony_ci      fifoMaxEventCount_(0),
39bae4d13cSopenharmony_ci      minSamplePeriodNs_(0),
40bae4d13cSopenharmony_ci      maxSamplePeriodNs_(0)
41bae4d13cSopenharmony_ci{}
42bae4d13cSopenharmony_ci
43bae4d13cSopenharmony_ciint32_t Sensor::GetSensorId() const
44bae4d13cSopenharmony_ci{
45bae4d13cSopenharmony_ci    return sensorId_;
46bae4d13cSopenharmony_ci}
47bae4d13cSopenharmony_ci
48bae4d13cSopenharmony_civoid Sensor::SetSensorId(int32_t sensorId)
49bae4d13cSopenharmony_ci{
50bae4d13cSopenharmony_ci    sensorId_ = sensorId;
51bae4d13cSopenharmony_ci}
52bae4d13cSopenharmony_ci
53bae4d13cSopenharmony_ciint32_t Sensor::GetSensorTypeId() const
54bae4d13cSopenharmony_ci{
55bae4d13cSopenharmony_ci    return sensorTypeId_;
56bae4d13cSopenharmony_ci}
57bae4d13cSopenharmony_ci
58bae4d13cSopenharmony_civoid Sensor::SetSensorTypeId(int32_t sensorTypeId)
59bae4d13cSopenharmony_ci{
60bae4d13cSopenharmony_ci    sensorTypeId_ = sensorTypeId;
61bae4d13cSopenharmony_ci}
62bae4d13cSopenharmony_ci
63bae4d13cSopenharmony_cistd::string Sensor::GetSensorName() const
64bae4d13cSopenharmony_ci{
65bae4d13cSopenharmony_ci    return sensorName_;
66bae4d13cSopenharmony_ci}
67bae4d13cSopenharmony_ci
68bae4d13cSopenharmony_civoid Sensor::SetSensorName(const std::string &sensorName)
69bae4d13cSopenharmony_ci{
70bae4d13cSopenharmony_ci    sensorName_ = sensorName;
71bae4d13cSopenharmony_ci}
72bae4d13cSopenharmony_ci
73bae4d13cSopenharmony_cistd::string Sensor::GetVendorName() const
74bae4d13cSopenharmony_ci{
75bae4d13cSopenharmony_ci    return vendorName_;
76bae4d13cSopenharmony_ci}
77bae4d13cSopenharmony_ci
78bae4d13cSopenharmony_civoid Sensor::SetVendorName(const std::string &vendorName)
79bae4d13cSopenharmony_ci{
80bae4d13cSopenharmony_ci    vendorName_ = vendorName;
81bae4d13cSopenharmony_ci}
82bae4d13cSopenharmony_ci
83bae4d13cSopenharmony_cistd::string Sensor::GetHardwareVersion() const
84bae4d13cSopenharmony_ci{
85bae4d13cSopenharmony_ci    return hardwareVersion_;
86bae4d13cSopenharmony_ci}
87bae4d13cSopenharmony_ci
88bae4d13cSopenharmony_civoid Sensor::SetHardwareVersion(const std::string &hardwareVersion)
89bae4d13cSopenharmony_ci{
90bae4d13cSopenharmony_ci    hardwareVersion_ = hardwareVersion;
91bae4d13cSopenharmony_ci}
92bae4d13cSopenharmony_ci
93bae4d13cSopenharmony_cistd::string Sensor::GetFirmwareVersion() const
94bae4d13cSopenharmony_ci{
95bae4d13cSopenharmony_ci    return firmwareVersion_;
96bae4d13cSopenharmony_ci}
97bae4d13cSopenharmony_ci
98bae4d13cSopenharmony_civoid Sensor::SetFirmwareVersion(const std::string &firmwareVersion)
99bae4d13cSopenharmony_ci{
100bae4d13cSopenharmony_ci    firmwareVersion_ = firmwareVersion;
101bae4d13cSopenharmony_ci}
102bae4d13cSopenharmony_ci
103bae4d13cSopenharmony_cifloat Sensor::GetMaxRange() const
104bae4d13cSopenharmony_ci{
105bae4d13cSopenharmony_ci    return maxRange_;
106bae4d13cSopenharmony_ci}
107bae4d13cSopenharmony_ci
108bae4d13cSopenharmony_civoid Sensor::SetMaxRange(float maxRange)
109bae4d13cSopenharmony_ci{
110bae4d13cSopenharmony_ci    maxRange_ = maxRange;
111bae4d13cSopenharmony_ci}
112bae4d13cSopenharmony_ci
113bae4d13cSopenharmony_cifloat Sensor::GetResolution() const
114bae4d13cSopenharmony_ci{
115bae4d13cSopenharmony_ci    return resolution_;
116bae4d13cSopenharmony_ci}
117bae4d13cSopenharmony_ci
118bae4d13cSopenharmony_civoid Sensor::SetResolution(float resolution)
119bae4d13cSopenharmony_ci{
120bae4d13cSopenharmony_ci    resolution_ = resolution;
121bae4d13cSopenharmony_ci}
122bae4d13cSopenharmony_ci
123bae4d13cSopenharmony_cifloat Sensor::GetPower() const
124bae4d13cSopenharmony_ci{
125bae4d13cSopenharmony_ci    return power_;
126bae4d13cSopenharmony_ci}
127bae4d13cSopenharmony_ci
128bae4d13cSopenharmony_civoid Sensor::SetPower(float power)
129bae4d13cSopenharmony_ci{
130bae4d13cSopenharmony_ci    power_ = power;
131bae4d13cSopenharmony_ci}
132bae4d13cSopenharmony_ci
133bae4d13cSopenharmony_ciuint32_t Sensor::Sensor::GetFlags() const
134bae4d13cSopenharmony_ci{
135bae4d13cSopenharmony_ci    return flags_;
136bae4d13cSopenharmony_ci}
137bae4d13cSopenharmony_ci
138bae4d13cSopenharmony_civoid Sensor::SetFlags(uint32_t flags)
139bae4d13cSopenharmony_ci{
140bae4d13cSopenharmony_ci    flags_ = flags;
141bae4d13cSopenharmony_ci}
142bae4d13cSopenharmony_ci
143bae4d13cSopenharmony_ciint32_t Sensor::GetFifoMaxEventCount() const
144bae4d13cSopenharmony_ci{
145bae4d13cSopenharmony_ci    return fifoMaxEventCount_;
146bae4d13cSopenharmony_ci}
147bae4d13cSopenharmony_ci
148bae4d13cSopenharmony_civoid Sensor::SetFifoMaxEventCount(int32_t fifoMaxEventCount)
149bae4d13cSopenharmony_ci{
150bae4d13cSopenharmony_ci    fifoMaxEventCount_ = fifoMaxEventCount;
151bae4d13cSopenharmony_ci}
152bae4d13cSopenharmony_ci
153bae4d13cSopenharmony_ciint64_t Sensor::GetMinSamplePeriodNs() const
154bae4d13cSopenharmony_ci{
155bae4d13cSopenharmony_ci    return minSamplePeriodNs_;
156bae4d13cSopenharmony_ci}
157bae4d13cSopenharmony_ci
158bae4d13cSopenharmony_civoid Sensor::SetMinSamplePeriodNs(int64_t minSamplePeriodNs)
159bae4d13cSopenharmony_ci{
160bae4d13cSopenharmony_ci    minSamplePeriodNs_ = minSamplePeriodNs;
161bae4d13cSopenharmony_ci}
162bae4d13cSopenharmony_ci
163bae4d13cSopenharmony_ciint64_t Sensor::GetMaxSamplePeriodNs() const
164bae4d13cSopenharmony_ci{
165bae4d13cSopenharmony_ci    return maxSamplePeriodNs_;
166bae4d13cSopenharmony_ci}
167bae4d13cSopenharmony_ci
168bae4d13cSopenharmony_civoid Sensor::SetMaxSamplePeriodNs(int64_t maxSamplePeriodNs)
169bae4d13cSopenharmony_ci{
170bae4d13cSopenharmony_ci    maxSamplePeriodNs_ = maxSamplePeriodNs;
171bae4d13cSopenharmony_ci}
172bae4d13cSopenharmony_ci
173bae4d13cSopenharmony_cibool Sensor::Marshalling(Parcel &parcel) const
174bae4d13cSopenharmony_ci{
175bae4d13cSopenharmony_ci    if (!parcel.WriteInt32(sensorId_)) {
176bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write sensorId failed");
177bae4d13cSopenharmony_ci        return false;
178bae4d13cSopenharmony_ci    }
179bae4d13cSopenharmony_ci    if (!parcel.WriteInt32(sensorTypeId_)) {
180bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write sensorTypeId failed");
181bae4d13cSopenharmony_ci        return false;
182bae4d13cSopenharmony_ci    }
183bae4d13cSopenharmony_ci    if (!parcel.WriteString(sensorName_)) {
184bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write sensorName failed");
185bae4d13cSopenharmony_ci        return false;
186bae4d13cSopenharmony_ci    }
187bae4d13cSopenharmony_ci    if (!parcel.WriteString(vendorName_)) {
188bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write vendorName failed");
189bae4d13cSopenharmony_ci        return false;
190bae4d13cSopenharmony_ci    }
191bae4d13cSopenharmony_ci    if (!parcel.WriteString(firmwareVersion_)) {
192bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write firmwareVersion failed");
193bae4d13cSopenharmony_ci        return false;
194bae4d13cSopenharmony_ci    }
195bae4d13cSopenharmony_ci    if (!parcel.WriteString(hardwareVersion_)) {
196bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write hardwareVersion failed");
197bae4d13cSopenharmony_ci        return false;
198bae4d13cSopenharmony_ci    }
199bae4d13cSopenharmony_ci    if (!parcel.WriteFloat(maxRange_)) {
200bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write maxRange failed");
201bae4d13cSopenharmony_ci        return false;
202bae4d13cSopenharmony_ci    }
203bae4d13cSopenharmony_ci    if (!parcel.WriteFloat(resolution_)) {
204bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write resolution failed");
205bae4d13cSopenharmony_ci        return false;
206bae4d13cSopenharmony_ci    }
207bae4d13cSopenharmony_ci    if (!parcel.WriteFloat(power_)) {
208bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write power failed");
209bae4d13cSopenharmony_ci        return false;
210bae4d13cSopenharmony_ci    }
211bae4d13cSopenharmony_ci    if (!parcel.WriteUint32(flags_)) {
212bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write flags failed");
213bae4d13cSopenharmony_ci        return false;
214bae4d13cSopenharmony_ci    }
215bae4d13cSopenharmony_ci    if (!parcel.WriteInt32(fifoMaxEventCount_)) {
216bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write fifoMaxEventCount failed");
217bae4d13cSopenharmony_ci        return false;
218bae4d13cSopenharmony_ci    }
219bae4d13cSopenharmony_ci    if (!parcel.WriteInt64(minSamplePeriodNs_)) {
220bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write minSamplePeriodNs failed");
221bae4d13cSopenharmony_ci        return false;
222bae4d13cSopenharmony_ci    }
223bae4d13cSopenharmony_ci    if (!parcel.WriteInt64(maxSamplePeriodNs_)) {
224bae4d13cSopenharmony_ci        SEN_HILOGE("Failed, write maxSamplePeriodNs failed");
225bae4d13cSopenharmony_ci        return false;
226bae4d13cSopenharmony_ci    }
227bae4d13cSopenharmony_ci    return true;
228bae4d13cSopenharmony_ci}
229bae4d13cSopenharmony_ci
230bae4d13cSopenharmony_cistd::unique_ptr<Sensor> Sensor::Unmarshalling(Parcel &parcel)
231bae4d13cSopenharmony_ci{
232bae4d13cSopenharmony_ci    auto sensor = std::make_unique<Sensor>();
233bae4d13cSopenharmony_ci    if (!sensor->ReadFromParcel(parcel)) {
234bae4d13cSopenharmony_ci        SEN_HILOGE("ReadFromParcel is failed");
235bae4d13cSopenharmony_ci        return nullptr;
236bae4d13cSopenharmony_ci    }
237bae4d13cSopenharmony_ci    return sensor;
238bae4d13cSopenharmony_ci}
239bae4d13cSopenharmony_ci
240bae4d13cSopenharmony_cibool Sensor::ReadFromParcel(Parcel &parcel)
241bae4d13cSopenharmony_ci{
242bae4d13cSopenharmony_ci    if ((!parcel.ReadInt32(sensorId_)) ||
243bae4d13cSopenharmony_ci        (!parcel.ReadInt32(sensorTypeId_)) ||
244bae4d13cSopenharmony_ci        (!parcel.ReadString(sensorName_)) ||
245bae4d13cSopenharmony_ci        (!parcel.ReadString(vendorName_)) ||
246bae4d13cSopenharmony_ci        (!parcel.ReadString(firmwareVersion_)) ||
247bae4d13cSopenharmony_ci        (!parcel.ReadString(hardwareVersion_)) ||
248bae4d13cSopenharmony_ci        (!parcel.ReadFloat(power_)) ||
249bae4d13cSopenharmony_ci        (!parcel.ReadFloat(maxRange_)) ||
250bae4d13cSopenharmony_ci        (!parcel.ReadFloat(resolution_)) ||
251bae4d13cSopenharmony_ci        (!parcel.ReadUint32(flags_)) ||
252bae4d13cSopenharmony_ci        (!parcel.ReadInt32(fifoMaxEventCount_)) ||
253bae4d13cSopenharmony_ci        (!parcel.ReadInt64(minSamplePeriodNs_)) ||
254bae4d13cSopenharmony_ci        (!parcel.ReadInt64(maxSamplePeriodNs_))) {
255bae4d13cSopenharmony_ci        return false;
256bae4d13cSopenharmony_ci    }
257bae4d13cSopenharmony_ci    return true;
258bae4d13cSopenharmony_ci}
259bae4d13cSopenharmony_ci} // namespace Sensors
260bae4d13cSopenharmony_ci} // namespace OHOS
261