Home | History | Annotate | Download | only in bin
      1 #!/usr/bin/env python3.4
      2 #
      3 #   Copyright 2016 - The Android Open Source Project
      4 #
      5 #   Licensed under the Apache License, Version 2.0 (the "License");
      6 #   you may not use this file except in compliance with the License.
      7 #   You may obtain a copy of the License at
      8 #
      9 #       http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 #   Unless required by applicable law or agreed to in writing, software
     12 #   distributed under the License is distributed on an "AS IS" BASIS,
     13 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 #   See the License for the specific language governing permissions and
     15 #   limitations under the License.
     16 
     17 """Interface for a USB-connected Monsoon power meter
     18 (http://msoon.com/LabEquipment/PowerMonitor/).
     19 """
     20 
     21 import argparse
     22 import sys
     23 import time
     24 import collections
     25 
     26 from acts.controllers.monsoon import Monsoon
     27 
     28 def main(FLAGS):
     29     """Simple command-line interface for Monsoon."""
     30     if FLAGS.avg and FLAGS.avg < 0:
     31         print("--avg must be greater than 0")
     32         return
     33 
     34     mon = Monsoon(serial=int(FLAGS.serialno[0]))
     35 
     36     if FLAGS.voltage is not None:
     37         mon.set_voltage(FLAGS.voltage)
     38 
     39     if FLAGS.current is not None:
     40         mon.set_max_current(FLAGS.current)
     41 
     42     if FLAGS.status:
     43         items = sorted(mon.status.items())
     44         print("\n".join(["%s: %s" % item for item in items]))
     45 
     46     if FLAGS.usbpassthrough:
     47         mon.usb(FLAGS.usbpassthrough)
     48 
     49     if FLAGS.startcurrent is not None:
     50          mon.set_max_init_current(FLAGS.startcurrent)
     51 
     52     if FLAGS.samples:
     53         # Have to sleep a bit here for monsoon to be ready to lower the rate of
     54         # socket read timeout.
     55         time.sleep(1)
     56         result = mon.take_samples(FLAGS.hz, FLAGS.samples,
     57             sample_offset=FLAGS.offset, live=True)
     58         print(repr(result))
     59 
     60 if __name__ == '__main__':
     61     parser = argparse.ArgumentParser(description=("This is a python utility "
     62                  "tool to control monsoon power measurement boxes."))
     63     parser.add_argument("--status", action="store_true",
     64         help="Print power meter status.")
     65     parser.add_argument("-avg", "--avg", type=int, default=0,
     66         help="Also report average over last n data points.")
     67     parser.add_argument("-v", "--voltage", type=float,
     68         help="Set output voltage (0 for off)")
     69     parser.add_argument("-c", "--current", type=float,
     70         help="Set max output current.")
     71     parser.add_argument("-sc", "--startcurrent", type=float,
     72         help="Set max power-up/inital current.")
     73     parser.add_argument("-usb", "--usbpassthrough", choices=("on", "off",
     74         "auto"), help="USB control (on, off, auto).")
     75     parser.add_argument("-sp", "--samples", type=int,
     76         help="Collect and print this many samples")
     77     parser.add_argument("-hz", "--hz", type=int,
     78         help="Sample this many times per second.")
     79     parser.add_argument("-d", "--device", help="Use this /dev/ttyACM... file.")
     80     parser.add_argument("-sn", "--serialno", type=int, nargs=1, required=True,
     81         help="The serial number of the Monsoon to use.")
     82     parser.add_argument("--offset", type=int, nargs='?', default=0,
     83         help="The number of samples to discard when calculating average.")
     84     parser.add_argument("-r", "--ramp", action="store_true", help=("Gradually "
     85         "increase voltage to prevent tripping Monsoon overvoltage"))
     86     args = parser.parse_args()
     87     main(args)
     88