def main():
    LVPMSerialNo = 12000
    HVPMSerialNo = 65535
    #testLVPM(LVPMSerialNo,pmapi.USB_protocol())
    while (True):
        testHVPM(HVPMSerialNo, pmapi.USB_protocol())
        time.sleep(1)
Example #2
0
def testHVPM(serialno=None,Protocol=pmapi.USB_protocol()):
    HVMON = HVPM.Monsoon()
    HVMON.setup_usb(serialno,Protocol)
    print("HVPM Serial Number: " + repr(HVMON.getSerialNumber()))
    HVMON.fillStatusPacket()
    HVMON.setVout(3)
    HVengine = sampleEngine.SampleEngine(HVMON)
    #Output to CSV
    HVengine.enableCSVOutput("HV Main Example " + str(serialno) + ".csv")
    #Turning off periodic console outputs.
    HVengine.ConsoleOutput(True)

    #Setting all channels enabled
    HVengine.enableChannel(sampleEngine.channels.MainCurrent)
    HVengine.enableChannel(sampleEngine.channels.MainVoltage)
    #HVengine.enableChannel(sampleEngine.channels.USBCurrent)
    #HVengine.enableChannel(sampleEngine.channels.USBVoltage)
    #HVengine.enableChannel(sampleEngine.channels.AuxCurrent)
    HVengine.enableChannel(sampleEngine.channels.timeStamp)
    
    #Setting trigger conditions
    numSamples=sampleEngine.triggers.SAMPLECOUNT_INFINITE 
    HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN,0) 
    HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN,600)
    HVengine.setTriggerChannel(sampleEngine.channels.timeStamp) 

    #Actually start collecting samples
    HVengine.startSampling(numSamples)
    #startSampling() continues until the trigger conditions have been met, and then ends automatically.

    HVMON.closeDevice();
Example #3
0
def testHVPM(serialno=None, Protocol=pmapi.USB_protocol()):
    HVMON = HVPM.Monsoon()
    HVMON.setup_usb(serialno, Protocol)
    print("HVPM Serial Number: " + repr(HVMON.getSerialNumber()))
    HVMON.fillStatusPacket()
    HVMON.setVout(3)
    HVengine = sampleEngine.SampleEngine(HVMON)
    #Output to CSV
    HVengine.enableCSVOutput("HV Main Example.csv")
    #Turning off periodic console outputs.
    HVengine.ConsoleOutput(True)

    #Setting all channels enabled
    HVengine.enableChannel(sampleEngine.channels.MainCurrent)
    HVengine.enableChannel(sampleEngine.channels.MainVoltage)
    HVengine.enableChannel(sampleEngine.channels.USBCurrent)
    HVengine.enableChannel(sampleEngine.channels.USBVoltage)
    HVengine.enableChannel(sampleEngine.channels.AuxCurrent)
    HVengine.enableChannel(sampleEngine.channels.timeStamp)

    #Setting trigger conditions
    numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE
    HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN, 0)
    HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, 5)
    HVengine.setTriggerChannel(sampleEngine.channels.timeStamp)

    #Actually start collecting samples
    HVengine.startSampling(numSamples)
    #startSampling() continues until the trigger conditions have been met, and then ends automatically.
    #Measurements are automatically saved to the filename passed in enableCSVOutput()

    #Disable CSV Output
    HVengine.disableCSVOutput()
    #Collect another 5 seconds worth of samples
    HVengine.startSampling(numSamples)
    #Get those samples as a Python list
    samples = HVengine.getSamples()
    #Samples has the format  [[timestamp], [mainCurrent], [usbCurrent], [auxCurrent], [mainVolts],[usbVolts]]
    #Use sampleEngine.channel to select the appropriate list index.
    timestamp = samples[sampleEngine.channels.timeStamp]
    mainCurrent = samples[sampleEngine.channels.MainCurrent]
    auxCurrent = samples[sampleEngine.channels.AuxCurrent]
    usbCurrent = samples[sampleEngine.channels.USBCurrent]
    mainVoltage = samples[sampleEngine.channels.MainVoltage]
    usbVoltage = samples[sampleEngine.channels.USBVoltage]

    #Perform analysis on the resulting data.  For example, in order to calculate, perform the following:
    #mainCurrent is given in mA.  Divide by 1000 to convert to Amps
    scaledMainCurrent = [x / 1000 for x in mainCurrent]
    #Element-wise multiply to produce Watts. Power = Current * Voltage.
    mainPower = np.multiply(scaledMainCurrent, mainVoltage)

    #When finished, close the device.
    HVMON.closeDevice()
