blob: a76b425dd9fe168d04d0111951c993a37a6a6d62 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2019 - 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.
"""Interface for a USB-connected Monsoon power meter
(http://msoon.com/LabEquipment/PowerMonitor/).
"""
import argparse
import acts.controllers.monsoon as monsoon_controller
def main(args):
"""Simple command-line interface for Monsoon."""
if args.avg and args.avg < 0:
print('--avg must be greater than 0')
return
mon = monsoon_controller.create([int(args.serialno[0])])[0]
if args.voltage is not None:
mon.set_voltage(args.voltage)
if args.current is not None:
mon.set_max_current(args.current)
if args.status:
items = sorted(mon.status.items())
print('\n'.join(['%s: %s' % item for item in items]))
if args.usbpassthrough:
mon.usb(args.usbpassthrough)
if args.startcurrent is not None:
mon.set_max_initial_current(args.startcurrent)
if args.samples:
result = mon.measure_power(
args.samples / args.hz,
measure_after_seconds=args.offset,
hz=args.hz,
output_path='monsoon_output.txt')
print(repr(result))
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='This is a python utility tool to control monsoon power '
'measurement boxes.')
parser.add_argument(
'--status', action='store_true', help='Print power meter status.')
parser.add_argument(
'-avg',
'--avg',
type=int,
default=0,
help='Also report average over last n data points.')
parser.add_argument(
'-v', '--voltage', type=float, help='Set output voltage (0 for off)')
parser.add_argument(
'-c', '--current', type=float, help='Set max output current.')
parser.add_argument(
'-sc',
'--startcurrent',
type=float,
help='Set max power-up/initial current.')
parser.add_argument(
'-usb',
'--usbpassthrough',
choices=('on', 'off', 'auto'),
help='USB control (on, off, auto).')
parser.add_argument(
'-sp',
'--samples',
type=int,
help='Collect and print this many samples')
parser.add_argument(
'-hz', '--hz', type=int, help='Sample this many times per second.')
parser.add_argument('-d', '--device', help='Use this /dev/ttyACM... file.')
parser.add_argument(
'-sn',
'--serialno',
type=int,
nargs=1,
required=True,
help='The serial number of the Monsoon to use.')
parser.add_argument(
'--offset',
type=int,
nargs='?',
default=0,
help='The number of samples to discard when calculating average.')
parser.add_argument(
'-r',
'--ramp',
action='store_true',
help='Gradually increase voltage to prevent tripping Monsoon '
'overvoltage.')
arguments = parser.parse_args()
main(arguments)