blob: f9a49ca10ddef90135ba9a6a8649c9577969f416 [file] [log] [blame]
Enrico Granata51cdb942019-06-18 16:40:17 -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
Enrico Granata9bb17522019-06-28 17:22:42 -07005#include "libmems/test_fakes.h"
Enrico Granata51cdb942019-06-18 16:40:17 -07006
7#include <base/logging.h>
8
Harvey Yang9260b662019-08-12 15:48:03 +08009#include "libmems/common_types.h"
10
Enrico Granata51cdb942019-06-18 16:40:17 -070011namespace libmems {
Enrico Granata9bb17522019-06-28 17:22:42 -070012namespace fakes {
Enrico Granata51cdb942019-06-18 16:40:17 -070013
Enrico Granata9bb17522019-06-28 17:22:42 -070014FakeIioChannel::FakeIioChannel(const std::string& id, bool enabled)
Enrico Granata51cdb942019-06-18 16:40:17 -070015 : id_(id), enabled_(enabled) {}
16
Enrico Granata9bb17522019-06-28 17:22:42 -070017bool FakeIioChannel::SetEnabled(bool en) {
Enrico Granata51cdb942019-06-18 16:40:17 -070018 enabled_ = en;
19 return true;
20}
21
Gwendal Grignou197d5162019-11-20 16:46:02 -080022template <typename T> base::Optional<T> FakeReadAttributes(
23 const std::string& name,
24 std::map<std::string, T> attributes) {
25 auto k = attributes.find(name);
26 if (k == attributes.end())
Enrico Granata064a25c2019-07-15 15:48:03 -070027 return base::nullopt;
28 return k->second;
29}
Gwendal Grignou197d5162019-11-20 16:46:02 -080030
31base::Optional<std::string> FakeIioChannel::ReadStringAttribute(
32 const std::string& name) const {
33 return FakeReadAttributes<>(name, text_attributes_);
34}
Enrico Granata064a25c2019-07-15 15:48:03 -070035base::Optional<int64_t> FakeIioChannel::ReadNumberAttribute(
36 const std::string& name) const {
Gwendal Grignou197d5162019-11-20 16:46:02 -080037 return FakeReadAttributes<>(name, numeric_attributes_);
Enrico Granata064a25c2019-07-15 15:48:03 -070038}
Harvey Yang9903fc22020-03-16 14:22:53 +080039base::Optional<double> FakeIioChannel::ReadDoubleAttribute(
40 const std::string& name) const {
41 return FakeReadAttributes<>(name, double_attributes_);
Enrico Granata064a25c2019-07-15 15:48:03 -070042}
Harvey Yang9903fc22020-03-16 14:22:53 +080043
44bool FakeIioChannel::WriteStringAttribute(const std::string& name,
45 const std::string& value) {
46 text_attributes_[name] = value;
47 return true;
48}
49bool FakeIioChannel::WriteNumberAttribute(const std::string& name,
50 int64_t value) {
Enrico Granata064a25c2019-07-15 15:48:03 -070051 numeric_attributes_[name] = value;
Harvey Yang9903fc22020-03-16 14:22:53 +080052 return true;
53}
54bool FakeIioChannel::WriteDoubleAttribute(const std::string& name,
55 double value) {
56 double_attributes_[name] = value;
57 return true;
Enrico Granata064a25c2019-07-15 15:48:03 -070058}
59
Enrico Granata9bb17522019-06-28 17:22:42 -070060FakeIioDevice::FakeIioDevice(FakeIioContext* ctx,
Enrico Granata51cdb942019-06-18 16:40:17 -070061 const std::string& name,
Harvey Yang9260b662019-08-12 15:48:03 +080062 int id)
Enrico Granata51cdb942019-06-18 16:40:17 -070063 : IioDevice(), context_(ctx), name_(name), id_(id) {}
64
Harvey Yang9260b662019-08-12 15:48:03 +080065base::FilePath FakeIioDevice::GetPath() const {
66 std::string id_str(kDeviceIdPrefix);
67 id_str.append(std::to_string(GetId()));
68 return base::FilePath("/sys/bus/iio/devices").Append(id_str);
69}
70
Enrico Granata9bb17522019-06-28 17:22:42 -070071base::Optional<std::string> FakeIioDevice::ReadStringAttribute(
Enrico Granata51cdb942019-06-18 16:40:17 -070072 const std::string& name) const {
Gwendal Grignou197d5162019-11-20 16:46:02 -080073 return FakeReadAttributes<>(name, text_attributes_);
Enrico Granata51cdb942019-06-18 16:40:17 -070074}
Enrico Granata9bb17522019-06-28 17:22:42 -070075base::Optional<int64_t> FakeIioDevice::ReadNumberAttribute(
Enrico Granata51cdb942019-06-18 16:40:17 -070076 const std::string& name) const {
Gwendal Grignou197d5162019-11-20 16:46:02 -080077 return FakeReadAttributes<>(name, numeric_attributes_);
Enrico Granata51cdb942019-06-18 16:40:17 -070078}
Enrico Granatad2e57f42019-07-31 10:46:03 -070079base::Optional<double> FakeIioDevice::ReadDoubleAttribute(
80 const std::string& name) const {
Gwendal Grignou197d5162019-11-20 16:46:02 -080081 return FakeReadAttributes<>(name, double_attributes_);
Enrico Granatad2e57f42019-07-31 10:46:03 -070082}
Enrico Granata51cdb942019-06-18 16:40:17 -070083
Enrico Granata9bb17522019-06-28 17:22:42 -070084bool FakeIioDevice::WriteStringAttribute(const std::string& name,
Enrico Granata51cdb942019-06-18 16:40:17 -070085 const std::string& value) {
86 text_attributes_[name] = value;
87 return true;
88}
Enrico Granata9bb17522019-06-28 17:22:42 -070089bool FakeIioDevice::WriteNumberAttribute(const std::string& name,
Enrico Granata51cdb942019-06-18 16:40:17 -070090 int64_t value) {
91 numeric_attributes_[name] = value;
92 return true;
93}
Enrico Granatad2e57f42019-07-31 10:46:03 -070094bool FakeIioDevice::WriteDoubleAttribute(const std::string& name,
95 double value) {
96 double_attributes_[name] = value;
97 return true;
98}
Enrico Granata51cdb942019-06-18 16:40:17 -070099
Enrico Granata9bb17522019-06-28 17:22:42 -0700100bool FakeIioDevice::SetTrigger(IioDevice* trigger) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700101 trigger_ = trigger;
102 return true;
103}
104
Harvey Yangb0c30962019-09-17 15:00:25 +0800105std::vector<IioChannel*> FakeIioDevice::GetAllChannels() {
106 std::vector<IioChannel*> channels;
107 for (auto channel : channels_)
108 channels.push_back(channel.second);
109
110 return channels;
111}
112
Enrico Granata9bb17522019-06-28 17:22:42 -0700113IioChannel* FakeIioDevice::GetChannel(const std::string& id) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700114 auto k = channels_.find(id);
115 if (k == channels_.end())
116 return nullptr;
117 return k->second;
118}
119
Enrico Granata9bb17522019-06-28 17:22:42 -0700120bool FakeIioDevice::EnableBuffer(size_t n) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700121 buffer_length_ = n;
122 buffer_enabled_ = true;
123 return true;
124}
Enrico Granata9bb17522019-06-28 17:22:42 -0700125bool FakeIioDevice::DisableBuffer() {
Enrico Granata51cdb942019-06-18 16:40:17 -0700126 buffer_enabled_ = false;
127 return true;
128}
Enrico Granata9bb17522019-06-28 17:22:42 -0700129bool FakeIioDevice::IsBufferEnabled(size_t* n) const {
Enrico Granata51cdb942019-06-18 16:40:17 -0700130 if (n && buffer_enabled_)
131 *n = buffer_length_;
132 return buffer_enabled_;
133}
134
Enrico Granata9bb17522019-06-28 17:22:42 -0700135void FakeIioContext::AddDevice(FakeIioDevice* device) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700136 CHECK(device);
Enrico Granata51cdb942019-06-18 16:40:17 -0700137 devices_.emplace(device->GetId(), device);
138}
139
Harvey Yang9260b662019-08-12 15:48:03 +0800140void FakeIioContext::AddTrigger(FakeIioDevice* trigger) {
141 CHECK(trigger);
142 triggers_.emplace(trigger->GetId(), trigger);
143}
144
145std::vector<IioDevice*> FakeIioContext::GetDevicesByName(
146 const std::string& name) {
147 return GetFakeByName(name, devices_);
148}
149
150IioDevice* FakeIioContext::GetDeviceById(int id) {
151 return GetFakeById(id, devices_);
152}
153
154std::vector<IioDevice*> FakeIioContext::GetAllDevices() {
155 return GetFakeAll(devices_);
156}
157
158std::vector<IioDevice*> FakeIioContext::GetTriggersByName(
159 const std::string& name) {
160 return GetFakeByName(name, triggers_);
161}
162
163IioDevice* FakeIioContext::GetTriggerById(int id) {
164 return GetFakeById(id, triggers_);
165}
166
167std::vector<IioDevice*> FakeIioContext::GetAllTriggers() {
168 return GetFakeAll(triggers_);
169}
170
171IioDevice* FakeIioContext::GetFakeById(
172 int id, const std::map<int, FakeIioDevice*>& devices_map) {
173 auto k = devices_map.find(id);
174 return (k == devices_map.end()) ? nullptr : k->second;
175}
176
177std::vector<IioDevice*> FakeIioContext::GetFakeByName(
178 const std::string& name, const std::map<int, FakeIioDevice*>& devices_map) {
179 std::vector<IioDevice*> devices;
180 for (auto const& it : devices_map) {
181 if (name.compare(it.second->GetName()) == 0)
182 devices.push_back(it.second);
183 }
184
185 return devices;
186}
187
188std::vector<IioDevice*> FakeIioContext::GetFakeAll(
189 const std::map<int, FakeIioDevice*>& devices_map) {
190 std::vector<IioDevice*> devices;
191 for (auto const& it : devices_map)
192 devices.push_back(it.second);
193
194 return devices;
Enrico Granata51cdb942019-06-18 16:40:17 -0700195}
196
Enrico Granata9bb17522019-06-28 17:22:42 -0700197} // namespace fakes
Enrico Granata51cdb942019-06-18 16:40:17 -0700198} // namespace libmems