| Willy Tu | 6c71b0f | 2021-10-10 13:34:41 -0700 | [diff] [blame^] | 1 | // 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 |  | 
 | 24 | namespace google | 
 | 25 | { | 
 | 26 | namespace ipmi | 
 | 27 | { | 
 | 28 |  | 
 | 29 | class 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 |  | 
 | 44 | class 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 |