From 5b7512065371e116e545eb33155437c9b5153e9e Mon Sep 17 00:00:00 2001 From: roynatech2544 Date: Tue, 18 Oct 2022 12:48:37 +0900 Subject: [PATCH] universal7885: parts: smartcharge: Fix derps * Turn on charging back after smartcharge off. * Correct onclick listener on smartcharge settings * Only write to charge sysfs once --- .../smartcharge/SmartChargeFragment.kt | 12 +++++----- .../parts/default/SmartCharge.cpp | 23 ++++++++++--------- .../aidl-support/parts/default/SmartCharge.h | 11 +++++++++ 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/smartcharge/SmartChargeFragment.kt b/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/smartcharge/SmartChargeFragment.kt index 8f3673d..62f292f 100644 --- a/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/smartcharge/SmartChargeFragment.kt +++ b/universal7885-common/apps/SamsungParts/src/com/eurekateam/samsungextras/smartcharge/SmartChargeFragment.kt @@ -36,7 +36,7 @@ import com.eurekateam.samsungextras.interfaces.SmartCharge import java.util.concurrent.ScheduledThreadPoolExecutor import java.util.concurrent.TimeUnit -class SmartChargeFragment : PreferenceFragmentCompat(), OnMainSwitchChangeListener, View.OnClickListener, Preference.OnPreferenceChangeListener, SelectorWithWidgetPreference.OnClickListener { +class SmartChargeFragment : PreferenceFragmentCompat(), OnMainSwitchChangeListener, Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener, SelectorWithWidgetPreference.OnClickListener { private lateinit var mLimit: SelectorWithWidgetPreference private lateinit var mRestart: SelectorWithWidgetPreference private lateinit var mSharedPreferences: SharedPreferences @@ -67,7 +67,7 @@ class SmartChargeFragment : PreferenceFragmentCompat(), OnMainSwitchChangeListen mRestartStat = findPreference(PREF_RESTART_STAT)!! mApplyBtn = findPreference(PREF_APPLY)!! - mApplyBtn.setOnClickListener(this) + mApplyBtn.setOnPreferenceClickListener(this) mApplyBtn.isEnabled = false mSmartChargeBtn.addOnSwitchChangeListener(this) mSmartChargeBtn.isChecked = mSharedPreferences.getBoolean(PREF_SMARTCHARGE_MAIN, false) @@ -137,10 +137,10 @@ class SmartChargeFragment : PreferenceFragmentCompat(), OnMainSwitchChangeListen return false } - override fun onClick(v: View) { - if (v == mApplyBtn) { - val limit = mSharedPreferences.getInt(PREF_LIMIT, 20) - val restart = mSharedPreferences.getInt(PREF_RESTART, 80) + override fun onPreferenceClick(pref : Preference) { + if (pref == mApplyBtn) { + val limit = mSharedPreferences.getInt(PREF_LIMIT, 80) + val restart = mSharedPreferences.getInt(PREF_RESTART, 20) if (limit > restart) { mSmartCharge.setConfig(limit, restart) mMainHandler.post({ mSmartChargeBtn.isEnabled = true }) diff --git a/universal7885-common/apps/aidl-support/parts/default/SmartCharge.cpp b/universal7885-common/apps/aidl-support/parts/default/SmartCharge.cpp index ebb29b5..47dac9e 100644 --- a/universal7885-common/apps/aidl-support/parts/default/SmartCharge.cpp +++ b/universal7885-common/apps/aidl-support/parts/default/SmartCharge.cpp @@ -15,30 +15,28 @@ #include "SmartCharge.h" #include -#include #include #include "BatteryConstants.h" namespace aidl::vendor::eureka::hardware::parts { -static int limit = 0; -static int restart = 0; - -static int limit_stat = 0; -static int restart_stat = 0; - -static std::thread *monitor_th = nullptr; - -static void battery_monitor(void) { - while (true) { +void SmartCharge::battery_monitor(void) { + while (kShouldRun) { auto batt = FileIO::readline(BATTERY_CAPACITY_CURRENT); if (batt >= limit) { + if (kTookAction) goto sleep; FileIO::writeline(BATTERY_CHARGE, 0); + kTookAction = true; limit_stat += 1; } else if (batt <= restart) { + if (kTookAction) goto sleep; FileIO::writeline(BATTERY_CHARGE, 1); + kTookAction = true; restart_stat += 1; + } else { + kTookAction = false; } +sleep: std::this_thread::sleep_for(std::chrono::seconds(5)); } } @@ -48,14 +46,17 @@ static void battery_monitor(void) { return ::ndk::ScopedAStatus::fromExceptionCodeWithMessage( EX_ILLEGAL_ARGUMENT, "Start called without configuring."); + kShouldRun = true; monitor_th = new std::thread(battery_monitor); return ::ndk::ScopedAStatus::ok(); } ::ndk::ScopedAStatus SmartCharge::stop(void) { + kShouldRun = false; if (monitor_th != nullptr) { monitor_th = nullptr; } + FileIO::writeline(BATTERY_CHARGE, 1); return ::ndk::ScopedAStatus::ok(); } diff --git a/universal7885-common/apps/aidl-support/parts/default/SmartCharge.h b/universal7885-common/apps/aidl-support/parts/default/SmartCharge.h index bb5c611..5786118 100644 --- a/universal7885-common/apps/aidl-support/parts/default/SmartCharge.h +++ b/universal7885-common/apps/aidl-support/parts/default/SmartCharge.h @@ -15,10 +15,12 @@ #pragma once #include +#include namespace aidl::vendor::eureka::hardware::parts { struct SmartCharge : public BnSmartCharge { + public: // Methods from ::aidl::vendor::eureka::hardware::parts::ISmartCharge // follow. ::ndk::ScopedAStatus start(void); @@ -26,5 +28,14 @@ struct SmartCharge : public BnSmartCharge { ::ndk::ScopedAStatus setConfig(int32_t limit, int32_t restart); ::ndk::ScopedAStatus getLimitCnt(int32_t *_aidl_return); ::ndk::ScopedAStatus getRestartCnt(int32_t *_aidl_return); + private: + int limit; + int restart; + int limit_stat; + int restart_stat; + bool kShouldRun; + bool kTookAction; + std::thread *monitor_th; + void battery_monitor(void); }; } // namespace aidl::vendor::eureka::hardware::parts