in benchmarking/utils/monsoon_power.py [0:0]
def collectPowerData(hash, sample_time, voltage, num_iters, monsoon_map=None):
serialno = _getSerialno(hash, monsoon_map)
if serialno is not None:
getLogger().info(
"Collecting current from monsoon {} for {}".format(str(serialno), hash)
)
# wait till all actions are performed
sleep(1)
Mon = HVPM.Monsoon()
Mon.setup_usb(serialno)
# Need to sleep to be functional correctly
sleep(0.2)
getLogger().info("Setup Vout")
Mon.setVout(voltage)
getLogger().info("Setup setPowerupTime")
Mon.setPowerupTime(60)
getLogger().info("Setup setPowerUpCurrentLimit")
Mon.setPowerUpCurrentLimit(14)
getLogger().info("Setup setRunTimeCurrentLimit")
Mon.setRunTimeCurrentLimit(14)
# main channel
getLogger().info("Setup setVoltageChannel")
Mon.setVoltageChannel(0)
engine = sampleEngine.SampleEngine(Mon)
getLogger().info("Setup enableCSVOutput")
# we may leak the file content
f = tempfile.NamedTemporaryFile(delete=False)
f.close()
filename = f.name
engine.enableCSVOutput(filename)
getLogger().info("Setup ConsoleOutput")
engine.ConsoleOutput(False)
sleep(1)
# 200 us per sample
num_samples = sample_time / 0.0002
getLogger().info("startSampling on {}".format(filename))
engine.startSampling(num_samples)
engine.disableCSVOutput()
getLogger().info("Written power data to file: {}".format(filename))
# retrieve statistics from the power data
getLogger().info("Reading data from CSV file")
power_data = _getPowerData(filename)
getLogger().info(
"Calculating the benchmark data range from "
"{} data points".format(len(power_data))
)
start_idx, end_idx = _calculatePowerDataRange(power_data)
getLogger().info("Collecting data from " "{} to {}".format(start_idx, end_idx))
getLogger().info(
"Benchmark time: "
"{} - {} s".format(power_data[start_idx]["time"], power_data[end_idx]["time"])
)
data = _retrievePowerData(power_data, start_idx, end_idx, num_iters)
data["power_data"] = filename
return data