| Alexander Hansen | 40fb549 | 2025-10-28 17:56:12 +0100 | [diff] [blame] | 1 | // SPDX-License-Identifier: Apache-2.0 |
| 2 | // SPDX-FileCopyrightText: Copyright 2019 IBM Corporation |
| 3 | |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 4 | #include "mtms.hpp" |
| 5 | |
| 6 | namespace openpower |
| 7 | { |
| 8 | namespace pels |
| 9 | { |
| 10 | |
| 11 | MTMS::MTMS() |
| 12 | { |
| 13 | memset(_machineTypeAndModel.data(), 0, mtmSize); |
| 14 | memset(_serialNumber.data(), 0, snSize); |
| 15 | } |
| 16 | |
| 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 | |
| 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 | |
| Matt Spinler | 654708f | 2019-11-06 09:59:07 -0600 | [diff] [blame] | 53 | Stream& operator<<(Stream& s, const MTMS& mtms) |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 54 | { |
| 55 | for (size_t i = 0; i < MTMS::mtmSize; i++) |
| 56 | { |
| Matt Spinler | 4b59f7a | 2019-10-08 13:55:17 -0500 | [diff] [blame] | 57 | s << mtms.machineTypeAndModelRaw()[i]; |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 58 | } |
| 59 | |
| 60 | for (size_t i = 0; i < MTMS::snSize; i++) |
| 61 | { |
| Matt Spinler | 4b59f7a | 2019-10-08 13:55:17 -0500 | [diff] [blame] | 62 | s << mtms.machineSerialNumberRaw()[i]; |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 63 | } |
| 64 | |
| 65 | return s; |
| 66 | } |
| 67 | |
| 68 | Stream& operator>>(Stream& s, MTMS& mtms) |
| 69 | { |
| Matt Spinler | 654708f | 2019-11-06 09:59:07 -0600 | [diff] [blame] | 70 | std::array<uint8_t, MTMS::mtmSize> mtm; |
| 71 | |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 72 | for (size_t i = 0; i < MTMS::mtmSize; i++) |
| 73 | { |
| Matt Spinler | 654708f | 2019-11-06 09:59:07 -0600 | [diff] [blame] | 74 | s >> mtm[i]; |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 75 | } |
| 76 | |
| Matt Spinler | 654708f | 2019-11-06 09:59:07 -0600 | [diff] [blame] | 77 | mtms.setMachineTypeAndModel(mtm); |
| 78 | |
| 79 | std::array<uint8_t, MTMS::snSize> sn; |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 80 | for (size_t i = 0; i < MTMS::snSize; i++) |
| 81 | { |
| Matt Spinler | 654708f | 2019-11-06 09:59:07 -0600 | [diff] [blame] | 82 | s >> sn[i]; |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 83 | } |
| 84 | |
| Matt Spinler | 654708f | 2019-11-06 09:59:07 -0600 | [diff] [blame] | 85 | mtms.setMachineSerialNumber(sn); |
| 86 | |
| Matt Spinler | b666433 | 2019-09-10 15:24:10 -0500 | [diff] [blame] | 87 | return s; |
| 88 | } |
| 89 | } // namespace pels |
| 90 | } // namespace openpower |