Pigweed
 
Loading...
Searching...
No Matches
device.h
1// Copyright 2021 The Pigweed Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4// use this file except in compliance with the License. You may obtain a copy of
5// the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12// License for the specific language governing permissions and limitations under
13// the License.
14//
15#pragma once
16
17#include "pw_bytes/span.h"
18#include "pw_chrono/system_clock.h"
19#include "pw_i2c/address.h"
20#include "pw_i2c/initiator.h"
21#include "pw_status/status.h"
22
23namespace pw {
24namespace i2c {
25
36class Device {
37 public:
48 constexpr Device(Initiator& initiator, Address device_address)
49 : initiator_(initiator), device_address_(device_address) {}
50
51 Device(const Device&) = delete;
52 Device(Device&&) = default;
53 ~Device() = default;
54
56 Status TransferFor(span<const Message> messages,
58 return initiator_.TransferFor(messages, timeout);
59 }
60
62 Status WriteReadFor(ConstByteSpan tx_buffer,
63 ByteSpan rx_buffer,
65 return initiator_.WriteReadFor(
66 device_address_, tx_buffer, rx_buffer, timeout);
67 }
68
72 Status WriteReadFor(const void* tx_buffer,
73 size_t tx_size_bytes,
74 void* rx_buffer,
75 size_t rx_size_bytes,
77 return initiator_.WriteReadFor(device_address_,
78 tx_buffer,
79 tx_size_bytes,
80 rx_buffer,
81 rx_size_bytes,
82 timeout);
83 }
84
86 Status WriteFor(ConstByteSpan tx_buffer,
88 return initiator_.WriteFor(device_address_, tx_buffer, timeout);
89 }
92 Status WriteFor(const void* tx_buffer,
93 size_t tx_size_bytes,
95 return initiator_.WriteFor(
96 device_address_, tx_buffer, tx_size_bytes, timeout);
97 }
98
100 Status ReadFor(ByteSpan rx_buffer, chrono::SystemClock::duration timeout) {
101 return initiator_.ReadFor(device_address_, rx_buffer, timeout);
102 }
105 Status ReadFor(void* rx_buffer,
106 size_t rx_size_bytes,
108 return initiator_.ReadFor(
109 device_address_, rx_buffer, rx_size_bytes, timeout);
110 }
111
114 return initiator_.ProbeDeviceFor(device_address_, timeout);
115 }
116
117 private:
118 Initiator& initiator_;
119 const Address device_address_;
120};
121
122} // namespace i2c
123} // namespace pw
Definition: status.h:85
Definition: address.h:39
Definition: device.h:36
Status ProbeFor(chrono::SystemClock::duration timeout)
Wraps pw::i2c::Initiator::ProbeDeviceFor.
Definition: device.h:113
constexpr Device(Initiator &initiator, Address device_address)
Definition: device.h:48
Status ReadFor(ByteSpan rx_buffer, chrono::SystemClock::duration timeout)
Wraps pw::i2c::Initiator::ReadFor.
Definition: device.h:100
Status TransferFor(span< const Message > messages, chrono::SystemClock::duration timeout)
Wraps pw::i2c::Initiator::TransferFor.
Definition: device.h:56
Status WriteFor(ConstByteSpan tx_buffer, chrono::SystemClock::duration timeout)
Wraps pw::i2c::Initiator::WriteFor.
Definition: device.h:86
Status WriteFor(const void *tx_buffer, size_t tx_size_bytes, chrono::SystemClock::duration timeout)
Definition: device.h:92
Status WriteReadFor(const void *tx_buffer, size_t tx_size_bytes, void *rx_buffer, size_t rx_size_bytes, chrono::SystemClock::duration timeout)
Definition: device.h:72
Status WriteReadFor(ConstByteSpan tx_buffer, ByteSpan rx_buffer, chrono::SystemClock::duration timeout)
Wraps pw::i2c::Initiator::WriteReadFor.
Definition: device.h:62
Status ReadFor(void *rx_buffer, size_t rx_size_bytes, chrono::SystemClock::duration timeout)
Definition: device.h:105
The common, base driver interface for initiating thread-safe transactions with devices on an I2C bus....
Definition: initiator.h:49
Status WriteFor(Address device_address, ConstByteSpan tx_buffer, chrono::SystemClock::duration timeout)
Definition: initiator.h:258
Status ReadFor(Address device_address, ByteSpan rx_buffer, chrono::SystemClock::duration timeout)
Definition: initiator.h:313
Status ProbeDeviceFor(Address device_address, chrono::SystemClock::duration timeout)
Definition: initiator.h:366
Status TransferFor(span< const Message > messages, chrono::SystemClock::duration timeout)
Definition: initiator.h:199
Status WriteReadFor(Address device_address, ConstByteSpan tx_buffer, ByteSpan rx_buffer, chrono::SystemClock::duration timeout)
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27
std::chrono::duration< rep, period > duration
Alias for durations representable with this clock.
Definition: system_clock.h:86