1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*38e8c45fSAndroid Build Coastguard Worker * 4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*38e8c45fSAndroid Build Coastguard Worker * 8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*38e8c45fSAndroid Build Coastguard Worker * 10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License. 15*38e8c45fSAndroid Build Coastguard Worker */ 16*38e8c45fSAndroid Build Coastguard Worker 17*38e8c45fSAndroid Build Coastguard Worker #pragma once 18*38e8c45fSAndroid Build Coastguard Worker 19*38e8c45fSAndroid Build Coastguard Worker #include <chrono> 20*38e8c45fSAndroid Build Coastguard Worker #include <iostream> 21*38e8c45fSAndroid Build Coastguard Worker #include <string> 22*38e8c45fSAndroid Build Coastguard Worker 23*38e8c45fSAndroid Build Coastguard Worker #include <android-base/macros.h> 24*38e8c45fSAndroid Build Coastguard Worker #include <android/hidl/manager/1.0/IServiceManager.h> 25*38e8c45fSAndroid Build Coastguard Worker #include <utils/StrongPointer.h> 26*38e8c45fSAndroid Build Coastguard Worker 27*38e8c45fSAndroid Build Coastguard Worker #include "Command.h" 28*38e8c45fSAndroid Build Coastguard Worker #include "NullableOStream.h" 29*38e8c45fSAndroid Build Coastguard Worker #include "ParentDebugInfoLevel.h" 30*38e8c45fSAndroid Build Coastguard Worker #include "utils.h" 31*38e8c45fSAndroid Build Coastguard Worker 32*38e8c45fSAndroid Build Coastguard Worker namespace android { 33*38e8c45fSAndroid Build Coastguard Worker namespace lshal { 34*38e8c45fSAndroid Build Coastguard Worker 35*38e8c45fSAndroid Build Coastguard Worker class Lshal { 36*38e8c45fSAndroid Build Coastguard Worker public: 37*38e8c45fSAndroid Build Coastguard Worker Lshal(); ~Lshal()38*38e8c45fSAndroid Build Coastguard Worker virtual ~Lshal() {} 39*38e8c45fSAndroid Build Coastguard Worker Lshal(std::ostream &out, std::ostream &err, 40*38e8c45fSAndroid Build Coastguard Worker sp<hidl::manager::V1_0::IServiceManager> serviceManager, 41*38e8c45fSAndroid Build Coastguard Worker sp<hidl::manager::V1_0::IServiceManager> passthroughManager); 42*38e8c45fSAndroid Build Coastguard Worker Status main(const Arg &arg); 43*38e8c45fSAndroid Build Coastguard Worker // global usage 44*38e8c45fSAndroid Build Coastguard Worker void usage(); 45*38e8c45fSAndroid Build Coastguard Worker virtual NullableOStream<std::ostream> err() const; 46*38e8c45fSAndroid Build Coastguard Worker virtual NullableOStream<std::ostream> out() const; 47*38e8c45fSAndroid Build Coastguard Worker const sp<hidl::manager::V1_0::IServiceManager> &serviceManager() const; 48*38e8c45fSAndroid Build Coastguard Worker const sp<hidl::manager::V1_0::IServiceManager> &passthroughManager() const; 49*38e8c45fSAndroid Build Coastguard Worker 50*38e8c45fSAndroid Build Coastguard Worker Status emitDebugInfo( 51*38e8c45fSAndroid Build Coastguard Worker const std::string &interfaceName, 52*38e8c45fSAndroid Build Coastguard Worker const std::string &instanceName, 53*38e8c45fSAndroid Build Coastguard Worker const std::vector<std::string> &options, 54*38e8c45fSAndroid Build Coastguard Worker ParentDebugInfoLevel parentDebugInfoLevel, 55*38e8c45fSAndroid Build Coastguard Worker std::ostream &out, 56*38e8c45fSAndroid Build Coastguard Worker NullableOStream<std::ostream> err) const; 57*38e8c45fSAndroid Build Coastguard Worker 58*38e8c45fSAndroid Build Coastguard Worker Command* selectCommand(const std::string& command) const; 59*38e8c45fSAndroid Build Coastguard Worker 60*38e8c45fSAndroid Build Coastguard Worker void forEachCommand(const std::function<void(const Command* c)>& f) const; 61*38e8c45fSAndroid Build Coastguard Worker 62*38e8c45fSAndroid Build Coastguard Worker void setWaitTimeForTest(std::chrono::milliseconds ipcCallWait, 63*38e8c45fSAndroid Build Coastguard Worker std::chrono::milliseconds debugDumpWait); 64*38e8c45fSAndroid Build Coastguard Worker std::chrono::milliseconds getIpcCallWait() const; 65*38e8c45fSAndroid Build Coastguard Worker std::chrono::milliseconds getDebugDumpWait() const; 66*38e8c45fSAndroid Build Coastguard Worker 67*38e8c45fSAndroid Build Coastguard Worker private: 68*38e8c45fSAndroid Build Coastguard Worker Status parseArgs(const Arg &arg); 69*38e8c45fSAndroid Build Coastguard Worker 70*38e8c45fSAndroid Build Coastguard Worker std::string mCommand; 71*38e8c45fSAndroid Build Coastguard Worker NullableOStream<std::ostream> mOut; 72*38e8c45fSAndroid Build Coastguard Worker NullableOStream<std::ostream> mErr; 73*38e8c45fSAndroid Build Coastguard Worker 74*38e8c45fSAndroid Build Coastguard Worker sp<hidl::manager::V1_0::IServiceManager> mServiceManager; 75*38e8c45fSAndroid Build Coastguard Worker sp<hidl::manager::V1_0::IServiceManager> mPassthroughManager; 76*38e8c45fSAndroid Build Coastguard Worker 77*38e8c45fSAndroid Build Coastguard Worker std::vector<std::unique_ptr<Command>> mRegisteredCommands; 78*38e8c45fSAndroid Build Coastguard Worker 79*38e8c45fSAndroid Build Coastguard Worker std::chrono::milliseconds mIpcCallWait{500}; 80*38e8c45fSAndroid Build Coastguard Worker std::chrono::milliseconds mDebugDumpWait{10000}; 81*38e8c45fSAndroid Build Coastguard Worker 82*38e8c45fSAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(Lshal); 83*38e8c45fSAndroid Build Coastguard Worker }; 84*38e8c45fSAndroid Build Coastguard Worker 85*38e8c45fSAndroid Build Coastguard Worker } // namespace lshal 86*38e8c45fSAndroid Build Coastguard Worker } // namespace android 87