2 # -*- coding: utf-8 -*-
3 # vim: set expandtab tabstop=4 shiftwidth=4 :
4 #----------------------------------------------------------------------------
6 #----------------------------------------------------------------------------
7 # This file is part of etherled.
9 # etherled is free software; you can redistribute it and/or modify it
10 # under the terms of the GNU General Public License as published by the Free
11 # Software Foundation; either version 2 of the License, or (at your option)
14 # etherled is distributed in the hope that it will be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
19 # You should have received a copy of the GNU General Public License along
20 # with etherled; if not, write to the Free Software Foundation, Inc., 59
21 # Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #----------------------------------------------------------------------------
23 # Creado: vie oct 27 22:16:20 ART 2005
24 # Autores: Leandro Lucarella <llucare@fi.uba.ar>
25 #----------------------------------------------------------------------------
29 from simplegladeapp import SimpleGladeApp
30 from simplegladeapp import bindtextdomain
31 from optparse import OptionParser
32 #from dispatcher import Dispatcher
36 app_name = "cetherled"
41 bindtextdomain(app_name, locale_dir)
45 usage = '''%%prog [opciones] comando [parámetros]
46 Cliente de etherled - versión %s
49 gui Muestra una interfaz gráfica para dibujar la matriz.
50 Parámetro: cantidad de columnas a dibujar (default 16).
51 off Apaga el dispositivo.
52 pause Pausa el dibujado de la matriz.
53 continue Continúa el dibujado de la matriz.
54 paused Indica si el dispositivo está en pausa o dibujando.
55 get-matrix Imprime por pantalla la matriz cargada en el dispositivo.
56 get-delay Obtiene el retardo del refresco de dibujado.
57 set-delay Envía un nuevo retardo del refresco de dibujado al dispositivo.
58 Parámetro: nuevo retardo (entre 1 y 255).
61 class MainWindow(SimpleGladeApp):
63 def __init__(self, path="cetherled.glade", root="main_window",
64 domain=app_name, **kwargs):
65 self.columns = kwargs.get('columns', 16)
66 self.device = kwargs.get('dev')
67 #notificar = Dispatcher(self.actualizar)
68 path = os.path.join(glade_dir, path)
69 SimpleGladeApp.__init__(self, path, root, domain, **kwargs)
73 for i in xrange(ROWS):
74 for j in xrange(self.columns):
76 self.table_leds.attach(led, j, j+1, i, i+1)
80 def on_btn_salir_clicked(self, widget, *args):
83 def on_btn_enviar_clicked(self, widget, *args):
84 self.device.matrix = self.leds2matrix()
86 def on_btn_recibir_clicked(self, widget, *args):
87 matrix = self.device.matrix
88 for row in xrange(ROWS):
89 for col in xrange(self.columns):
90 self.tabla[row,col].prendido = matrix[row,col]
91 self.tabla[row,col].queue_draw()
92 etherled.protocol._print_matrix(matrix)
94 def on_main_window_delete_event(self, widget, event, *args):
97 def leds2matrix(self):
99 for row in xrange(ROWS):
100 for col in xrange(self.columns):
101 matrix[row,col] = int(self.tabla[row,col].prendido)
102 etherled.protocol._print_matrix(matrix)
107 parser = OptionParser(usage=usage, version=app_version, prog=app_name)
108 parser.add_option("-s", "--server", default='localhost', dest="host",
109 metavar="HOSTNAME", help="Nombre/IP del host del dispositivo "
110 "[default: localhost]")
111 parser.add_option("-p", "--port", default=9876, metavar="PORT",
112 type="int", help="Puerto UDP del dispositivo [default: 9876].")
113 (opts, args) = parser.parse_args()
114 return (parser, opts, args)
118 (parser, opts, args) = parse_options()
120 parser.error("Debe especificarse un comando.")
122 dev = etherled.NetworkedDevice(opts.host, opts.port)
129 parser.error("El parámetro debe ser un número entero.")
131 parser.error("El comando lleva sólo 1 parámetro (opcional).")
132 if (cols < 8) or (cols > 32):
133 parser.error("El número de columnas debe estar entre 8 y 32.")
135 main_window = MainWindow(columns=cols, dev=dev)
139 elif cmd == 'get-matrix':
141 parser.error("El comando no lleva argumentos.")
142 etherled.protocol._print_matrix(dev.matrix)
143 elif cmd == 'paused':
145 parser.error("El comando no lleva argumentos.")
152 parser.error("El comando no lleva argumentos.")
154 elif cmd == 'continue':
156 parser.error("El comando no lleva argumentos.")
160 parser.error("El comando no lleva argumentos.")
163 # Nos va a tirar un time-out porque no responde
164 except etherled.protocol.RecvError:
166 elif cmd == 'get-delay':
168 parser.error("El comando no lleva argumentos.")
170 elif cmd == 'set-delay':
172 parser.error("El comando lleva 1 argumento.")
176 parser.error("El parámetro debe ser un entero entre 1 y 255.")
177 if (delay < 1) or (delay > 255):
178 parser.error("El parámetro debe ser un entero entre 1 y 255.")
181 parser.error("Comando desconocido. Vea la ayuda con %prog -h.")
184 if __name__ == '__main__':
187 except etherled.protocol.RecvError, e:
189 print >>sys.stderr, 'Hubo un error al recibir el ACK (%s).' % e