def testLVPM(serialno=None, Protcol=pmapi.USB_protocol()):
    Mon = LVPM.Monsoon()
    Mon.setup_usb(serialno, Protcol)
    print("LVPM Serial number: " + repr(Mon.getSerialNumber()))
    Mon.fillStatusPacket()
    Mon.setVout(4)
    engine = sampleEngine.SampleEngine(Mon)
    engine.enableCSVOutput("Main Example.csv")
    engine.ConsoleOutput(True)
    #test main channels
    testTime = 2
    numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE  #Don't stop based on sample count, continue until the trigger conditions have been satisfied.
    engine.setStartTrigger(sampleEngine.triggers.GREATER_THAN,
                           0)  #Start when we exceed 0 s
    engine.setStopTrigger(sampleEngine.triggers.GREATER_THAN,
                          testTime)  #Stop when we exceed 5 s.
    engine.setTriggerChannel(
        sampleEngine.channels.timeStamp
    )  #Start and stop judged by the timestamp channel.
    engine.startSampling(numSamples)
    engine.disableChannel(sampleEngine.channels.MainCurrent)
    engine.disableChannel(sampleEngine.channels.MainVoltage)

    #Disable Main channels
    #engine.disableChannel(sampleEngine.channels.MainCurrent)
    #engine.disableChannel(sampleEngine.channels.MainVoltage)

    #engine.setStartTrigger(sampleEngine.triggers.GREATER_THAN,5)
    #engine.setStopTrigger(sampleEngine.triggers.GREATER_THAN,10)
    #engine.setTriggerChannel(sampleEngine.channels.timeStamp)
    #Take measurements from the USB Channel
    #Mon.setVout(0)
    #Set USB Passthrough mode to 'on,' since it defaults to 'auto' and will turn off when sampling mode begins.
    #Mon.setUSBPassthroughMode(op.USB_Passthrough.On)
    #Enable USB channels
    #engine.enableChannel(sampleEngine.channels.USBCurrent)
    #engine.enableChannel(sampleEngine.channels.USBVoltage)
    #engine.enableCSVOutput("USB Test.csv")
    #engine.startSampling(5000)

    #Enable every channel, take measurements
    #engine.enableChannel(sampleEngine.channels.MainVoltage)
    #engine.enableChannel(sampleEngine.channels.MainCurrent)
    #Enable Aux channel
    #engine.enableChannel(sampleEngine.channels.AuxCurrent)
    #Mon.setVout(4.3)
    #engine.enableCSVOutput("All Test.csv")
    #engine.startSampling(5000)

    #Enable every channel, take measurements, and retrieve them as a Python list.
    #engine.disableCSVOutput()
    #engine.startSampling(5000)
    #samples = engine.getSamples()
    Mon.closeDevice()
Example #5
0
def testCSVOutput(serialno=None, Protocol=pmapi.USB_protocol()):
    """Test case 2:
    CSV Output."""
    #Setting all channels enabled
    Mon = HVPM.Monsoon()
    Mon.setup_usb(serialno, Protocol)
    Engine = sampleEngine.SampleEngine(Mon)
    Engine.ConsoleOutput(False)
    Engine.enableChannel(sampleEngine.channels.MainCurrent)
    Engine.enableChannel(sampleEngine.channels.MainVoltage)
    Engine.enableChannel(sampleEngine.channels.USBCurrent)
    Engine.enableChannel(sampleEngine.channels.USBVoltage)
    Engine.enableChannel(sampleEngine.channels.AuxCurrent)
    Engine.enableChannel(sampleEngine.channels.timeStamp)
    Engine.enableCSVOutput("Test3.csv")
    Engine.startSampling(
        3000000, 100)  #Collect 10 minutes worth of samples a 1/100 granularity
    Mon.closeDevice()
Example #6
0
def testHVPM(serialno=None, Protocol=pmapi.USB_protocol()):
    HVMON = HVPM.Monsoon()
    HVMON.setup_usb(serialno, Protocol)
    print("HVPM Serial Number: " + repr(HVMON.getSerialNumber()))
    HVMON.fillStatusPacket()
    HVMON.setVout(3)
    HVengine = sampleEngine.SampleEngine(HVMON)
    HVengine.enableCSVOutput("HV Main Example.csv")
    HVengine.ConsoleOutput(True)
    numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE  #Don't stop based on sample count, continue until the trigger conditions have been satisfied.
    HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN,
                             0)  #Start when we exceed 0 s
    HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN,
                            5)  #Stop when we exceed 5 s.
    HVengine.setTriggerChannel(
        sampleEngine.channels.timeStamp
    )  #Start and stop judged by the timestamp channel.
    HVengine.startSampling(numSamples)
    HVMON.closeDevice()
