blob: c0bd23df03e7476cea99bf7845c0c68d346631e0 [file] [log] [blame]
Willy Tu6c71b0f2021-10-10 13:34:41 -07001// Copyright 2022 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://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,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14#pragma once
15
16#include <cstdint>
17#include <functional>
18#include <optional>
19#include <string>
20#include <string_view>
21#include <unordered_map>
22#include <vector>
23
24namespace google
25{
26namespace ipmi
27{
28
29class BifurcationInterface
30{
31 public:
32 virtual ~BifurcationInterface() = default;
33
34 /**
35 * Get the Bifurcation of the device at the i2c bus
36 *
37 * @param[in] bus - I2C bus of the device
38 * @return the bifurcation at the i2c bus
39 */
40 virtual std::optional<std::vector<uint8_t>>
41 getBifurcation(uint8_t bus) noexcept = 0;
42};
43
44class BifurcationStatic : public BifurcationInterface
45{
46 public:
47 static std::reference_wrapper<BifurcationInterface> createBifurcation()
48 {
49 static BifurcationStatic bifurcationStatic;
50
51 return std::ref(bifurcationStatic);
52 }
53
54 BifurcationStatic(std::string_view bifurcationFile);
55
56 std::optional<std::vector<uint8_t>>
57 getBifurcation(uint8_t index) noexcept override;
58
59 protected:
60 BifurcationStatic();
61
62 private:
63 std::string bifurcationFile;
64};
65
66} // namespace ipmi
67} // namespace google