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 <iomanip>
20*38e8c45fSAndroid Build Coastguard Worker #include <iostream>
21*38e8c45fSAndroid Build Coastguard Worker #include <string>
22*38e8c45fSAndroid Build Coastguard Worker #include <sstream>
23*38e8c45fSAndroid Build Coastguard Worker #include <utility>
24*38e8c45fSAndroid Build Coastguard Worker #include <vector>
25*38e8c45fSAndroid Build Coastguard Worker
26*38e8c45fSAndroid Build Coastguard Worker namespace android {
27*38e8c45fSAndroid Build Coastguard Worker namespace lshal {
28*38e8c45fSAndroid Build Coastguard Worker
29*38e8c45fSAndroid Build Coastguard Worker enum : unsigned int {
30*38e8c45fSAndroid Build Coastguard Worker OK = 0,
31*38e8c45fSAndroid Build Coastguard Worker // Return to Lshal::main to print help info.
32*38e8c45fSAndroid Build Coastguard Worker USAGE = 1 << 0,
33*38e8c45fSAndroid Build Coastguard Worker // no service managers
34*38e8c45fSAndroid Build Coastguard Worker NO_BINDERIZED_MANAGER = 1 << 1,
35*38e8c45fSAndroid Build Coastguard Worker NO_PASSTHROUGH_MANAGER = 1 << 2,
36*38e8c45fSAndroid Build Coastguard Worker // general error in getting information from the three sources
37*38e8c45fSAndroid Build Coastguard Worker DUMP_BINDERIZED_ERROR = 1 << 3,
38*38e8c45fSAndroid Build Coastguard Worker DUMP_PASSTHROUGH_ERROR = 1 << 4,
39*38e8c45fSAndroid Build Coastguard Worker DUMP_ALL_LIBS_ERROR = 1 << 5,
40*38e8c45fSAndroid Build Coastguard Worker // I/O error in reading files
41*38e8c45fSAndroid Build Coastguard Worker IO_ERROR = 1 << 6,
42*38e8c45fSAndroid Build Coastguard Worker // Interface does not exist (IServiceManager::get fails)
43*38e8c45fSAndroid Build Coastguard Worker NO_INTERFACE = 1 << 7,
44*38e8c45fSAndroid Build Coastguard Worker // Transaction error from hwbinder transactions
45*38e8c45fSAndroid Build Coastguard Worker TRANSACTION_ERROR = 1 << 8,
46*38e8c45fSAndroid Build Coastguard Worker // No transaction error, but return value is unexpected.
47*38e8c45fSAndroid Build Coastguard Worker BAD_IMPL = 1 << 9,
48*38e8c45fSAndroid Build Coastguard Worker // Cannot fetch VINTF data.
49*38e8c45fSAndroid Build Coastguard Worker VINTF_ERROR = 1 << 10,
50*38e8c45fSAndroid Build Coastguard Worker };
51*38e8c45fSAndroid Build Coastguard Worker using Status = unsigned int;
52*38e8c45fSAndroid Build Coastguard Worker
53*38e8c45fSAndroid Build Coastguard Worker struct Arg {
54*38e8c45fSAndroid Build Coastguard Worker int argc;
55*38e8c45fSAndroid Build Coastguard Worker char **argv;
56*38e8c45fSAndroid Build Coastguard Worker };
57*38e8c45fSAndroid Build Coastguard Worker
58*38e8c45fSAndroid Build Coastguard Worker template <typename A>
join(const A & components,const std::string & separator)59*38e8c45fSAndroid Build Coastguard Worker std::string join(const A &components, const std::string &separator) {
60*38e8c45fSAndroid Build Coastguard Worker std::stringstream out;
61*38e8c45fSAndroid Build Coastguard Worker bool first = true;
62*38e8c45fSAndroid Build Coastguard Worker for (const auto &component : components) {
63*38e8c45fSAndroid Build Coastguard Worker if (!first) {
64*38e8c45fSAndroid Build Coastguard Worker out << separator;
65*38e8c45fSAndroid Build Coastguard Worker }
66*38e8c45fSAndroid Build Coastguard Worker out << component;
67*38e8c45fSAndroid Build Coastguard Worker
68*38e8c45fSAndroid Build Coastguard Worker first = false;
69*38e8c45fSAndroid Build Coastguard Worker }
70*38e8c45fSAndroid Build Coastguard Worker return out.str();
71*38e8c45fSAndroid Build Coastguard Worker }
72*38e8c45fSAndroid Build Coastguard Worker
73*38e8c45fSAndroid Build Coastguard Worker std::string toHexString(uint64_t t);
74*38e8c45fSAndroid Build Coastguard Worker
75*38e8c45fSAndroid Build Coastguard Worker template<typename String>
splitFirst(const String & s,char c)76*38e8c45fSAndroid Build Coastguard Worker std::pair<String, String> splitFirst(const String &s, char c) {
77*38e8c45fSAndroid Build Coastguard Worker const char *pos = strchr(s.c_str(), c);
78*38e8c45fSAndroid Build Coastguard Worker if (pos == nullptr) {
79*38e8c45fSAndroid Build Coastguard Worker return {s, {}};
80*38e8c45fSAndroid Build Coastguard Worker }
81*38e8c45fSAndroid Build Coastguard Worker return {String(s.c_str(), pos - s.c_str()), String(pos + 1)};
82*38e8c45fSAndroid Build Coastguard Worker }
83*38e8c45fSAndroid Build Coastguard Worker
84*38e8c45fSAndroid Build Coastguard Worker std::vector<std::string> split(const std::string &s, char c);
85*38e8c45fSAndroid Build Coastguard Worker
86*38e8c45fSAndroid Build Coastguard Worker void replaceAll(std::string *s, char from, char to);
87*38e8c45fSAndroid Build Coastguard Worker
88*38e8c45fSAndroid Build Coastguard Worker } // namespace lshal
89*38e8c45fSAndroid Build Coastguard Worker } // namespace android
90