Example #7
0
    def setup_monsoon(self):
        """Set up monsoon HVPM.

        Args:
            voltage: Voltage output of the power monitor.
            serial: serial number of the power monitor.
        """
        click.secho("Setting up Monsoon {} with {}V...".format(
            self.serial, self.voltage),
                    fg='blue')
        self.monsoon = HVPM.Monsoon()
        self.monsoon.setup_usb(self.serial, pmapi.USB_protocol())
        set_voltage_if_different(self.monsoon, self.voltage)
        self.engine = SampleEngine(self.monsoon)
        self.engine.ConsoleOutput(False)

        if android.is_android_device_available():
            android.reconnect_adb_through_usb()
        self.monsoon_usb_enabled(True)
Example #8
0
def testDisconnectBug(serialno=None, Protocol=pmapi.USB_protocol()):
    """Test for start sampling disconnect bug.
    This is the normal use case for customers who encounter the bug.
    In an ideal solution, it will pass."""
    Mon = HVPM.Monsoon()
    Mon.setup_usb(serialno, Protocol)
    Engine = sampleEngine.SampleEngine(Mon)
    Engine.ConsoleOutput(False)
    i = 0
    for i in range(5000):
        i += 1
        try:
            Engine.startSampling(10)
            print(i)
        except usb.core.USBError as e:
            print("Expected error hit.  Reconnecting")
            print(e.backend_error_code)
            Mon.Reconnect()
            Mon.stopSampling()
    Mon.closeDevice()
Example #9
0
def testDisconnectBugSevere(serialno=None, Protocol=pmapi.USB_protocol()):
    """This will force the disconnect bug to occur in a short period of time.
    This one doesn't necessarily need to pass, but an ideal fix would allow it to do so."""
    Mon = HVPM.Monsoon()
    Mon.setup_usb(serialno, Protocol)
    Engine = sampleEngine.SampleEngine(Mon)
    Engine.ConsoleOutput(False)
    i = 0
    for i in range(5000):
        i += 1
        try:
            Mon.StartSampling()
            Mon.stopSampling()
            print(i)
        except usb.core.USBError as e:
            print("Expected error hit.  Reconnecting")
            print(e.backend_error_code)
            Mon.Reconnect()
            Mon.stopSampling()

    Mon.closeDevice()
Example #10
0
def testListOutput(serialno=None, Protocol=pmapi.USB_protocol()):
    """Test case 1.
    Basic connection, outputs as a Python list."""
    Mon = HVPM.Monsoon()
    Mon.setup_usb(serialno, Protocol)
    Engine = sampleEngine.SampleEngine(Mon)
    Engine.ConsoleOutput(False)
    numSamples = 5000
    Engine.startSampling(numSamples)
    samples = Engine.getSamples()

    timestamp = samples[sampleEngine.channels.timeStamp]
    mainCurrent = samples[sampleEngine.channels.MainCurrent]
    auxCurrent = samples[sampleEngine.channels.AuxCurrent]
    usbCurrent = samples[sampleEngine.channels.USBCurrent]
    mainVoltage = samples[sampleEngine.channels.MainVoltage]
    usbVoltage = samples[sampleEngine.channels.USBVoltage]

    #Do something with this information

    pass
Example #11
0
def testVoltageBug(serialno=None, Protocol=pmapi.USB_protocol()):
    """If a command is sent to the Power Monitor to setVout while it is in sample mode, there is a high probability the voltage will be set to a random value, and the unit will crash.
    During normal operation, this can occur if setVout is called immediately after stopSampling().  Depending on the timing, the unit might not actually be out of sample mode when the setVout command is received."""
    Mon = HVPM.Monsoon()
    Mon.setup_usb(serialno, Protocol)
    Engine = sampleEngine.SampleEngine(Mon)
    Engine.ConsoleOutput(False)
    i = 0
    reconnects = 0
    Mon.setVout(0.8)
    for i in range(5000):
        i += 1
        Engine.startSampling(50)
        Mon.setVout(0.8)
        samples = Engine.getSamples()
        voltage = np.array(samples[sampleEngine.channels.MainVoltage])
        if (np.any(voltage > 1.0)):
            #Here we're checking to see if there's a condition where it didn't fail, but the voltage is still wrong.
            #This should probably never happen, but let's be sure about that.
            print("Error, voltage is wrong")
            assert (False)
        print(i)
    Mon.closeDevice()
