diff --git a/device.mk b/device.mk index 975db198..de31d006 100644 --- a/device.mk +++ b/device.mk @@ -422,7 +422,7 @@ PRODUCT_PACKAGES += \ # dumpstate HAL PRODUCT_PACKAGES += \ - android.hardware.dumpstate@1.1-service.gs201 + android.hardware.dumpstate-service.gs201 # AoC support include device/google/gs201/aoc/device.mk diff --git a/device_framework_matrix_product.xml b/device_framework_matrix_product.xml index bce7e68a..c6490102 100644 --- a/device_framework_matrix_product.xml +++ b/device_framework_matrix_product.xml @@ -21,14 +21,6 @@ default - - android.hardware.dumpstate - 1.1 - - IDumpstateDevice - default - - android.hardware.gnss diff --git a/dumpstate/Android.mk b/dumpstate/Android.mk index 05586dfb..76202ce5 100644 --- a/dumpstate/Android.mk +++ b/dumpstate/Android.mk @@ -16,7 +16,7 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.dumpstate@1.1-service.gs201 +LOCAL_MODULE := android.hardware.dumpstate-service.gs201 LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 LOCAL_LICENSE_CONDITIONS := notice LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE @@ -24,20 +24,17 @@ LOCAL_INIT_RC := android.hardware.dumpstate@1.1-service.gs201.rc LOCAL_MODULE_RELATIVE_PATH := hw LOCAL_SRC_FILES := \ - DumpstateDevice.cpp \ + Dumpstate.cpp \ service.cpp LOCAL_SHARED_LIBRARIES := \ - android.hardware.dumpstate@1.0 \ - android.hardware.dumpstate@1.1 \ libbase \ + libbinder_ndk \ libcutils \ libdumpstateutil \ - libhidlbase \ - libhidltransport \ - libhwbinder \ liblog \ - libutils + libutils \ + android.hardware.dumpstate-V1-ndk LOCAL_CFLAGS := -Werror -Wall diff --git a/dumpstate/DumpstateDevice.cpp b/dumpstate/Dumpstate.cpp similarity index 90% rename from dumpstate/DumpstateDevice.cpp rename to dumpstate/Dumpstate.cpp index 095559de..3556da56 100644 --- a/dumpstate/DumpstateDevice.cpp +++ b/dumpstate/Dumpstate.cpp @@ -22,11 +22,10 @@ #include #include #include -#include #include #include -#include "DumpstateDevice.h" +#include "Dumpstate.h" #include "DumpstateUtil.h" @@ -56,11 +55,10 @@ using android::os::dumpstate::DumpFileToFd; using android::os::dumpstate::PropertiesHelper; using android::os::dumpstate::RunCommandToFd; +namespace aidl { namespace android { namespace hardware { namespace dumpstate { -namespace V1_1 { -namespace implementation { #define GPS_LOG_PREFIX "gl-" #define GPS_MCU_LOG_PREFIX "esw-" @@ -74,7 +72,7 @@ typedef std::chrono::time_point timepoint_t; const char kVerboseLoggingProperty[] = "persist.vendor.verbose_logging_enabled"; -void DumpstateDevice::dumpLogs(int fd, std::string srcDir, std::string destDir, int maxFileNum, +void Dumpstate::dumpLogs(int fd, std::string srcDir, std::string destDir, int maxFileNum, const char *logPrefix) { struct dirent **dirent_list = NULL; int num_entries = scandir(srcDir.c_str(), @@ -120,11 +118,11 @@ void DumpstateDevice::dumpLogs(int fd, std::string srcDir, std::string destDir, free(dirent_list); } -void DumpstateDevice::dumpRilLogs(int fd, std::string destDir) { +void Dumpstate::dumpRilLogs(int fd, std::string destDir) { std::string rilLogDir = - android::base::GetProperty(RIL_LOG_DIRECTORY_PROPERTY, RIL_LOG_DIRECTORY); + ::android::base::GetProperty(RIL_LOG_DIRECTORY_PROPERTY, RIL_LOG_DIRECTORY); - int maxFileNum = android::base::GetIntProperty(RIL_LOG_NUMBER_PROPERTY, 50); + int maxFileNum = ::android::base::GetIntProperty(RIL_LOG_NUMBER_PROPERTY, 50); const std::string currentLogDir = rilLogDir + "/cur"; const std::string previousLogDir = rilLogDir + "/prev"; @@ -191,11 +189,11 @@ void dumpModemEFS(std::string destDir) { } } -void DumpstateDevice::dumpGpsLogs(int fd, const std::string &destDir) { +void Dumpstate::dumpGpsLogs(int fd, const std::string &destDir) { const std::string gpsLogDir = GPS_LOG_DIRECTORY; const std::string gpsTmpLogDir = gpsLogDir + "/.tmp"; const std::string gpsDestDir = destDir + "/gps"; - int maxFileNum = android::base::GetIntProperty(GPS_LOG_NUMBER_PROPERTY, 20); + int maxFileNum = ::android::base::GetIntProperty(GPS_LOG_NUMBER_PROPERTY, 20); RunCommandToFd(fd, "MKDIR GPS LOG", {"/vendor/bin/mkdir", "-p", gpsDestDir.c_str()}, CommandOptions::WithTimeout(2).Build()); @@ -205,7 +203,7 @@ void DumpstateDevice::dumpGpsLogs(int fd, const std::string &destDir) { dumpLogs(fd, gpsLogDir, gpsDestDir, maxFileNum, GPS_LOG_PREFIX); } -void DumpstateDevice::dumpCameraLogs(int fd, const std::string &destDir) { +void Dumpstate::dumpCameraLogs(int fd, const std::string &destDir) { static const std::string kCameraLogDir = "/data/vendor/camera/profiler"; const std::string cameraDestDir = destDir + "/camera"; RunCommandToFd(fd, "MKDIR CAMERA LOG", {"/vendor/bin/mkdir", "-p", cameraDestDir.c_str()}, @@ -219,7 +217,7 @@ void DumpstateDevice::dumpCameraLogs(int fd, const std::string &destDir) { } timepoint_t startSection(int fd, const std::string §ionName) { - android::base::WriteStringToFd( + ::android::base::WriteStringToFd( "\n" "------ Section start: " + sectionName + " ------\n" "\n", fd); @@ -231,7 +229,7 @@ void endSection(int fd, const std::string §ionName, timepoint_t startTime) { auto elapsedMsec = std::chrono::duration_cast (endTime - startTime).count(); - android::base::WriteStringToFd( + ::android::base::WriteStringToFd( "\n" "------ Section end: " + sectionName + " ------\n" "Elapsed msec: " + std::to_string(elapsedMsec) + "\n" @@ -243,13 +241,13 @@ void endSection(int fd, const std::string §ionName, timepoint_t startTime) { // related to each other - for instance, for a Foo peripheral - please add them // to a new dump function and include it in this table so it can be accessed from the // command line, e.g.: -// lshal debug android.hardware.dumpstate@1.0::IDumpstateDevice/default foo +// dumpsys android.hardware.dumpstate.IDumpstateDevice/default foo // // However, if your addition generates attachments and/or binary data for the // bugreport (i.e. if it requires two file descriptors to execute), it must not be // added to this table and should instead be added to dumpstateBoard() below. -DumpstateDevice::DumpstateDevice() +Dumpstate::Dumpstate() : mTextSections{ { "wlan", [this](int fd) { dumpWlanSection(fd); } }, { "soc", [this](int fd) { dumpSocSection(fd); } }, @@ -270,9 +268,9 @@ DumpstateDevice::DumpstateDevice() } { } -// Dump data requested by an argument to the "debug" HAL interface, or help info +// Dump data requested by an argument to the "dump" interface, or help info // if the specified section is not supported. -void DumpstateDevice::dumpTextSection(int fd, const std::string §ionName) { +void Dumpstate::dumpTextSection(int fd, const std::string §ionName) { bool dumpAll = (sectionName == kAllSections); for (const auto §ion : mTextSections) { @@ -292,17 +290,17 @@ void DumpstateDevice::dumpTextSection(int fd, const std::string §ionName) { } // An unsupported section was requested on the command line - android::base::WriteStringToFd("Unrecognized text section: " + sectionName + "\n", fd); - android::base::WriteStringToFd("Try \"" + kAllSections + "\" or one of the following:", fd); + ::android::base::WriteStringToFd("Unrecognized text section: " + sectionName + "\n", fd); + ::android::base::WriteStringToFd("Try \"" + kAllSections + "\" or one of the following:", fd); for (const auto §ion : mTextSections) { - android::base::WriteStringToFd(" " + section.first, fd); + ::android::base::WriteStringToFd(" " + section.first, fd); } - android::base::WriteStringToFd("\nNote: sections with attachments (e.g. modem) are" + ::android::base::WriteStringToFd("\nNote: sections with attachments (e.g. modem) are" "not avalable from the command line.\n", fd); } // Dump items related to wlan -void DumpstateDevice::dumpWlanSection(int fd) { +void Dumpstate::dumpWlanSection(int fd) { RunCommandToFd(fd, "WLAN Debug Dump", {"/vendor/bin/sh", "-c", "cat /sys/wifi/dump_start"}); @@ -311,7 +309,7 @@ void DumpstateDevice::dumpWlanSection(int fd) { } // Dump items related to power and battery -void DumpstateDevice::dumpPowerSection(int fd) { +void Dumpstate::dumpPowerSection(int fd) { struct stat buffer; RunCommandToFd(fd, "Power Stats Times", {"/vendor/bin/sh", "-c", @@ -490,7 +488,7 @@ void DumpstateDevice::dumpPowerSection(int fd) { } // Dump items related to thermal -void DumpstateDevice::dumpThermalSection(int fd) { +void Dumpstate::dumpThermalSection(int fd) { RunCommandToFd(fd, "Temperatures", {"/vendor/bin/sh", "-c", "for f in /sys/class/thermal/thermal* ; do " "type=`cat $f/type` ; temp=`cat $f/temp` ; echo \"$type: $temp\" ; " @@ -522,7 +520,7 @@ void DumpstateDevice::dumpThermalSection(int fd) { } // Dump items related to touch -void DumpstateDevice::dumpTouchSection(int fd) { +void Dumpstate::dumpTouchSection(int fd) { const char stm_cmd_path[4][50] = {"/sys/class/spi_master/spi11/spi11.0", "/proc/fts/driver_test", "/sys/class/spi_master/spi6/spi6.0", @@ -820,7 +818,7 @@ void DumpstateDevice::dumpTouchSection(int fd) { } // Dump items related to SoC -void DumpstateDevice::dumpSocSection(int fd) { +void Dumpstate::dumpSocSection(int fd) { DumpFileToFd(fd, "AP HW TUNE", "/sys/devices/system/chip-id/ap_hw_tune_str"); DumpFileToFd(fd, "EVT VERSION", "/sys/devices/system/chip-id/evt_ver"); DumpFileToFd(fd, "LOT ID", "/sys/devices/system/chip-id/lot_id"); @@ -830,7 +828,7 @@ void DumpstateDevice::dumpSocSection(int fd) { } // Dump items related to CPUs -void DumpstateDevice::dumpCpuSection(int fd) { +void Dumpstate::dumpCpuSection(int fd) { DumpFileToFd(fd, "CPU present", "/sys/devices/system/cpu/present"); DumpFileToFd(fd, "CPU online", "/sys/devices/system/cpu/online"); RunCommandToFd(fd, "CPU time-in-state", {"/vendor/bin/sh", "-c", @@ -850,7 +848,7 @@ void DumpstateDevice::dumpCpuSection(int fd) { } // Dump items related to Devfreq & BTS -void DumpstateDevice::dumpDevfreqSection(int fd) { +void Dumpstate::dumpDevfreqSection(int fd) { DumpFileToFd(fd, "MIF DVFS", "/sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/time_in_state"); DumpFileToFd(fd, "INT DVFS", @@ -871,7 +869,7 @@ void DumpstateDevice::dumpDevfreqSection(int fd) { } // Dump items related to memory -void DumpstateDevice::dumpMemorySection(int fd) { +void Dumpstate::dumpMemorySection(int fd) { RunCommandToFd(fd, "ION HEAPS", {"/vendor/bin/sh", "-c", "for d in $(ls -d /d/ion/*); do " "if [ -f $d ]; then " @@ -945,13 +943,13 @@ static void DumpUFS(int fd) { } // Dump items related to storage -void DumpstateDevice::dumpStorageSection(int fd) { +void Dumpstate::dumpStorageSection(int fd) { DumpF2FS(fd); DumpUFS(fd); } // Dump items related to display -void DumpstateDevice::dumpDisplaySection(int fd) { +void Dumpstate::dumpDisplaySection(int fd) { DumpFileToFd(fd, "CRTC-0 underrun count", "/sys/kernel/debug/dri/0/crtc-0/underrun_cnt"); DumpFileToFd(fd, "CRTC-0 crc count", "/sys/kernel/debug/dri/0/crtc-0/crc_cnt"); DumpFileToFd(fd, "CRTC-0 ecc count", "/sys/kernel/debug/dri/0/crtc-0/ecc_cnt"); @@ -971,7 +969,7 @@ void DumpstateDevice::dumpDisplaySection(int fd) { } // Dump items related to AoC -void DumpstateDevice::dumpAoCSection(int fd) { +void Dumpstate::dumpAoCSection(int fd) { DumpFileToFd(fd, "AoC Service Status", "/sys/devices/platform/19000000.aoc/services"); DumpFileToFd(fd, "AoC Restarts", "/sys/devices/platform/19000000.aoc/restart_count"); DumpFileToFd(fd, "AoC Coredumps", "/sys/devices/platform/19000000.aoc/coredump_count"); @@ -1001,14 +999,14 @@ void DumpstateDevice::dumpAoCSection(int fd) { } // Dump items related to sensors usf. -void DumpstateDevice::dumpSensorsUSFSection(int fd) { +void Dumpstate::dumpSensorsUSFSection(int fd) { CommandOptions options = CommandOptions::WithTimeout(2).Build(); RunCommandToFd(fd, "USF statistics", {"/vendor/bin/sh", "-c", "usf_stats get --all"}, options); if (!PropertiesHelper::IsUserBuild()) { // Not a user build, if this is also not a production device dump the USF registry. - std::string hwRev = android::base::GetProperty(HW_REVISION, ""); + std::string hwRev = ::android::base::GetProperty(HW_REVISION, ""); if (hwRev.find("PROTO") != std::string::npos || hwRev.find("EVT") != std::string::npos || hwRev.find("DVT") != std::string::npos) { @@ -1021,7 +1019,7 @@ void DumpstateDevice::dumpSensorsUSFSection(int fd) { // Gzip binary data and dump to fd in base64 format. Cmd to decode is also attached. void dumpGzippedFileInBase64ToFd(int fd, const char* title, const char* file_path) { - auto cmd = android::base::StringPrintf("echo 'base64 -d <i, header->size, std::string(header->buf, header->i).c_str()), fd); } else { - android::base::WriteStringToFd("*** Ramdump misc file: abl.log: File not found\n", fd); + ::android::base::WriteStringToFd("*** Ramdump misc file: abl.log: File not found\n", fd); } dumpGzippedFileInBase64ToFd( fd, "Ramdump misc file: acpm.lst (gzipped in base64)", "/mnt/vendor/ramdump/acpm.lst"); @@ -1053,23 +1051,23 @@ void DumpstateDevice::dumpRamdumpSection(int fd) { } // Dump items that don't fit well into any other section -void DumpstateDevice::dumpMiscSection(int fd) { +void Dumpstate::dumpMiscSection(int fd) { RunCommandToFd(fd, "VENDOR PROPERTIES", {"/vendor/bin/getprop"}); DumpFileToFd(fd, "VENDOR PROC DUMP", "/proc/vendor_sched/dump_task"); } // Dump items related to GSC -void DumpstateDevice::dumpGscSection(int fd) { +void Dumpstate::dumpGscSection(int fd) { RunCommandToFd(fd, "Citadel VERSION", {"vendor/bin/hw/citadel_updater", "-lv"}); RunCommandToFd(fd, "Citadel STATS", {"vendor/bin/hw/citadel_updater", "--stats"}); RunCommandToFd(fd, "GSC DEBUG DUMP", {"vendor/bin/hw/citadel_updater", "-D"}); } -void DumpstateDevice::dumpTrustySection(int fd) { +void Dumpstate::dumpTrustySection(int fd) { DumpFileToFd(fd, "Trusty TEE0 Logs", "/dev/trusty-log0"); } -void DumpstateDevice::dumpModem(int fd, int fdModem) +void Dumpstate::dumpModem(int fd, int fdModem) { std::string modemLogDir = MODEM_LOG_DIRECTORY; std::string extendedLogDir = MODEM_EXTENDED_LOG_DIRECTORY; @@ -1092,29 +1090,29 @@ void DumpstateDevice::dumpModem(int fd, int fdModem) RunCommandToFd(fd, "MKDIR MODEM LOG", {"/vendor/bin/mkdir", "-p", modemLogAllDir.c_str()}, CommandOptions::WithTimeout(2).Build()); if (!PropertiesHelper::IsUserBuild()) { - bool modemLogEnabled = android::base::GetBoolProperty(MODEM_LOGGING_PERSIST_PROPERTY, false); - bool gpsLogEnabled = android::base::GetBoolProperty(GPS_LOGGING_STATUS_PROPERTY, false); - bool tcpdumpEnabled = android::base::GetBoolProperty(TCPDUMP_PERSIST_PROPERTY, false); - bool cameraLogsEnabled = android::base::GetBoolProperty( + bool modemLogEnabled = ::android::base::GetBoolProperty(MODEM_LOGGING_PERSIST_PROPERTY, false); + bool gpsLogEnabled = ::android::base::GetBoolProperty(GPS_LOGGING_STATUS_PROPERTY, false); + bool tcpdumpEnabled = ::android::base::GetBoolProperty(TCPDUMP_PERSIST_PROPERTY, false); + bool cameraLogsEnabled = ::android::base::GetBoolProperty( "vendor.camera.debug.camera_performance_analyzer.attach_to_bugreport", true); - int maxFileNum = android::base::GetIntProperty(MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY, 100); + int maxFileNum = ::android::base::GetIntProperty(MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY, 100); if (tcpdumpEnabled) { - dumpLogs(fd, tcpdumpLogDir, modemLogAllDir, android::base::GetIntProperty(TCPDUMP_NUMBER_BUGREPORT, 5), TCPDUMP_LOG_PREFIX); + dumpLogs(fd, tcpdumpLogDir, modemLogAllDir, ::android::base::GetIntProperty(TCPDUMP_NUMBER_BUGREPORT, 5), TCPDUMP_LOG_PREFIX); } if (modemLogEnabled) { - bool modemLogStarted = android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false); + bool modemLogStarted = ::android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false); if (modemLogStarted) { - android::base::SetProperty(MODEM_LOGGING_PROPERTY, "false"); + ::android::base::SetProperty(MODEM_LOGGING_PROPERTY, "false"); ALOGD("Stopping modem logging...\n"); } else { ALOGD("modem logging is not running\n"); } for (int i = 0; i < 30; i++) { - if (!android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false)) { + if (!::android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false)) { ALOGD("modem logging stopped\n"); sleep(1); break; @@ -1126,7 +1124,7 @@ void DumpstateDevice::dumpModem(int fd, int fdModem) if (modemLogStarted) { ALOGD("Restarting modem logging...\n"); - android::base::SetProperty(MODEM_LOGGING_PROPERTY, "true"); + ::android::base::SetProperty(MODEM_LOGGING_PROPERTY, "true"); } } @@ -1150,7 +1148,7 @@ void DumpstateDevice::dumpModem(int fd, int fdModem) RunCommandToFd(fd, "CHG PERM", {"/vendor/bin/chmod", "a+w", modemLogCombined.c_str()}, CommandOptions::WithTimeout(2).Build()); std::vector buffer(65536); - android::base::unique_fd fdLog(TEMP_FAILURE_RETRY(open(modemLogCombined.c_str(), O_RDONLY | O_CLOEXEC | O_NONBLOCK))); + ::android::base::unique_fd fdLog(TEMP_FAILURE_RETRY(open(modemLogCombined.c_str(), O_RDONLY | O_CLOEXEC | O_NONBLOCK))); if (fdLog >= 0) { while (1) { @@ -1178,89 +1176,79 @@ void DumpstateDevice::dumpModem(int fd, int fdModem) endSection(fd, sectionName, startTime); } -// Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow. -Return DumpstateDevice::dumpstateBoard(const hidl_handle &handle) { -// Ignore return value, just return an empty status. - dumpstateBoard_1_1(handle, DumpstateMode::DEFAULT, 30 * 1000 /* timeoutMillis */); - return Void(); -} - -// Methods from ::android::hardware::dumpstate::V1_1::IDumpstateDevice follow. -Return DumpstateDevice::dumpstateBoard_1_1(const hidl_handle& handle, - const DumpstateMode mode, - const uint64_t timeoutMillis) { +ndk::ScopedAStatus Dumpstate::dumpstateBoard(const std::vector<::ndk::ScopedFileDescriptor>& in_fds, + IDumpstateDevice::DumpstateMode in_mode, + int64_t in_timeoutMillis) { // Unused arguments. - (void) timeoutMillis; + (void) in_timeoutMillis; - if (handle == nullptr || handle->numFds < 1) { + if (in_fds.size() < 1) { ALOGE("no FDs\n"); - return DumpstateStatus::ILLEGAL_ARGUMENT; + return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, + "No file descriptor"); } - int fd = handle->data[0]; + int fd = in_fds[0].get(); if (fd < 0) { - ALOGE("invalid FD: %d\n", handle->data[0]); - return DumpstateStatus::ILLEGAL_ARGUMENT; + ALOGE("invalid FD: %d\n", fd); + return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, + "Invalid file descriptor"); } - if (mode == DumpstateMode::WEAR) { + if (in_mode == IDumpstateDevice::DumpstateMode::WEAR) { // We aren't a Wear device. - ALOGE("Unsupported mode: %d\n", mode); - return DumpstateStatus::UNSUPPORTED_MODE; - } else if (mode < DumpstateMode::FULL || mode > DumpstateMode::PROTO) { - ALOGE("Invalid mode: %d\n", mode); - return DumpstateStatus::ILLEGAL_ARGUMENT; + ALOGE("Unsupported mode: %d\n", in_mode); + return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(ERROR_UNSUPPORTED_MODE, + "Unsupported mode"); + } else if (in_mode < IDumpstateDevice::DumpstateMode::FULL || in_mode > IDumpstateDevice::DumpstateMode::PROTO) { + ALOGE("Invalid mode: %d\n", in_mode); + return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, + "Invalid mode"); } dumpTextSection(fd, kAllSections); - if (handle->numFds < 2) { - ALOGE("no FD for modem\n"); + if (in_fds.size() < 1) { + ALOGE("no FD for modem\n"); } else { - int fdModem = handle->data[1]; - dumpModem(fd, fdModem); + int fdModem = in_fds[1].get(); + dumpModem(fd, fdModem); } - return DumpstateStatus::OK; + return ndk::ScopedAStatus::ok(); } -Return DumpstateDevice::setVerboseLoggingEnabled(const bool enable) { - ::android::base::SetProperty(kVerboseLoggingProperty, enable ? "true" : "false"); - return Void(); +ndk::ScopedAStatus Dumpstate::setVerboseLoggingEnabled(bool in_enable) { + ::android::base::SetProperty(kVerboseLoggingProperty, in_enable ? "true" : "false"); + return ndk::ScopedAStatus::ok(); } -Return DumpstateDevice::getVerboseLoggingEnabled() { - return ::android::base::GetBoolProperty(kVerboseLoggingProperty, false); +ndk::ScopedAStatus Dumpstate::getVerboseLoggingEnabled(bool* _aidl_return) { + *_aidl_return = ::android::base::GetBoolProperty(kVerboseLoggingProperty, false); + return ndk::ScopedAStatus::ok(); } -// Since HALs that support the debug() interface are automatically invoked during +// Since AIDLs that support the dump() interface are automatically invoked during // bugreport generation and we don't want to generate a second copy of the same // data that will go into dumpstate_board.txt, this function will only do // something if it is called with an option, e.g. -// lshal debug android.hardware.dumpstate@1.0::IDumpstateDevice/default all +// dumpsys android.hardware.dumpstate.IDumpstateDevice/default all // // Also, note that sections which generate attachments and/or binary data when -// included in a bugreport are not available through the debug() interface. -Return DumpstateDevice::debug(const hidl_handle &handle, const hidl_vec &args) { - // Exit when dump is completed since this is a lazy HAL. - addPostCommandTask([]() { - exit(0); - }); +// included in a bugreport are not available through the dump() interface. +binder_status_t Dumpstate::dump(int fd, const char** args, uint32_t numArgs) { - if (handle == nullptr || handle->numFds < 1 || args.size() != 1) { - return Void(); + if (numArgs != 1) { + return STATUS_OK; } - int fd = handle->data[0]; dumpTextSection(fd, static_cast(args[0])); fsync(fd); - return Void(); + return STATUS_OK; } - -} // namespace implementation -} // namespace V1_1 } // namespace dumpstate } // namespace hardware } // namespace android +} // namespace aidl diff --git a/dumpstate/DumpstateDevice.h b/dumpstate/Dumpstate.h similarity index 55% rename from dumpstate/DumpstateDevice.h rename to dumpstate/Dumpstate.h index eca59b26..b60ade34 100644 --- a/dumpstate/DumpstateDevice.h +++ b/dumpstate/Dumpstate.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2022 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. @@ -13,44 +13,31 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H -#define ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H -#include -#include -#include -#include +#pragma once +#include +#include +#include + +namespace aidl { namespace android { namespace hardware { namespace dumpstate { -namespace V1_1 { -namespace implementation { -using ::android::hardware::dumpstate::V1_1::DumpstateMode; -using ::android::hardware::dumpstate::V1_1::DumpstateStatus; -using ::android::hardware::dumpstate::V1_1::IDumpstateDevice; -using ::android::hardware::hidl_handle; -using ::android::hardware::hidl_string; -using ::android::hardware::hidl_vec; -using ::android::hardware::Return; - -struct DumpstateDevice : public IDumpstateDevice { +class Dumpstate : public BnDumpstateDevice { public: - DumpstateDevice(); + Dumpstate(); - // Methods from ::android::hardware::dumpstate::V1_0::IDumpstateDevice follow. - Return dumpstateBoard(const hidl_handle& h) override; + ::ndk::ScopedAStatus dumpstateBoard(const std::vector<::ndk::ScopedFileDescriptor>& in_fds, + IDumpstateDevice::DumpstateMode in_mode, + int64_t in_timeoutMillis) override; - // Methods from ::android::hardware::dumpstate::V1_1::IDumpstateDevice follow. - Return dumpstateBoard_1_1(const hidl_handle& h, - const DumpstateMode mode, - const uint64_t timeoutMillis) override; - Return setVerboseLoggingEnabled(const bool enable) override; - Return getVerboseLoggingEnabled() override; + ::ndk::ScopedAStatus getVerboseLoggingEnabled(bool* _aidl_return) override; - // Methods from ::android::hidl::base::V1_0::IBase follow. - Return debug(const hidl_handle &fd, const hidl_vec &args) override; + ::ndk::ScopedAStatus setVerboseLoggingEnabled(bool in_enable) override; + + binder_status_t dump(int fd, const char** args, uint32_t numArgs) override; private: const std::string kAllSections = "all"; @@ -86,12 +73,12 @@ struct DumpstateDevice : public IDumpstateDevice { void dumpRilLogs(int fd, std::string destDir); void dumpGpsLogs(int fd, const std::string &destDir); void dumpCameraLogs(int fd, const std::string &destDir); + + //bool getVerboseLoggingEnabledImpl(); + //::ndk::ScopedAStatus dumpstateBoardImpl(const int fd, const bool full); }; -} // namespace implementation -} // namespace V1_0 } // namespace dumpstate } // namespace hardware } // namespace android - -#endif // ANDROID_HARDWARE_DUMPSTATE_V1_1_DUMPSTATEDEVICE_H +} // namespace aidl diff --git a/dumpstate/android.hardware.dumpstate@1.1-service.gs201.rc b/dumpstate/android.hardware.dumpstate@1.1-service.gs201.rc index b18b7555..65456d11 100644 --- a/dumpstate/android.hardware.dumpstate@1.1-service.gs201.rc +++ b/dumpstate/android.hardware.dumpstate@1.1-service.gs201.rc @@ -1,6 +1,5 @@ -service vendor.dumpstate-1-1 /vendor/bin/hw/android.hardware.dumpstate@1.1-service.gs201 +service vendor.dumpstate-default /vendor/bin/hw/android.hardware.dumpstate-service.gs201 class hal user system group system - interface android.hardware.dumpstate@1.0::IDumpstateDevice default - interface android.hardware.dumpstate@1.1::IDumpstateDevice default + interface aidl android.hardware.dumpstate.IDumpstateDevice/default diff --git a/dumpstate/service.cpp b/dumpstate/service.cpp index 7633c02a..39d886cf 100644 --- a/dumpstate/service.cpp +++ b/dumpstate/service.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 The Android Open Source Project + * Copyright (C) 2022 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. @@ -13,31 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#define LOG_TAG "android.hardware.dumpstate@1.0-service.gs201" +#define LOG_TAG "android.hardware.dumpstate-service.gs201" -#include -#include +#include "Dumpstate.h" -#include "DumpstateDevice.h" +#include +#include +#include -using ::android::hardware::configureRpcThreadpool; -using ::android::hardware::dumpstate::V1_1::IDumpstateDevice; -using ::android::hardware::dumpstate::V1_1::implementation::DumpstateDevice; -using ::android::hardware::joinRpcThreadpool; -using ::android::sp; +using aidl::android::hardware::dumpstate::Dumpstate; +int main() { + ABinderProcess_setThreadPoolMaxThreadCount(0); + std::shared_ptr dumpstate = ndk::SharedRefBase::make(); -int main(int /* argc */, char* /* argv */ []) { - sp dumpstate = new DumpstateDevice; - configureRpcThreadpool(1, true); + const std::string instance = std::string() + Dumpstate::descriptor + "/default"; + binder_status_t status = + AServiceManager_registerLazyService(dumpstate->asBinder().get(), instance.c_str()); + CHECK_EQ(status, STATUS_OK); - android::status_t status = dumpstate->registerAsService(); - - if (status != android::OK) - { - ALOGE("Could not register DumpstateDevice service (%d).", status); - return -1; - } - - joinRpcThreadpool(); + ABinderProcess_joinThreadPool(); + return EXIT_FAILURE; // Unreachable } diff --git a/manifest-gralloc3.xml b/manifest-gralloc3.xml index 97afb6b6..68cac541 100644 --- a/manifest-gralloc3.xml +++ b/manifest-gralloc3.xml @@ -79,10 +79,8 @@ @1.3::ICryptoFactory/widevine @1.3::IDrmFactory/widevine - + android.hardware.dumpstate - hwbinder - 1.0 IDumpstateDevice default diff --git a/manifest.xml b/manifest.xml index c1efc47d..6c8f0c65 100644 --- a/manifest.xml +++ b/manifest.xml @@ -44,10 +44,8 @@ default - + android.hardware.dumpstate - hwbinder - 1.1 IDumpstateDevice default