xref: /aosp_15_r20/frameworks/native/cmds/lshal/utils.h (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
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