xref: /aosp_15_r20/system/libfmq/tests/aidl/default/TestAidlMsgQ.h (revision be431cd81a9a2349eaea34eb56fcf6d1608da596)
1*be431cd8SAndroid Build Coastguard Worker /*
2*be431cd8SAndroid Build Coastguard Worker  * Copyright (C) 2020 The Android Open Source Project
3*be431cd8SAndroid Build Coastguard Worker  *
4*be431cd8SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*be431cd8SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*be431cd8SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*be431cd8SAndroid Build Coastguard Worker  *
8*be431cd8SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*be431cd8SAndroid Build Coastguard Worker  *
10*be431cd8SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*be431cd8SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*be431cd8SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*be431cd8SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*be431cd8SAndroid Build Coastguard Worker  * limitations under the License.
15*be431cd8SAndroid Build Coastguard Worker  */
16*be431cd8SAndroid Build Coastguard Worker 
17*be431cd8SAndroid Build Coastguard Worker #pragma once
18*be431cd8SAndroid Build Coastguard Worker 
19*be431cd8SAndroid Build Coastguard Worker #include <aidl/android/fmq/test/BnTestAidlMsgQ.h>
20*be431cd8SAndroid Build Coastguard Worker #include <aidl/android/fmq/test/EventFlagBits.h>
21*be431cd8SAndroid Build Coastguard Worker #include <fmq/AidlMessageQueue.h>
22*be431cd8SAndroid Build Coastguard Worker #include <fmq/EventFlag.h>
23*be431cd8SAndroid Build Coastguard Worker 
24*be431cd8SAndroid Build Coastguard Worker namespace aidl {
25*be431cd8SAndroid Build Coastguard Worker namespace android {
26*be431cd8SAndroid Build Coastguard Worker namespace fmq {
27*be431cd8SAndroid Build Coastguard Worker namespace test {
28*be431cd8SAndroid Build Coastguard Worker 
29*be431cd8SAndroid Build Coastguard Worker using ::aidl::android::fmq::test::EventFlagBits;
30*be431cd8SAndroid Build Coastguard Worker using ::aidl::android::fmq::test::ITestAidlMsgQ;
31*be431cd8SAndroid Build Coastguard Worker 
32*be431cd8SAndroid Build Coastguard Worker using ::aidl::android::hardware::common::fmq::MQDescriptor;
33*be431cd8SAndroid Build Coastguard Worker using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite;
34*be431cd8SAndroid Build Coastguard Worker using ::aidl::android::hardware::common::fmq::UnsynchronizedWrite;
35*be431cd8SAndroid Build Coastguard Worker using ::android::hardware::kSynchronizedReadWrite;
36*be431cd8SAndroid Build Coastguard Worker using ::android::hardware::kUnsynchronizedWrite;
37*be431cd8SAndroid Build Coastguard Worker using ::android::hardware::MQFlavor;
38*be431cd8SAndroid Build Coastguard Worker 
39*be431cd8SAndroid Build Coastguard Worker using ::android::AidlMessageQueue;
40*be431cd8SAndroid Build Coastguard Worker 
41*be431cd8SAndroid Build Coastguard Worker struct TestAidlMsgQ : public BnTestAidlMsgQ {
42*be431cd8SAndroid Build Coastguard Worker     typedef AidlMessageQueue<int32_t, SynchronizedReadWrite> MessageQueueSync;
43*be431cd8SAndroid Build Coastguard Worker     typedef AidlMessageQueue<int32_t, UnsynchronizedWrite> MessageQueueUnsync;
44*be431cd8SAndroid Build Coastguard Worker 
TestAidlMsgQTestAidlMsgQ45*be431cd8SAndroid Build Coastguard Worker     TestAidlMsgQ() : mFmqSynchronized(nullptr), mFmqUnsynchronized(nullptr) {}
46*be431cd8SAndroid Build Coastguard Worker 
47*be431cd8SAndroid Build Coastguard Worker     // Methods from ::aidl::android::fmq::test::ITestAidlMsgQ follow.
48*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus configureFmqSyncReadWrite(
49*be431cd8SAndroid Build Coastguard Worker             const MQDescriptor<int32_t, SynchronizedReadWrite>& mqDesc,
50*be431cd8SAndroid Build Coastguard Worker             bool* _aidl_return) override;
51*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus getFmqUnsyncWrite(bool configureFmq, bool userFd,
52*be431cd8SAndroid Build Coastguard Worker                                          MQDescriptor<int32_t, UnsynchronizedWrite>* mqDesc,
53*be431cd8SAndroid Build Coastguard Worker                                          bool* _aidl_return) override;
54*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus requestBlockingRead(int32_t count) override;
55*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus requestBlockingReadDefaultEventFlagBits(int32_t count) override;
56*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus requestBlockingReadRepeat(int32_t count, int32_t numIter) override;
57*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus requestReadFmqSync(int32_t count, bool* _aidl_return) override;
58*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus requestReadFmqUnsync(int32_t count, bool* _aidl_return) override;
59*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus requestWriteFmqSync(int32_t count, bool* _aidl_return) override;
60*be431cd8SAndroid Build Coastguard Worker     ndk::ScopedAStatus requestWriteFmqUnsync(int32_t count, bool* _aidl_return) override;
61*be431cd8SAndroid Build Coastguard Worker 
62*be431cd8SAndroid Build Coastguard Worker   private:
63*be431cd8SAndroid Build Coastguard Worker     std::unique_ptr<MessageQueueSync> mFmqSynchronized;
64*be431cd8SAndroid Build Coastguard Worker     std::unique_ptr<MessageQueueUnsync> mFmqUnsynchronized;
65*be431cd8SAndroid Build Coastguard Worker 
66*be431cd8SAndroid Build Coastguard Worker     /*
67*be431cd8SAndroid Build Coastguard Worker      * Utility function to verify data read from the fast message queue.
68*be431cd8SAndroid Build Coastguard Worker      */
verifyDataTestAidlMsgQ69*be431cd8SAndroid Build Coastguard Worker     bool verifyData(int32_t* data, int count) {
70*be431cd8SAndroid Build Coastguard Worker         for (int i = 0; i < count; i++) {
71*be431cd8SAndroid Build Coastguard Worker             if (data[i] != i) return false;
72*be431cd8SAndroid Build Coastguard Worker         }
73*be431cd8SAndroid Build Coastguard Worker         return true;
74*be431cd8SAndroid Build Coastguard Worker     }
75*be431cd8SAndroid Build Coastguard Worker };
76*be431cd8SAndroid Build Coastguard Worker 
77*be431cd8SAndroid Build Coastguard Worker }  // namespace test
78*be431cd8SAndroid Build Coastguard Worker }  // namespace fmq
79*be431cd8SAndroid Build Coastguard Worker }  // namespace android
80*be431cd8SAndroid Build Coastguard Worker }  // namespace aidl
81