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/lg2.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_t& bus, const char* path) : 37 _serverInterface(bus, path, interface, _vtable, this) 38 {} 39 40 int ManagerInterface::callbackConfigure(sd_bus_message* msg, void* context, 41 sd_bus_error* error) 42 { 43 if (msg != nullptr && context != nullptr) 44 { 45 try 46 { 47 auto m = sdbusplus::message_t(msg); 48 49 auto mgrObj = static_cast<ManagerInterface*>(context); 50 mgrObj->configure(); 51 52 auto reply = m.new_method_return(); 53 54 reply.method_return(); 55 } 56 catch (const sdbusplus::exception_t& e) 57 { 58 return sd_bus_error_set(error, e.name(), e.description()); 59 } 60 } 61 else 62 { 63 // The message or context were null 64 lg2::error("Unable to service Configure method callback"); 65 return -1; 66 } 67 68 return 1; 69 } 70 71 int ManagerInterface::callbackMonitor(sd_bus_message* msg, void* context, 72 sd_bus_error* error) 73 { 74 if (msg != nullptr && context != nullptr) 75 { 76 try 77 { 78 bool enable{}; 79 auto m = sdbusplus::message_t(msg); 80 81 m.read(enable); 82 83 auto mgrObj = static_cast<ManagerInterface*>(context); 84 mgrObj->monitor(enable); 85 86 auto reply = m.new_method_return(); 87 88 reply.method_return(); 89 } 90 catch (const sdbusplus::exception_t& e) 91 { 92 return sd_bus_error_set(error, e.name(), e.description()); 93 } 94 } 95 else 96 { 97 // The message or context were null 98 lg2::error("Unable to service Monitor method callback"); 99 return -1; 100 } 101 102 return 1; 103 } 104 105 const sdbusplus::vtable::vtable_t ManagerInterface::_vtable[] = { 106 sdbusplus::vtable::start(), 107 // No configure method parameters and returns void 108 sdbusplus::vtable::method("Configure", "", "", callbackConfigure), 109 // Monitor method takes a boolean parameter and returns void 110 sdbusplus::vtable::method("Monitor", "b", "", callbackMonitor), 111 sdbusplus::vtable::end()}; 112 113 } // namespace interface 114 } // namespace regulators 115 } // namespace power 116 } // namespace phosphor 117