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 "updater.hpp" 17 #include "version.hpp" 18 19 #include <CLI/CLI.hpp> 20 #include <phosphor-logging/log.hpp> 21 22 #include <cassert> 23 24 using namespace phosphor::logging; 25 26 int main(int argc, char** argv) 27 { 28 std::string psuPath; 29 std::vector<std::string> versions; 30 bool rawOutput = false; 31 std::vector<std::string> updateArguments; 32 33 CLI::App app{"PSU utils app for OpenBMC"}; 34 auto action = app.add_option_group("Action"); 35 action->add_option("-g,--get-version", psuPath, 36 "Get PSU version from inventory path"); 37 action->add_option("-c,--compare", versions, 38 "Compare and get the latest version"); 39 action 40 ->add_option("-u,--update", updateArguments, 41 "Update PSU firmware, expecting two arguments: " 42 "<PSU inventory path> <image-dir>") 43 ->expected(2); 44 action->require_option(1); // Only one option is supported 45 app.add_flag("--raw", rawOutput, "Output raw text without linefeed"); 46 CLI11_PARSE(app, argc, argv); 47 48 std::string ret; 49 50 if (!psuPath.empty()) 51 { 52 ret = version::getVersion(psuPath); 53 } 54 if (!versions.empty()) 55 { 56 ret = version::getLatest(versions); 57 } 58 if (!updateArguments.empty()) 59 { 60 assert(updateArguments.size() == 2); 61 if (updater::update(updateArguments[0], updateArguments[1])) 62 { 63 ret = "Update successful"; 64 } 65 } 66 67 printf("%s", ret.c_str()); 68 if (!rawOutput) 69 { 70 printf("\n"); 71 } 72 return ret.empty() ? 1 : 0; 73 } 74