Example #12
0
def initLVPM(serialno=None, Protcol=pmapi.USB_protocol()):
    Mon = LVPM.Monsoon()
    Mon.setup_usb(serialno, Protcol)
    print("LVPM Serial number: " + str(serialno))
    Mon.fillStatusPacket()
    Mon.setVout(4)

    timetoBoot = 150
    iterationsPerScenario = 30

    print("Voltage enabled")
    print(
        "You have %d seconds to boot your phone, disable USB charging and check it is correctly detected (under adb "
        "devices) before measurements start." % timetoBoot)

    timer = timetoBoot - 1
    while timer > -1:
        print("%d seconds remaining." % timer)
        sys.stdout.write("\033[F")  # Cursor up one line
        timer -= 1
        time.sleep(1)

    launchMeasurements(Mon, iterationsPerScenario)
Example #13
0
def main():
    LVPMSerialNo = 60001
    HVPMSerialNo = 60000
    testLVPM(LVPMSerialNo, pmapi.USB_protocol())
    testHVPM(HVPMSerialNo, pmapi.USB_protocol())
Example #14
0
def power_on(serial_no=None, protocol=pmapi.USB_protocol()):
    Mon = LVPM.Monsoon()
    Mon.setup_usb(serial_no, protocol)
    print("LVPM Serial number: " + repr(Mon.getSerialNumber()))
    Mon.fillStatusPacket()
    Mon.setVout(4.2)
Example #15
0
def main():
    LVPMSerialNo = 12431
    initLVPM(LVPMSerialNo, pmapi.USB_protocol())
Example #16
0
def main():
    serialnos = [20125, 20124, 20480, 21000]
    for serial in serialnos:
        p = Process(target=testHVPM,args=(serial,pmapi.USB_protocol()))
        p.start()
Example #17
0
 def setup_usb(self,serialno=None,Protocol=pmapi.USB_protocol()):
     Protocol.Connect(op.HardwareModel.HVPM,serialno)
     self.Protocol = Protocol
Example #18
0
 def enumerateDevices(self):
     temp = pmapi.USB_protocol()
     return temp.enumerateDevices()
