blob: e7b2860e6ec84604c98a27908294630501a4e7c1 [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_CHANNEL_IMPL_H_
6#define LIBMEMS_IIO_CHANNEL_IMPL_H_
Enrico Granata60a818d2019-05-09 09:56:09 -07007
8#include <iio.h>
9
10#include <memory>
Harvey Yang96029cb2019-06-03 17:26:14 +080011#include <string>
Enrico Granata60a818d2019-05-09 09:56:09 -070012
Enrico Granata51cdb942019-06-18 16:40:17 -070013#include "libmems/export.h"
14#include "libmems/iio_channel.h"
Enrico Granata60a818d2019-05-09 09:56:09 -070015
Enrico Granata51cdb942019-06-18 16:40:17 -070016namespace libmems {
Enrico Granata60a818d2019-05-09 09:56:09 -070017
18class IioDevice;
19
Enrico Granata51cdb942019-06-18 16:40:17 -070020class LIBMEMS_EXPORT IioChannelImpl : public IioChannel {
Enrico Granata60a818d2019-05-09 09:56:09 -070021 public:
22 // iio_channel objects are kept alive by the IioContextImpl.
23 explicit IioChannelImpl(iio_channel* channel);
Qijiang Fan6bc59e12020-11-11 02:51:06 +090024 IioChannelImpl(const IioChannelImpl&) = delete;
25 IioChannelImpl& operator=(const IioChannelImpl&) = delete;
26
Enrico Granata60a818d2019-05-09 09:56:09 -070027 ~IioChannelImpl() override = default;
28
29 const char* GetId() const override;
30
31 bool IsEnabled() const override;
32 bool SetEnabled(bool en) override;
33
Harvey Yang96029cb2019-06-03 17:26:14 +080034 base::Optional<std::string> ReadStringAttribute(
35 const std::string& name) const override;
36 base::Optional<int64_t> ReadNumberAttribute(
37 const std::string& name) const override;
Harvey Yang9903fc22020-03-16 14:22:53 +080038 base::Optional<double> ReadDoubleAttribute(
39 const std::string& name) const override;
40
41 bool WriteStringAttribute(const std::string& name,
42 const std::string& value) override;
43 bool WriteNumberAttribute(const std::string& name, int64_t value) override;
44 bool WriteDoubleAttribute(const std::string& name, double value) override;
Harvey Yang96029cb2019-06-03 17:26:14 +080045
Harvey Yang34c54d52020-05-20 13:34:20 +080046 base::Optional<int64_t> Convert(const uint8_t* src) const;
47 base::Optional<uint64_t> Length() const;
48
Enrico Granata60a818d2019-05-09 09:56:09 -070049 private:
50 iio_channel* const channel_; // non-owned
Enrico Granata60a818d2019-05-09 09:56:09 -070051};
52
Enrico Granata51cdb942019-06-18 16:40:17 -070053} // namespace libmems
Enrico Granata60a818d2019-05-09 09:56:09 -070054
Enrico Granata51cdb942019-06-18 16:40:17 -070055#endif // LIBMEMS_IIO_CHANNEL_IMPL_H_