IDrm/ICrypto: implement getLogMessages

Bug: 162255728
Test: build
Change-Id: I68edcd04729a5721117e13a48304b842a61dfee5
diff --git a/drm/libmediadrm/interface/mediadrm/DrmUtils.h b/drm/libmediadrm/interface/mediadrm/DrmUtils.h
index de68a37..10b7207 100644
--- a/drm/libmediadrm/interface/mediadrm/DrmUtils.h
+++ b/drm/libmediadrm/interface/mediadrm/DrmUtils.h
@@ -19,12 +19,18 @@
 
 #include <android/hardware/drm/1.0/ICryptoFactory.h>
 #include <android/hardware/drm/1.0/IDrmFactory.h>
+#include <android/hardware/drm/1.4/IDrmPlugin.h>
 #include <android/hardware/drm/1.4/types.h>
+#include <media/stagefright/MediaErrors.h>
 #include <utils/Errors.h>  // for status_t
+#include <utils/Vector.h>
 #include <utils/StrongPointer.h>
 #include <vector>
 
+
 using namespace ::android::hardware::drm;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
 
 namespace android {
 
@@ -107,6 +113,31 @@
     return toStatusT_1_4(err);
 }
 
+template<typename T, typename U>
+status_t GetLogMessages(const sp<U> &obj, Vector<::V1_4::LogMessage> &logs) {
+    sp<T> plugin = T::castFrom(obj);
+    if (plugin == NULL) {
+        return ERROR_UNSUPPORTED;
+    }
+
+    ::V1_4::Status err{};
+    ::V1_4::IDrmPlugin::getLogMessages_cb cb = [&](
+            ::V1_4::Status status,
+            hidl_vec<::V1_4::LogMessage> hLogs) {
+        if (::V1_4::Status::OK == status) {
+            err = status;
+            return;
+        }
+        logs.appendArray(hLogs.data(), hLogs.size());
+    };
+
+    Return<void> hResult = plugin->getLogMessages(cb);
+    if (!hResult.isOk()) {
+        return DEAD_OBJECT;
+    }
+    return toStatusT(err);
+}
+
 } // namespace DrmUtils
 } // namespace android
 #endif // ANDROID_DRMUTILS_H