Move global variable powerIsOn to local variable.
Moved the global variable powerIsOn declaration to the local
variable and passed as parameter to appropriate functions.
This fix to avoid the usage of global variable and declaring
global variable in .hpp files while moving common FruDevice.cpp
functions to FruUtils.cpp
Seperating patches into small patches to achieve moving common
functions from FruDevice.cpp to FruUtils.cpp.
https://gerrit.openbmc-project.xyz/c/openbmc/entity-manager/+/47246
TESTED : Verified all the fru's read, write and scan in
Facebook YosemiteV2 platform.
Signed-off-by: Kumar Thangavel <thangavel.k@hcl.com>
Change-Id: I2172b14538a056508a5600722a297745faf3c4eb
diff --git a/src/FruDevice.cpp b/src/FruDevice.cpp
index 8159f84..1bb68b7 100644
--- a/src/FruDevice.cpp
+++ b/src/FruDevice.cpp
@@ -78,8 +78,6 @@
static BusMap busMap;
-static bool powerIsOn = false;
-
static boost::container::flat_map<
std::pair<size_t, size_t>, std::shared_ptr<sdbusplus::asio::dbus_interface>>
foundDevices;
@@ -98,7 +96,7 @@
boost::container::flat_map<
std::pair<size_t, size_t>,
std::shared_ptr<sdbusplus::asio::dbus_interface>>& dbusInterfaceMap,
- size_t& unknownBusObjectCount);
+ size_t& unknownBusObjectCount, bool powerIsOn);
// Given a bus/address, produce the path in sysfs for an eeprom.
static std::string getEepromPath(size_t bus, size_t address)
@@ -353,7 +351,7 @@
}
int getBusFRUs(int file, int first, int last, int bus,
- std::shared_ptr<DeviceMap> devices)
+ std::shared_ptr<DeviceMap> devices, bool powerIsOn)
{
std::future<int> future = std::async(std::launch::async, [&]() {
@@ -531,7 +529,7 @@
}
static void findI2CDevices(const std::vector<fs::path>& i2cBuses,
- BusMap& busmap)
+ BusMap& busmap, bool powerIsOn)
{
for (auto& i2cBus : i2cBuses)
{
@@ -589,7 +587,7 @@
}
// fd is closed in this function in case the bus locks up
- getBusFRUs(file, 0x03, 0x77, bus, device);
+ getBusFRUs(file, 0x03, 0x77, bus, device, powerIsOn);
if (debug)
{
@@ -603,10 +601,10 @@
std::enable_shared_from_this<FindDevicesWithCallback>
{
FindDevicesWithCallback(const std::vector<fs::path>& i2cBuses,
- BusMap& busmap,
+ BusMap& busmap, bool powerIsOn,
std::function<void(void)>&& callback) :
_i2cBuses(i2cBuses),
- _busMap(busmap), _callback(std::move(callback))
+ _busMap(busmap), _powerIsOn(powerIsOn), _callback(std::move(callback))
{}
~FindDevicesWithCallback()
{
@@ -614,11 +612,12 @@
}
void run()
{
- findI2CDevices(_i2cBuses, _busMap);
+ findI2CDevices(_i2cBuses, _busMap, _powerIsOn);
}
const std::vector<fs::path>& _i2cBuses;
BusMap& _busMap;
+ bool _powerIsOn;
std::function<void(void)> _callback;
};
@@ -644,7 +643,8 @@
boost::container::flat_map<
std::pair<size_t, size_t>,
std::shared_ptr<sdbusplus::asio::dbus_interface>>& dbusInterfaceMap,
- uint32_t bus, uint32_t address, size_t& unknownBusObjectCount)
+ uint32_t bus, uint32_t address, size_t& unknownBusObjectCount,
+ bool powerIsOn)
{
boost::container::flat_map<std::string, std::string> formattedFRU;
resCodes res = formatFRU(device, formattedFRU);
@@ -756,14 +756,14 @@
iface->register_property(
key, property.second + '\0',
[bus, address, propertyName, &dbusInterfaceMap,
- &unknownBusObjectCount](const std::string& req,
- std::string& resp) {
+ &unknownBusObjectCount,
+ &powerIsOn](const std::string& req, std::string& resp) {
if (strcmp(req.c_str(), resp.c_str()) != 0)
{
// call the method which will update
if (updateFRUProperty(req, bus, address, propertyName,
dbusInterfaceMap,
- unknownBusObjectCount))
+ unknownBusObjectCount, powerIsOn))
{
resp = req;
}
@@ -929,7 +929,7 @@
boost::container::flat_map<
std::pair<size_t, size_t>,
std::shared_ptr<sdbusplus::asio::dbus_interface>>& dbusInterfaceMap,
- bool dbusCall, size_t& unknownBusObjectCount)
+ bool dbusCall, size_t& unknownBusObjectCount, bool powerIsOn)
{
for (auto& [pair, interface] : foundDevices)
{
@@ -956,8 +956,9 @@
i2cBuses.emplace_back(busPath);
auto scan = std::make_shared<FindDevicesWithCallback>(
- i2cBuses, busmap,
- [busNum, &busmap, &dbusInterfaceMap, &unknownBusObjectCount]() {
+ i2cBuses, busmap, powerIsOn,
+ [busNum, &busmap, &dbusInterfaceMap, &unknownBusObjectCount,
+ &powerIsOn]() {
for (auto& busIface : dbusInterfaceMap)
{
if (busIface.first.first == static_cast<size_t>(busNum))
@@ -974,7 +975,7 @@
{
addFruObjectToDbus(device.second, dbusInterfaceMap,
static_cast<uint32_t>(busNum), device.first,
- unknownBusObjectCount);
+ unknownBusObjectCount, powerIsOn);
}
});
scan->run();
@@ -985,7 +986,7 @@
boost::container::flat_map<
std::pair<size_t, size_t>,
std::shared_ptr<sdbusplus::asio::dbus_interface>>& dbusInterfaceMap,
- size_t& unknownBusObjectCount)
+ size_t& unknownBusObjectCount, bool powerIsOn)
{
static boost::asio::deadline_timer timer(io);
timer.expires_from_now(boost::posix_time::seconds(1));
@@ -1014,8 +1015,8 @@
}
foundDevices.clear();
- auto scan =
- std::make_shared<FindDevicesWithCallback>(i2cBuses, busmap, [&]() {
+ auto scan = std::make_shared<FindDevicesWithCallback>(
+ i2cBuses, busmap, powerIsOn, [&]() {
for (auto& busIface : dbusInterfaceMap)
{
objServer.remove_interface(busIface.second);
@@ -1039,7 +1040,7 @@
{
addFruObjectToDbus(device.second, dbusInterfaceMap,
devicemap.first, device.first,
- unknownBusObjectCount);
+ unknownBusObjectCount, powerIsOn);
}
}
});
@@ -1064,7 +1065,7 @@
boost::container::flat_map<
std::pair<size_t, size_t>,
std::shared_ptr<sdbusplus::asio::dbus_interface>>& dbusInterfaceMap,
- size_t& unknownBusObjectCount)
+ size_t& unknownBusObjectCount, bool powerIsOn)
{
size_t updatePropertyReqLen = updatePropertyReq.length();
if (updatePropertyReqLen == 1 || updatePropertyReqLen > 63)
@@ -1325,13 +1326,14 @@
}
// Rescan the bus so that GetRawFru dbus-call fetches updated values
- rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount);
+ rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount, powerIsOn);
return true;
}
int main()
{
static size_t unknownBusObjectCount = 0;
+ static bool powerIsOn = false;
auto devDir = fs::path("/dev/");
auto matchString = std::string(R"(i2c-\d+$)");
std::vector<fs::path> i2cBuses;
@@ -1358,12 +1360,13 @@
"xyz.openbmc_project.FruDeviceManager");
iface->register_method("ReScan", [&]() {
- rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount);
+ rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount,
+ powerIsOn);
});
iface->register_method("ReScanBus", [&](uint8_t bus) {
- rescanOneBus(busMap, bus, dbusInterfaceMap, true,
- unknownBusObjectCount);
+ rescanOneBus(busMap, bus, dbusInterfaceMap, true, unknownBusObjectCount,
+ powerIsOn);
});
iface->register_method("GetRawFru", getFRUInfo);
@@ -1377,7 +1380,8 @@
return;
}
// schedule rescan on success
- rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount);
+ rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount,
+ powerIsOn);
});
iface->initialize();
@@ -1398,7 +1402,8 @@
if (powerIsOn)
{
- rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount);
+ rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount,
+ powerIsOn);
}
};
@@ -1446,7 +1451,7 @@
}
rescanOneBus(busMap, static_cast<uint8_t>(bus),
dbusInterfaceMap, false,
- unknownBusObjectCount);
+ unknownBusObjectCount, powerIsOn);
}
}
@@ -1459,7 +1464,7 @@
dirWatch.async_read_some(boost::asio::buffer(readBuffer), watchI2cBusses);
// run the initial scan
- rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount);
+ rescanBusses(busMap, dbusInterfaceMap, unknownBusObjectCount, powerIsOn);
io.run();
return 0;