/* * Copyright 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include "TcpServerForRunner.h" static constexpr const char* kDefaultSpecDirPath = "/data/local/tmp/spec/"; static constexpr const char* kDefaultHalDriverPath32 = "./vts_hal_driver32"; static constexpr const char* kDefaultHalDriverPath64 = "./vts_hal_driver64"; static constexpr const char* kDefaultShellDriverPath32 = "./vts_shell_driver32"; static constexpr const char* kDefaultShellDriverPath64 = "./vts_shell_driver64"; using namespace std; void ShowUsage() { printf( "Usage: vts_hal_agent [options]\n" "--hal_driver_path_32: Set 32 bit hal driver binary path.\n" "--hal_driver_path_32: Set 64 bit hal driver binary path.\n" "--spec_dir: Set vts spec directory. \n" "--shell_driver_path_32: Set 32 bit shell driver binary path\n" "--shell_driver_path_64: Set 64 bit shell driver binary path\n" "--log_severity: Set log severity\n" "--help: Show help\n"); exit(1); } int main(int argc, char** argv) { string hal_driver_path32 = kDefaultHalDriverPath32; string hal_driver_path64 = kDefaultHalDriverPath64; string shell_driver_path32 = kDefaultShellDriverPath32; string shell_driver_path64 = kDefaultShellDriverPath64; string spec_dir_path = kDefaultSpecDirPath; string log_severity = "INFO"; enum { HAL_DRIVER_PATH32 = 1000, HAL_DRIVER_PATH64, SHELL_DRIVER_PATH32, SHELL_DRIVER_PATH64, SPEC_DIR }; const char* const short_opts = "hl:"; const option long_opts[] = { {"help", no_argument, nullptr, 'h'}, {"hal_driver_path_32", required_argument, nullptr, HAL_DRIVER_PATH32}, {"hal_driver_path_64", required_argument, nullptr, HAL_DRIVER_PATH64}, {"shell_driver_path_32", required_argument, nullptr, SHELL_DRIVER_PATH32}, {"shell_driver_path_64", required_argument, nullptr, SHELL_DRIVER_PATH64}, {"spec_dir", required_argument, nullptr, SPEC_DIR}, {"log_severity", required_argument, nullptr, 'l'}, {nullptr, 0, nullptr, 0}, }; while (true) { int opt = getopt_long(argc, argv, short_opts, long_opts, nullptr); if (opt == -1) { break; } switch (opt) { case 'h': case '?': ShowUsage(); return 0; case 'l': { log_severity = string(optarg); break; } case HAL_DRIVER_PATH32: { hal_driver_path32 = string(optarg); break; } case HAL_DRIVER_PATH64: { hal_driver_path64 = string(optarg); break; } case SHELL_DRIVER_PATH32: { shell_driver_path32 = string(optarg); break; } case SHELL_DRIVER_PATH64: { shell_driver_path64 = string(optarg); break; } case SPEC_DIR: { spec_dir_path = string(optarg); break; } default: printf("getopt_long returned unexpected value: %d\n", opt); return 2; } } map log_map = { {"ERROR", "*:e"}, {"WARNING", "*:w"}, {"INFO", "*:i"}, {"DEBUG", "*:d"}, }; if (log_map.find(log_severity) != log_map.end()) { setenv("ANDROID_LOG_TAGS", log_map[log_severity].c_str(), 1); } android::base::InitLogging(argv, android::base::StderrLogger); LOG(INFO) << "|| VTS AGENT ||"; char* dir_path; dir_path = (char*)malloc(strlen(argv[0]) + 1); strcpy(dir_path, argv[0]); for (int index = strlen(argv[0]) - 2; index >= 0; index--) { if (dir_path[index] == '/') { dir_path[index] = '\0'; break; } } chdir(dir_path); android::vts::StartTcpServerForRunner( spec_dir_path.c_str(), hal_driver_path32.c_str(), hal_driver_path64.c_str(), shell_driver_path32.c_str(), shell_driver_path64.c_str()); return 0; }