]> git.llucax.com Git - z.facultad/66.09/etherled.git/commitdiff
Se mejora notablemente la interfaz de línea de comandos.
authorLeandro Lucarella <llucax@gmail.com>
Wed, 14 Dec 2005 06:17:35 +0000 (06:17 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Wed, 14 Dec 2005 06:17:35 +0000 (06:17 +0000)
cliente/cetherled.py

index 0004cd8b353d3cda1ebc32c012e05f61b52671a8..bcba0cb1e9f32cc9b9008d2d1be44049c5105b3d 100755 (executable)
@@ -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
+