Fix firmware revision is always 0.00

Sometimes ipmid will show "Could not found an BMC software Object" in
journal and the firmware revision in command "ipmitool mc info" show
0.00 until BMC reboot or restart phosphor-ipmi-host.

Root cause is that the firmware revision will only try to get version
one time.

The issue happend when xyz.openbmc_project.Software.BMC.Updater.service
get started after the service phosphor-ipmi-host.service had been
started.
And the command "ipmitool mc info" is called before
xyz.openbmc_project.Software.BMC.Updater.service get started.

Tested:
Test the result of xyz.openbmc_project.Software.BMC.Updater.service get
started after phosphor-ipmi-host.service:

$ ipmitool mc info | grep 'Firmware Revision'
Firmware Revision         : 2.09

$ systemctl stop xyz.openbmc_project.Software.BMC.Updater.service
$ systemctl restart phosphor-ipmi-host
$ ipmitool mc info | grep 'Firmware Revision'
Firmware Revision         : 0.00

$ systemctl start xyz.openbmc_project.Software.BMC.Updater.service
$ ipmitool mc info | grep 'Firmware Revision'
Firmware Revision         : 2.09

Signed-off-by: JeffLin <JeffLin2@quantatw.com>
Change-Id: Icd82d114d74a8f5cc778886d8392527a8c71907b
diff --git a/apphandler.cpp b/apphandler.cpp
index 9b76e7b..d5a9527 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -594,17 +594,18 @@
         uint32_t aux;
     } devId;
     static bool dev_id_initialized = false;
+    static bool haveBMCVersion = false;
     static bool defaultActivationSetting = true;
     const char* filename = "/usr/share/ipmi-providers/dev_id.json";
     constexpr auto ipmiDevIdStateShift = 7;
     constexpr auto ipmiDevIdFw1Mask = ~(1 << ipmiDevIdStateShift);
-
-    if (!dev_id_initialized)
+    if (!haveBMCVersion || !dev_id_initialized)
     {
         try
         {
             auto version = getActiveSoftwareVersionInfo(ctx);
             r = convertVersion(version, rev);
+            haveBMCVersion = true;
         }
         catch (const std::exception& e)
         {
@@ -625,7 +626,9 @@
             devId.fw[1] = rev.minor % 10 + (rev.minor / 10) * 16;
             std::memcpy(&devId.aux, rev.d, 4);
         }
-
+    }
+    if (!dev_id_initialized)
+    {
         // IPMI Spec version 2.0
         devId.ipmiVer = 2;