blob: 280e226d106c35eb9b908ef990284a7f2a3c2801 [file] [log] [blame]
# Copyright 2018 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.
import os
import subprocess
import sys
CHARGE_PERCENT_START = 40
CHARGE_PERCENT_STOP = 60
def set_device_charging_limits(device_id):
"""Set the start/stop percentages for charging.
This can keep battery from overcharging.
Args:
device_id: str; device ID to set limits
"""
print 'Rooting device %s' % device_id
cmd = ('adb -s %s root' % device_id)
process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
pout, perr = process.communicate()
if 'cannot' in pout.lower() or perr: # 'cannot root' returns no error
print ' Warning: unable to root %s and set charging limits.' % device_id
else:
print ' Setting charging limits on %s' % device_id
cmd = ('adb -s %s shell setprop persist.vendor.charge.start.level %d' % (
device_id, CHARGE_PERCENT_START))
process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
_, perr = process.communicate()
if not perr:
print ' Min: %d%%' % CHARGE_PERCENT_START
else:
print ' Warning: unable to set charging start limit.'
cmd = ('adb -s %s shell setprop persist.vendor.charge.stop.level %d' % (
device_id, CHARGE_PERCENT_STOP))
process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
_, perr = process.communicate()
if not perr:
print ' Max: %d%%' % CHARGE_PERCENT_STOP
else:
print ' Warning: unable to set charging stop limit.'
print 'Unrooting device %s' % device_id
cmd = ('adb -s %s unroot' % device_id)
subprocess.call(cmd.split(), stdout=subprocess.PIPE)
def main():
"""Set charging limits for battery."""
device_id = None
for s in sys.argv[1:]:
if s[:7] == 'device=' and len(s) > 7:
device_id = s[7:]
if device_id:
set_device_charging_limits(device_id)
else:
print 'Usage: python %s device=$DEVICE_ID' % os.path.basename(__file__)
if __name__ == '__main__':
main()