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