blob: 00bd25cdeee7d8fa5453515c04d5f68819da7eda [file] [log] [blame]
Enrico Granata60a818d2019-05-09 09:56:09 -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 Granata51cdb942019-06-18 16:40:17 -07005#ifndef LIBMEMS_IIO_CONTEXT_IMPL_H_
6#define LIBMEMS_IIO_CONTEXT_IMPL_H_
Enrico Granata60a818d2019-05-09 09:56:09 -07007
8#include <iio.h>
9
10#include <map>
11#include <memory>
12#include <string>
13#include <vector>
14
Enrico Granata51cdb942019-06-18 16:40:17 -070015#include "libmems/export.h"
16#include "libmems/iio_context.h"
Harvey Yang9260b662019-08-12 15:48:03 +080017#include "libmems/iio_device.h"
18#include "libmems/iio_device_impl.h"
19#include "libmems/iio_device_trigger_impl.h"
Enrico Granata60a818d2019-05-09 09:56:09 -070020
Enrico Granata51cdb942019-06-18 16:40:17 -070021namespace libmems {
Enrico Granata60a818d2019-05-09 09:56:09 -070022
Enrico Granata51cdb942019-06-18 16:40:17 -070023class LIBMEMS_EXPORT IioContextImpl : public IioContext {
Enrico Granata60a818d2019-05-09 09:56:09 -070024 public:
25 IioContextImpl();
Qijiang Fan6bc59e12020-11-11 02:51:06 +090026 IioContextImpl(const IioContextImpl&) = delete;
27 IioContextImpl& operator=(const IioContextImpl&) = delete;
28
Enrico Granata60a818d2019-05-09 09:56:09 -070029 ~IioContextImpl() override = default;
30
Harvey Yang9260b662019-08-12 15:48:03 +080031 iio_context* GetCurrentContext() const override;
32
Enrico Granata60a818d2019-05-09 09:56:09 -070033 void Reload() override;
Harvey Yang6698c862019-09-16 17:24:38 +080034 bool SetTimeout(uint32_t timeout) override;
Harvey Yang9260b662019-08-12 15:48:03 +080035
36 std::vector<IioDevice*> GetDevicesByName(const std::string& name) override;
37 IioDevice* GetDeviceById(int id) override;
38 std::vector<IioDevice*> GetAllDevices() override;
39
40 std::vector<IioDevice*> GetTriggersByName(const std::string& name) override;
41 IioDevice* GetTriggerById(int id) override;
42 std::vector<IioDevice*> GetAllTriggers() override;
Enrico Granata60a818d2019-05-09 09:56:09 -070043
44 private:
45 using ContextUniquePtr =
46 std::unique_ptr<iio_context, decltype(&iio_context_destroy)>;
47
Harvey Yang9260b662019-08-12 15:48:03 +080048 template <typename T>
49 IioDevice* GetById(int id, std::map<int, std::unique_ptr<T>>* devices_map);
50 template <typename T>
51 std::vector<IioDevice*> GetByName(
52 const std::string& name, std::map<int, std::unique_ptr<T>>* devices_map);
53 template <typename T>
54 std::vector<IioDevice*> GetAll(
55 std::map<int, std::unique_ptr<T>>* devices_map);
Enrico Granata60a818d2019-05-09 09:56:09 -070056
Enrico Granata60a818d2019-05-09 09:56:09 -070057 std::vector<ContextUniquePtr> context_;
Harvey Yang9260b662019-08-12 15:48:03 +080058
59 // device id to IioDevice
60 std::map<int, std::unique_ptr<IioDeviceImpl>> devices_;
61 // trigger id to IioDevice
62 std::map<int, std::unique_ptr<IioDeviceTriggerImpl>> triggers_;
Enrico Granata60a818d2019-05-09 09:56:09 -070063};
64
Enrico Granata51cdb942019-06-18 16:40:17 -070065} // namespace libmems
Enrico Granata60a818d2019-05-09 09:56:09 -070066
Enrico Granata51cdb942019-06-18 16:40:17 -070067#endif // LIBMEMS_IIO_CONTEXT_IMPL_H_