1 /** 2 * Copyright © 2020 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 17 #include "manager_interface.hpp" 18 19 #include <phosphor-logging/log.hpp> 20 #include <sdbusplus/exception.hpp> 21 #include <sdbusplus/sdbus.hpp> 22 #include <sdbusplus/server.hpp> 23 24 #include <string> 25 #include <tuple> 26 27 namespace phosphor 28 { 29 namespace power 30 { 31 namespace regulators 32 { 33 namespace interface 34 { 35 36 ManagerInterface::ManagerInterface(sdbusplus::bus::bus& bus, const char* path) : 37 _serverInterface(bus, path, interface, _vtable, this) 38 { 39 } 40 41 int ManagerInterface::callbackConfigure(sd_bus_message* msg, void* context, 42 sd_bus_error* error) 43 { 44 if (msg != nullptr && context != nullptr) 45 { 46 try 47 { 48 auto m = sdbusplus::message::message(msg); 49 50 auto mgrObj = static_cast<ManagerInterface*>(context); 51 mgrObj->configure(); 52 53 auto reply = m.new_method_return(); 54 55 reply.method_return(); 56 } 57 catch (sdbusplus::internal_exception_t& e) 58 { 59 return sd_bus_error_set(error, e.name(), e.description()); 60 } 61 } 62 else 63 { 64 // The message or context were null 65 using namespace phosphor::logging; 66 log<level::ERR>("Unable to service Configure method callback"); 67 return -1; 68 } 69 70 return 1; 71 } 72 73 int ManagerInterface::callbackMonitor(sd_bus_message* msg, void* context, 74 sd_bus_error* error) 75 { 76 if (msg != nullptr && context != nullptr) 77 { 78 try 79 { 80 bool enable{}; 81 auto m = sdbusplus::message::message(msg); 82 83 m.read(enable); 84 85 auto mgrObj = static_cast<ManagerInterface*>(context); 86 mgrObj->monitor(enable); 87 88 auto reply = m.new_method_return(); 89 90 reply.method_return(); 91 } 92 catch (sdbusplus::internal_exception_t& e) 93 { 94 return sd_bus_error_set(error, e.name(), e.description()); 95 } 96 } 97 else 98 { 99 // The message or context were null 100 using namespace phosphor::logging; 101 log<level::ERR>("Unable to service Monitor method callback"); 102 return -1; 103 } 104 105 return 1; 106 } 107 108 const sdbusplus::vtable::vtable_t ManagerInterface::_vtable[] = { 109 sdbusplus::vtable::start(), 110 // No configure method parameters and returns void 111 sdbusplus::vtable::method("Configure", "", "", callbackConfigure), 112 // Monitor method takes a boolean parameter and returns void 113 sdbusplus::vtable::method("Monitor", "b", "", callbackMonitor), 114 sdbusplus::vtable::end()}; 115 116 } // namespace interface 117 } // namespace regulators 118 } // namespace power 119 } // namespace phosphor 120