mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 10:44:41 +00:00
Use NativeHandle in MQDescriptor instead of ParcelFileDescriptor
android.hardware.common.fmq.MQDescriptor needs to handle multiple file descriptors, so changing from ParcelFileDescriptor to android.hardware.common.NativeHandle. android.hardware.common.fmq.GrantorDescriptor needs to keep track of the fdIndex as well. Bug: 176912570 Test: atest fmq_unit_tests fmq_test Change-Id: I15f2393e6c420ae5394322b28c4523fa80f7dcc7
This commit is contained in:
@@ -9,6 +9,9 @@ aidl_interface {
|
||||
srcs: [
|
||||
"android/hardware/common/fmq/*.aidl",
|
||||
],
|
||||
imports: [
|
||||
"android.hardware.common",
|
||||
],
|
||||
stability: "vintf",
|
||||
backend: {
|
||||
java: {
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
|
||||
// edit this file. It looks like you are doing that because you have modified
|
||||
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
|
||||
// from an interface or a field from a parcelable and it broke the build. That
|
||||
// breakage is intended.
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible changes to the AIDL files built
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
@@ -18,6 +19,7 @@
|
||||
package android.hardware.common.fmq;
|
||||
@VintfStability
|
||||
parcelable GrantorDescriptor {
|
||||
int fdIndex;
|
||||
int offset;
|
||||
long extent;
|
||||
}
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
|
||||
// edit this file. It looks like you are doing that because you have modified
|
||||
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
|
||||
// from an interface or a field from a parcelable and it broke the build. That
|
||||
// breakage is intended.
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible changes to the AIDL files built
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
@@ -19,7 +20,7 @@ package android.hardware.common.fmq;
|
||||
@VintfStability
|
||||
parcelable MQDescriptor {
|
||||
android.hardware.common.fmq.GrantorDescriptor[] grantors;
|
||||
ParcelFileDescriptor fileDescriptor;
|
||||
android.hardware.common.NativeHandle handle;
|
||||
int quantum;
|
||||
int flags;
|
||||
}
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
|
||||
// edit this file. It looks like you are doing that because you have modified
|
||||
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
|
||||
// from an interface or a field from a parcelable and it broke the build. That
|
||||
// breakage is intended.
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible changes to the AIDL files built
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
|
||||
// edit this file. It looks like you are doing that because you have modified
|
||||
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
|
||||
// from an interface or a field from a parcelable and it broke the build. That
|
||||
// breakage is intended.
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible changes to the AIDL files built
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
|
||||
@@ -21,6 +21,10 @@ package android.hardware.common.fmq;
|
||||
*/
|
||||
@VintfStability
|
||||
parcelable GrantorDescriptor {
|
||||
/*
|
||||
* Index of file descriptor for this grantor
|
||||
*/
|
||||
int fdIndex;
|
||||
/*
|
||||
* The offset of this descriptor in the shared memory in bytes.
|
||||
*/
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.hardware.common.fmq;
|
||||
|
||||
import android.hardware.common.NativeHandle;
|
||||
import android.hardware.common.fmq.GrantorDescriptor;
|
||||
|
||||
/*
|
||||
@@ -34,8 +35,11 @@ parcelable MQDescriptor<T, Flavor> {
|
||||
* for blocking operations in the shared memory.
|
||||
*/
|
||||
GrantorDescriptor[] grantors;
|
||||
/* File descriptor for shared memory used in the message queue */
|
||||
ParcelFileDescriptor fileDescriptor;
|
||||
/*
|
||||
* NativeHandle that contains the file descriptors for shared memory used
|
||||
* in the message queue
|
||||
*/
|
||||
NativeHandle handle;
|
||||
/* Size of each item, T, in bytes */
|
||||
int quantum;
|
||||
/* EventFlag word for blocking operations */
|
||||
|
||||
@@ -41,12 +41,15 @@ interface ITestMsgQ {
|
||||
*
|
||||
* @param configureFmq The server sets up a new unsynchronized FMQ if
|
||||
* this parameter is true.
|
||||
* @param userFd True to initialize the message queue with a user supplied
|
||||
* file descriptor for the ring buffer.
|
||||
* False to let the message queue use a single FD for everything.
|
||||
*
|
||||
* @return ret True if successful.
|
||||
* @return mqDesc This structure describes the unsynchronized FMQ that was
|
||||
* set up by the service. Client can use it to set up the FMQ at its end.
|
||||
*/
|
||||
getFmqUnsyncWrite(bool configureFmq) generates(bool ret, fmq_unsync<int32_t> mqDesc);
|
||||
getFmqUnsyncWrite(bool configureFmq, bool userFd) generates(bool ret, fmq_unsync<int32_t> mqDesc);
|
||||
|
||||
/**
|
||||
* This method request the service to write into the synchronized read/write
|
||||
|
||||
@@ -91,9 +91,10 @@ cc_test {
|
||||
// These are static libs only for testing purposes and portability. Shared
|
||||
// libs should be used on device.
|
||||
static_libs: [
|
||||
"android.hardware.common-unstable-ndk_platform",
|
||||
"android.hardware.common.fmq-unstable-ndk_platform",
|
||||
"android.hardware.tests.msgq@1.0",
|
||||
"android.fmq.test-ndk_platform",
|
||||
"android.hardware.common.fmq-unstable-ndk_platform",
|
||||
],
|
||||
whole_static_libs: [
|
||||
"android.hardware.tests.msgq@1.0-impl",
|
||||
|
||||
@@ -41,10 +41,19 @@ Return<bool> TestMsgQ::configureFmqSyncReadWrite(
|
||||
return true;
|
||||
}
|
||||
|
||||
Return<void> TestMsgQ::getFmqUnsyncWrite(bool configureFmq, getFmqUnsyncWrite_cb _hidl_cb) {
|
||||
Return<void> TestMsgQ::getFmqUnsyncWrite(bool configureFmq, bool userFd,
|
||||
getFmqUnsyncWrite_cb _hidl_cb) {
|
||||
if (configureFmq) {
|
||||
static constexpr size_t kNumElementsInQueue = 1024;
|
||||
mFmqUnsynchronized.reset(new (std::nothrow) MessageQueueUnsync(kNumElementsInQueue));
|
||||
static constexpr size_t kElementSizeBytes = sizeof(int32_t);
|
||||
android::base::unique_fd ringbufferFd;
|
||||
if (userFd) {
|
||||
ringbufferFd.reset(
|
||||
::ashmem_create_region("UnsyncWrite", kNumElementsInQueue * kElementSizeBytes));
|
||||
}
|
||||
mFmqUnsynchronized.reset(new (std::nothrow) MessageQueueUnsync(
|
||||
kNumElementsInQueue, false, std::move(ringbufferFd),
|
||||
kNumElementsInQueue * kElementSizeBytes));
|
||||
}
|
||||
if ((mFmqUnsynchronized == nullptr) ||
|
||||
(mFmqUnsynchronized->isValid() == false)) {
|
||||
|
||||
@@ -56,7 +56,8 @@ struct TestMsgQ : public ITestMsgQ {
|
||||
|
||||
// Methods from ::android::hardware::tests::msgq::V1_0::ITestMsgQ follow.
|
||||
Return<bool> configureFmqSyncReadWrite(const MQDescriptorSync<int32_t>& mqDesc) override;
|
||||
Return<void> getFmqUnsyncWrite(bool configureFmq, getFmqUnsyncWrite_cb _hidl_cb) override;
|
||||
Return<void> getFmqUnsyncWrite(bool configureFmq, bool userFd,
|
||||
getFmqUnsyncWrite_cb _hidl_cb) override;
|
||||
Return<bool> requestWriteFmqSync(int32_t count) override;
|
||||
Return<bool> requestReadFmqSync(int32_t count) override;
|
||||
Return<bool> requestWriteFmqUnsync(int32_t count) override;
|
||||
|
||||
Reference in New Issue
Block a user