diff --git a/modem/Android.bp b/modem/Android.bp index 2bf023c..84bdd61 100644 --- a/modem/Android.bp +++ b/modem/Android.bp @@ -18,7 +18,9 @@ cc_binary { "-Werror", ], shared_libs: [ + "libbase", "libdump", + "liblog", ], vendor: true, relative_install_path: "dump", diff --git a/modem/dump_modemlog.cpp b/modem/dump_modemlog.cpp index 216cffe..5aaa554 100644 --- a/modem/dump_modemlog.cpp +++ b/modem/dump_modemlog.cpp @@ -14,9 +14,47 @@ * limitations under the License. */ #include +#include +#include + +#define MODEM_LOGGING_PERSIST_PROPERTY "persist.vendor.sys.modem.logging.enable" +#define MODEM_LOGGING_PROPERTY "vendor.sys.modem.logging.enable" +#define MODEM_LOGGING_STATUS_PROPERTY "vendor.sys.modem.logging.status" +#define MODEM_LOGGING_NUMBER_BUGREPORT_PROPERTY "persist.vendor.sys.modem.logging.br_num" +#define MODEM_LOGGING_PATH_PROPERTY "vendor.sys.modem.logging.log_path" +#define MODEM_LOG_PREFIX "sbuff_" int main() { - dumpLogs("/data/vendor/radio/extended_logs", "/data/vendor/radio/logs/always-on/all_logs", 20, "extended_log_"); + 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"); + 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)) { + ALOGD("modem logging stopped\n"); + sleep(1); + break; + } + sleep(1); + } + + dumpLogs(MODEM_LOG_DIRECTORY, BUGREPORT_PACKING_DIR, maxFileNum, MODEM_LOG_PREFIX); + + if (modemLogStarted) { + ALOGD("Restarting modem logging...\n"); + ::android::base::SetProperty(MODEM_LOGGING_PROPERTY, "true"); + } + } + + dumpLogs("/data/vendor/radio/extended_logs", BUGREPORT_PACKING_DIR, 20, "extended_log_"); copyFile("/mnt/vendor/efs/nv_normal.bin", "/data/vendor/radio/logs/always-on/all_logs/nv_normal.bin"); copyFile("/mnt/vendor/efs/nv_protected.bin", "/data/vendor/radio/logs/always-on/all_logs/nv_protected.bin"); return 0; diff --git a/modem/sepolicy/dump_modemlog.te b/modem/sepolicy/dump_modemlog.te index c49bd5e..0afcedf 100644 --- a/modem/sepolicy/dump_modemlog.te +++ b/modem/sepolicy/dump_modemlog.te @@ -4,6 +4,9 @@ userdebug_or_eng(` allow dump_modemlog mnt_vendor_file:dir search; allow dump_modemlog modem_efs_file:dir search; allow dump_modemlog modem_efs_file:file r_file_perms; + allow dump_modemlog vendor_slog_file:dir r_dir_perms; + allow dump_modemlog vendor_slog_file:file r_file_perms; allow dump_modemlog radio_vendor_data_file:dir create_dir_perms; allow dump_modemlog radio_vendor_data_file:file create_file_perms; + set_prop(dump_modemlog, vendor_modem_prop) ')