16f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell/*
26f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * Copyright (C) 2012 The Android Open Source Project
36f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell *
46f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * Licensed under the Apache License, Version 2.0 (the "License");
56f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * you may not use this file except in compliance with the License.
66f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * You may obtain a copy of the License at
76f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell *
86f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell *      http://www.apache.org/licenses/LICENSE-2.0
96f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell *
106f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * Unless required by applicable law or agreed to in writing, software
116f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * distributed under the License is distributed on an "AS IS" BASIS,
126f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * See the License for the specific language governing permissions and
146f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell * limitations under the License.
156f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell */
166f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
176f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell#define LOG_TAG "Sensor_test"
186f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
19801ea093b0e923a61b832f2adba698a273479880Mathias Agopian#include <sensor/Sensor.h>
206f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell#include <hardware/sensors.h>
216f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell#include <utils/Errors.h>
226f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
236f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell#include <gtest/gtest.h>
246f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
256f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursellnamespace android {
266f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
276f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell// Returns true if the two sensors have the same attributes. Does not compare
286f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell// UUID since that should not be transmitted via flatten/unflatten.
296f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursellstatic bool sensorsMatch(const Sensor& a, const Sensor& b) {
306f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    return a.getName() == b.getName () &&
316f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getVendor() == b.getVendor () &&
326f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getHandle() == b.getHandle () &&
336f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getType() == b.getType () &&
346f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getMinValue() == b.getMinValue () &&
356f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getMaxValue() == b.getMaxValue () &&
366f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getResolution() == b.getResolution () &&
376f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getPowerUsage() == b.getPowerUsage () &&
386f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getMinDelay() == b.getMinDelay () &&
396f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getMinDelayNs() == b.getMinDelayNs () &&
406f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getVersion() == b.getVersion () &&
416f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getFifoReservedEventCount() == b.getFifoReservedEventCount () &&
426f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getFifoMaxEventCount() == b.getFifoMaxEventCount () &&
436f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getStringType() == b.getStringType () &&
446f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getRequiredPermission() == b.getRequiredPermission () &&
456f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.isRequiredPermissionRuntime() == b.isRequiredPermissionRuntime () &&
466f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getRequiredAppOp() == b.getRequiredAppOp () &&
476f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getMaxDelay() == b.getMaxDelay () &&
486f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getFlags() == b.getFlags () &&
496f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.isWakeUpSensor() == b.isWakeUpSensor () &&
506f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.isDynamicSensor() == b.isDynamicSensor () &&
516f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.hasAdditionalInfo() == b.hasAdditionalInfo () &&
526f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell        a.getReportingMode() == b.getReportingMode();
536f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell}
546f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
556f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell// Creates and returns a sensor_t struct with some default values filled in.
566f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursellstatic sensor_t getTestSensorT() {
576f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    sensor_t hwSensor = {};
586f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.name = "Test Sensor";
596f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.vendor = "Test Vendor";
606f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.version = 1;
616f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.handle = 2;
626f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.type = SENSOR_TYPE_ACCELEROMETER;
636f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.maxRange = 10.f;
646f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.resolution = 1.f;
656f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.power = 5.f;
666f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.minDelay = 1000;
676f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.fifoReservedEventCount = 50;
686f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.fifoMaxEventCount = 100;
696f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.stringType = SENSOR_STRING_TYPE_ACCELEROMETER;
706f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.requiredPermission = "";
716f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.maxDelay = 5000;
726f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    hwSensor.flags = SENSOR_FLAG_CONTINUOUS_MODE;
736f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    return hwSensor;
746f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell}
756f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
766f09ce1dd6bba8550d05896a595caf1b9b47ba71David PursellTEST(SensorTest, FlattenAndUnflatten) {
776f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    sensor_t hwSensor = getTestSensorT();
786f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    Sensor sensor1(&hwSensor, SENSORS_DEVICE_API_VERSION_1_4);
796f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    Sensor sensor2;
806f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
816f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    std::vector<uint8_t> buffer(sensor1.getFlattenedSize());
826f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    ASSERT_EQ(OK, sensor1.flatten(buffer.data(), buffer.size()));
836f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    ASSERT_EQ(OK, sensor2.unflatten(buffer.data(), buffer.size()));
846f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
856f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell    EXPECT_TRUE(sensorsMatch(sensor1, sensor2));
866f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell}
876f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell
886f09ce1dd6bba8550d05896a595caf1b9b47ba71David Pursell} // namespace android
89