Add relative address to DeviceProductInfo.
This CL adds a field relativeAddress to DeviceProductInfo so it can
be surfaced in the framework. For HDMI connections the field is
populated with the physical address. This CL also adds helper
functions for serializing to Flattenable and enhances the
serialization security.
Bug: 147994746
Bug: 153589294
Test: atest DisplayIdentificationTest
Change-Id: I2711407aa1be079df8086e233ee3f0cf90ba1741
diff --git a/libs/ui/DisplayInfo.cpp b/libs/ui/DisplayInfo.cpp
index 6ed7e19..73a78af 100644
--- a/libs/ui/DisplayInfo.cpp
+++ b/libs/ui/DisplayInfo.cpp
@@ -20,10 +20,15 @@
#include <ui/FlattenableHelpers.h>
+#define RETURN_IF_ERROR(op) \
+ if (const status_t status = (op); status != OK) return status;
+
namespace android {
size_t DisplayInfo::getFlattenedSize() const {
- return sizeof(connectionType) + sizeof(density) + sizeof(secure) +
+ return FlattenableHelpers::getFlattenedSize(connectionType) +
+ FlattenableHelpers::getFlattenedSize(density) +
+ FlattenableHelpers::getFlattenedSize(secure) +
FlattenableHelpers::getFlattenedSize(deviceProductInfo);
}
@@ -31,24 +36,19 @@
if (size < getFlattenedSize()) {
return NO_MEMORY;
}
- FlattenableUtils::write(buffer, size, connectionType);
- FlattenableUtils::write(buffer, size, density);
- FlattenableUtils::write(buffer, size, secure);
- FlattenableHelpers::write(buffer, size, deviceProductInfo);
-
- return NO_ERROR;
+ RETURN_IF_ERROR(FlattenableHelpers::flatten(&buffer, &size, connectionType));
+ RETURN_IF_ERROR(FlattenableHelpers::flatten(&buffer, &size, density));
+ RETURN_IF_ERROR(FlattenableHelpers::flatten(&buffer, &size, secure));
+ RETURN_IF_ERROR(FlattenableHelpers::flatten(&buffer, &size, deviceProductInfo));
+ return OK;
}
status_t DisplayInfo::unflatten(void const* buffer, size_t size) {
- if (size < getFlattenedSize()) {
- return NO_MEMORY;
- }
- FlattenableUtils::read(buffer, size, connectionType);
- FlattenableUtils::read(buffer, size, density);
- FlattenableUtils::read(buffer, size, secure);
- FlattenableHelpers::read(buffer, size, &deviceProductInfo);
-
- return NO_ERROR;
+ RETURN_IF_ERROR(FlattenableHelpers::unflatten(&buffer, &size, &connectionType));
+ RETURN_IF_ERROR(FlattenableHelpers::unflatten(&buffer, &size, &density));
+ RETURN_IF_ERROR(FlattenableHelpers::unflatten(&buffer, &size, &secure));
+ RETURN_IF_ERROR(FlattenableHelpers::unflatten(&buffer, &size, &deviceProductInfo));
+ return OK;
}
} // namespace android