blob: 1e8efd82a82575a9785f1479af8fc943949c8477 [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
Enrico Granata9bb17522019-06-28 17:22:42 -070094IioChannel* FakeIioDevice::GetChannel(const std::string& id) {
Enrico Granata51cdb942019-06-18 16:40:17 -070095 auto k = channels_.find(id);
96 if (k == channels_.end())
97 return nullptr;
98 return k->second;
99}
100
Enrico Granata9bb17522019-06-28 17:22:42 -0700101bool FakeIioDevice::EnableBuffer(size_t n) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700102 buffer_length_ = n;
103 buffer_enabled_ = true;
104 return true;
105}
Enrico Granata9bb17522019-06-28 17:22:42 -0700106bool FakeIioDevice::DisableBuffer() {
Enrico Granata51cdb942019-06-18 16:40:17 -0700107 buffer_enabled_ = false;
108 return true;
109}
Enrico Granata9bb17522019-06-28 17:22:42 -0700110bool FakeIioDevice::IsBufferEnabled(size_t* n) const {
Enrico Granata51cdb942019-06-18 16:40:17 -0700111 if (n && buffer_enabled_)
112 *n = buffer_length_;
113 return buffer_enabled_;
114}
115
Enrico Granata9bb17522019-06-28 17:22:42 -0700116void FakeIioContext::AddDevice(FakeIioDevice* device) {
Enrico Granata51cdb942019-06-18 16:40:17 -0700117 CHECK(device);
Enrico Granata51cdb942019-06-18 16:40:17 -0700118 devices_.emplace(device->GetId(), device);
119}
120
Harvey Yang9260b662019-08-12 15:48:03 +0800121void FakeIioContext::AddTrigger(FakeIioDevice* trigger) {
122 CHECK(trigger);
123 triggers_.emplace(trigger->GetId(), trigger);
124}
125
126std::vector<IioDevice*> FakeIioContext::GetDevicesByName(
127 const std::string& name) {
128 return GetFakeByName(name, devices_);
129}
130
131IioDevice* FakeIioContext::GetDeviceById(int id) {
132 return GetFakeById(id, devices_);
133}
134
135std::vector<IioDevice*> FakeIioContext::GetAllDevices() {
136 return GetFakeAll(devices_);
137}
138
139std::vector<IioDevice*> FakeIioContext::GetTriggersByName(
140 const std::string& name) {
141 return GetFakeByName(name, triggers_);
142}
143
144IioDevice* FakeIioContext::GetTriggerById(int id) {
145 return GetFakeById(id, triggers_);
146}
147
148std::vector<IioDevice*> FakeIioContext::GetAllTriggers() {
149 return GetFakeAll(triggers_);
150}
151
152IioDevice* FakeIioContext::GetFakeById(
153 int id, const std::map<int, FakeIioDevice*>& devices_map) {
154 auto k = devices_map.find(id);
155 return (k == devices_map.end()) ? nullptr : k->second;
156}
157
158std::vector<IioDevice*> FakeIioContext::GetFakeByName(
159 const std::string& name, const std::map<int, FakeIioDevice*>& devices_map) {
160 std::vector<IioDevice*> devices;
161 for (auto const& it : devices_map) {
162 if (name.compare(it.second->GetName()) == 0)
163 devices.push_back(it.second);
164 }
165
166 return devices;
167}
168
169std::vector<IioDevice*> FakeIioContext::GetFakeAll(
170 const std::map<int, FakeIioDevice*>& devices_map) {
171 std::vector<IioDevice*> devices;
172 for (auto const& it : devices_map)
173 devices.push_back(it.second);
174
175 return devices;
Enrico Granata51cdb942019-06-18 16:40:17 -0700176}
177
Enrico Granata9bb17522019-06-28 17:22:42 -0700178} // namespace fakes
Enrico Granata51cdb942019-06-18 16:40:17 -0700179} // namespace libmems