blob: 70e6b9dc93ad2d5e0641e2366a6e0c94f01170dd [file] [log] [blame]
Enrico Granata60b1cbc2019-05-20 11:06:46 -07001// 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
Harvey Yang34f464c2020-01-08 17:43:46 +08005#include <libmems/common_types.h>
6#include <libmems/iio_device_impl.h>
Enrico Granata60b1cbc2019-05-20 11:06:46 -07007#include "mems_setup/test_helper.h"
8
Enrico Granata9bb17522019-06-28 17:22:42 -07009using libmems::fakes::FakeIioChannel;
10using libmems::fakes::FakeIioContext;
11using libmems::fakes::FakeIioDevice;
12using mems_setup::fakes::FakeDelegate;
Enrico Granata60b1cbc2019-05-20 11:06:46 -070013
14namespace mems_setup {
15namespace testing {
16
Harvey Yang34f464c2020-01-08 17:43:46 +080017namespace {
18constexpr char kDevString[] = "/dev/";
19}
20
Enrico Granata9bb17522019-06-28 17:22:42 -070021bool FakeSysfsTrigger::WriteNumberAttribute(const std::string& name,
Enrico Granata60b1cbc2019-05-20 11:06:46 -070022 int64_t value) {
Enrico Granata9bb17522019-06-28 17:22:42 -070023 bool ok = this->FakeIioDevice::WriteNumberAttribute(name, value);
Enrico Granata60b1cbc2019-05-20 11:06:46 -070024 if (ok && name == "add_trigger" && value == 0) {
Harvey Yang786967c2020-07-01 18:04:31 +080025 mock_context_->AddTrigger(std::move(mock_trigger_));
Enrico Granata60b1cbc2019-05-20 11:06:46 -070026 }
27 return ok;
28}
29
Harvey Yang786967c2020-07-01 18:04:31 +080030void FakeSysfsTrigger::AddMockTrigger() {
31 mock_context_->AddTrigger(std::move(mock_trigger_));
32}
33
Harvey Yang73394622020-02-12 10:57:57 +080034SensorTestBase::SensorTestBase(const char* name, int id)
35 : mock_context_(new FakeIioContext), mock_delegate_(new FakeDelegate) {
36 sensor_kind_ = mems_setup::SensorKindFromString(name ? name : "");
Harvey Yang786967c2020-07-01 18:04:31 +080037 auto channel = std::make_unique<FakeIioChannel>("calibration", false);
38 auto device = std::make_unique<FakeIioDevice>(mock_context_.get(), name, id);
39 auto trigger =
40 std::make_unique<FakeIioDevice>(mock_context_.get(), "sysfstrig0", 1);
41 mock_trigger1_ = trigger.get();
42 auto mock_sysfs_trigger = std::make_unique<FakeSysfsTrigger>(
43 mock_context_.get(), std::move(trigger));
44 mock_sysfs_trigger_ = mock_sysfs_trigger.get();
45
46 device->AddChannel(std::move(channel));
47 mock_device_ = device.get();
48
49 mock_context_->AddDevice(std::move(device));
50 mock_context_->AddTrigger(std::move(mock_sysfs_trigger));
Harvey Yang34f464c2020-01-08 17:43:46 +080051
52 std::string dev_name =
53 libmems::IioDeviceImpl::GetStringFromId(mock_device_->GetId());
54 // /dev/iio:deviceX
55 base::FilePath dev_path = base::FilePath(kDevString).Append(dev_name.c_str());
56 mock_delegate_->CreateFile(dev_path);
Enrico Granata60b1cbc2019-05-20 11:06:46 -070057}
58
59void SensorTestBase::SetSingleSensor(const char* location) {
60 mock_device_->WriteStringAttribute("location", location);
Enrico Granata064a25c2019-07-15 15:48:03 -070061
62 if (sensor_kind_ == SensorKind::ACCELEROMETER) {
Harvey Yang786967c2020-07-01 18:04:31 +080063 mock_device_->AddChannel(
64 std::make_unique<FakeIioChannel>("accel_x", false));
65 mock_device_->AddChannel(
66 std::make_unique<FakeIioChannel>("accel_y", false));
67 mock_device_->AddChannel(
68 std::make_unique<FakeIioChannel>("accel_z", false));
Enrico Granata064a25c2019-07-15 15:48:03 -070069
Harvey Yang786967c2020-07-01 18:04:31 +080070 mock_device_->AddChannel(
71 std::make_unique<FakeIioChannel>("timestamp", true));
Harvey Yangfc9178f2020-03-16 14:26:53 +080072 } else if (sensor_kind_ == SensorKind::GYROSCOPE) {
Harvey Yang786967c2020-07-01 18:04:31 +080073 mock_device_->AddChannel(
74 std::make_unique<FakeIioChannel>("anglvel_x", false));
75 mock_device_->AddChannel(
76 std::make_unique<FakeIioChannel>("anglvel_y", false));
77 mock_device_->AddChannel(
78 std::make_unique<FakeIioChannel>("anglvel_z", false));
Harvey Yangfc9178f2020-03-16 14:26:53 +080079
Harvey Yang786967c2020-07-01 18:04:31 +080080 mock_device_->AddChannel(
81 std::make_unique<FakeIioChannel>("timestamp", true));
Harvey Yangfc9178f2020-03-16 14:26:53 +080082 } else if (sensor_kind_ == SensorKind::LIGHT) {
Harvey Yang786967c2020-07-01 18:04:31 +080083 mock_device_->AddChannel(
84 std::make_unique<FakeIioChannel>("illuminance", false));
Harvey Yangfc9178f2020-03-16 14:26:53 +080085
Harvey Yang786967c2020-07-01 18:04:31 +080086 mock_device_->AddChannel(
87 std::make_unique<FakeIioChannel>("timestamp", true));
Enrico Granata064a25c2019-07-15 15:48:03 -070088 }
Enrico Granata064a25c2019-07-15 15:48:03 -070089}
90
91void SensorTestBase::SetSharedSensor() {
92 if (sensor_kind_ == SensorKind::ACCELEROMETER) {
Harvey Yang786967c2020-07-01 18:04:31 +080093 mock_device_->AddChannel(
Enrico Granata064a25c2019-07-15 15:48:03 -070094 std::make_unique<FakeIioChannel>("accel_x_base", false));
Harvey Yang786967c2020-07-01 18:04:31 +080095 mock_device_->AddChannel(
Enrico Granata064a25c2019-07-15 15:48:03 -070096 std::make_unique<FakeIioChannel>("accel_y_base", false));
Harvey Yang786967c2020-07-01 18:04:31 +080097 mock_device_->AddChannel(
Enrico Granata064a25c2019-07-15 15:48:03 -070098 std::make_unique<FakeIioChannel>("accel_z_base", false));
99
Harvey Yang786967c2020-07-01 18:04:31 +0800100 mock_device_->AddChannel(
101 std::make_unique<FakeIioChannel>("accel_x_lid", false));
102 mock_device_->AddChannel(
103 std::make_unique<FakeIioChannel>("accel_y_lid", false));
104 mock_device_->AddChannel(
105 std::make_unique<FakeIioChannel>("accel_z_lid", false));
Enrico Granata064a25c2019-07-15 15:48:03 -0700106
Harvey Yang786967c2020-07-01 18:04:31 +0800107 mock_device_->AddChannel(
108 std::make_unique<FakeIioChannel>("timestamp", true));
Harvey Yangfc9178f2020-03-16 14:26:53 +0800109 } else if (sensor_kind_ == SensorKind::GYROSCOPE) {
Harvey Yang786967c2020-07-01 18:04:31 +0800110 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800111 std::make_unique<FakeIioChannel>("anglvel_x_base", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800112 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800113 std::make_unique<FakeIioChannel>("anglvel_y_base", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800114 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800115 std::make_unique<FakeIioChannel>("anglvel_z_base", false));
116
Harvey Yang786967c2020-07-01 18:04:31 +0800117 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800118 std::make_unique<FakeIioChannel>("anglvel_x_lid", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800119 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800120 std::make_unique<FakeIioChannel>("anglvel_y_lid", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800121 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800122 std::make_unique<FakeIioChannel>("anglvel_z_lid", false));
123
Harvey Yang786967c2020-07-01 18:04:31 +0800124 mock_device_->AddChannel(
125 std::make_unique<FakeIioChannel>("timestamp", true));
Enrico Granata064a25c2019-07-15 15:48:03 -0700126 }
Harvey Yangfc9178f2020-03-16 14:26:53 +0800127}
128
129void SensorTestBase::SetColorLightSensor() {
130 if (sensor_kind_ != SensorKind::LIGHT)
131 return;
132
Harvey Yang786967c2020-07-01 18:04:31 +0800133 mock_device_->AddChannel(
134 std::make_unique<FakeIioChannel>("illuminance", false));
135 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800136 std::make_unique<FakeIioChannel>("illuminance_red", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800137 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800138 std::make_unique<FakeIioChannel>("illuminance_green", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800139 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800140 std::make_unique<FakeIioChannel>("illuminance_blue", false));
141
Harvey Yang786967c2020-07-01 18:04:31 +0800142 mock_device_->AddChannel(std::make_unique<FakeIioChannel>("timestamp", true));
Enrico Granata60b1cbc2019-05-20 11:06:46 -0700143}
144
145void SensorTestBase::ConfigureVpd(
146 std::initializer_list<std::pair<const char*, const char*>> values) {
147 for (const auto& value : values) {
148 mock_delegate_->SetVpdValue(value.first, value.second);
149 }
150}
151
152Configuration* SensorTestBase::GetConfiguration() {
153 if (config_ == nullptr) {
Harvey Yang786967c2020-07-01 18:04:31 +0800154 config_.reset(new Configuration(mock_context_.get(), mock_device_,
Harvey Yang73394622020-02-12 10:57:57 +0800155 mock_delegate_.get()));
Enrico Granata60b1cbc2019-05-20 11:06:46 -0700156 }
157
158 return config_.get();
159}
160
161} // namespace testing
162} // namespace mems_setup