Sridevi Ramesh | d448975 | 2019-12-08 09:03:29 -0600 | [diff] [blame] | 1 | #include "pldm_fru_cmd.hpp" |
| 2 | |
| 3 | #include "pldm_cmd_helper.hpp" |
| 4 | |
| 5 | namespace pldmtool |
| 6 | { |
| 7 | |
| 8 | namespace fru |
| 9 | { |
| 10 | |
| 11 | namespace |
| 12 | { |
| 13 | |
| 14 | using namespace pldmtool::helper; |
| 15 | |
| 16 | std::vector<std::unique_ptr<CommandInterface>> commands; |
| 17 | |
| 18 | } // namespace |
| 19 | |
| 20 | class GetFruRecordTableMetadata : public CommandInterface |
| 21 | { |
| 22 | public: |
| 23 | ~GetFruRecordTableMetadata() = default; |
| 24 | GetFruRecordTableMetadata() = delete; |
| 25 | GetFruRecordTableMetadata(const GetFruRecordTableMetadata&) = delete; |
| 26 | GetFruRecordTableMetadata(GetFruRecordTableMetadata&&) = default; |
| 27 | GetFruRecordTableMetadata& |
| 28 | operator=(const GetFruRecordTableMetadata&) = delete; |
| 29 | GetFruRecordTableMetadata& operator=(GetFruRecordTableMetadata&&) = default; |
| 30 | |
| 31 | using CommandInterface::CommandInterface; |
| 32 | |
| 33 | std::pair<int, std::vector<uint8_t>> createRequestMsg() override |
| 34 | { |
| 35 | std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr)); |
| 36 | auto request = reinterpret_cast<pldm_msg*>(requestMsg.data()); |
| 37 | |
| 38 | auto rc = encode_get_fru_record_table_metadata_req( |
| 39 | PLDM_LOCAL_INSTANCE_ID, request); |
| 40 | return {rc, requestMsg}; |
| 41 | } |
| 42 | |
| 43 | void parseResponseMsg(pldm_msg* responsePtr, size_t payloadLength) override |
| 44 | { |
| 45 | uint8_t cc = 0; |
| 46 | uint8_t fru_data_major_version, fru_data_minor_version; |
| 47 | uint32_t fru_table_maximum_size, fru_table_length; |
| 48 | uint16_t total_record_set_identifiers, total_table_records; |
| 49 | uint32_t checksum; |
| 50 | |
| 51 | auto rc = decode_get_fru_record_table_metadata_resp( |
| 52 | responsePtr, payloadLength, &cc, &fru_data_major_version, |
| 53 | &fru_data_minor_version, &fru_table_maximum_size, &fru_table_length, |
| 54 | &total_record_set_identifiers, &total_table_records, &checksum); |
| 55 | if (rc != PLDM_SUCCESS || cc != PLDM_SUCCESS) |
| 56 | { |
| 57 | std::cerr << "Response Message Error: " |
| 58 | << "rc=" << rc << ",cc=" << (int)cc << std::endl; |
| 59 | return; |
| 60 | } |
| 61 | std::cout << "Parsed Response Msg : " << std::endl; |
| 62 | std::cout << "FRUDATAMajorVersion : " |
| 63 | << static_cast<uint32_t>(fru_data_major_version) << std::endl; |
| 64 | std::cout << "FRUDATAMinorVersion : " |
| 65 | << static_cast<uint32_t>(fru_data_minor_version) << std::endl; |
| 66 | std::cout << "FRUTableMaximumSize : " << fru_table_maximum_size |
| 67 | << std::endl; |
| 68 | std::cout << "FRUTableLength : " << fru_table_length << std::endl; |
| 69 | std::cout << "Total number of Record Set Identifiers in table : " |
| 70 | << total_record_set_identifiers << std::endl; |
| 71 | std::cout << "Total number of records in table : " |
| 72 | << total_table_records << std::endl; |
| 73 | std::cout << "FRU DATAStructureTableIntegrityChecksum : " << checksum |
| 74 | << std::endl; |
| 75 | } |
| 76 | }; |
| 77 | |
| 78 | void registerCommand(CLI::App& app) |
| 79 | { |
| 80 | auto fru = app.add_subcommand("fru", "FRU type command"); |
| 81 | fru->require_subcommand(1); |
| 82 | auto getFruRecordTableMetadata = fru->add_subcommand( |
| 83 | "GetFruRecordTableMetadata", "get FRU record table metadata"); |
| 84 | commands.push_back(std::make_unique<GetFruRecordTableMetadata>( |
| 85 | "fru", "GetFruRecordTableMetadata", getFruRecordTableMetadata)); |
| 86 | } |
| 87 | |
| 88 | } // namespace fru |
| 89 | |
| 90 | } // namespace pldmtool |