pebble/tools/voltage_test.py
2025-01-27 11:38:16 -08:00

99 lines
3.5 KiB
Python

# Copyright 2024 Google LLC
#
# 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 argparse
import re
import json
import time
from serial_port_wrapper import SerialPortWrapper
import pebble_tty
import prompt
# returns T/F if prompt is obtained
def get_prompt_loop(serial , tries):
while (tries!=0):
try:
prompt.go_to_prompt(serial)
return True
except:
tries -= 1
return False
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-o','--output', type=str,
help='Output file location')
parser.add_argument('-d','--duration', default=0,
help='Duration in seconds')
parser.add_argument('-dh','--duration_hours', default=0,
help='Duration in hours')
parser.add_argument('-i','--interval', default=60,
help='Interval between voltage samples')
parser.add_argument('-j','--json_csv',
help='Output as JSON file.', action='store_true')
parser.add_argument('-v','--verbose',
help='Output all results', action='store_true')
parser.add_argument('-r','--retry', default=4,
help='Retries to get serial prompt')
args = parser.parse_args()
duration = float(args.duration) + 3600 * float(args.duration_hours)
interval = float(args.interval)
device_tty = pebble_tty.find_dbgserial_tty()
serial = SerialPortWrapper(device_tty)
regex_voltage = "(?P<voltage>\d+)"
prog = re.compile(regex_voltage)
test_begin_time = time.time()
with open(args.output, 'w') as output_file:
# loop lasting length duration; gathers info at interval
while (time.time()-test_begin_time) < duration:
start = time.time()
# if prompt is obtained, perform actions
if get_prompt_loop(serial , args.retry):
# command voltage
prompt.issue_command(serial,'battery status')
# read
resp = serial.readline(0.1)
# close console
prompt.show_log(serial)
response = prog.search(resp)
current_time = time.time()
if response:
voltage = response.group()
if args.verbose:
date_time = time.strftime("%H:%M:%S", time.localtime(current_time))
print date_time + ": " + voltage + "mV"
if args.json_csv:
output_file.write(json.dumps([str(current_time), voltage]))
else:
output_file.write("%s, %s\n" % (str(current_time), voltage))
time_used = time.time() - start
counter = interval - time_used
if counter < 0:
counter = 0
time.sleep(counter)
# close off serial connections
prompt.go_to_prompt(serial)
prompt.show_log(serial)
serial.close()
if __name__ == '__main__':
# input duration to test for into main
main()