blob: e75c5b8538ac8a4f0e00be8b6e7aee4f5e9da9fd [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}
39
40void FakeIioChannel::WriteStringAttribute(const std::string& name,
41 const std::string& value) {
42 text_attributes_[name] = value;
43}
44void FakeIioChannel::WriteNumberAttribute(const std::string& name,
45 int64_t value) {
46 numeric_attributes_[name] = value;
47}
48
Enrico Granata9bb17522019-06-28 17:22:42 -070049FakeIioDevice::FakeIioDevice(FakeIioContext* ctx,
Enrico Granata51cdb942019-06-18 16:40:17 -070050 const std::string& name,
Harvey Yang9260b662019-08-12 15:48:03 +080051 int id)
Enrico Granata51cdb942019-06-18 16:40:17 -070052 : IioDevice(), context_(ctx), name_(name), id_(id) {}
53
Harvey Yang9260b662019-08-12 15:48:03 +080054base::FilePath FakeIioDevice::GetPath() const {
55 std::string id_str(kDeviceIdPrefix);
56 id_str.append(std::to_string(GetId()));
57 return base::FilePath("/sys/bus/iio/devices").Append(id_str);
58}
59
Enrico Granata9bb17522019-06-28 17:22:42 -070060base::Optional<std::string> FakeIioDevice::ReadStringAttribute(
Enrico Granata51cdb942019-06-18 16:40:17 -070061 const std::string& name) const {
Gwendal Grignou197d5162019-11-20 16:46:02 -080062 return FakeReadAttributes<>(name, text_attributes_);
Enrico Granata51cdb942019-06-18 16:40:17 -070063}
Enrico Granata9bb17522019-06-28 17:22:42 -070064base::Optional<int64_t> FakeIioDevice::ReadNumberAttribute(
Enrico Granata51cdb942019-06-18 16:40:17 -070065 const std::string& name) const {
Gwendal Grignou197d5162019-11-20 16:46:02 -080066 return FakeReadAttributes<>(name, numeric_attributes_);
Enrico Granata51cdb942019-06-18 16:40:17 -070067}
Enrico Granatad2e57f42019-07-31 10:46:03 -070068base::Optional<double> FakeIioDevice::ReadDoubleAttribute(
69 const std::string& name) const {
Gwendal Grignou197d5162019-11-20 16:46:02 -080070 return FakeReadAttributes<>(name, double_attributes_);
Enrico Granatad2e57f42019-07-31 10:46:03 -070071}
Enrico Granata51cdb942019-06-18 16:40:17 -070072
Enrico Granata9bb17522019-06-28 17:22:42 -070073bool FakeIioDevice::WriteStringAttribute(const std::string& name,
Enrico Granata51cdb942019-06-18 16:40:17 -070074 const std::string& value) {
75 text_attributes_[name] = value;
76 return true;
77}
Enrico Granata9bb17522019-06-28 17:22:42 -070078bool FakeIioDevice::WriteNumberAttribute(const std::string& name,
Enrico Granata51cdb942019-06-18 16:40:17 -070079 int64_t value) {
80 numeric_attributes_[name] = value;
81 return true;
82}
Enrico Granatad2e57f42019-07-31 10:46:03 -070083bool FakeIioDevice::WriteDoubleAttribute(const std::string& name,
84 double value) {
85 double_attributes_[name] = value;
86 return true;
87}
Enrico Granata51cdb942019-06-18 16:40:17 -070088
Enrico Granata9bb17522019-06-28 17:22:42 -070089bool FakeIioDevice::SetTrigger(IioDevice* trigger) {
Enrico Granata51cdb942019-06-18 16:40:17 -070090 trigger_ = trigger;
91 return true;
92}
93
Harvey Yangb0c30962019-09-17 15:00:25 +080094std::vector<IioChannel*> FakeIioDevice::GetAllChannels() {
95 std::vector<IioChannel*> channels;
96 for (auto channel : channels_)
97 channels.push_back(channel.second);
98
99 return channels;
100}
101
Enrico Granata9bb17522019-06-28 17:22:42 -0700102IioChannel* FakeIioDevice::GetChannel(const std::string& id) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700103 auto k = channels_.find(id);
104 if (k == channels_.end())
105 return nullptr;
106 return k->second;
107}
108
Enrico Granata9bb17522019-06-28 17:22:42 -0700109bool FakeIioDevice::EnableBuffer(size_t n) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700110 buffer_length_ = n;
111 buffer_enabled_ = true;
112 return true;
113}
Enrico Granata9bb17522019-06-28 17:22:42 -0700114bool FakeIioDevice::DisableBuffer() {
Enrico Granata51cdb942019-06-18 16:40:17 -0700115 buffer_enabled_ = false;
116 return true;
117}
Enrico Granata9bb17522019-06-28 17:22:42 -0700118bool FakeIioDevice::IsBufferEnabled(size_t* n) const {
Enrico Granata51cdb942019-06-18 16:40:17 -0700119 if (n && buffer_enabled_)
120 *n = buffer_length_;
121 return buffer_enabled_;
122}
123
Enrico Granata9bb17522019-06-28 17:22:42 -0700124void FakeIioContext::AddDevice(FakeIioDevice* device) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700125 CHECK(device);
Enrico Granata51cdb942019-06-18 16:40:17 -0700126 devices_.emplace(device->GetId(), device);
127}
128
Harvey Yang9260b662019-08-12 15:48:03 +0800129void FakeIioContext::AddTrigger(FakeIioDevice* trigger) {
130 CHECK(trigger);
131 triggers_.emplace(trigger->GetId(), trigger);
132}
133
134std::vector<IioDevice*> FakeIioContext::GetDevicesByName(
135 const std::string& name) {
136 return GetFakeByName(name, devices_);
137}
138
139IioDevice* FakeIioContext::GetDeviceById(int id) {
140 return GetFakeById(id, devices_);
141}
142
143std::vector<IioDevice*> FakeIioContext::GetAllDevices() {
144 return GetFakeAll(devices_);
145}
146
147std::vector<IioDevice*> FakeIioContext::GetTriggersByName(
148 const std::string& name) {
149 return GetFakeByName(name, triggers_);
150}
151
152IioDevice* FakeIioContext::GetTriggerById(int id) {
153 return GetFakeById(id, triggers_);
154}
155
156std::vector<IioDevice*> FakeIioContext::GetAllTriggers() {
157 return GetFakeAll(triggers_);
158}
159
160IioDevice* FakeIioContext::GetFakeById(
161 int id, const std::map<int, FakeIioDevice*>& devices_map) {
162 auto k = devices_map.find(id);
163 return (k == devices_map.end()) ? nullptr : k->second;
164}
165
166std::vector<IioDevice*> FakeIioContext::GetFakeByName(
167 const std::string& name, const std::map<int, FakeIioDevice*>& devices_map) {
168 std::vector<IioDevice*> devices;
169 for (auto const& it : devices_map) {
170 if (name.compare(it.second->GetName()) == 0)
171 devices.push_back(it.second);
172 }
173
174 return devices;
175}
176
177std::vector<IioDevice*> FakeIioContext::GetFakeAll(
178 const std::map<int, FakeIioDevice*>& devices_map) {
179 std::vector<IioDevice*> devices;
180 for (auto const& it : devices_map)
181 devices.push_back(it.second);
182
183 return devices;
Enrico Granata51cdb942019-06-18 16:40:17 -0700184}
185
Enrico Granata9bb17522019-06-28 17:22:42 -0700186} // namespace fakes
Enrico Granata51cdb942019-06-18 16:40:17 -0700187} // namespace libmems