def testHVPM(serialno=None, Protocol=pmapi.USB_protocol()):
    HVMON = HVPM.Monsoon()
    HVMON.setup_usb(serialno, Protocol)
    print("HVPM Serial Number: " + repr(HVMON.getSerialNumber()))
    HVMON.setPowerUpCurrentLimit(8)
    HVMON.setRunTimeCurrentLimit(8)
    HVMON.fillStatusPacket()
    #HVMON.calibrateVoltage()
    HVMON.setVout(1)
    HVengine = sampleEngine.SampleEngine(HVMON)
    #Output to CSV
    #HVengine.enableCSVOutput("HV Main Example2.csv")
    #Turning off periodic console outputs.
    HVengine.ConsoleOutput(True)

    #Setting all channels enabled
    HVengine.enableChannel(sampleEngine.channels.MainCurrent)
    HVengine.enableChannel(sampleEngine.channels.MainVoltage)
    #HVengine.enableChannel(sampleEngine.channels.USBCurrent)
    #HVengine.enableChannel(sampleEngine.channels.USBVoltage)
    #HVengine.enableChannel(sampleEngine.channels.AuxCurrent)
    #HVengine.enableChannel(sampleEngine.channels.timeStamp)

    #Setting trigger conditions
    numSamples = sampleEngine.triggers.SAMPLECOUNT_INFINITE

    HVengine.setStartTrigger(sampleEngine.triggers.GREATER_THAN, 0)
    HVengine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, 60)
    HVengine.setTriggerChannel(sampleEngine.channels.timeStamp)

    #Actually start collecting samples
    HVengine.startSampling(numSamples, 1)

    #startSampling() continues until the trigger conditions have been met, and then ends automatically.
    #Measurements are automatically saved to the filename passed in enableCSVOutput()

    #Disable CSV Output
    #HVengine.disableCSVOutput()
    #Collect another 5 seconds worth of samples
    #HVengine.startSampling(numSamples)
    #Get those samples as a Python list
    #samples = HVengine.getSamples()
    #Samples has the format  [[timestamp], [mainCurrent], [usbCurrent], [auxCurrent], [mainVolts],[usbVolts]]
    #Use sampleEngine.channel to select the appropriate list index.
    #timestamp = samples[sampleEngine.channels.timeStamp]
    #mainCurrent = samples[sampleEngine.channels.MainCurrent]
    #auxCurrent = samples[sampleEngine.channels.AuxCurrent]
    #usbCurrent = samples[sampleEngine.channels.USBCurrent]
    #mainVoltage = samples[sampleEngine.channels.MainVoltage]
    #usbVoltage = samples[sampleEngine.channels.USBVoltage]

    #Perform analysis on the resulting data.  For example, in order to calculate, perform the following:
    #mainCurrent is given in mA.  Divide by 1000 to convert to Amps
    #scaledMainCurrent = [x / 1000 for x in mainCurrent]
    #Element-wise multiply to produce Watts. Power = Current * Voltage.
    #mainPower = np.multiply(scaledMainCurrent, mainVoltage)

    #When finished, close the device.
    #print("Firmware version: ", HVMON.statusPacket.firmwareVersion)
    #print("auxCoarseOffset: ", HVMON.statusPacket.auxCoarseResistorOffset)
    #print("auxCoarseScale: ", HVMON.statusPacket.auxCoarseScale)
    #print("auxFineOffset: ", HVMON.statusPacket.auxFineResistorOffset)
    #print("auxFineScale: ", HVMON.statusPacket.auxFineScale)
    print("dacCalHigh: ", HVMON.statusPacket.dacCalHigh)
    print("dacCalLow: ", HVMON.statusPacket.dacCalLow)
    #print("hardwareModel: ", HVMON.statusPacket.hardwareModel)
    #print("mainCoarseOffset: ", HVMON.statusPacket.mainCoarseResistorOffset)
    #print("mainCoarseScale: ", HVMON.statusPacket.mainCoarseScale)
    #print("mainCoarseZeroOffset: ", HVMON.statusPacket.mainCoarseZeroOffset)
    #print("mainFineResistorOffset: ", HVMON.statusPacket.mainFineResistorOffset)
    #print("mainFineScale: ", HVMON.statusPacket.mainFineScale)
    #print("mainFineZeroOffset: ", HVMON.statusPacket.mainFineZeroOffset)
    print("powerupCurrentLimit: ", HVMON.statusPacket.powerupCurrentLimit)
    #print("powerupTime: ", HVMON.statusPacket.powerupTime)
    #print("protocolVersion: ", HVMON.statusPacket.protocolVersion)
    print("runtimeCurrentLimit: ", HVMON.statusPacket.runtimeCurrentLimit)
    print("serialNumber: ", HVMON.statusPacket.serialNumber)
    #print("temperature: ", HVMON.statusPacket.temperature)
    #print("temperatureLimit: ", HVMON.statusPacket.temperatureLimit)
    #print("usbCoarseResistorOffset: ", HVMON.statusPacket.usbCoarseResistorOffset)
    #print("usbCoarseScale: ", HVMON.statusPacket.usbCoarseScale)
    #print("usbCoarseZeroOffset: ", HVMON.statusPacket.usbCoarseZeroOffset)
    #print("usbFineResistorOffset: ", HVMON.statusPacket.usbFineResistorOffset)
    #print("usbFineScale: ", HVMON.statusPacket.usbFineScale)
    #print("usbFineZeroOffset: ", HVMON.statusPacket.usbFineZeroOffset)
    #print("usbPassthroughMode: ", HVMON.statusPacket.usbPassthroughMode)
    HVMON.closeDevice()
Example #20
0
    engine.setStopTrigger(sampleEngine.triggers.GREATER_THAN, 10)
    engine.setTriggerChannel(sampleEngine.channels.timeStamp)
    #Take measurements from the USB Channel
    Mon.setVout(0)
    #Set USB Passthrough mode to 'on,' since it defaults to 'auto' and will turn off when sampling mode begins.
    Mon.setUSBPassthroughMode(op.USB_Passthrough.On)
    #Enable USB channels
    engine.enableChannel(sampleEngine.channels.USBCurrent)
    engine.enableChannel(sampleEngine.channels.USBVoltage)
    engine.enableCSVOutput("USB Test.csv")
    engine.startSampling(5000)

    #Enable every channel, take measurements
    engine.enableChannel(sampleEngine.channels.MainVoltage)
    engine.enableChannel(sampleEngine.channels.MainCurrent)
    #Enable Aux channel
    engine.enableChannel(sampleEngine.channels.AuxCurrent)
    Mon.setVout(2.5)
    engine.enableCSVOutput("All Test.csv")
    engine.startSampling(5000)

    #Enable every channel, take measurements, and retrieve them as a Python list.
    engine.disableCSVOutput()
    engine.startSampling(5000)
    samples = engine.getSamples()
    Mon.closeDevice()


testLVPM(60001, pmapi.USB_protocol())
testHVPM(60000, pmapi.CPP_Backend_Protocol())