blob: 8823300faa4974dc6f8db43ad0108594fd394015 [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"
Enrico Granata60a818d2019-05-09 09:56:09 -070017
Enrico Granata51cdb942019-06-18 16:40:17 -070018namespace libmems {
Enrico Granata60a818d2019-05-09 09:56:09 -070019
Enrico Granata51cdb942019-06-18 16:40:17 -070020class LIBMEMS_EXPORT IioContextImpl : public IioContext {
Enrico Granata60a818d2019-05-09 09:56:09 -070021 public:
22 IioContextImpl();
23 ~IioContextImpl() override = default;
24
25 void Reload() override;
Harvey Yang6698c862019-09-16 17:24:38 +080026 bool SetTimeout(uint32_t timeout) override;
Enrico Granata60a818d2019-05-09 09:56:09 -070027 IioDevice* GetDevice(const std::string& name) override;
28
29 private:
30 using ContextUniquePtr =
31 std::unique_ptr<iio_context, decltype(&iio_context_destroy)>;
32
33 iio_context* GetCurrentContext() const;
34
Enrico Granata60a818d2019-05-09 09:56:09 -070035 std::vector<ContextUniquePtr> context_;
Harvey Yangc0d19d82019-07-01 12:17:34 +080036 std::map<std::string, std::unique_ptr<IioDevice>> devices_;
Enrico Granata60a818d2019-05-09 09:56:09 -070037
38 DISALLOW_COPY_AND_ASSIGN(IioContextImpl);
39};
40
Enrico Granata51cdb942019-06-18 16:40:17 -070041} // namespace libmems
Enrico Granata60a818d2019-05-09 09:56:09 -070042
Enrico Granata51cdb942019-06-18 16:40:17 -070043#endif // LIBMEMS_IIO_CONTEXT_IMPL_H_