1*b7c941bbSAndroid Build Coastguard Worker /* 2*b7c941bbSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*b7c941bbSAndroid Build Coastguard Worker * 4*b7c941bbSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*b7c941bbSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*b7c941bbSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*b7c941bbSAndroid Build Coastguard Worker * 8*b7c941bbSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*b7c941bbSAndroid Build Coastguard Worker * 10*b7c941bbSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*b7c941bbSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*b7c941bbSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*b7c941bbSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*b7c941bbSAndroid Build Coastguard Worker * limitations under the License. 15*b7c941bbSAndroid Build Coastguard Worker */ 16*b7c941bbSAndroid Build Coastguard Worker #include <amidi/AMidi.h> 17*b7c941bbSAndroid Build Coastguard Worker 18*b7c941bbSAndroid Build Coastguard Worker #include <vector> 19*b7c941bbSAndroid Build Coastguard Worker 20*b7c941bbSAndroid Build Coastguard Worker #include <jni.h> 21*b7c941bbSAndroid Build Coastguard Worker 22*b7c941bbSAndroid Build Coastguard Worker class TestMessage; 23*b7c941bbSAndroid Build Coastguard Worker 24*b7c941bbSAndroid Build Coastguard Worker class MidiTestManager { 25*b7c941bbSAndroid Build Coastguard Worker public: 26*b7c941bbSAndroid Build Coastguard Worker MidiTestManager(); 27*b7c941bbSAndroid Build Coastguard Worker ~MidiTestManager(); 28*b7c941bbSAndroid Build Coastguard Worker 29*b7c941bbSAndroid Build Coastguard Worker void jniSetup(JNIEnv* env); 30*b7c941bbSAndroid Build Coastguard Worker 31*b7c941bbSAndroid Build Coastguard Worker bool RunTest(jobject testModuleObj, AMidiDevice* sendDevice, AMidiDevice* receiveDevice, 32*b7c941bbSAndroid Build Coastguard Worker bool throttleData); 33*b7c941bbSAndroid Build Coastguard Worker void EndTest(int testCode); 34*b7c941bbSAndroid Build Coastguard Worker 35*b7c941bbSAndroid Build Coastguard Worker // Called by the thread routine. 36*b7c941bbSAndroid Build Coastguard Worker int ProcessInput(); 37*b7c941bbSAndroid Build Coastguard Worker 38*b7c941bbSAndroid Build Coastguard Worker private: 39*b7c941bbSAndroid Build Coastguard Worker void buildMatchStream(); 40*b7c941bbSAndroid Build Coastguard Worker int matchStream(uint8_t* bytes, int count); 41*b7c941bbSAndroid Build Coastguard Worker 42*b7c941bbSAndroid Build Coastguard Worker bool setupMessages(); 43*b7c941bbSAndroid Build Coastguard Worker int sendMessages(); 44*b7c941bbSAndroid Build Coastguard Worker 45*b7c941bbSAndroid Build Coastguard Worker jobject mTestModuleObj; 46*b7c941bbSAndroid Build Coastguard Worker 47*b7c941bbSAndroid Build Coastguard Worker // build the stream for matching. 48*b7c941bbSAndroid Build Coastguard Worker std::vector<uint8_t> mMatchStream; 49*b7c941bbSAndroid Build Coastguard Worker 50*b7c941bbSAndroid Build Coastguard Worker int mReceiveStreamPos; 51*b7c941bbSAndroid Build Coastguard Worker static const int MESSAGE_MAX_BYTES = 1024; 52*b7c941bbSAndroid Build Coastguard Worker 53*b7c941bbSAndroid Build Coastguard Worker AMidiInputPort* mMidiSendPort; 54*b7c941bbSAndroid Build Coastguard Worker AMidiOutputPort* mMidiReceivePort; 55*b7c941bbSAndroid Build Coastguard Worker 56*b7c941bbSAndroid Build Coastguard Worker // The array of messages to send/receive 57*b7c941bbSAndroid Build Coastguard Worker std::vector<TestMessage> mTestMsgs; 58*b7c941bbSAndroid Build Coastguard Worker int mNumTestMsgs; 59*b7c941bbSAndroid Build Coastguard Worker 60*b7c941bbSAndroid Build Coastguard Worker bool mThrottleData; 61*b7c941bbSAndroid Build Coastguard Worker 62*b7c941bbSAndroid Build Coastguard Worker // JNI 63*b7c941bbSAndroid Build Coastguard Worker JavaVM* mJvm; 64*b7c941bbSAndroid Build Coastguard Worker jmethodID mMidEndTest; 65*b7c941bbSAndroid Build Coastguard Worker 66*b7c941bbSAndroid Build Coastguard Worker // Test result codes 67*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_NOTRUN = 0; 68*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_PASSED = 1; 69*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_FAILED_MISMATCH = 2; 70*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_FAILED_TIMEOUT = 3; 71*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_FAILED_OVERRUN = 4; 72*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_FAILED_DEVICE = 5; 73*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_FAILED_JNI = 6; 74*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_FAILED_SETUP = 7; 75*b7c941bbSAndroid Build Coastguard Worker static const int TESTSTATUS_FAILED_SEND = 8; 76*b7c941bbSAndroid Build Coastguard Worker 77*b7c941bbSAndroid Build Coastguard Worker bool StartReading(AMidiDevice* nativeReadDevice); 78*b7c941bbSAndroid Build Coastguard Worker bool StartWriting(AMidiDevice* nativeWriteDevice); 79*b7c941bbSAndroid Build Coastguard Worker }; 80