xref: /openbmc/phosphor-logging/extensions/openpower-pels/mtms.cpp (revision 40fb54935ce7367636a7156039396ee91cc4d5e2)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright 2019 IBM Corporation
3 
4 #include "mtms.hpp"
5 
6 namespace openpower
7 {
8 namespace pels
9 {
10 
MTMS()11 MTMS::MTMS()
12 {
13     memset(_machineTypeAndModel.data(), 0, mtmSize);
14     memset(_serialNumber.data(), 0, snSize);
15 }
16 
MTMS(const std::string & typeModel,const std::string & serialNumber)17 MTMS::MTMS(const std::string& typeModel, const std::string& serialNumber)
18 {
19     memset(_machineTypeAndModel.data(), 0, mtmSize);
20     memset(_serialNumber.data(), 0, snSize);
21 
22     // Copy in as much as the fields as possible
23     for (size_t i = 0; i < mtmSize; i++)
24     {
25         if (typeModel.size() > i)
26         {
27             _machineTypeAndModel[i] = typeModel[i];
28         }
29     }
30 
31     for (size_t i = 0; i < snSize; i++)
32     {
33         if (serialNumber.size() > i)
34         {
35             _serialNumber[i] = serialNumber[i];
36         }
37     }
38 }
39 
MTMS(Stream & stream)40 MTMS::MTMS(Stream& stream)
41 {
42     for (size_t i = 0; i < mtmSize; i++)
43     {
44         stream >> _machineTypeAndModel[i];
45     }
46 
47     for (size_t i = 0; i < snSize; i++)
48     {
49         stream >> _serialNumber[i];
50     }
51 }
52 
operator <<(Stream & s,const MTMS & mtms)53 Stream& operator<<(Stream& s, const MTMS& mtms)
54 {
55     for (size_t i = 0; i < MTMS::mtmSize; i++)
56     {
57         s << mtms.machineTypeAndModelRaw()[i];
58     }
59 
60     for (size_t i = 0; i < MTMS::snSize; i++)
61     {
62         s << mtms.machineSerialNumberRaw()[i];
63     }
64 
65     return s;
66 }
67 
operator >>(Stream & s,MTMS & mtms)68 Stream& operator>>(Stream& s, MTMS& mtms)
69 {
70     std::array<uint8_t, MTMS::mtmSize> mtm;
71 
72     for (size_t i = 0; i < MTMS::mtmSize; i++)
73     {
74         s >> mtm[i];
75     }
76 
77     mtms.setMachineTypeAndModel(mtm);
78 
79     std::array<uint8_t, MTMS::snSize> sn;
80     for (size_t i = 0; i < MTMS::snSize; i++)
81     {
82         s >> sn[i];
83     }
84 
85     mtms.setMachineSerialNumber(sn);
86 
87     return s;
88 }
89 } // namespace pels
90 } // namespace openpower
91