I'm having trouble enabling the battery status. I already installed Kext ACPIBatteryManager and tried to apply a ready-made RehabMan patch for Dell models, the patch compiles without errors but does not correct the problem.
The percentage is stuck at 99% and the icon is as if it were charging, Can someone help me?
My laptop is a Dell Inspiron 14 Series, model i14-5458
Recently I had been looking for ways to control the battery charging on my hackintosh which is a Thinkpad T460 with dual batteries. On Windows there's a program Lenovo Vantage that lets you set the Battery Charging Start and Stop Thresholds. These thresholds continue to apply even when the laptop is turned off as these thresholds are managed by the embedded controller, so from that perspective its a set once and forget.
But there was one more thing that was frustrating me. By default Lenovo uses the external battery first and once its almost drained (less than 5%), it switches to the internal battery.
Although the Charging Start and Stop Limits are a good way to increase the life span of Lithium batteries (by lowering the max charge limit), the complete drainage of the external battery prior to switching to internal is not a good idea.
Fortunately Lenovo EC provide options to force drain (use) a battery (even with the ac adapter connected) thereby allowing to manually switch to the internal one, however these are manual controls. In Linux, there's a program tpacpi-bat that runs as a daemon and performs an efficient management of the dual batteries such as switching to internal battery when the external one reaches a configurable lower limit. However, this is Linux only and uses the ACPI interface.
I did some research to understand my options in macOS. I found RehabMan's ACPIDebug.kext and its ability (using another RehabMan's tool ioio) to call a function defined in the DSDT. With information collected tpacpi-bat and ACPIDebug.kext, I have created a dirty version.
So this is how you use it...
1. Use the attached SSDT-RMDT. As this was just a rough work to validate my understanding, I just did a hard coding for the first battery.
2. Install ACPIDebug.kext
3. After the reboot, you can trigger the following battery operations...
a. Set Battery Charge Start Threshold
ioio -s org_rehabman_ACPIDebug dbg1 <start-percent>
a. Set Battery Charge Stop Threshold
ioio -s org_rehabman_ACPIDebug dbg2 <stop-percent>
a. Force Discharge
ioio -s org_rehabman_ACPIDebug dbg3 <0|1> //0 to disable, 1 to enable
a. Inhibit battery charging for specified number of minutes
ioio -s org_rehabman_ACPIDebug dbg4 <minutes> //0 to disable
a. View Battery Info
ioio -s org_rehabman_ACPIDebug dbg5 <anything> //pass anything, its ignored
a. View Battery Charge Start/Stop Thresholds
ioio -s org_rehabman_ACPIDebug dbg0 <anything> //pass anything, its ignored
At this time, I just hard-coded for the BAT0 to quickly validate my understanding and its working well.
What's next? As I understand (and please correct me if I'm wrong), I can't return values with ACPIDebug.kext along with ioio, plus this is also all very hacky.
To be able to create a program that reads the current remaining capacity (percent) and switches control to internal batter, I need a way to return this info. Currently I'm just outputting it to the logs.
My thinking is to modify ACPIDebug.kext or one of these other kexts (ACPISensors.kext) to add code for above and then create a program to optimally manage the operation of my two batteries.
However, I'm very new to all of this and will take some time.
In the meanwhile, here is it for your playing pleasures. Please be aware that my SSDT-RMDT is currently hard-coded for BAT0 and doesn't have all the validations.
Credits to RehabMan, tpacpi-bat, and other resources on internet.
There are three different projects for monitoring temperatures, voltages, fans speed and other hardware parameters:
Initially it was FakeSMC with plugins for producing SMC keys for hardware parameters for different hardware. But sometimes ago Kozlek separated own version of FakeSMC and producing new set of plugins while I stay with good working version 3. So..
1. FakeSMC v3 with Hardware Sensors3 which I still supported.
2. FakeSMC v6 (rev1800) by Kozlek and supported by Rehabman. AFAIK both are abandoned and the project is not supported. Or may be maintained by coauthors.
3. New VirtualSMC by vit9696 with own set of sensors kexts. It depends on Lilu.kext. The project is in active development.
All three project have incompatible interfaces sensors<->SMC so they are incompatible with each other.
There are applications for monitoring hardware parameters and they commonly depends on these projects.
1. iStat, iStatMenu, iStatPro compatible with real Macs because they use SMC keys just like those presents in real Macs.
2. HWMonitorSMC by Navi (initial codes from Kozlek) used in my HWSensors3.
3. HWMonitor by Kozlek with graphics like in IntelPowerGadget used in his HWSensors version.
4. HWMonitorSMC2 by Vector_Sigma tends to be universal supporting all project. It also may use sensors information produces by Apple graphics and by IntelPowerGadget.
Let us discuss here differences and common ideas for this projects.