blob: cac0b85c53dadc79e3d9b272e64e3c826decf670 [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.
Harvey Yang705e40f2020-11-19 15:42:44 +080023 IioChannelImpl(iio_channel* channel, int device_id, const char* device_name);
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;
Harvey Yang2c08cf72020-09-24 12:36:23 +080032 void SetEnabled(bool en) override;
33
34 bool SetScanElementsEnabled(bool en) override;
Enrico Granata60a818d2019-05-09 09:56:09 -070035
Harvey Yang96029cb2019-06-03 17:26:14 +080036 base::Optional<std::string> ReadStringAttribute(
37 const std::string& name) const override;
38 base::Optional<int64_t> ReadNumberAttribute(
39 const std::string& name) const override;
Harvey Yang9903fc22020-03-16 14:22:53 +080040 base::Optional<double> ReadDoubleAttribute(
41 const std::string& name) const override;
42
43 bool WriteStringAttribute(const std::string& name,
44 const std::string& value) override;
45 bool WriteNumberAttribute(const std::string& name, int64_t value) override;
46 bool WriteDoubleAttribute(const std::string& name, double value) override;
Harvey Yang96029cb2019-06-03 17:26:14 +080047
Harvey Yang34c54d52020-05-20 13:34:20 +080048 base::Optional<int64_t> Convert(const uint8_t* src) const;
49 base::Optional<uint64_t> Length() const;
50
Enrico Granata60a818d2019-05-09 09:56:09 -070051 private:
52 iio_channel* const channel_; // non-owned
Harvey Yang705e40f2020-11-19 15:42:44 +080053
54 std::string log_prefix_;
Enrico Granata60a818d2019-05-09 09:56:09 -070055};
56
Enrico Granata51cdb942019-06-18 16:40:17 -070057} // namespace libmems
Enrico Granata60a818d2019-05-09 09:56:09 -070058
Enrico Granata51cdb942019-06-18 16:40:17 -070059#endif // LIBMEMS_IIO_CHANNEL_IMPL_H_