1 /** 2 * Copyright © 2019 IBM Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #include "fru_identity.hpp" 17 18 namespace openpower 19 { 20 namespace pels 21 { 22 namespace src 23 { 24 25 FRUIdentity::FRUIdentity(Stream& pel) 26 { 27 pel >> _type >> _size >> _flags; 28 29 if (_flags & (pnSupplied | maintProcSupplied)) 30 { 31 pel.read(_pnOrProcedureID.data(), _pnOrProcedureID.size()); 32 } 33 34 if (_flags & ccinSupplied) 35 { 36 pel.read(_ccin.data(), _ccin.size()); 37 } 38 39 if (_flags & snSupplied) 40 { 41 pel.read(_sn.data(), _sn.size()); 42 } 43 } 44 45 std::optional<std::string> FRUIdentity::getPN() const 46 { 47 if (hasPN()) 48 { 49 // NULL terminated 50 std::string pn{_pnOrProcedureID.data()}; 51 return pn; 52 } 53 54 return std::nullopt; 55 } 56 57 std::optional<std::string> FRUIdentity::getMaintProc() const 58 { 59 if (hasMP()) 60 { 61 // NULL terminated 62 std::string mp{_pnOrProcedureID.data()}; 63 return mp; 64 } 65 66 return std::nullopt; 67 } 68 69 std::optional<std::string> FRUIdentity::getCCIN() const 70 { 71 if (hasCCIN()) 72 { 73 std::string ccin{_ccin.begin(), _ccin.begin() + _ccin.size()}; 74 return ccin; 75 } 76 77 return std::nullopt; 78 } 79 80 std::optional<std::string> FRUIdentity::getSN() const 81 { 82 if (hasSN()) 83 { 84 std::string sn{_sn.begin(), _sn.begin() + _sn.size()}; 85 return sn; 86 } 87 88 return std::nullopt; 89 } 90 91 void FRUIdentity::flatten(Stream& pel) const 92 { 93 pel << _type << _size << _flags; 94 95 if (hasPN() || hasMP()) 96 { 97 pel.write(_pnOrProcedureID.data(), _pnOrProcedureID.size()); 98 } 99 100 if (hasCCIN()) 101 { 102 pel.write(_ccin.data(), _ccin.size()); 103 } 104 105 if (hasSN()) 106 { 107 pel.write(_sn.data(), _sn.size()); 108 } 109 } 110 111 } // namespace src 112 } // namespace pels 113 } // namespace openpower 114