diff --git a/battery_mitigation/battery_mitigation.cpp b/battery_mitigation/battery_mitigation.cpp index 2204bd50..2fa67213 100644 --- a/battery_mitigation/battery_mitigation.cpp +++ b/battery_mitigation/battery_mitigation.cpp @@ -61,13 +61,31 @@ const struct MitigationConfig::Config cfg = { "voltage_now", "current_now", }, .LogFilePath = "/data/vendor/mitigation/thismeal.txt", + .TimestampFormat = "%Y-%m-%d %H:%M:%S", }; const char kReadyFilePath[] = "/sys/devices/virtual/pmic/mitigation/instruction/ready"; const char kReadyProperty[] = "vendor.brownout.mitigation.ready"; +const char kLastMealPath[] = "/data/vendor/mitigation/lastmeal.txt"; +const char kBRRequestedProperty[] = "vendor.startup_bugreport_requested"; +const std::regex kTimestampRegex("^\\S+\\s[0-9]+:[0-9]+:[0-9]+\\S+$"); int main(int /*argc*/, char ** /*argv*/) { + auto batteryMitigationStartTime = std::chrono::system_clock::now(); bmSp = new BatteryMitigation(cfg); + if (!bmSp) { + return 0; + } + bool mitigationLogTimeValid = bmSp->isMitigationLogTimeValid(batteryMitigationStartTime, + cfg.LogFilePath, + cfg.TimestampFormat, + kTimestampRegex); + int startupBugreport = android::base::GetIntProperty(kBRRequestedProperty, 0); + if (startupBugreport && mitigationLogTimeValid) { + std::ifstream src(cfg.LogFilePath, std::ios::in); + std::ofstream dst(kLastMealPath, std::ios::out); + dst << src.rdbuf(); + } bool isBatteryMitigationReady = false; std::string ready_str; int val = 0; diff --git a/battery_mitigation/battery_mitigation.rc b/battery_mitigation/battery_mitigation.rc index c50811cf..4c4e2c1b 100644 --- a/battery_mitigation/battery_mitigation.rc +++ b/battery_mitigation/battery_mitigation.rc @@ -1,24 +1,92 @@ -on property:sys.boot_completed=1 && property:ro.boot.bootreason=reboot,ocp,pmic,if - copy data/vendor/mitigation/thismeal.txt data/vendor/mitigation/lastmeal.txt - chown system system data/vendor/mitigation/lastmeal.txt - -on property:sys.boot_completed=1 && property:ro.boot.bootreason=reboot,uvlo,pmic,if - copy data/vendor/mitigation/thismeal.txt data/vendor/mitigation/lastmeal.txt - chown system system data/vendor/mitigation/lastmeal.txt - -on property:sys.boot_completed=1 && property:ro.boot.bootreason=reboot,uvlo,pmic,main - copy data/vendor/mitigation/thismeal.txt data/vendor/mitigation/lastmeal.txt - chown system system data/vendor/mitigation/lastmeal.txt - -on property:sys.boot_completed=1 && property:ro.boot.bootreason=reboot,uvlo,pmic,sub - copy data/vendor/mitigation/thismeal.txt data/vendor/mitigation/lastmeal.txt - chown system system data/vendor/mitigation/lastmeal.txt - on property:vendor.thermal.link_ready=1 mkdir /data/vendor/mitigation 0755 system system chown system system /data/vendor/mitigation start vendor.battery_mitigation +on property:ro.boot.bootreason=reboot,uvlo,pmic,if + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,pmic,if + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,uvlo,pmic,main + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,uvlo,pmic,sub + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck1m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck2m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck3m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck4m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck5m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck6m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck7m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck8m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck9m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck10m + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck1s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck2s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck3s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck4s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck5s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck6s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck7s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck8s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck9s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buck10s + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buckds + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buckas + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buckcs + setprop vendor.startup_bugreport_requested 1 + +on property:ro.boot.bootreason=reboot,ocp,buckbs + setprop vendor.startup_bugreport_requested 1 + service vendor.battery_mitigation /vendor/bin/hw/battery_mitigation user system group system