1/*
2 * Copyright (c) 2021-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#ifndef OHOS_HDI_SENSOR_V2_0_SENSORTYPES_H
17#define OHOS_HDI_SENSOR_V2_0_SENSORTYPES_H
18
19#include <cstdbool>
20#include <cstdint>
21#include <string>
22#include <vector>
23
24#ifndef HDI_BUFF_MAX_SIZE
25#define HDI_BUFF_MAX_SIZE (1024 * 200)
26#endif
27
28#ifndef HDI_CHECK_VALUE_RETURN
29#define HDI_CHECK_VALUE_RETURN(lv, compare, rv, ret) do { \
30    if ((lv) compare (rv)) { \
31        return ret; \
32    } \
33} while (false)
34#endif
35
36#ifndef HDI_CHECK_VALUE_RET_GOTO
37#define HDI_CHECK_VALUE_RET_GOTO(lv, compare, rv, ret, value, table) do { \
38    if ((lv) compare (rv)) { \
39        ret = value; \
40        goto table; \
41    } \
42} while (false)
43#endif
44
45namespace OHOS {
46class MessageParcel;
47}
48
49namespace OHOS {
50namespace HDI {
51namespace Sensor {
52namespace V2_0 {
53
54using namespace OHOS;
55
56struct HdfSensorInformation {
57    std::string sensorName;
58    std::string vendorName;
59    std::string firmwareVersion;
60    std::string hardwareVersion;
61    int32_t sensorTypeId;
62    int32_t sensorId;
63    float maxRange;
64    float accuracy;
65    float power;
66    int64_t minDelay;
67    int64_t maxDelay;
68    uint32_t fifoMaxEventCount;
69    uint32_t reserved;
70};
71
72struct HdfSensorEvents {
73    int32_t sensorId;
74    int32_t version;
75    int64_t timestamp;
76    uint32_t option;
77    int32_t mode;
78    std::vector<uint8_t> data;
79    uint32_t dataLen;
80};
81
82enum HdfSensorTypeTag : int32_t {
83    HDF_SENSOR_TYPE_NONE = 0,
84    HDF_SENSOR_TYPE_ACCELEROMETER = 1,
85    HDF_SENSOR_TYPE_GYROSCOPE = 2,
86    HDF_SENSOR_TYPE_PHOTOPLETHYSMOGRAPH = 3,
87    HDF_SENSOR_TYPE_ELECTROCARDIOGRAPH = 4,
88    HDF_SENSOR_TYPE_AMBIENT_LIGHT = 5,
89    HDF_SENSOR_TYPE_MAGNETIC_FIELD = 6,
90    HDF_SENSOR_TYPE_CAPACITIVE = 7,
91    HDF_SENSOR_TYPE_BAROMETER = 8,
92    HDF_SENSOR_TYPE_TEMPERATURE = 9,
93    HDF_SENSOR_TYPE_HALL = 10,
94    HDF_SENSOR_TYPE_GESTURE = 11,
95    HDF_SENSOR_TYPE_PROXIMITY = 12,
96    HDF_SENSOR_TYPE_HUMIDITY = 13,
97    HDF_SENSOR_TYPE_COLOR = 14,
98    HDF_SENSOR_TYPE_SAR = 15,
99    HDF_SENSOR_TYPE_AMBIENT_LIGHT1 = 16,
100    HDF_SENSOR_TYPE_HALL1 = 17,
101    HDF_SENSOR_TYPE_MEDICAL_BEGIN = 128,
102    HDF_SENSOR_TYPE_MEDICAL_END = 160,
103    HDF_SENSOR_TYPE_PHYSICAL_MAX = 255,
104    HDF_SENSOR_TYPE_ORIENTATION = 256,
105    HDF_SENSOR_TYPE_GRAVITY = 257,
106    HDF_SENSOR_TYPE_LINEAR_ACCELERATION = 258,
107    HDF_SENSOR_TYPE_ROTATION_VECTOR = 259,
108    HDF_SENSOR_TYPE_AMBIENT_TEMPERATURE = 260,
109    HDF_SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED = 261,
110    HDF_SENSOR_TYPE_GAME_ROTATION_VECTOR = 262,
111    HDF_SENSOR_TYPE_GYROSCOPE_UNCALIBRATED = 263,
112    HDF_SENSOR_TYPE_SIGNIFICANT_MOTION = 264,
113    HDF_SENSOR_TYPE_PEDOMETER_DETECTION = 265,
114    HDF_SENSOR_TYPE_PEDOMETER = 266,
115    HDF_SENSOR_TYPE_POSTURE = 267,
116    HDF_SENSOR_TYPE_HEADPOSTURE = 268,
117    HDF_SENSOR_TYPE_DROP_DETECT = 269,
118    HDF_SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR = 277,
119    HDF_SENSOR_TYPE_HEART_RATE = 278,
120    HDF_SENSOR_TYPE_DEVICE_ORIENTATION = 279,
121    HDF_SENSOR_TYPE_WEAR_DETECTION = 280,
122    HDF_SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED = 281,
123    HDF_SENSOR_TYPE_MAX,
124};
125
126enum HdfSensorGroupType : int32_t {
127    HDF_TRADITIONAL_SENSOR_TYPE = 0,
128    HDF_MEDICAL_SENSOR_TYPE = 1,
129    HDF_SENSOR_GROUP_TYPE_MAX,
130};
131
132struct SdcSensorInfo {
133    uint64_t offset;
134    int32_t sensorId;
135    int32_t ddrSize;
136    int32_t minRateLevel;
137    int32_t maxRateLevel;
138    uint64_t memAddr;
139    int32_t reserved;
140} __attribute__ ((aligned(8)));
141
142bool HdfSensorInformationBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Sensor::V2_0::HdfSensorInformation& dataBlock);
143
144bool HdfSensorInformationBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Sensor::V2_0::HdfSensorInformation& dataBlock);
145
146bool HdfSensorEventsBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Sensor::V2_0::HdfSensorEvents& dataBlock);
147
148bool HdfSensorEventsBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Sensor::V2_0::HdfSensorEvents& dataBlock);
149
150bool SdcSensorInfoBlockMarshalling(OHOS::MessageParcel &data, const OHOS::HDI::Sensor::V2_0::SdcSensorInfo& dataBlock);
151
152bool SdcSensorInfoBlockUnmarshalling(OHOS::MessageParcel &data, OHOS::HDI::Sensor::V2_0::SdcSensorInfo& dataBlock);
153
154} // V2_0
155} // Sensor
156} // HDI
157} // OHOS
158
159#endif // OHOS_HDI_SENSOR_V2_0_SENSORTYPES_H
160
161