QCamera3: add Easel firmware version to exif

Bug: 36723642

Change-Id: I3628306c07afeec8e4340ccfb111f81605a77ba6
Signed-off-by: Arnd Geis <arndg@google.com>
diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
index fd0c9c4..59996aa 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
@@ -3961,19 +3961,25 @@
     // Image description
     const char *eepromVersion = hal_obj->getEepromVersionInfo();
     const uint32_t *ldafCalib = hal_obj->getLdafCalib();
+    const char *easelFwVersion = hal_obj->getEaselFwVersion();
     if ((eepromVersion && strlen(eepromVersion)) ||
             ldafCalib) {
         int len = 0;
         settings->image_desc_valid = true;
         if (eepromVersion && strlen(eepromVersion)) {
             len = snprintf(settings->image_desc, sizeof(settings->image_desc),
-                    "%s ", eepromVersion);
+                    "%s", eepromVersion);
         }
         if (ldafCalib) {
-            snprintf(settings->image_desc + len,
+            len += snprintf(settings->image_desc + len,
                     sizeof(settings->image_desc) - len, "L:%u-%u",
                     ldafCalib[0], ldafCalib[1]);
         }
+        if (easelFwVersion) {
+            ALOGD("%s: Easel FW version %s", __FUNCTION__, easelFwVersion);
+            len += snprintf(settings->image_desc + len,
+                            sizeof(settings->image_desc) - len, ":%s", easelFwVersion);
+        }
     }
 
     return m_postprocessor.processJpegSettingData(settings);
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index c3672b1..b74cfa3 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -565,6 +565,8 @@
     memset(&mInputStreamInfo, 0, sizeof(mInputStreamInfo));
     memset(mLdafCalib, 0, sizeof(mLdafCalib));
 
+    memset(mEaselFwVersion, 0, sizeof(mEaselFwVersion));
+
     memset(prop, 0, sizeof(prop));
     property_get("persist.camera.tnr.preview", prop, "0");
     m_bTnrPreview = (uint8_t)atoi(prop);
@@ -10691,7 +10693,7 @@
         if (eepromLength + sizeof(easelInfo) < MAX_EEPROM_VERSION_INFO_LEN) {
             eepromLength += sizeof(easelInfo);
             strlcat(eepromInfo, ((gEaselManagerClient != nullptr &&
-                    gEaselManagerClient->isEaselPresentOnDevice()) ? ",E:Y" : ",E:N"),
+                    gEaselManagerClient->isEaselPresentOnDevice()) ? ",E-ver" : ",E:N"),
                     MAX_EEPROM_VERSION_INFO_LEN);
         }
         staticInfo.update(NEXUS_EXPERIMENTAL_2017_EEPROM_VERSION_INFO,
@@ -14014,6 +14016,32 @@
 }
 
 /*===========================================================================
+* FUNCTION   : getEaselFwVersion
+*
+* DESCRIPTION: Retrieve Easel firmware version
+*
+* PARAMETERS : None
+*
+* RETURN     : string describing Firmware version
+*              "\0" if Easel manager client is not open
+*==========================================================================*/
+const char *QCamera3HardwareInterface::getEaselFwVersion()
+{
+    int rc = NO_ERROR;
+
+    std::unique_lock<std::mutex> l(gHdrPlusClientLock);
+    ALOGD("%s: Querying Easel firmware version", __FUNCTION__);
+    if (EaselManagerClientOpened) {
+        rc = gEaselManagerClient->getFwVersion(mEaselFwVersion);
+        if (rc != OK)
+            ALOGD("%s: Failed to query Easel firmware version", __FUNCTION__);
+        else
+            return (const char *)&mEaselFwVersion[0];
+    }
+    return NULL;
+}
+
+/*===========================================================================
  * FUNCTION   : dynamicUpdateMetaStreamInfo
  *
  * DESCRIPTION: This function:
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.h b/msm8998/QCamera2/HAL3/QCamera3HWI.h
index 0746c11..e17ff7b 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.h
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.h
@@ -343,6 +343,7 @@
             char (&flashNode)[QCAMERA_MAX_FILEPATH_LENGTH]);
     const char *getEepromVersionInfo();
     const uint32_t *getLdafCalib();
+    const char *getEaselFwVersion();
     void get3AVersion(cam_q3a_version_t &swVersion);
     static void setBufferErrorStatus(QCamera3Channel*, uint32_t frameNumber,
             camera3_buffer_status_t err, void *userdata);
@@ -696,7 +697,8 @@
     bool mLdafCalibExist;
     uint32_t mLdafCalib[2];
     int32_t mLastCustIntentFrmNum;
-
+    // Easel firmware version
+    char mEaselFwVersion[FW_VER_SIZE];
     static const QCameraMap<camera_metadata_enum_android_control_effect_mode_t,
             cam_effect_mode_type> EFFECT_MODES_MAP[];
     static const QCameraMap<camera_metadata_enum_android_control_awb_mode_t,