blob: 3151c9e3be1306cea4fe0a9aaf944da928a5c182 [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 Yang0c0dab52019-11-18 12:04:30 +080034SensorTestBase::SensorTestBase(const char* name, int id, SensorKind kind)
Enrico Granata9bb17522019-06-28 17:22:42 -070035 : mock_context_(new FakeIioContext),
36 mock_delegate_(new FakeDelegate),
Enrico Granata60b1cbc2019-05-20 11:06:46 -070037 sensor_kind_(kind) {
Harvey Yang786967c2020-07-01 18:04:31 +080038 auto channel = std::make_unique<FakeIioChannel>("calibration", false);
39 auto device = std::make_unique<FakeIioDevice>(mock_context_.get(), name, id);
40 auto trigger =
41 std::make_unique<FakeIioDevice>(mock_context_.get(), "sysfstrig0", 1);
42 mock_trigger1_ = trigger.get();
43 auto mock_sysfs_trigger = std::make_unique<FakeSysfsTrigger>(
44 mock_context_.get(), std::move(trigger));
45 mock_sysfs_trigger_ = mock_sysfs_trigger.get();
46
47 device->AddChannel(std::move(channel));
48 mock_device_ = device.get();
49
50 mock_context_->AddDevice(std::move(device));
51 mock_context_->AddTrigger(std::move(mock_sysfs_trigger));
Harvey Yang34f464c2020-01-08 17:43:46 +080052
53 std::string dev_name =
54 libmems::IioDeviceImpl::GetStringFromId(mock_device_->GetId());
55 // /dev/iio:deviceX
56 base::FilePath dev_path = base::FilePath(kDevString).Append(dev_name.c_str());
57 mock_delegate_->CreateFile(dev_path);
Enrico Granata60b1cbc2019-05-20 11:06:46 -070058}
59
60void SensorTestBase::SetSingleSensor(const char* location) {
61 mock_device_->WriteStringAttribute("location", location);
Enrico Granata064a25c2019-07-15 15:48:03 -070062
63 if (sensor_kind_ == SensorKind::ACCELEROMETER) {
Harvey Yang786967c2020-07-01 18:04:31 +080064 mock_device_->AddChannel(
65 std::make_unique<FakeIioChannel>("accel_x", false));
66 mock_device_->AddChannel(
67 std::make_unique<FakeIioChannel>("accel_y", false));
68 mock_device_->AddChannel(
69 std::make_unique<FakeIioChannel>("accel_z", false));
Enrico Granata064a25c2019-07-15 15:48:03 -070070
Harvey Yang786967c2020-07-01 18:04:31 +080071 mock_device_->AddChannel(
72 std::make_unique<FakeIioChannel>("timestamp", true));
Harvey Yangfc9178f2020-03-16 14:26:53 +080073 } else if (sensor_kind_ == SensorKind::GYROSCOPE) {
Harvey Yang786967c2020-07-01 18:04:31 +080074 mock_device_->AddChannel(
75 std::make_unique<FakeIioChannel>("anglvel_x", false));
76 mock_device_->AddChannel(
77 std::make_unique<FakeIioChannel>("anglvel_y", false));
78 mock_device_->AddChannel(
79 std::make_unique<FakeIioChannel>("anglvel_z", false));
Harvey Yangfc9178f2020-03-16 14:26:53 +080080
Harvey Yang786967c2020-07-01 18:04:31 +080081 mock_device_->AddChannel(
82 std::make_unique<FakeIioChannel>("timestamp", true));
Harvey Yangfc9178f2020-03-16 14:26:53 +080083 } else if (sensor_kind_ == SensorKind::LIGHT) {
Harvey Yang786967c2020-07-01 18:04:31 +080084 mock_device_->AddChannel(
85 std::make_unique<FakeIioChannel>("illuminance", false));
Harvey Yangfc9178f2020-03-16 14:26:53 +080086
Harvey Yang786967c2020-07-01 18:04:31 +080087 mock_device_->AddChannel(
88 std::make_unique<FakeIioChannel>("timestamp", true));
Enrico Granata064a25c2019-07-15 15:48:03 -070089 }
Enrico Granata064a25c2019-07-15 15:48:03 -070090}
91
92void SensorTestBase::SetSharedSensor() {
93 if (sensor_kind_ == SensorKind::ACCELEROMETER) {
Harvey Yang786967c2020-07-01 18:04:31 +080094 mock_device_->AddChannel(
Enrico Granata064a25c2019-07-15 15:48:03 -070095 std::make_unique<FakeIioChannel>("accel_x_base", false));
Harvey Yang786967c2020-07-01 18:04:31 +080096 mock_device_->AddChannel(
Enrico Granata064a25c2019-07-15 15:48:03 -070097 std::make_unique<FakeIioChannel>("accel_y_base", false));
Harvey Yang786967c2020-07-01 18:04:31 +080098 mock_device_->AddChannel(
Enrico Granata064a25c2019-07-15 15:48:03 -070099 std::make_unique<FakeIioChannel>("accel_z_base", false));
100
Harvey Yang786967c2020-07-01 18:04:31 +0800101 mock_device_->AddChannel(
102 std::make_unique<FakeIioChannel>("accel_x_lid", false));
103 mock_device_->AddChannel(
104 std::make_unique<FakeIioChannel>("accel_y_lid", false));
105 mock_device_->AddChannel(
106 std::make_unique<FakeIioChannel>("accel_z_lid", false));
Enrico Granata064a25c2019-07-15 15:48:03 -0700107
Harvey Yang786967c2020-07-01 18:04:31 +0800108 mock_device_->AddChannel(
109 std::make_unique<FakeIioChannel>("timestamp", true));
Harvey Yangfc9178f2020-03-16 14:26:53 +0800110 } else if (sensor_kind_ == SensorKind::GYROSCOPE) {
Harvey Yang786967c2020-07-01 18:04:31 +0800111 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800112 std::make_unique<FakeIioChannel>("anglvel_x_base", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800113 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800114 std::make_unique<FakeIioChannel>("anglvel_y_base", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800115 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800116 std::make_unique<FakeIioChannel>("anglvel_z_base", false));
117
Harvey Yang786967c2020-07-01 18:04:31 +0800118 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800119 std::make_unique<FakeIioChannel>("anglvel_x_lid", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800120 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800121 std::make_unique<FakeIioChannel>("anglvel_y_lid", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800122 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800123 std::make_unique<FakeIioChannel>("anglvel_z_lid", false));
124
Harvey Yang786967c2020-07-01 18:04:31 +0800125 mock_device_->AddChannel(
126 std::make_unique<FakeIioChannel>("timestamp", true));
Enrico Granata064a25c2019-07-15 15:48:03 -0700127 }
Harvey Yangfc9178f2020-03-16 14:26:53 +0800128}
129
130void SensorTestBase::SetColorLightSensor() {
131 if (sensor_kind_ != SensorKind::LIGHT)
132 return;
133
Harvey Yang786967c2020-07-01 18:04:31 +0800134 mock_device_->AddChannel(
135 std::make_unique<FakeIioChannel>("illuminance", false));
136 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800137 std::make_unique<FakeIioChannel>("illuminance_red", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800138 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800139 std::make_unique<FakeIioChannel>("illuminance_green", false));
Harvey Yang786967c2020-07-01 18:04:31 +0800140 mock_device_->AddChannel(
Harvey Yangfc9178f2020-03-16 14:26:53 +0800141 std::make_unique<FakeIioChannel>("illuminance_blue", false));
142
Harvey Yang786967c2020-07-01 18:04:31 +0800143 mock_device_->AddChannel(std::make_unique<FakeIioChannel>("timestamp", true));
Enrico Granata60b1cbc2019-05-20 11:06:46 -0700144}
145
146void SensorTestBase::ConfigureVpd(
147 std::initializer_list<std::pair<const char*, const char*>> values) {
148 for (const auto& value : values) {
149 mock_delegate_->SetVpdValue(value.first, value.second);
150 }
151}
152
153Configuration* SensorTestBase::GetConfiguration() {
154 if (config_ == nullptr) {
Harvey Yang786967c2020-07-01 18:04:31 +0800155 config_.reset(new Configuration(mock_context_.get(), mock_device_,
Gwendal Grignouba911fe2019-12-08 17:14:53 -0800156 sensor_kind_, mock_delegate_.get()));
Enrico Granata60b1cbc2019-05-20 11:06:46 -0700157 }
158
159 return config_.get();
160}
161
162} // namespace testing
163} // namespace mems_setup