blob: 84917661203788f88e1d1583801b1f1f7376b03a [file] [log] [blame]
Marc Olberding1e17db52025-08-27 12:25:28 -07001// SPDX-License-Identifier: Apache-2.0
Patrick Williams4a943522025-10-09 20:34:38 -04002// SPDX-FileCopyrightText: Copyright OpenBMC Authors
Marc Olberding1e17db52025-08-27 12:25:28 -07003
4#pragma once
5
Marc Olberding5d50e522025-09-03 18:23:32 -07006#include <cstdint>
Marc Olberding1b83d212025-10-03 17:42:58 -07007#include <expected>
Marc Olberding1e17db52025-08-27 12:25:28 -07008#include <string>
Marc Olberding1b83d212025-10-03 17:42:58 -07009#include <system_error>
Marc Olberding1e17db52025-08-27 12:25:28 -070010
11namespace i2c
12{
13
14void rebind_controller(const std::string_view number);
15void new_device(unsigned int bus, unsigned int address,
16 std::string_view device_type);
Marc Olberding5d50e522025-09-03 18:23:32 -070017
18// a simple RAII wrapper for raw i2c comms
19struct RawDevice
20{
21 RawDevice(size_t bus, uint8_t address);
22 ~RawDevice();
23 RawDevice(const RawDevice&) = delete;
24 RawDevice& operator=(const RawDevice&) = delete;
25 RawDevice& operator=(RawDevice&&) = default;
26 RawDevice(RawDevice&&) = default;
27
Marc Olberding1b83d212025-10-03 17:42:58 -070028 std::expected<uint8_t, std::error_code> read_byte(uint8_t reg);
Marc Olberding5d50e522025-09-03 18:23:32 -070029
30 int fd;
31};
Marc Olberding1e17db52025-08-27 12:25:28 -070032} // namespace i2c