From cbc81c7f5bffa7ffdf2f1a43592a1215838bffe7 Mon Sep 17 00:00:00 2001 From: Alex Hong Date: Wed, 30 Mar 2022 00:40:39 +0800 Subject: [PATCH] Upgrade android.hardware.dumpstate from HIDL 1.1 to AIDL 1 lshal is not supported for AIDL, now use dumpsys instead. Update the debug command as below. Old: lshal debug android.hardware.dumpstate@1.1::IDumpstateDevice/default [section] New: dumpsys android.hardware.dumpstate.IDumpstateDevice/default [section] Currently dumpsys does not start the Lazy HAL service, only dumpstate does. Because we need to run dumpsys for debugging, keep the dumpstate HAL running at boot. Do not set it to be a lazy HAL. Test: atest VtsHalDumpstateTargetTest pass adb shell dumpsys -t 30 android.hardware.dumpstate.IDumpstateDevice/default all Bug: 223118410 Change-Id: I7f866a57c3eff8c9783fee89dce205cf9728c459 --- device.mk | 2 +- device_framework_matrix_product.xml | 8 - dumpstate/Android.mk | 13 +- .../{DumpstateDevice.cpp => Dumpstate.cpp} | 192 ++++++++---------- dumpstate/{DumpstateDevice.h => Dumpstate.h} | 53 ++--- ...id.hardware.dumpstate@1.1-service.gs201.rc | 5 +- dumpstate/service.cpp | 38 ++-- manifest-gralloc3.xml | 4 +- manifest.xml | 4 +- 9 files changed, 136 insertions(+), 183 deletions(-) rename dumpstate/{DumpstateDevice.cpp => Dumpstate.cpp} (90%) rename dumpstate/{DumpstateDevice.h => Dumpstate.h} (55%) 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