From: Leandro Lucarella Date: Wed, 14 Dec 2005 06:17:35 +0000 (+0000) Subject: Se mejora notablemente la interfaz de línea de comandos. X-Git-Tag: cliente-1.0~3 X-Git-Url: https://git.llucax.com/z.facultad/66.09/etherled.git/commitdiff_plain/1655c9d04f619f5160e6e4cc2a19f8143d140e6e Se mejora notablemente la interfaz de línea de comandos. --- diff --git a/cliente/cetherled.py b/cliente/cetherled.py index 0004cd8..bcba0cb 100755 --- a/cliente/cetherled.py +++ b/cliente/cetherled.py @@ -42,15 +42,29 @@ bindtextdomain(app_name, locale_dir) ROWS = 16 +usage = '''%%prog [opciones] comando [parámetros] +Cliente de etherled - versión %s + +Comandos: + gui Muestra una interfaz gráfica para dibujar la matriz. + Parámetro: cantidad de columnas a dibujar (default 16). + off Apaga el dispositivo. + pause Pausa el dibujado de la matriz. + continue Continúa el dibujado de la matriz. + paused Indica si el dispositivo está en pausa o dibujando. + get-matrix Imprime por pantalla la matriz cargada en el dispositivo. + get-delay Obtiene el retardo del refresco de dibujado. + set-delay Envía un nuevo retardo del refresco de dibujado al dispositivo. + Parámetro: nuevo retardo (entre 1 y 255). +''' % app_version + class MainWindow(SimpleGladeApp): def __init__(self, path="cetherled.glade", root="main_window", domain=app_name, **kwargs): self.columns = kwargs.get('columns', 16) - self.host = kwargs.get('host', 'localhost') - self.port = kwargs.get('port', 9876) + self.device = kwargs.get('dev') #notificar = Dispatcher(self.actualizar) - self.device = etherled.NetworkedDevice(self.host, self.port) path = os.path.join(glade_dir, path) SimpleGladeApp.__init__(self, path, root, domain, **kwargs) @@ -90,68 +104,88 @@ class MainWindow(SimpleGladeApp): def parse_options(): - parser = OptionParser(description="Cliente de etherled", - version="%prog " + app_version, prog='cetherled') + parser = OptionParser(usage=usage, version=app_version, prog=app_name) parser.add_option("-s", "--server", default='localhost', dest="host", metavar="HOSTNAME", help="Nombre/IP del host del dispositivo " "[default: localhost]") parser.add_option("-p", "--port", default=9876, metavar="PORT", type="int", help="Puerto UDP del dispositivo [default: 9876].") - parser.add_option("-c", "--columns", default=16, metavar="COLS", - type="int", help="Cantidad de columnas de la matriz [default: 16].") - parser.add_option("-g", "--gui", default=False, action="store_true", - help="Levanta la interfaz gráfica para dibujar la matriz") (opts, args) = parser.parse_args() return (parser, opts, args) def main(): (parser, opts, args) = parse_options() - if (opts.columns < 8) or (opts.columns > 32): - parser.error("El número de columnas debe estar entre 8 y 32.") - if opts.gui: + if len(args) < 1: + parser.error("Debe especificarse un comando.") + cmd = args[0] + dev = etherled.NetworkedDevice(opts.host, opts.port) + if cmd == 'gui': + cols = 16 + if len(args) == 2: + try: + cols = int(args[1]) + except ValueError: + parser.error("El parámetro debe ser un número entero.") + elif len(args) > 2: + parser.error("El comando lleva sólo 1 parámetro (opcional).") + if (cols < 8) or (cols > 32): + parser.error("El número de columnas debe estar entre 8 y 32.") gtk.threads_init() - main_window = MainWindow(columns=opts.columns, host=opts.host, - port=opts.port) + main_window = MainWindow(columns=cols, dev=dev) gtk.threads_enter() main_window.run() gtk.threads_leave() + elif cmd == 'get-matrix': + if len(args) != 1: + parser.error("El comando no lleva argumentos.") + etherled.protocol._print_matrix(dev.matrix) + elif cmd == 'paused': + if len(args) != 1: + parser.error("El comando no lleva argumentos.") + if dev.paused: + print "En pausa" + else: + print "Dibujando" + elif cmd == 'pause': + if len(args) != 1: + parser.error("El comando no lleva argumentos.") + dev.paused = True + elif cmd == 'continue': + if len(args) != 1: + parser.error("El comando no lleva argumentos.") + dev.paused = False + elif cmd == 'off': + if len(args) != 1: + parser.error("El comando no lleva argumentos.") + try: + dev.turn_off() + # Nos va a tirar un time-out porque no responde + except etherled.protocol.RecvError: + pass + elif cmd == 'get-delay': + if len(args) != 1: + parser.error("El comando no lleva argumentos.") + print dev.delay + elif cmd == 'set-delay': + if len(args) != 2: + parser.error("El comando lleva 1 argumento.") + try: + delay = int(args[1]) + except ValueError: + parser.error("El parámetro debe ser un entero entre 1 y 255.") + if (delay < 1) or (delay > 255): + parser.error("El parámetro debe ser un entero entre 1 y 255.") + dev.delay = delay else: - if len(args) < 2: - parser.error("Debe especificarse un comando si no se usa la GUI.") - type = args[0] - var = args[1] - dev = etherled.NetworkedDevice(opts.host, opts.port) - if type == 'get': - if len(args) > 2: - parser.error("El comando get no puede llevar argumentos.") - if var == 'matrix': - etherled.protocol._print_matrix(dev.matrix) - elif var == 'pause': - print dev.paused - elif var == 'delay': - print dev.delay - else: - parser.error("Variable desconocida, debe ser una de: " - "matrix, pause, delay.") - elif type == 'set': - if var == 'off': - dev.turn_off() - elif var == 'matrix': - parser.error("Use la GUI para enviar la matriz.") - elif var == 'pause': - dev.paused = True - elif var == 'continue': - dev.paused = False - elif var == 'delay': - if len(args) != 3: - parser.error("Delay lleva 1 argumento.") - dev.delay = int(args[2]) - else: - parser.error("Variable desconocida, debe ser una de: " - "off, pause, continue, delay.") + parser.error("Comando desconocido. Vea la ayuda con %prog -h.") if __name__ == '__main__': - main() + try: + main() + except etherled.protocol.RecvError, e: + import sys + print >>sys.stderr, 'Hubo un error al recibir el ACK (%s).' % e +