blob: 1bc51f4f0fc903fbdcb4d159181bd65925a6926a [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);
24 ~IioChannelImpl() override = default;
25
26 const char* GetId() const override;
27
28 bool IsEnabled() const override;
29 bool SetEnabled(bool en) override;
30
Harvey Yang96029cb2019-06-03 17:26:14 +080031 base::Optional<std::string> ReadStringAttribute(
32 const std::string& name) const override;
33 base::Optional<int64_t> ReadNumberAttribute(
34 const std::string& name) const override;
Harvey Yang9903fc22020-03-16 14:22:53 +080035 base::Optional<double> ReadDoubleAttribute(
36 const std::string& name) const override;
37
38 bool WriteStringAttribute(const std::string& name,
39 const std::string& value) override;
40 bool WriteNumberAttribute(const std::string& name, int64_t value) override;
41 bool WriteDoubleAttribute(const std::string& name, double value) override;
Harvey Yang96029cb2019-06-03 17:26:14 +080042
Harvey Yang34c54d52020-05-20 13:34:20 +080043 base::Optional<int64_t> Convert(const uint8_t* src) const;
44 base::Optional<uint64_t> Length() const;
45
Enrico Granata60a818d2019-05-09 09:56:09 -070046 private:
47 iio_channel* const channel_; // non-owned
48
49 DISALLOW_COPY_AND_ASSIGN(IioChannelImpl);
50};
51
Enrico Granata51cdb942019-06-18 16:40:17 -070052} // namespace libmems
Enrico Granata60a818d2019-05-09 09:56:09 -070053
Enrico Granata51cdb942019-06-18 16:40:17 -070054#endif // LIBMEMS_IIO_CHANNEL_IMPL_H_