From 3b213341d05a5cc6d83e9c66711eae20210feb2a Mon Sep 17 00:00:00 2001 From: Poompatai Puntitpong Date: Tue, 27 Sep 2022 05:17:11 +0000 Subject: [PATCH 1/3] [conflict] Remove android.hardware.bluetooth.audio HAL from manifest This HAL has been replaced with AIDL, so it does not exist anymore, causing VtsHalBluetoothAudioV2_0TargetTest and VtsHalBluetoothAudioV2_1TargetTest to fail. Original Change: https://googleplex-android-review.git.corp.google.com/c/device/google/gs101/+/20061228 Bug: 231275829 Test: presubmit Test: VtsHalBluetoothAudioV2_0TargetTest VtsHalBluetoothAudioV2_1TargetTest Change-Id: Ie091dfce3c63be4fd6d0ed5b6600587aa56862cd --- manifest_64.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/manifest_64.xml b/manifest_64.xml index 47e953c5..1c816c7c 100644 --- a/manifest_64.xml +++ b/manifest_64.xml @@ -53,15 +53,6 @@ default - - android.hardware.bluetooth.audio - hwbinder - 2.1 - - IBluetoothAudioProvidersFactory - default - - android.hardware.boot hwbinder From a8295107d365fd2e0ec4711238fe4ce27dc5feed Mon Sep 17 00:00:00 2001 From: Jack Wu Date: Wed, 12 Oct 2022 00:49:27 +0800 Subject: [PATCH 2/3] init: support boot.charger_mode feature 1. If the device is powered off by users, boot to charger mode after plugging in the charger. Otherwise, boot to OS. 2. Disable this feature by default 3. Enable this feature by persist.sys.boot.charger_mode.enable=1 Bug: 251680171 Test: can enter charger mode from power off Signed-off-by: Jack Wu Change-Id: Ibd1f88c961d884d8e6f9d0019cf550fd0de1192d --- conf/init.gs101.rc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/conf/init.gs101.rc b/conf/init.gs101.rc index 3a62a0cd..d1569054 100644 --- a/conf/init.gs101.rc +++ b/conf/init.gs101.rc @@ -309,6 +309,9 @@ on init # Disable dock-defend by default chown system system /sys/devices/platform/google,charger/dd_settings write /sys/devices/platform/google,charger/dd_settings -1 + # Enable charger mode (aka off-mode charging) by default + chown system system /sys/class/power_supply/battery/charger_mode + write /sys/class/power_supply/battery/charger_mode 1 # Power Stats HAL chown system system /dev/bbd_pwrstat @@ -828,6 +831,14 @@ on property:persist.sys.test_harness=1 && property:persist.vendor.testing_batte setprop persist.vendor.charge.start.level 0 setprop vendor.battery.defender.disable 1 +# Clear the state of charger_mode +on property:persist.vendor.charger_mode.enable=1 + write /sys/class/power_supply/battery/charger_mode 0 + +# Enable charger_mode when user triggers shutdown from menu +on property:sys.shutdown.requested=0userrequested + write /sys/class/power_supply/battery/charger_mode 1 + # ACA (Adaptice Charge Always On) persist properties on property:persist.vendor.adaptive.charge.soc=* write /sys/class/power_supply/battery/charge_limit ${persist.vendor.adaptive.charge.soc} From 0e57a35f5d2636d3124f82251325dc8903a33946 Mon Sep 17 00:00:00 2001 From: Adam Shih Date: Wed, 12 Oct 2022 15:26:51 +0800 Subject: [PATCH 3/3] upgrade dumpstate from hidl to aidl Bug: 240530709 Test: adb bugreport Change-Id: I0cd75fa84e495037a55284b43bd0ee53e5379d4c --- device.mk | 2 +- dumpstate/Android.bp | 28 +++ dumpstate/Android.mk | 47 ----- .../{DumpstateDevice.cpp => Dumpstate.cpp} | 176 ++++++++---------- dumpstate/{DumpstateDevice.h => Dumpstate.h} | 47 ++--- ...ndroid.hardware.dumpstate-service.gs101.rc | 5 + ...droid.hardware.dumpstate-service.gs101.xml | 9 + ...id.hardware.dumpstate@1.1-service.gs101.rc | 6 - dumpstate/service.cpp | 38 ++-- manifest.xml | 9 - manifest_64.xml | 9 - 11 files changed, 155 insertions(+), 221 deletions(-) create mode 100644 dumpstate/Android.bp delete mode 100644 dumpstate/Android.mk rename dumpstate/{DumpstateDevice.cpp => Dumpstate.cpp} (89%) rename dumpstate/{DumpstateDevice.h => Dumpstate.h} (50%) create mode 100644 dumpstate/android.hardware.dumpstate-service.gs101.rc create mode 100644 dumpstate/android.hardware.dumpstate-service.gs101.xml delete mode 100644 dumpstate/android.hardware.dumpstate@1.1-service.gs101.rc diff --git a/device.mk b/device.mk index cf2b7417..820784d7 100644 --- a/device.mk +++ b/device.mk @@ -452,7 +452,7 @@ PRODUCT_PACKAGES += \ # dumpstate HAL PRODUCT_PACKAGES += \ - android.hardware.dumpstate@1.1-service.gs101 + android.hardware.dumpstate-service.gs101 # AoC support PRODUCT_PACKAGES += \ diff --git a/dumpstate/Android.bp b/dumpstate/Android.bp new file mode 100644 index 00000000..9b6076de --- /dev/null +++ b/dumpstate/Android.bp @@ -0,0 +1,28 @@ +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +cc_binary { + name: "android.hardware.dumpstate-service.gs101", + srcs: [ + "Dumpstate.cpp", + "service.cpp", + ], + init_rc: ["android.hardware.dumpstate-service.gs101.rc"], + vintf_fragments: ["android.hardware.dumpstate-service.gs101.xml"], + cflags: [ + "-Wall", + "-Werror", + ], + shared_libs: [ + "libbase", + "libbinder_ndk", + "libcutils", + "libdumpstateutil", + "liblog", + "libutils", + "android.hardware.dumpstate-V1-ndk", + ], + vendor: true, + relative_install_path: "hw", +} diff --git a/dumpstate/Android.mk b/dumpstate/Android.mk deleted file mode 100644 index d9fee2c0..00000000 --- a/dumpstate/Android.mk +++ /dev/null @@ -1,47 +0,0 @@ -# -# 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. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.dumpstate@1.1-service.gs101 -LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 -LOCAL_LICENSE_CONDITIONS := notice -LOCAL_NOTICE_FILE := $(LOCAL_PATH)/../NOTICE -LOCAL_INIT_RC := android.hardware.dumpstate@1.1-service.gs101.rc -LOCAL_MODULE_RELATIVE_PATH := hw - -LOCAL_SRC_FILES := \ - DumpstateDevice.cpp \ - service.cpp - -LOCAL_SHARED_LIBRARIES := \ - android.hardware.dumpstate@1.0 \ - android.hardware.dumpstate@1.1 \ - libbase \ - libcutils \ - libdumpstateutil \ - libhidlbase \ - libhidltransport \ - libhwbinder \ - liblog \ - libutils - -LOCAL_CFLAGS := -Werror -Wall - -LOCAL_MODULE_TAGS := optional -LOCAL_PROPRIETARY_MODULE := true - -include $(BUILD_EXECUTABLE) diff --git a/dumpstate/DumpstateDevice.cpp b/dumpstate/Dumpstate.cpp similarity index 89% rename from dumpstate/DumpstateDevice.cpp rename to dumpstate/Dumpstate.cpp index 29612f2b..938a04dc 100644 --- a/dumpstate/DumpstateDevice.cpp +++ b/dumpstate/Dumpstate.cpp @@ -22,12 +22,11 @@ #include #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-" @@ -146,9 +144,9 @@ void dumpLogs(int fd, std::string srcDir, std::string destDir, int maxFileNum, void 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"; @@ -193,7 +191,7 @@ void dumpGpsLogs(int fd, 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()); @@ -217,7 +215,7 @@ void 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); @@ -229,7 +227,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" @@ -241,13 +239,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{ { "pre-touch", [this](int fd) { dumpPreTouchSection(fd); } }, { "wlan", [this](int fd) { dumpWlanSection(fd); } }, @@ -264,9 +262,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) { @@ -304,23 +302,23 @@ 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"}); } // 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", @@ -505,7 +503,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\" ; " @@ -537,7 +535,7 @@ void DumpstateDevice::dumpThermalSection(int fd) { } // Dump items related to touch -void DumpstateDevice::dumpPreTouchSection(int fd) { +void Dumpstate::dumpPreTouchSection(int fd) { const char nvt_spi_path[] = "/sys/class/spi_master/spi11/spi11.0/input/nvt_touch"; char cmd[256]; @@ -573,7 +571,7 @@ void DumpstateDevice::dumpPreTouchSection(int fd) { } } -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", @@ -816,7 +814,7 @@ void DumpstateDevice::dumpTouchSection(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", @@ -836,7 +834,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", @@ -857,7 +855,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 " @@ -883,7 +881,7 @@ void DumpstateDevice::dumpMemorySection(int 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"); @@ -909,14 +907,14 @@ void DumpstateDevice::dumpDisplaySection(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) { @@ -931,13 +929,13 @@ void DumpstateDevice::dumpSensorsUSFSection(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 essential camera debugging logs -void DumpstateDevice::dumpCameraSection(int fd) { +void Dumpstate::dumpCameraSection(int fd) { RunCommandToFd(fd, "Camera HAL Graph State Dump", {"/vendor/bin/sh", "-c", "for f in $(ls -t /data/vendor/camera/hal_graph_state*.txt |head -1); do " "echo $f ; cat $f ; done"}, @@ -959,20 +957,20 @@ static void *dumpModemThread(void *data) { RunCommandToFd(STDOUT_FILENO, "MKDIR MODEM LOG", {"/vendor/bin/mkdir", "-p", modemLogAllDir.c_str()}, CommandOptions::WithTimeout(2).Build()); - bool modemLogEnabled = android::base::GetBoolProperty(MODEM_LOGGING_PERSIST_PROPERTY, false); - if (modemLogEnabled && android::base::GetProperty(MODEM_LOGGING_PATH_PROPERTY, "") == MODEM_LOG_DIRECTORY) { - bool modemLogStarted = android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false); - int maxFileNum = android::base::GetIntProperty(MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY, 100); + bool modemLogEnabled = ::android::base::GetBoolProperty(MODEM_LOGGING_PERSIST_PROPERTY, false); + if (modemLogEnabled && ::android::base::GetProperty(MODEM_LOGGING_PATH_PROPERTY, "") == MODEM_LOG_DIRECTORY) { + bool modemLogStarted = ::android::base::GetBoolProperty(MODEM_LOGGING_STATUS_PROPERTY, false); + int maxFileNum = ::android::base::GetIntProperty(MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY, 100); 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 < 15; 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; @@ -984,18 +982,18 @@ static void *dumpModemThread(void *data) { if (modemLogStarted) { ALOGD("Restarting modem logging...\n"); - android::base::SetProperty(MODEM_LOGGING_PROPERTY, "true"); + ::android::base::SetProperty(MODEM_LOGGING_PROPERTY, "true"); } } if (!PropertiesHelper::IsUserBuild()) { - 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 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); if (tcpdumpEnabled) { - dumpLogs(STDOUT_FILENO, tcpdumpLogDir, modemLogAllDir, android::base::GetIntProperty(TCPDUMP_NUMBER_BUGREPORT, 5), TCPDUMP_LOG_PREFIX); + dumpLogs(STDOUT_FILENO, tcpdumpLogDir, modemLogAllDir, ::android::base::GetIntProperty(TCPDUMP_NUMBER_BUGREPORT, 5), TCPDUMP_LOG_PREFIX); } if (gpsLogEnabled) { @@ -1020,7 +1018,7 @@ static void *dumpModemThread(void *data) { RunCommandToFd(STDOUT_FILENO, "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))); ALOGD("Going to write to dumpstate board binary\n"); if (fdLog >= 0) { @@ -1053,53 +1051,47 @@ static void *dumpModemThread(void *data) { return NULL; } -// 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"); } // Create thread to collect modem related logs + bool VerboseLogging; + getVerboseLoggingEnabled(&VerboseLogging); pthread_t modemThreadHandle = 0; - if (getVerboseLoggingEnabled()) { - if (handle->numFds < 2) { - ALOGE("no FD for modem\n"); - } else { - int fdModem = handle->data[1]; - if (pthread_create(&modemThreadHandle, NULL, dumpModemThread, (void *)((long)fdModem)) != 0) { - ALOGE("could not create thread for dumpModem\n"); - } + if (VerboseLogging && in_fds.size() > 1) { + int fdModem = in_fds[1].get(); + if (pthread_create(&modemThreadHandle, NULL, dumpModemThread, (void *)((long)fdModem)) != 0) { + ALOGE("could not create thread for dumpModem\n"); } } else { - ALOGD("Verbose logging is not enabled\n"); + ALOGD("Verbose logging is not enabled or no fd for modem.\n"); } dumpTextSection(fd, kAllSections); @@ -1108,46 +1100,40 @@ Return DumpstateDevice::dumpstateBoard_1_1(const hidl_handle& h pthread_join(modemThreadHandle, NULL); } - 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 50% rename from dumpstate/DumpstateDevice.h rename to dumpstate/Dumpstate.h index 9a8590e6..19314302 100644 --- a/dumpstate/DumpstateDevice.h +++ b/dumpstate/Dumpstate.h @@ -13,44 +13,30 @@ * 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 +#pragma once + +#include +#include +#include -#include -#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; - - // Methods from ::android::hidl::base::V1_0::IBase follow. - Return debug(const hidl_handle &fd, const hidl_vec &args) override; + ::ndk::ScopedAStatus getVerboseLoggingEnabled(bool* _aidl_return) 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"; @@ -75,10 +61,7 @@ struct DumpstateDevice : public IDumpstateDevice { void dumpCameraSection(int fd); }; -} // 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-service.gs101.rc b/dumpstate/android.hardware.dumpstate-service.gs101.rc new file mode 100644 index 00000000..dcc8b292 --- /dev/null +++ b/dumpstate/android.hardware.dumpstate-service.gs101.rc @@ -0,0 +1,5 @@ +service vendor.dumpstate-default /vendor/bin/hw/android.hardware.dumpstate-service.gs101 + class hal + user system + group system shell + interface aidl android.hardware.dumpstate.IDumpstateDevice/default diff --git a/dumpstate/android.hardware.dumpstate-service.gs101.xml b/dumpstate/android.hardware.dumpstate-service.gs101.xml new file mode 100644 index 00000000..5e51b287 --- /dev/null +++ b/dumpstate/android.hardware.dumpstate-service.gs101.xml @@ -0,0 +1,9 @@ + + + android.hardware.dumpstate + + IDumpstateDevice + default + + + diff --git a/dumpstate/android.hardware.dumpstate@1.1-service.gs101.rc b/dumpstate/android.hardware.dumpstate@1.1-service.gs101.rc deleted file mode 100644 index 00b80c50..00000000 --- a/dumpstate/android.hardware.dumpstate@1.1-service.gs101.rc +++ /dev/null @@ -1,6 +0,0 @@ -service vendor.dumpstate-1-1 /vendor/bin/hw/android.hardware.dumpstate@1.1-service.gs101 - class hal - user system - group system shell - interface android.hardware.dumpstate@1.0::IDumpstateDevice default - interface android.hardware.dumpstate@1.1::IDumpstateDevice default diff --git a/dumpstate/service.cpp b/dumpstate/service.cpp index 47172311..06dfa618 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.gs101" +#define LOG_TAG "android.hardware.dumpstate-service.gs101" -#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_addService(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.xml b/manifest.xml index fa8f8a98..623f8306 100644 --- a/manifest.xml +++ b/manifest.xml @@ -57,15 +57,6 @@ default - - android.hardware.dumpstate - hwbinder - 1.1 - - IDumpstateDevice - default - - android.hardware.boot hwbinder diff --git a/manifest_64.xml b/manifest_64.xml index 1c816c7c..921e6ae4 100644 --- a/manifest_64.xml +++ b/manifest_64.xml @@ -44,15 +44,6 @@ default - - android.hardware.dumpstate - hwbinder - 1.1 - - IDumpstateDevice - default - - android.hardware.boot hwbinder