Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 1 | // Copyright 2019 The Chromium OS Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include <map> |
| 6 | #include <memory> |
| 7 | #include <string> |
| 8 | |
| 9 | #include <gtest/gtest.h> |
| 10 | |
Harvey Yang | 1d50fff | 2020-10-27 12:24:38 +0800 | [diff] [blame] | 11 | #include <libmems/common_types.h> |
Enrico Granata | 51cdb94 | 2019-06-18 16:40:17 -0700 | [diff] [blame] | 12 | #include <libmems/iio_context.h> |
| 13 | #include <libmems/iio_device.h> |
Enrico Granata | 9bb1752 | 2019-06-28 17:22:42 -0700 | [diff] [blame] | 14 | #include <libmems/test_fakes.h> |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 15 | #include "mems_setup/configuration.h" |
| 16 | #include "mems_setup/delegate.h" |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 17 | #include "mems_setup/sensor_location.h" |
Enrico Granata | 9bb1752 | 2019-06-28 17:22:42 -0700 | [diff] [blame] | 18 | #include "mems_setup/test_fakes.h" |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 19 | #include "mems_setup/test_helper.h" |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 20 | |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 21 | using mems_setup::testing::SensorTestBase; |
| 22 | |
| 23 | namespace mems_setup { |
| 24 | |
| 25 | namespace { |
| 26 | |
Harvey Yang | 34f464c | 2020-01-08 17:43:46 +0800 | [diff] [blame] | 27 | static gid_t kIioserviceGroupId = 777; |
| 28 | |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 29 | class GyroscopeTest : public SensorTestBase { |
| 30 | public: |
Harvey Yang | 7339462 | 2020-02-12 10:57:57 +0800 | [diff] [blame] | 31 | GyroscopeTest() : SensorTestBase("cros-ec-gyro", 2) { |
Harvey Yang | 34f464c | 2020-01-08 17:43:46 +0800 | [diff] [blame] | 32 | mock_delegate_->AddGroup(Configuration::GetGroupNameForSysfs(), |
| 33 | kIioserviceGroupId); |
| 34 | } |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 35 | }; |
| 36 | |
Harvey Yang | 1d50fff | 2020-10-27 12:24:38 +0800 | [diff] [blame] | 37 | #if USE_IIOSERVICE |
| 38 | TEST_F(GyroscopeTest, FrequencyReset) { |
| 39 | SetSingleSensor(kBaseSensorLocation); |
| 40 | ConfigureVpd({{"in_anglvel_x_base_calibbias", "100"}}); |
| 41 | |
| 42 | EXPECT_TRUE(GetConfiguration()->Configure()); |
| 43 | |
| 44 | auto frequency_opt = |
| 45 | mock_device_->ReadDoubleAttribute(libmems::kSamplingFrequencyAttr); |
| 46 | EXPECT_TRUE(frequency_opt.has_value()); |
| 47 | EXPECT_EQ(frequency_opt.value(), 0.0); |
| 48 | } |
| 49 | #endif // USE_IIOSERVICE |
| 50 | |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 51 | TEST_F(GyroscopeTest, MissingVpd) { |
| 52 | SetSingleSensor(kBaseSensorLocation); |
| 53 | ConfigureVpd({{"in_anglvel_x_base_calibbias", "100"}}); |
| 54 | |
| 55 | EXPECT_TRUE(GetConfiguration()->Configure()); |
| 56 | |
Harvey Yang | fc9178f | 2020-03-16 14:26:53 +0800 | [diff] [blame] | 57 | EXPECT_TRUE(mock_device_->GetChannel("anglvel_x") |
| 58 | ->ReadNumberAttribute("calibbias") |
| 59 | .has_value()); |
| 60 | EXPECT_EQ(100, mock_device_->GetChannel("anglvel_x") |
| 61 | ->ReadNumberAttribute("calibbias") |
| 62 | .value()); |
| 63 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_y") |
| 64 | ->ReadNumberAttribute("calibbias") |
| 65 | .has_value()); |
| 66 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_z") |
| 67 | ->ReadNumberAttribute("calibbias") |
| 68 | .has_value()); |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 69 | } |
| 70 | |
| 71 | TEST_F(GyroscopeTest, NotNumericVpd) { |
| 72 | SetSingleSensor(kBaseSensorLocation); |
| 73 | ConfigureVpd({{"in_anglvel_x_base_calibbias", "blah"}, |
| 74 | {"in_anglvel_y_base_calibbias", "104"}}); |
| 75 | |
| 76 | EXPECT_TRUE(GetConfiguration()->Configure()); |
| 77 | |
Harvey Yang | fc9178f | 2020-03-16 14:26:53 +0800 | [diff] [blame] | 78 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_x") |
| 79 | ->ReadNumberAttribute("calibbias") |
| 80 | .has_value()); |
| 81 | EXPECT_TRUE(mock_device_->GetChannel("anglvel_y") |
| 82 | ->ReadNumberAttribute("calibbias") |
| 83 | .has_value()); |
| 84 | EXPECT_EQ(104, mock_device_->GetChannel("anglvel_y") |
| 85 | ->ReadNumberAttribute("calibbias") |
| 86 | .value()); |
| 87 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_z") |
| 88 | ->ReadNumberAttribute("calibbias") |
| 89 | .has_value()); |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 90 | } |
| 91 | |
| 92 | TEST_F(GyroscopeTest, VpdOutOfRange) { |
| 93 | SetSingleSensor(kBaseSensorLocation); |
Gwendal Grignou | 4460a0d | 2020-01-06 14:07:00 -0800 | [diff] [blame] | 94 | ConfigureVpd({{"in_anglvel_x_base_calibbias", "104"}, |
| 95 | {"in_anglvel_y_base_calibbias", "123456789"}, |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 96 | {"in_anglvel_z_base_calibbias", "85"}}); |
| 97 | |
| 98 | EXPECT_TRUE(GetConfiguration()->Configure()); |
| 99 | |
Harvey Yang | fc9178f | 2020-03-16 14:26:53 +0800 | [diff] [blame] | 100 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_x") |
| 101 | ->ReadNumberAttribute("calibbias") |
| 102 | .has_value()); |
| 103 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_y") |
| 104 | ->ReadNumberAttribute("calibbias") |
| 105 | .has_value()); |
| 106 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_z") |
| 107 | ->ReadNumberAttribute("calibbias") |
| 108 | .has_value()); |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 109 | } |
| 110 | |
| 111 | TEST_F(GyroscopeTest, NotLoadingTriggerModule) { |
| 112 | SetSingleSensor(kBaseSensorLocation); |
| 113 | ConfigureVpd({{"in_anglvel_x_base_calibbias", "50"}, |
| 114 | {"in_anglvel_y_base_calibbias", "104"}, |
| 115 | {"in_anglvel_z_base_calibbias", "85"}}); |
| 116 | |
| 117 | EXPECT_TRUE(GetConfiguration()->Configure()); |
| 118 | |
| 119 | EXPECT_EQ(0, mock_delegate_->GetNumModulesProbed()); |
| 120 | } |
| 121 | |
| 122 | TEST_F(GyroscopeTest, MultipleSensorDevice) { |
Harvey Yang | fc9178f | 2020-03-16 14:26:53 +0800 | [diff] [blame] | 123 | SetSharedSensor(); |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 124 | ConfigureVpd({{"in_anglvel_x_base_calibbias", "50"}, |
| 125 | {"in_anglvel_y_base_calibbias", "104"}, |
| 126 | {"in_anglvel_z_base_calibbias", "85"}, |
| 127 | {"in_anglvel_y_lid_calibbias", "27"}}); |
| 128 | |
| 129 | EXPECT_TRUE(GetConfiguration()->Configure()); |
| 130 | |
Harvey Yang | fc9178f | 2020-03-16 14:26:53 +0800 | [diff] [blame] | 131 | EXPECT_TRUE(mock_device_->GetChannel("anglvel_x_base") |
| 132 | ->ReadNumberAttribute("calibbias") |
| 133 | .has_value()); |
| 134 | EXPECT_TRUE(mock_device_->GetChannel("anglvel_y_base") |
| 135 | ->ReadNumberAttribute("calibbias") |
| 136 | .has_value()); |
| 137 | EXPECT_TRUE(mock_device_->GetChannel("anglvel_z_base") |
| 138 | ->ReadNumberAttribute("calibbias") |
| 139 | .has_value()); |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 140 | |
Harvey Yang | fc9178f | 2020-03-16 14:26:53 +0800 | [diff] [blame] | 141 | EXPECT_EQ(50, mock_device_->GetChannel("anglvel_x_base") |
| 142 | ->ReadNumberAttribute("calibbias") |
| 143 | .value()); |
| 144 | EXPECT_EQ(104, mock_device_->GetChannel("anglvel_y_base") |
| 145 | ->ReadNumberAttribute("calibbias") |
| 146 | .value()); |
| 147 | EXPECT_EQ(85, mock_device_->GetChannel("anglvel_z_base") |
| 148 | ->ReadNumberAttribute("calibbias") |
| 149 | .value()); |
| 150 | |
| 151 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_x_lid") |
| 152 | ->ReadNumberAttribute("calibbias") |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 153 | .has_value()); |
Harvey Yang | fc9178f | 2020-03-16 14:26:53 +0800 | [diff] [blame] | 154 | EXPECT_TRUE(mock_device_->GetChannel("anglvel_y_lid") |
| 155 | ->ReadNumberAttribute("calibbias") |
| 156 | .has_value()); |
| 157 | EXPECT_EQ(27, mock_device_->GetChannel("anglvel_y_lid") |
| 158 | ->ReadNumberAttribute("calibbias") |
| 159 | .value()); |
| 160 | EXPECT_FALSE(mock_device_->GetChannel("anglvel_z_lid") |
| 161 | ->ReadNumberAttribute("calibbias") |
Enrico Granata | 60b1cbc | 2019-05-20 11:06:46 -0700 | [diff] [blame] | 162 | .has_value()); |
| 163 | } |
| 164 | |
| 165 | } // namespace |
| 166 | |
| 167 | } // namespace mems_setup |