blob: be4d6e8e1fc57432a10e8deb7eb62d6436fbe46b [file] [log] [blame]
#!/usr/bin/env python3.4
#
# Copyright 2016 - 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 sys
import time
import collections
from acts.controllers.monsoon import Monsoon
def main(FLAGS):
"""Simple command-line interface for Monsoon."""
if FLAGS.avg and FLAGS.avg < 0:
print("--avg must be greater than 0")
return
mon = Monsoon(serial=int(FLAGS.serialno[0]))
if FLAGS.voltage is not None:
mon.set_voltage(FLAGS.voltage)
if FLAGS.current is not None:
mon.set_max_current(FLAGS.current)
if FLAGS.status:
items = sorted(mon.status.items())
print("\n".join(["%s: %s" % item for item in items]))
if FLAGS.usbpassthrough:
mon.usb(FLAGS.usbpassthrough)
if FLAGS.startcurrent is not None:
mon.set_max_init_current(FLAGS.startcurrent)
if FLAGS.samples:
# Have to sleep a bit here for monsoon to be ready to lower the rate of
# socket read timeout.
time.sleep(1)
result = mon.take_samples(FLAGS.hz, FLAGS.samples,
sample_offset=FLAGS.offset, live=True)
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/inital 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"))
args = parser.parse_args()
main(args)