1 /*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "gtest/gtest.h"
18
19 #include "chre/core/sensor_request.h"
20
21 using chre::Nanoseconds;
22 using chre::SensorMode;
23 using chre::SensorRequest;
24 using chre::SensorType;
25
TEST(SensorType,LosslessSensorHandleToSensorTypeAndBack)26 TEST(SensorType, LosslessSensorHandleToSensorTypeAndBack) {
27 // Verify that converting a sensor to a handle and from a handle back to a
28 // sensor is a lossless conversion. The specific value of the handle is
29 // unimportant, as long as it can be consistently converted back and forth.
30 SensorType sensorType = SensorType::Pressure;
31 uint32_t sensorHandle = getSensorHandleFromSensorType(sensorType);
32 sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle);
33 EXPECT_EQ(sensorType, SensorType::Pressure);
34
35 sensorType = SensorType::Proximity;
36 sensorHandle = getSensorHandleFromSensorType(sensorType);
37 sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle);
38 EXPECT_EQ(sensorType, SensorType::Proximity);
39 }
40
TEST(SensorType,SensorHandleToSensorTypeUnknownHandles)41 TEST(SensorType, SensorHandleToSensorTypeUnknownHandles) {
42 EXPECT_EQ(chre::getSensorTypeFromSensorHandle(0), SensorType::Unknown);
43 EXPECT_EQ(chre::getSensorTypeFromSensorHandle(10000), SensorType::Unknown);
44 }
45
TEST(SensorRequest,DefaultMinimalPriority)46 TEST(SensorRequest, DefaultMinimalPriority) {
47 SensorRequest request;
48 EXPECT_EQ(request.getInterval(), Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT));
49 EXPECT_EQ(request.getLatency(), Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
50 EXPECT_EQ(request.getMode(), SensorMode::Off);
51 }
52
TEST(SensorRequest,ActiveContinuousIsHigherPriorityThanActiveOneShot)53 TEST(SensorRequest, ActiveContinuousIsHigherPriorityThanActiveOneShot) {
54 SensorRequest activeContinuous(SensorMode::ActiveContinuous,
55 Nanoseconds(0), Nanoseconds(0));
56 SensorRequest activeOneShot(SensorMode::ActiveOneShot,
57 Nanoseconds(0), Nanoseconds(0));
58 SensorRequest mergedRequest;
59 EXPECT_TRUE(mergedRequest.mergeWith(activeContinuous));
60 EXPECT_FALSE(mergedRequest.mergeWith(activeOneShot));
61 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
62 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
63 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
64 }
65
TEST(SensorRequest,ActiveOneShotIsHigherPriorityThanPassiveContinuous)66 TEST(SensorRequest, ActiveOneShotIsHigherPriorityThanPassiveContinuous) {
67 SensorRequest activeOneShot(SensorMode::ActiveOneShot,
68 Nanoseconds(0), Nanoseconds(0));
69 SensorRequest passiveContinuous(SensorMode::PassiveContinuous,
70 Nanoseconds(0), Nanoseconds(0));
71 SensorRequest mergedRequest;
72 EXPECT_TRUE(mergedRequest.mergeWith(activeOneShot));
73 EXPECT_FALSE(mergedRequest.mergeWith(passiveContinuous));
74 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
75 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
76 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveOneShot);
77
78 }
79
TEST(SensorRequest,PassiveContinuousIsHigherPriorityThanPassiveOneShot)80 TEST(SensorRequest, PassiveContinuousIsHigherPriorityThanPassiveOneShot) {
81 SensorRequest passiveContinuous(SensorMode::PassiveContinuous,
82 Nanoseconds(0), Nanoseconds(0));
83 SensorRequest passiveOneShot(SensorMode::PassiveOneShot,
84 Nanoseconds(0), Nanoseconds(0));
85 SensorRequest mergedRequest;
86 EXPECT_TRUE(mergedRequest.mergeWith(passiveContinuous));
87 EXPECT_FALSE(mergedRequest.mergeWith(passiveOneShot));
88 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
89 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
90 EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveContinuous);
91 }
92
TEST(SensorRequest,PassiveOneShotIsHigherPriorityThanOff)93 TEST(SensorRequest, PassiveOneShotIsHigherPriorityThanOff) {
94 SensorRequest passiveOneShot(SensorMode::PassiveOneShot,
95 Nanoseconds(0), Nanoseconds(0));
96 SensorRequest off(SensorMode::Off, Nanoseconds(0), Nanoseconds(0));
97 SensorRequest mergedRequest;
98 EXPECT_TRUE(mergedRequest.mergeWith(passiveOneShot));
99 EXPECT_FALSE(mergedRequest.mergeWith(off));
100 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
101 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
102 EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveOneShot);
103 }
104
TEST(SensorRequest,LowerLatencyIsHigherPriorityThanHigherLatency)105 TEST(SensorRequest, LowerLatencyIsHigherPriorityThanHigherLatency) {
106 SensorRequest lowLatencyRequest(SensorMode::ActiveContinuous,
107 Nanoseconds(10), Nanoseconds(10));
108 SensorRequest highLatencyRequest(SensorMode::ActiveOneShot,
109 Nanoseconds(10), Nanoseconds(100));
110 SensorRequest mergedRequest;
111 EXPECT_TRUE(mergedRequest.mergeWith(lowLatencyRequest));
112 EXPECT_FALSE(mergedRequest.mergeWith(highLatencyRequest));
113 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
114 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10));
115 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
116 }
117
TEST(SensorRequest,HigherFrequencyIsHigherPriorityThanLowerFrequency)118 TEST(SensorRequest, HigherFrequencyIsHigherPriorityThanLowerFrequency) {
119 SensorRequest lowFreqRequest(SensorMode::ActiveOneShot,
120 Nanoseconds(100), Nanoseconds(10));
121 SensorRequest highFreqRequest(SensorMode::ActiveContinuous,
122 Nanoseconds(10), Nanoseconds(10));
123 SensorRequest mergedRequest;
124 EXPECT_TRUE(mergedRequest.mergeWith(lowFreqRequest));
125 EXPECT_TRUE(mergedRequest.mergeWith(highFreqRequest));
126 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
127 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10));
128 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
129 }
130
TEST(SensorRequest,OnlyDefaultFrequency)131 TEST(SensorRequest, OnlyDefaultFrequency) {
132 SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous,
133 Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT),
134 Nanoseconds(0));
135 SensorRequest mergedRequest;
136 EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest));
137 EXPECT_EQ(mergedRequest.getInterval(),
138 Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT));
139 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
140 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
141 }
142
TEST(SensorRequest,NonDefaultAndDefaultFrequency)143 TEST(SensorRequest, NonDefaultAndDefaultFrequency) {
144 SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous,
145 Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT),
146 Nanoseconds(0));
147 SensorRequest nonDefaultFreqRequest(SensorMode::ActiveContinuous,
148 Nanoseconds(20000000), Nanoseconds(0));
149 SensorRequest mergedRequest;
150 EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest));
151 EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultFreqRequest));
152 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(20000000));
153 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
154 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
155 }
156
TEST(SensorRequest,OnlyAsapLatency)157 TEST(SensorRequest, OnlyAsapLatency) {
158 SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous,
159 Nanoseconds(10),
160 Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
161 SensorRequest mergedRequest;
162 EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest));
163 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
164 EXPECT_EQ(mergedRequest.getLatency(),
165 Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
166 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
167 }
168
TEST(SensorRequest,NonAsapAndAsapLatency)169 TEST(SensorRequest, NonAsapAndAsapLatency) {
170 SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous,
171 Nanoseconds(10),
172 Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
173 SensorRequest nonAsapLatencyRequest(SensorMode::ActiveContinuous,
174 Nanoseconds(10),
175 Nanoseconds(2000));
176 SensorRequest mergedRequest;
177 EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest));
178 EXPECT_FALSE(mergedRequest.mergeWith(nonAsapLatencyRequest));
179 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
180 EXPECT_EQ(mergedRequest.getLatency(),
181 Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
182 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
183 }
184
TEST(SensorRequest,OnlyDefaultLatency)185 TEST(SensorRequest, OnlyDefaultLatency) {
186 SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous,
187 Nanoseconds(10),
188 Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
189 SensorRequest mergedRequest;
190 EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest));
191 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
192 EXPECT_EQ(mergedRequest.getLatency(),
193 Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
194 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
195 }
196
TEST(SensorRequest,NonDefaultAndDefaultLatency)197 TEST(SensorRequest, NonDefaultAndDefaultLatency) {
198 SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous,
199 Nanoseconds(10),
200 Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
201 SensorRequest nonDefaultLatencyRequest(SensorMode::ActiveContinuous,
202 Nanoseconds(10),
203 Nanoseconds(2000));
204 SensorRequest mergedRequest;
205 EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest));
206 EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultLatencyRequest));
207 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
208 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000));
209 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
210 }
211