diff --git a/.vscode/launch.json b/.vscode/launch.json index 85e35ba..b3d3934 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -204,7 +204,7 @@ "request": "launch", "module": "meshtastic", "justMyCode": false, - "args": ["--slog", "--power-ppk2-meter", "--power-stress", "--power-voltage", "3.3", "--seriallog", "--ble"] + "args": ["--slog", "--power-ppk2-supply", "--power-stress", "--power-voltage", "3.3", "--seriallog", "--ble"] }, { "name": "meshtastic test", diff --git a/meshtastic/__main__.py b/meshtastic/__main__.py index 1bcfd56..d9e3517 100644 --- a/meshtastic/__main__.py +++ b/meshtastic/__main__.py @@ -1009,24 +1009,34 @@ def create_power_meter(): global meter # pylint: disable=global-statement args = mt_config.args + + # If the user specified a voltage, make sure it is valid + v = 0.0 + if args.power_voltage: + v = float(args.power_voltage) + if v < 0.8 or v > 5.0: + meshtastic.util.our_exit("Voltage must be between 0.8 and 5.0") + if args.power_riden: meter = RidenPowerSupply(args.power_riden) elif args.power_ppk2_supply or args.power_ppk2_meter: meter = PPK2PowerSupply() + assert v > 0, "Voltage must be specified for PPK2" + meter.v = v # PPK2 requires setting voltage before selecting supply mode meter.setIsSupply(args.power_ppk2_supply) elif args.power_sim: meter = SimPowerSupply() - if meter and args.power_voltage: - v = float(args.power_voltage) - if v < 0.5 or v >5.0: - meshtastic.util.our_exit("Voltage must be between 1.0 and 5.0") + if meter and v: logging.info(f"Setting power supply to {v} volts") meter.v = v meter.powerOn() if args.power_wait: input("Powered on, press enter to continue...") + else: + logging.info("Powered-on, waiting for device to boot") + time.sleep(5) def common(): """Shared code for all of our command line wrappers.""" diff --git a/meshtastic/powermon/ppk2.py b/meshtastic/powermon/ppk2.py index de400b9..1f4d45d 100644 --- a/meshtastic/powermon/ppk2.py +++ b/meshtastic/powermon/ppk2.py @@ -118,9 +118,11 @@ class PPK2PowerSupply(PowerSupply): self.measurement_thread.join() # wait for our thread to finish super().close() - def setIsSupply(self, s: bool): + def setIsSupply(self, is_supply: bool): """If in supply mode we will provide power ourself, otherwise we are just an amp meter.""" + assert self.v > 0.8 # We must set a valid voltage before calling this method + self.r.set_source_voltage( int(self.v * 1000) ) # set source voltage in mV BEFORE setting source mode @@ -130,7 +132,7 @@ class PPK2PowerSupply(PowerSupply): self.r.start_measuring() # send command to ppk2 if ( - not s + not is_supply ): # min power outpuf of PPK2. If less than this assume we want just meter mode. self.r.use_ampere_meter() else: