• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2025 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 #include <cmath>
16 #include "osal_mem.h"
17 #include "sensor_callback_impl.h"
18 #include "sensor_type.h"
19 
20 namespace OHOS {
21 namespace HDI {
22 namespace Sensor {
23 namespace V3_0 {
24 uint32_t SensorCallbackImpl::sensorDataFlag = 1;
25 namespace {
26     struct SensorValueRange {
27         float highThreshold;
28         float lowThreshold;
29     };
30 
31     struct SensorDevelopmentList {
32         int32_t sensorTypeId;
33         char sensorName[SENSOR_NAME_MAX_LEN];
34         int32_t dataForm;    // 0: fixed, 1: range
35         int32_t dataDimension;
36         struct SensorValueRange *valueRange;
37     };
38 
39     struct SensorValueRange g_testRange[] = {{1e5, 0.0}};
40     struct SensorValueRange g_accelRange[] = {{78.0, -78.0}, {78.0, -78.0}, {78.0, -78.0}};
41     struct SensorValueRange g_alsRange[] = {{10000000.0, 0.0}};
42     struct SensorValueRange g_pedometerRange[] = {{10000.0, 0.0}};
43     struct SensorValueRange g_proximityRange[] = {{5.0, 0.0}};
44     struct SensorValueRange g_hallRange[] = {{4294967295.0, 0.0}};
45     struct SensorValueRange g_barometerRange[] = {{1100.0, -1100.0}, {1100.0, -1100.0}};
46     struct SensorValueRange g_magneticRange[] = {{2000.0, -2000.0}, {2000.0, -2000.0}, {2000.0, -2000.0}};
47     struct SensorValueRange g_gyroscopeRange[] = {{35.0, -35.0}, {35.0, -35.0}, {35.0, -35.0}};
48     struct SensorValueRange g_gravityRange[] = {{78.0, -78.0}, {78.0, -78.0}, {78.0, -78.0}};
49     struct SensorValueRange g_humidityRange[] = {{100, 0}};
50     struct SensorValueRange g_temperatureRange[] = {{125, -40}};
51 
52     struct SensorDevelopmentList g_sensorList[] = {
53         {SENSOR_TYPE_NONE, "sensor_test",  1, 1, g_testRange},
54         {SENSOR_TYPE_ACCELEROMETER, "accelerometer",  1, 3, g_accelRange},
55         {SENSOR_TYPE_PEDOMETER, "pedometer", 1, 1, g_pedometerRange},
56         {SENSOR_TYPE_PROXIMITY, "proximity",  0, 1, g_proximityRange},
57         {SENSOR_TYPE_HALL, "hallrometer",  1, 1, g_hallRange},
58         {SENSOR_TYPE_BAROMETER, "barometer",  1, 2, g_barometerRange},
59         {SENSOR_TYPE_AMBIENT_LIGHT, "als", 1, 1, g_alsRange},
60         {SENSOR_TYPE_MAGNETIC_FIELD, "magnetometer",  1, 3, g_magneticRange},
61         {SENSOR_TYPE_GYROSCOPE, "gyroscope", 1, 3, g_gyroscopeRange},
62         {SENSOR_TYPE_GRAVITY, "gravity", 1, 3, g_gravityRange},
63         {SENSOR_TYPE_HUMIDITY, "humidity", 1, 1, g_humidityRange},
64         {SENSOR_TYPE_TEMPERATURE, "tenperature", 1, 1, g_temperatureRange}
65     };
66 
67     constexpr int32_t g_listNum = sizeof(g_sensorList) / sizeof(g_sensorList[0]);
68     constexpr float EPSINON = 1e-6;
69 
SensorDataVerification(const float & data,const struct SensorDevelopmentList & sensorNode)70     void SensorDataVerification(const float &data, const struct SensorDevelopmentList &sensorNode)
71     {
72         for (int32_t j = 0; j < sensorNode.dataDimension; ++j) {
73             if (sensorNode.dataForm == 0) {
74                 if (std::abs(*(&data + j) - sensorNode.valueRange[j].highThreshold) < EPSINON ||
75                     std::abs(*(&data + j) - sensorNode.valueRange[j].lowThreshold) < EPSINON) {
76                     SensorCallbackImpl::sensorDataFlag &= 1;
77                     printf("test 1 sensorName:[%s], data : %f\n\r", sensorNode.sensorName, *(&data + j));
78                 } else {
79                     SensorCallbackImpl::sensorDataFlag = 0;
80                     printf("test 2 sensorName:[%s], data : %f\n\r", sensorNode.sensorName, *(&data + j));
81                     printf("%s: %s Not expected\n\r", __func__, sensorNode.sensorName);
82                 }
83             }
84 
85             if (sensorNode.dataForm == 1) {
86                 if (*(&data + j) >= sensorNode.valueRange[j].lowThreshold &&
87                     *(&data + j) <= sensorNode.valueRange[j].highThreshold) {
88                     SensorCallbackImpl::sensorDataFlag &= 1;
89                     printf("test 3 sensorName:[%s], data : %f\n\r", sensorNode.sensorName, *(&data + j));
90                 } else {
91                     SensorCallbackImpl::sensorDataFlag = 0;
92                     printf("test 4 sensorName:[%s], data : %f\n\r", sensorNode.sensorName, *(&data + j));
93                     printf("%s: %s Not expected\n\r", __func__, sensorNode.sensorName);
94                 }
95             }
96             printf("test 5 sensorName:[%s], sensorDataFlag : %d\n\r", sensorNode.sensorName,
97                 SensorCallbackImpl::sensorDataFlag);
98         }
99     }
100 }
101 
OnDataEvent(const HdfSensorEvents & event)102 int32_t SensorCallbackImpl::OnDataEvent(const HdfSensorEvents& event)
103 {
104     void *origin = OsalMemCalloc(sizeof(uint8_t) * (event.dataLen));
105     if (origin == nullptr) {
106         return HDF_FAILURE;
107     }
108     uint8_t *tmp = static_cast<uint8_t*>(origin);
109     uint8_t *eventData = tmp;
110     for (auto value : event.data) {
111        *tmp++ = value;
112     }
113 
114     for (int32_t i = 0; i < g_listNum; ++i) {
115         if (event.deviceSensorInfo.sensorType == g_sensorList[i].sensorTypeId) {
116             float *data = reinterpret_cast<float*>(eventData);
117             SensorDataVerification(*data, g_sensorList[i]);
118         }
119     }
120     OsalMemFree(origin);
121     return HDF_SUCCESS;
122 }
123 } // V3_0
124 } // Sensor
125 } // HDI
126 } // OHOS
127