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