blob: c29a6e2924847860b4f57db7fe55ec93939fd0a8 [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();
26 ~IioContextImpl() override = default;
27
Harvey Yang9260b662019-08-12 15:48:03 +080028 iio_context* GetCurrentContext() const override;
29
Enrico Granata60a818d2019-05-09 09:56:09 -070030 void Reload() override;
Harvey Yang6698c862019-09-16 17:24:38 +080031 bool SetTimeout(uint32_t timeout) override;
Harvey Yang9260b662019-08-12 15:48:03 +080032
33 std::vector<IioDevice*> GetDevicesByName(const std::string& name) override;
34 IioDevice* GetDeviceById(int id) override;
35 std::vector<IioDevice*> GetAllDevices() override;
36
37 std::vector<IioDevice*> GetTriggersByName(const std::string& name) override;
38 IioDevice* GetTriggerById(int id) override;
39 std::vector<IioDevice*> GetAllTriggers() override;
Enrico Granata60a818d2019-05-09 09:56:09 -070040
41 private:
42 using ContextUniquePtr =
43 std::unique_ptr<iio_context, decltype(&iio_context_destroy)>;
44
Harvey Yang9260b662019-08-12 15:48:03 +080045 template <typename T>
46 IioDevice* GetById(int id, std::map<int, std::unique_ptr<T>>* devices_map);
47 template <typename T>
48 std::vector<IioDevice*> GetByName(
49 const std::string& name, std::map<int, std::unique_ptr<T>>* devices_map);
50 template <typename T>
51 std::vector<IioDevice*> GetAll(
52 std::map<int, std::unique_ptr<T>>* devices_map);
Enrico Granata60a818d2019-05-09 09:56:09 -070053
Enrico Granata60a818d2019-05-09 09:56:09 -070054 std::vector<ContextUniquePtr> context_;
Harvey Yang9260b662019-08-12 15:48:03 +080055
56 // device id to IioDevice
57 std::map<int, std::unique_ptr<IioDeviceImpl>> devices_;
58 // trigger id to IioDevice
59 std::map<int, std::unique_ptr<IioDeviceTriggerImpl>> triggers_;
Enrico Granata60a818d2019-05-09 09:56:09 -070060
61 DISALLOW_COPY_AND_ASSIGN(IioContextImpl);
62};
63
Enrico Granata51cdb942019-06-18 16:40:17 -070064} // namespace libmems
Enrico Granata60a818d2019-05-09 09:56:09 -070065
Enrico Granata51cdb942019-06-18 16:40:17 -070066#endif // LIBMEMS_IIO_CONTEXT_IMPL_H_