From 9ee0cdac3b74e5442b7d56dc73918e0cc8b878d8 Mon Sep 17 00:00:00 2001 From: Andrea Mistrali Date: Tue, 2 May 2023 15:13:05 +0200 Subject: [PATCH] Better CLI --- README.md | 3 +-- pulses-cli.py | 15 +++++++++++++++ pulses/cli.py | 28 ++++++++++++++++++++++------ 3 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 pulses-cli.py diff --git a/README.md b/README.md index 135ae7f..814b6af 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,7 @@ Pulses is a python module to drive LEDs on RPi using PWM (Pulse Width Modulation) - -### INSTALL +### BUILD 1. Clone the repo diff --git a/pulses-cli.py b/pulses-cli.py new file mode 100644 index 0000000..ec14eff --- /dev/null +++ b/pulses-cli.py @@ -0,0 +1,15 @@ +#! /usr/bin/env python3 +# -*- coding: utf-8 -*- +# vim:fenc=utf-8 +# +# Copyright © 2023 andre +# +# Distributed under terms of the MIT license. + +""" + +""" + +from pulses import cli + +cli.main() diff --git a/pulses/cli.py b/pulses/cli.py index 2b98bf0..333b911 100644 --- a/pulses/cli.py +++ b/pulses/cli.py @@ -7,9 +7,9 @@ Usage: Options: -g --gpio= GPIO to use [default: 12] - -i --initial= Initial method + -i --initial= Initial method [default: linear] -l --loop= Loop method [default: sin] - -f --final= Final method + -f --final= Final method [default: linear] -d --delay= Delay method [default: constant] -m --min= Minimum value [default: 2] @@ -34,11 +34,16 @@ logging.basicConfig(format="%(name)s %(msg)s", stream=sys.stdout) def signal_handler(sig, frame): - print('bailing out...') + print('stopping pulse...', end="", flush=True) + led.stop() + led.join() + print('done.\nBailing out') sys.exit(0) def main(): + global led + args = docopt(__doc__, version=f'pulses {VERSION}') signal.signal(signal.SIGINT, signal_handler) @@ -48,9 +53,21 @@ def main(): log.setLevel('DEBUG') log.info('setting verbose mode') + led = ledPulse(int(args.get('--gpio'))) + params = {} - for method in ['initial', 'loop', 'final', 'delay']: - params[f"{method}Method"] = args.get(f"--{method}") + for method in ['initial', 'loop', 'final']: + methodName = args.get(f"--{method}") + if methodName not in led.valueMethods: + print(f"error: no value method '{methodName}' defined") + sys.exit(1) + params[f"{method}Method"] = methodName + + methodName = args.get("--delay") + if methodName not in led.delayMethods: + print(f"error: no delay method '{methodName}' defined") + sys.exit(1) + params['delayMethod'] = methodName params['min'] = int(args.get('--min')) params['max'] = int(args.get('--max')) @@ -62,7 +79,6 @@ def main(): print("\n> loop parameters") for param, value in params.items(): print(f" {param}: {value}") - led = ledPulse(int(args.get('--gpio'))) led.set(**params) print('\nstarting loop, press Ctrl-C to stop...') led.start()