Hidlized version of IMemory.
- Add hidl_memory type.
- Add android.hidl.memory@1.0 package
- IMapper
- IAllocator
- IMemory
- Add libhidlmemory
- Add default implementation of android.hidl.memory@1.0
- Ashmem
- Ion (TODO, probably in another CL)
Test: compiles (WIP)
Change-Id: I4632eeb6a0051551b54ce04d919aaf551dfc5f28
diff --git a/transport/HidlBinderSupport.cpp b/transport/HidlBinderSupport.cpp
index c206018..f3e99e1 100644
--- a/transport/HidlBinderSupport.cpp
+++ b/transport/HidlBinderSupport.cpp
@@ -27,6 +27,47 @@
std::map<std::string, std::function<sp<IBinder>(void*)>> gBnConstructorMap{};
+const size_t hidl_memory::kOffsetOfHandle = offsetof(hidl_memory, mHandle);
+const size_t hidl_memory::kOffsetOfName = offsetof(hidl_memory, mName);
+
+status_t readEmbeddedFromParcel(hidl_memory * /* memory */,
+ const Parcel &parcel, size_t parentHandle, size_t parentOffset) {
+ ::android::status_t _hidl_err = ::android::OK;
+ const native_handle_t *_hidl_memory_handle = parcel.readEmbeddedNativeHandle(
+ parentHandle,
+ parentOffset + hidl_memory::kOffsetOfHandle);
+
+ if (_hidl_memory_handle == nullptr) {
+ _hidl_err = ::android::UNKNOWN_ERROR;
+ return _hidl_err;
+ }
+
+ _hidl_err = readEmbeddedFromParcel(
+ (hidl_string*) nullptr,
+ parcel,
+ parentHandle,
+ parentOffset + hidl_memory::kOffsetOfName);
+
+ return _hidl_err;
+}
+
+status_t writeEmbeddedToParcel(const hidl_memory &memory,
+ Parcel *parcel, size_t parentHandle, size_t parentOffset) {
+ status_t _hidl_err = parcel->writeEmbeddedNativeHandle(
+ memory.handle(),
+ parentHandle,
+ parentOffset + hidl_memory::kOffsetOfHandle);
+
+ if (_hidl_err == ::android::OK) {
+ _hidl_err = writeEmbeddedToParcel(
+ memory.name(),
+ parcel,
+ parentHandle,
+ parentOffset + hidl_memory::kOffsetOfName);
+ }
+
+ return _hidl_err;
+}
// static
const size_t hidl_string::kOffsetOfBuffer = offsetof(hidl_string, mBuffer);