[chronojump] Added pyburn



commit 6ed326b3578e2449be2127c7b5805e6170cbb282
Author: Xavier de Blas <xaviblas gmail com>
Date:   Mon Mar 10 16:15:24 2014 +0100

    Added pyburn

 .../howto-bootloader-and-firmware.txt              |    2 +-
 chronopic-firmware/pyburn-wx-1.0/.svn/all-wcprops  |   41 +
 chronopic-firmware/pyburn-wx-1.0/.svn/entries      |  238 ++++
 .../pyburn-wx-1.0/.svn/prop-base/make_man.svn-base |    5 +
 .../.svn/text-base/MANIFEST.in.svn-base            |    2 +
 .../pyburn-wx-1.0/.svn/text-base/README.svn-base   |   11 +
 .../pyburn-wx-1.0/.svn/text-base/make_man.svn-base |   19 +
 .../.svn/text-base/pyburn-wx.prj.svn-base          |  124 ++
 .../.svn/text-base/pyburn-wx.py.svn-base           |   11 +
 .../pyburn-wx-1.0/.svn/text-base/setup.py.svn-base |   19 +
 chronopic-firmware/pyburn-wx-1.0/MANIFEST.in       |    2 +
 chronopic-firmware/pyburn-wx-1.0/README            |   11 +
 .../build/lib.linux-i686-2.7/pyburn_wx/__init__.py |   13 +
 .../build/lib.linux-i686-2.7/pyburn_wx/main.py     | 1281 ++++++++++++++++++++
 .../lib.linux-i686-2.7/pyburn_wx/pixmaps/off.xpm   |  197 +++
 .../lib.linux-i686-2.7/pyburn_wx/pixmaps/on.xpm    |  160 +++
 .../pyburn-wx-1.0/build/scripts-2.7/pyburn-wx.py   |   11 +
 .../pyburn-wx-1.0/debian/.svn/all-wcprops          |   47 +
 .../pyburn-wx-1.0/debian/.svn/entries              |  266 ++++
 .../debian/.svn/text-base/changelog.svn-base       |    6 +
 .../debian/.svn/text-base/compat.svn-base          |    1 +
 .../debian/.svn/text-base/control.svn-base         |   15 +
 .../debian/.svn/text-base/copyright.svn-base       |   35 +
 .../.svn/text-base/pyburn-wx.manpages.svn-base     |    1 +
 .../debian/.svn/text-base/pyburn-wx.xml.svn-base   |   82 ++
 .../debian/.svn/text-base/rules.svn-base           |   18 +
 chronopic-firmware/pyburn-wx-1.0/debian/changelog  |    6 +
 chronopic-firmware/pyburn-wx-1.0/debian/compat     |    1 +
 chronopic-firmware/pyburn-wx-1.0/debian/control    |   15 +
 chronopic-firmware/pyburn-wx-1.0/debian/copyright  |   35 +
 .../pyburn-wx-1.0/debian/pyburn-wx.manpages        |    1 +
 .../pyburn-wx-1.0/debian/pyburn-wx.xml             |   82 ++
 chronopic-firmware/pyburn-wx-1.0/debian/rules      |   18 +
 chronopic-firmware/pyburn-wx-1.0/make_man          |   19 +
 chronopic-firmware/pyburn-wx-1.0/pyburn-wx.prj     |  124 ++
 chronopic-firmware/pyburn-wx-1.0/pyburn-wx.py      |   11 +
 .../pyburn-wx-1.0/pyburn_wx/.svn/all-wcprops       |   35 +
 .../pyburn-wx-1.0/pyburn_wx/.svn/entries           |  201 +++
 .../pyburn_wx/.svn/prop-base/main.py.svn-base      |    5 +
 .../pyburn_wx/.svn/text-base/__init__.py.svn-base  |   13 +
 .../pyburn_wx/.svn/text-base/ledp.hex.svn-base     |    8 +
 .../pyburn_wx/.svn/text-base/main.py.svn-base      | 1281 ++++++++++++++++++++
 .../.svn/text-base/pyburn-wx.wxg.svn-base          |  461 +++++++
 .../pyburn-wx-1.0/pyburn_wx/__init__.py            |   13 +
 .../pyburn-wx-1.0/pyburn_wx/__init__.pyc           |  Bin 0 -> 316 bytes
 .../pyburn-wx-1.0/pyburn_wx/ledp.hex               |    8 +
 chronopic-firmware/pyburn-wx-1.0/pyburn_wx/main.py | 1281 ++++++++++++++++++++
 .../pyburn-wx-1.0/pyburn_wx/main.pyc               |  Bin 0 -> 29411 bytes
 .../pyburn_wx/pixmaps/.svn/all-wcprops             |   17 +
 .../pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/entries   |   96 ++
 .../pixmaps/.svn/text-base/off.xpm.svn-base        |  197 +++
 .../pixmaps/.svn/text-base/on.xpm.svn-base         |  160 +++
 .../pyburn-wx-1.0/pyburn_wx/pixmaps/off.xpm        |  197 +++
 .../pyburn-wx-1.0/pyburn_wx/pixmaps/on.xpm         |  160 +++
 .../pyburn-wx-1.0/pyburn_wx/pyburn-wx.wxg          |  461 +++++++
 chronopic-firmware/pyburn-wx-1.0/setup.py          |   19 +
 56 files changed, 7542 insertions(+), 1 deletions(-)
---
diff --git a/chronopic-firmware/howto-bootloader-and-firmware.txt 
b/chronopic-firmware/howto-bootloader-and-firmware.txt
index 4400f7f..d6e7cee 100644
--- a/chronopic-firmware/howto-bootloader-and-firmware.txt
+++ b/chronopic-firmware/howto-bootloader-and-firmware.txt
@@ -29,7 +29,7 @@ sudo python setup.py install
 2.A encoder 20MHz grabar bootloader:
 ------------------------------------
 
-cd ~/Documents/chronojump-no-git/chronopic-3.0/grabar_cronopic_firmware/pyburn-wx-1.0
+cd cronopic-firmware/pyburn-wx-1.0
 python pyburn-wx.py
 
 Mètode dels 2 skypics.
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/all-wcprops 
b/chronopic-firmware/pyburn-wx-1.0/.svn/all-wcprops
new file mode 100644
index 0000000..7e55f97
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/all-wcprops
@@ -0,0 +1,41 @@
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/pyburn/!svn/ver/71/pyburn-wx/pyburn-wx-1.0
+END
+pyburn-wx.py
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn-wx.py
+END
+pyburn-wx.prj
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn-wx.prj
+END
+setup.py
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/setup.py
+END
+make_man
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/make_man
+END
+MANIFEST.in
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/MANIFEST.in
+END
+README
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/README
+END
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/entries b/chronopic-firmware/pyburn-wx-1.0/.svn/entries
new file mode 100644
index 0000000..03a4d6c
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/entries
@@ -0,0 +1,238 @@
+10
+
+dir
+71
+http://svn.iearobotics.com/pyburn/pyburn-wx/pyburn-wx-1.0
+http://svn.iearobotics.com/pyburn
+
+
+
+2009-09-16T19:53:10.220670Z
+71
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+81021e76-403d-0410-8966-deacf4f2e7aa
+
+debian
+dir
+
+pyburn-wx.py
+file
+
+
+
+
+2012-07-19T14:49:15.619904Z
+b1ac8a8a3dcff181816efd3be9923ca0
+2008-09-25T05:59:52.908051Z
+55
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+323
+
+pyburn-wx.prj
+file
+
+
+
+
+2012-07-19T14:49:15.619904Z
+3b4e3764cc136e66798861d6ffc22e6a
+2008-09-28T18:52:56.573094Z
+65
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2779
+
+setup.py
+file
+
+
+
+
+2012-07-19T14:49:15.619904Z
+d72a3d28093ba40e41212fe0ea229546
+2008-09-26T05:49:56.493720Z
+58
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+573
+
+make_man
+file
+
+
+
+
+2012-07-19T14:49:15.619904Z
+93932080ee706f28935b1cda89f11dc8
+2008-09-26T07:42:19.775363Z
+59
+obijuan
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+351
+
+MANIFEST.in
+file
+
+
+
+
+2012-07-19T14:49:15.619904Z
+6d074984aeaa029e9d9ac65ccd36bcae
+2008-09-26T05:49:56.493720Z
+58
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+66
+
+pyburn_wx
+dir
+
+README
+file
+
+
+
+
+2012-07-19T14:49:15.623904Z
+fe2bc66a7a428e3d90acf6320da16983
+2008-09-26T05:49:56.493720Z
+58
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+222
+
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/prop-base/make_man.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/.svn/prop-base/make_man.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/prop-base/make_man.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/MANIFEST.in.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/MANIFEST.in.svn-base
new file mode 100644
index 0000000..b7c0f96
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/MANIFEST.in.svn-base
@@ -0,0 +1,2 @@
+include pyburn-wx.py README
+recursive-include pyburn_wx/pixmaps *
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/README.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/README.svn-base
new file mode 100644
index 0000000..6286f1d
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/README.svn-base
@@ -0,0 +1,11 @@
+Pyburn
+------
+
+  Software multiplataforma para grabar micros PIC a bajo nivel utilizando
+como grabadora una tarjeta Skypic.
+
+http://www.iearobotics.com/wiki/index.php?title=Pyburn
+
+(C) 2008. Juan Gonozalez. 
+
+LICENCIA GPL
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/make_man.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/make_man.svn-base
new file mode 100644
index 0000000..5e550a7
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/make_man.svn-base
@@ -0,0 +1,19 @@
+#!/usr/bin/make -f
+
+all: man
+  
+DBK2MAN_XSL=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl
+
+NAME=pyburn-wx
+NUM=1
+TARGET=$(NAME).$(NUM)
+
+man:: debian/$(TARGET)
+
+debian/$(TARGET): debian/$(NAME).xml
+       xsltproc  -o debian/$(TARGET) --nonet $(DBK2MAN_XSL)   debian/$(NAME).xml 
+
+
+view:: debian/$(TARGET)
+       nroff -man debian/$(TARGET) | less
+
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/pyburn-wx.prj.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/pyburn-wx.prj.svn-base
new file mode 100644
index 0000000..25131ec
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/pyburn-wx.prj.svn-base
@@ -0,0 +1,124 @@
+# Anjuta Version 1.2.4a 
+Compatibility Level: 1 
+
+<PROJECT_DESCRIPTION_START>
+<PROJECT_DESCRIPTION_END>
+<CONFIG_PROGS_START>
+<CONFIG_PROGS_END>
+<CONFIG_LIBS_START>
+<CONFIG_LIBS_END>
+<CONFIG_HEADERS_START>
+<CONFIG_HEADERS_END>
+<CONFIG_CHARACTERISTICS_START>
+<CONFIG_CHARACTERISTICS_END>
+<CONFIG_LIB_FUNCS_START>
+<CONFIG_LIB_FUNCS_END>
+<CONFIG_ADDITIONAL_START>
+<CONFIG_ADDITIONAL_END>
+<CONFIG_FILES_START>
+<CONFIG_FILES_END>
+<MAKEFILE_AM_START>
+<MAKEFILE_AM_END>
+
+props.file.type=project
+
+anjuta.version=1.2.4a
+anjuta.compatibility.level=1
+
+project.name=pyburn-wx
+project.type=GENERIC
+project.target.type=EXECUTABLE
+project.version=1.0
+project.author=Juan Gonzalez
+project.source.target=unknown
+project.has.gettext=0
+project.gui.command=
+project.programming.language=C
+project.excluded.modules=intl
+
+project.config.extra.modules.before=
+project.config.extra.modules.after=
+project.config.blocked=1
+project.config.disable.overwriting=1 1 1 1 1 1 1 1 1 
+
+project.menu.entry=pyburn-wx Version 1.0
+project.menu.group=Application
+project.menu.comment=pyburn-wx Version 1.0
+project.menu.icon=
+project.menu.need.terminal=0
+
+project.configure.options=
+anjuta.program.arguments=
+preferences.build.option.jobs=0
+preferences.build.option.silent=0
+preferences.build.option.autosave=0
+preferences.anjuta.make.options=-k
+preferences.make=make
+preferences.build.option.keep.going=1
+preferences.build.option.warn.undef=0
+preferences.autoformat.custom.style= -i8 -sc -bli0 -bl0 -cbi0 -ss
+preferences.indent.opening=0
+preferences.autoformat.disable=1
+preferences.indent.automatic=1
+preferences.use.tabs=0
+preferences.indent.size=2
+preferences.tabsize=2
+preferences.indent.closing=0
+
+module.include.name=.
+module.include.type=
+module.include.files=
+
+module.source.name=.
+module.source.type=
+module.source.files=\
+       setup.py\
+       pyburn-wx.py\
+       pyburn_wx/__init__.py\
+       pyburn_wx/main.py
+
+module.pixmap.name=.
+module.pixmap.type=
+module.pixmap.files=\
+       pyburn_wx/pixmaps/off.xpm\
+       pyburn_wx/pixmaps/on.xpm
+
+module.data.name=.
+module.data.type=
+module.data.files=\
+       make_man\
+       debian/rules\
+       debian/control
+
+module.help.name=.
+module.help.type=
+module.help.files=
+
+module.doc.name=.
+module.doc.type=
+module.doc.files=\
+       pyburn_wx/TODO.txt\
+       README\
+       debian/pyburn-wx.xml\
+       MANIFEST.in
+
+module.po.files=
+
+compiler.options.supports=
+compiler.options.include.paths=\
+       .\
+       ..
+compiler.options.library.paths=
+compiler.options.libraries=
+compiler.options.libraries.selected=
+compiler.options.defines=\
+       HAVE_CONFIG_H
+compiler.options.defines.selected=
+compiler.options.warning.buttons=0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 
+compiler.options.optimize.buttons=0 0 1 0 
+compiler.options.other.buttons=1 0 
+compiler.options.other.c.flags=
+compiler.options.other.l.flags=
+compiler.options.other.l.libs=
+
+project.src.paths=
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/pyburn-wx.py.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/pyburn-wx.py.svn-base
new file mode 100644
index 0000000..8db523f
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/pyburn-wx.py.svn-base
@@ -0,0 +1,11 @@
+#!/usr/bin/env python2.4
+
+##This will work in development on a relative folder basis
+##It will then work when installed in site-packages on a target system
+##where the runner script is in /usr/bin (or wherever)
+##
+##So, you don't need anything special - no fancy path tricks.
+
+import pyburn_wx.main
+
+pyburn_wx.main.start()
diff --git a/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/setup.py.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/setup.py.svn-base
new file mode 100644
index 0000000..d00e24c
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/.svn/text-base/setup.py.svn-base
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+#-*- coding: iso-8859-15 -*-
+
+from distutils.core import setup
+
+
+files = ["pixmaps/*"]
+
+setup(name         = 'pyburn-wx',
+      version      = '1.0',
+      description  = 'Grabacion de microcontroladores PICs a bajo nivel',
+      author       = 'Juan Gonzalez',
+      author_email = 'juan iearobotics com',
+      url          = 'http://www.iearobotics.com/wiki/index.php?title=Pyburn',
+      license      = 'GPL v2 or later',
+      packages = ['pyburn_wx'],
+      package_data = {'pyburn_wx' : files },
+      scripts      = ['pyburn-wx.py',],
+      )
diff --git a/chronopic-firmware/pyburn-wx-1.0/MANIFEST.in b/chronopic-firmware/pyburn-wx-1.0/MANIFEST.in
new file mode 100644
index 0000000..b7c0f96
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/MANIFEST.in
@@ -0,0 +1,2 @@
+include pyburn-wx.py README
+recursive-include pyburn_wx/pixmaps *
diff --git a/chronopic-firmware/pyburn-wx-1.0/README b/chronopic-firmware/pyburn-wx-1.0/README
new file mode 100644
index 0000000..6286f1d
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/README
@@ -0,0 +1,11 @@
+Pyburn
+------
+
+  Software multiplataforma para grabar micros PIC a bajo nivel utilizando
+como grabadora una tarjeta Skypic.
+
+http://www.iearobotics.com/wiki/index.php?title=Pyburn
+
+(C) 2008. Juan Gonozalez. 
+
+LICENCIA GPL
diff --git a/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/__init__.py 
b/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/__init__.py
new file mode 100644
index 0000000..0f71a94
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/__init__.py
@@ -0,0 +1,13 @@
+#! /usr/bin/python
+# -*- coding: iso-8859-15 -*-
+
+#-- Pyburn-wx
+
+""" 
+  Grabacion de microcontroladores PICs a bajo nivel
+
+
+"""
+
+#-- Version
+VERSION = 1.0
diff --git a/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/main.py 
b/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/main.py
new file mode 100644
index 0000000..7d74496
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/main.py
@@ -0,0 +1,1281 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2008 by Juan Gonzalez 
+# Author: Juan Gonzalez <juan iearobotics com>
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+import wx
+import os
+import sys
+
+#-- Modulos de Stargate
+import libStargate.Picp
+
+#-- Modulos de LibIris
+import libIris.Pic16_Bootloader
+import libIris.Pic16_Firmware
+import libIris.IntelHex
+
+#-- Bootloader. Obtenido con:
+#-- hex2python PIC16_bootloader_1.2.hex
+
+bootloader=[[0x0000, 0x0000, 0x158A, 0x160A, 0x2E88],[0x1E80, 0x158A, 0x160A, 0x2E80, 0x018A, 0x158A, 
0x160A, 0x2E83, 0x0000, 0x1E03, 0x2E83, 0x1683, 0x3087, 0x0086, 0x1283, 0x0186, 0x3090, 0x0098, 0x1683, 
0x1518, 0x1698, 0x301F, 0x0099, 0x1283, 0x3003, 0x00FA, 0x3031, 0x0090, 0x140C, 0x26F1, 0x3AEA, 0x1D03, 
0x2EB4, 0x01FA, 0x2EBB, 0x26F1, 0x00F9, 0x3AE3, 0x1903, 0x2EBD, 0x0879, 0x3AEA, 0x1903, 0x2EBB, 0x0879, 
0x3AED, 0x1D03, 0x2EA2, 0x30E4, 0x26EC, 0x3003, 0x00FA, 0x26F1, 0x0190, 0x0198, 0x1683, 0x0198, 0x1283, 
0x018C, 0x2E83, 0x30EB, 0x2EEA, 0x26F1, 0x00F6, 0x26F1, 0x00F5, 0x26F1, 0x00F1, 0x00FB, 0x26F1, 0x00F3, 
0x01F2, 0x3021, 0x1283, 0x1303, 0x0276, 0x1903, 0x2ED6, 0x0875, 0x3903, 0x00FC, 0x00FD, 0x1003, 0x0DFC, 
0x3020, 0x077C, 0x2ED7, 0x3020, 0x0084, 0x26F1, 0x0080, 0x07F2, 0x0A84, 0x0BFB, 0x2ED8, 0x0872, 0x0673, 
0x30E8, 0x1D03, 0x2EEA, 0x30E7, 0x26EC, 0x2703, 0x3800, 0x30E4, 0x1903, 0x30E5, 0x26EC, 0x2EA2, 0x0064, 
0x1E0C, 0x2EEC, 0x0099, 0x0008, 0x0064, 0x087A, 0x1903,
  0x2EFF, 0x1C0C, 0x2EFF, 0x1010, 0x0BFA, 0x2EFB, 0x3400, 0x100C, 0x300B, 0x008F, 0x1410, 0x1E8C, 0x2EF1, 
0x081A, 0x0008, 0x3021, 0x0276, 0x1903, 0x2F55, 0x1683, 0x1703, 0x178C, 0x1283, 0x1303, 0x0875, 0x39FC, 
0x1703, 0x008D, 0x1303, 0x0876, 0x1703, 0x008F, 0x3020, 0x0084, 0x1303, 0x087D, 0x1903, 0x2F2D, 0x1683, 
0x1703, 0x140C, 0x0000, 0x0000, 0x1283, 0x080E, 0x0080, 0x0A84, 0x080C, 0x0080, 0x0A84, 0x0A8D, 0x1303, 
0x03FD, 0x03F5, 0x0AF1, 0x0AF1, 0x2F16, 0x0871, 0x00FC, 0x3E20, 0x0084, 0x1003, 0x0CFC, 0x0876, 0x1703, 
0x008F, 0x1303, 0x0875, 0x1703, 0x008D, 0x1303, 0x087C, 0x1703, 0x078D, 0x1903, 0x0A8F, 0x1703, 0x080D, 
0x3903, 0x1903, 0x2F55, 0x1683, 0x140C, 0x0000, 0x0000, 0x1283, 0x080E, 0x0080, 0x0A84, 0x080C, 0x0080, 
0x0A84, 0x0A8D, 0x1303, 0x0AF1, 0x0AF1, 0x2F40, 0x0875, 0x00F7, 0x0876, 0x00F8, 0x01FB, 0x3002, 0x00F4, 
0x0871, 0x027B, 0x1803, 0x3401, 0x087B, 0x3E20, 0x0084, 0x3021, 0x0278, 0x1703, 0x1683, 0x1903, 0x2F73, 
0x178C, 0x0183, 0x301E, 0x0278, 0x3080, 0x1903, 0x02
 77, 0x1803, 0x2FBB, 0x2F75, 0x138C, 0x0183, 0x0877, 0x1703, 0x008D, 0x1303, 0x0878, 0x1D03, 0x2F8A, 0x3004, 
0x0277, 0x1803, 0x2F8A, 0x1703, 0x1683, 0x1F8C, 0x2F87, 0x1283, 0x3084, 0x078D, 0x0183, 0x301E, 0x2F8B, 
0x0878, 0x1703, 0x008F, 0x0800, 0x008E, 0x0A84, 0x0800, 0x008C, 0x1683, 0x150C, 0x3055, 0x008D, 0x30AA, 
0x008D, 0x148C, 0x0000, 0x0000, 0x0183, 0x1683, 0x1703, 0x1B8C, 0x2FC3, 0x1283, 0x1303, 0x0064, 0x1E0D, 
0x2FA2, 0x120D, 0x1683, 0x1703, 0x110C, 0x140C, 0x0000, 0x0000, 0x1283, 0x0384, 0x0800, 0x060E, 0x1D03, 
0x2FB7, 0x0A84, 0x0800, 0x060C, 0x1903, 0x2FBB, 0x0183, 0x0BF4, 0x2F5C, 0x3400, 0x1283, 0x1303, 0x3002, 
0x07FB, 0x0AF7, 0x1903, 0x0AF8, 0x2F5A, 0x1283, 0x1303, 0x120D, 0x1683, 0x1703, 0x110C, 0x1283, 0x1703, 
0x080D, 0x3903, 0x3C03, 0x1D03, 0x2FBB, 0x3003, 0x028D, 0x1283, 0x1303, 0x3004, 0x00FC, 0x3007, 0x0284, 
0x0000, 0x1683, 0x1703, 0x140C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x1283, 0x1703, 
0x060E, 0x1D03, 0x2FED, 0x0A84, 0x0800, 0x060C, 0
 x1903, 0x2FF4, 0x1283, 0x1303, 0x30FC, 0x05F7, 0x3006, 0x02FB, 0x2FB7, 0x1283, 0x1703, 0x0A8D, 0x0A84, 
0x1283, 0x1303, 0x0BFC, 0x2FD8, 0x2FBB],[0x2000, 0x0002, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x3F32],]
+
+
+#-- Estados para el interfaz
+GUI_INICIAL    = 0
+GUI_OK_SERIAL  = 1
+GUI_OK_PICP    = 2
+GUI_PROGESS    = 3
+
+#-- Timeout para la realizacion del PING a la Skypic. En mili-segundos
+PING_TIMEOUT = 500
+
+#-- Timeout para la deteccion del bootloader (en segundos)
+#-- Usado para la descarga del Firmware PICP
+TIMEOUT = 800
+
+#-- Valor por defecto de la palabra de configuracion
+DEFAULT_CONFIG_WORD = 0x3F3A
+
+#--------------------------------------------------------------------
+#-- Obtener la palara de configuracion de un fichero .hex parseado
+#-- Esta funcion deberia estar en la libIris
+#-- DEVUELVE:
+#--  * El valor de palabra de configuracion (si existe)
+#--  * -1 si no existe
+#--------------------------------------------------------------------
+def get_config(mem):
+  for dir,(vh,vl) in mem:
+    if dir==0x2007:
+      return vh*256 + vl
+      
+  return -1
+
+#-------------------------------------------------------------------
+#-- Determinar el directorio desde donde se esta ejecutando pyburn
+#-------------------------------------------------------------------
+def determine_path ():
+    """Borrowed from wxglade.py"""
+    try:
+        root = __file__
+        if os.path.islink (root):
+            root = os.path.realpath (root)
+        return os.path.dirname (os.path.abspath (root))
+    except:
+        print "I'm sorry, but something is wrong."
+        print "There is no __file__ variable. Please contact the author."
+        sys.exit ()
+
+
+#---------------------------------------------------
+#-- Dialogo de About
+#-- Generado con wxglade
+#---------------------------------------------------
+class MyDialog(wx.Dialog):
+    def __init__(self, *args, **kwds):
+        # begin wxGlade: MyDialog.__init__
+        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
+        wx.Dialog.__init__(self, *args, **kwds)
+        self.text_ctrl_1 = wx.TextCtrl(self, -1, "Pyburn 1.0\nGrabacion de microcontroladores PICs usando la 
Skypic\nhttp://www.iearobotics.com/wiki/index.php?title=Pyburn\n\n(c) Juan Gonzalez, Sep-2008\nLICENCIA 
GPL\n\nLibrerias libIris y libStargate:\n(c) Rafael Trevino y Juan Gonzalez\n", 
style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH|wx.TE_AUTO_URL|wx.NO_BORDER)
+        self.static_line_5 = wx.StaticLine(self, -1)
+        self.button_1 = wx.Button(self, -1, "OK")
+
+        self.__set_properties()
+        self.__do_layout()
+
+        self.Bind(wx.EVT_BUTTON, self.about_ok_clicked, self.button_1)
+        # end wxGlade
+
+    def __set_properties(self):
+        # begin wxGlade: MyDialog.__set_properties
+        self.SetTitle("Sobre Pyburn")
+        self.text_ctrl_1.SetMinSize((400, 200))
+        self.text_ctrl_1.SetBackgroundColour(wx.Colour(246, 244, 241))
+        # end wxGlade
+
+    def __do_layout(self):
+        # begin wxGlade: MyDialog.__do_layout
+        sizer_13 = wx.BoxSizer(wx.VERTICAL)
+        sizer_13.Add(self.text_ctrl_1, 0, wx.EXPAND, 0)
+        sizer_13.Add(self.static_line_5, 0, wx.EXPAND, 0)
+        sizer_13.Add(self.button_1, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+        self.SetAutoLayout(True)
+        self.SetSizer(sizer_13)
+        sizer_13.Fit(self)
+        sizer_13.SetSizeHints(self)
+        self.Layout()
+        # end wxGlade
+
+    def about_ok_clicked(self, event): # wxGlade: MyDialog.<event_handler>
+        #print "OK!"
+        self.EndModal(0)
+
+# end of class MyDialog
+
+
+#---------------------------------------------------
+#-- Clase principal, que implementa el interfaz
+#-- Creada con wxglade
+#---------------------------------------------------
+class MyFrame(wx.Frame):
+  def __init__(self, app, *args, **kwds):
+  
+  
+      #----------------------------------------------------------------
+      #--- Esta parte del codigo se ha generado automaticamente con la
+      #-- herramienta wxglade. NO modificar.
+      #---------------------------------------------------------------
+      # begin wxGlade: MyFrame.__init__
+      kwds["style"] = wx.DEFAULT_FRAME_STYLE
+      wx.Frame.__init__(self, *args, **kwds)
+      self.panel_1 = wx.Panel(self, -1)
+      self.notebook_1 = wx.Notebook(self.panel_1, -1, style=0)
+      self.notebook_1_pane_2 = wx.Panel(self.notebook_1, -1)
+      self.sizer_3_staticbox = wx.StaticBox(self.panel_1, -1, "Skypic grabadora")
+      self.notebook_1_pane_1 = wx.Panel(self.notebook_1, -1)
+      
+      # Menu Bar
+      self.frame_1_menubar = wx.MenuBar()
+      self.SetMenuBar(self.frame_1_menubar)
+      self.Help = wx.Menu()
+      self.About = wx.MenuItem(self.Help, wx.NewId(), "Sobre Pyburn", "", wx.ITEM_NORMAL)
+      self.Help.AppendItem(self.About)
+      self.frame_1_menubar.Append(self.Help, "Ayuda")
+      # Menu Bar end
+      self.statusbar = self.CreateStatusBar(1, 0)
+      self.label_2 = wx.StaticText(self.notebook_1_pane_1, -1, "Puerto serie:")
+      self.entry_serial = wx.ComboBox(self.notebook_1_pane_1, -1, choices=[], style=wx.CB_DROPDOWN)
+      self.button_abrir_cerrar = wx.Button(self.notebook_1_pane_1, -1, "  Abrir  ", style=wx.BU_EXACTFIT)
+      self.static_line_1 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.label_3 = wx.StaticText(self.notebook_1_pane_1, -1, "Firmware:", style=wx.ALIGN_CENTRE)
+      self.button_boot = wx.Button(self.notebook_1_pane_1, -1, "Bootloader", style=wx.BU_EXACTFIT)
+      self.button_test = wx.Button(self.notebook_1_pane_1, -1, "Test 1", style=wx.BU_EXACTFIT)
+      self.button_test2 = wx.Button(self.notebook_1_pane_1, -1, "Test 2", style=wx.BU_EXACTFIT)
+      self.static_line_2 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.label_4 = wx.StaticText(self.notebook_1_pane_1, -1, "Fichero .hex:")
+      self.entry_file = wx.TextCtrl(self.notebook_1_pane_1, -1, "")
+      self.button_search = wx.Button(self.notebook_1_pane_1, -1, "Buscar", style=wx.BU_EXACTFIT)
+      self.button_grabar = wx.Button(self.notebook_1_pane_1, -1, "Grabar!", style=wx.BU_EXACTFIT)
+      self.static_line_3 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.progressbar = wx.Gauge(self.notebook_1_pane_1, -1, 100)
+      self.button_cancel = wx.Button(self.notebook_1_pane_1, -1, "Cancelar", style=wx.BU_EXACTFIT)
+      self.label_5 = wx.StaticText(self.notebook_1_pane_2, -1, "Palabra de configuracion:")
+      self.entry_config = wx.TextCtrl(self.notebook_1_pane_2, -1, "3F3A")
+      self.button_write_config = wx.Button(self.notebook_1_pane_2, -1, "Write", style=wx.BU_EXACTFIT)
+      self.button_default = wx.Button(self.notebook_1_pane_2, -1, "Default", style=wx.BU_EXACTFIT)
+      self.static_line_4 = wx.StaticLine(self.notebook_1_pane_2, -1)
+      self.label_6 = wx.StaticText(self.notebook_1_pane_2, -1, "PIC destino:")
+      self.button_check = wx.Button(self.notebook_1_pane_2, -1, "Detectar", style=wx.BU_EXACTFIT)
+      self.icono_conexion = wx.StaticBitmap(self.panel_1, -1, wx.NullBitmap)
+      self.label_conexion = wx.StaticText(self.panel_1, -1, "SIN CONEXION\n")
+      self.button_picp = wx.Button(self.panel_1, -1, "Descargar Firmware")
+
+      self.__set_properties()
+      self.__do_layout()
+
+      self.Bind(wx.EVT_MENU, self.EVT_MENU, self.About)
+      self.Bind(wx.EVT_BUTTON, self.boton_abrir_cerrar_clicked, self.button_abrir_cerrar)
+      self.Bind(wx.EVT_BUTTON, self.boot_clicked, self.button_boot)
+      self.Bind(wx.EVT_BUTTON, self.test_clicked, self.button_test)
+      self.Bind(wx.EVT_BUTTON, self.test2_clicked, self.button_test2)
+      self.Bind(wx.EVT_TEXT, self.file_changed, self.entry_file)
+      self.Bind(wx.EVT_BUTTON, self.search_clicked, self.button_search)
+      self.Bind(wx.EVT_BUTTON, self.grabar_clicked, self.button_grabar)
+      self.Bind(wx.EVT_BUTTON, self.button_cancel_clicked, self.button_cancel)
+      self.Bind(wx.EVT_TEXT, self.config_changed, self.entry_config)
+      self.Bind(wx.EVT_BUTTON, self.write_config_clicked, self.button_write_config)
+      self.Bind(wx.EVT_BUTTON, self.default_clicked, self.button_default)
+      self.Bind(wx.EVT_BUTTON, self.check_clicked, self.button_check)
+      self.Bind(wx.EVT_BUTTON, self.picp_clicked, self.button_picp)
+      # end wxGlade
+      
+      #-- Guardar la aplicacion
+      self.app=app;
+
+  def __set_properties(self):
+      # begin wxGlade: MyFrame.__set_properties
+      self.SetTitle("Pyburn-wx")
+      self.statusbar.SetStatusWidths([-1])
+      # statusbar fields
+      statusbar_fields = ["Inicio"]
+      for i in range(len(statusbar_fields)):
+          self.statusbar.SetStatusText(statusbar_fields[i], i)
+      self.entry_serial.SetMinSize((250, 30))
+      self.entry_serial.SetToolTipString("Seleccionar puerto serie donde esta conectada la Skypic grabadora")
+      self.button_abrir_cerrar.SetToolTipString("Abrir/cerrar el puerto serie")
+      self.button_boot.SetToolTipString("Grabar el Bootloader en la Skypic destino")
+      self.button_test.SetToolTipString("Grabar un programa de test en la skypic destino, que hace parpadear 
el led")
+      self.button_test2.SetToolTipString("Grabar un programa de test en la skypic destino, que hacer 
parpadear el led")
+      self.entry_file.SetMinSize((200, 27))
+      self.button_search.SetToolTipString("Seleccionar el fichero .hex a grabar en la Skypic destino")
+      self.button_grabar.SetToolTipString("Grabar el fichero .hex en la Skypic destino")
+      self.progressbar.SetMinSize((350, 20))
+      self.button_write_config.SetToolTipString("Grabar la palabra de configuracion en la Skypic destino")
+      self.button_default.SetToolTipString("Establecer el valor por defecto de la palabra de configuracion")
+      self.button_check.SetToolTipString("Detectar la skypic destino: el pic y su palabra de configuracion")
+      self.icono_conexion.SetToolTipString(u"Indica si la Skypic grabadora está conectada o no. Si no está 
conectada o el firmware no es el correcto aparecera \"SIN CONEXION\"")
+      self.button_picp.SetToolTipString("Descargar el Firmware necesario para que la Skypic conectada al 
puerto serie se convierta en grabadora")
+      # end wxGlade
+
+  def __do_layout(self):
+      # begin wxGlade: MyFrame.__do_layout
+      sizer_1 = wx.BoxSizer(wx.VERTICAL)
+      sizer_2 = wx.BoxSizer(wx.VERTICAL)
+      sizer_3 = wx.StaticBoxSizer(self.sizer_3_staticbox, wx.HORIZONTAL)
+      sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_10 = wx.BoxSizer(wx.VERTICAL)
+      sizer_12 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_11 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_5 = wx.BoxSizer(wx.VERTICAL)
+      sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_6.Add(self.label_2, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_6.Add(self.entry_serial, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_6.Add(self.button_abrir_cerrar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_5.Add(sizer_6, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_1, 0, wx.EXPAND, 0)
+      sizer_7.Add(self.label_3, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_7.Add(self.button_boot, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 7)
+      sizer_7.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
+      sizer_7.Add(self.button_test, 0, wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
+      sizer_7.Add(self.button_test2, 0, wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
+      sizer_5.Add(sizer_7, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_2, 0, wx.EXPAND, 0)
+      sizer_8.Add(self.label_4, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_8.Add(self.entry_file, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_8.Add(self.button_search, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_8.Add(self.button_grabar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_5.Add(sizer_8, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_3, 0, wx.EXPAND, 0)
+      sizer_9.Add(self.progressbar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5)
+      sizer_9.Add(self.button_cancel, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_5.Add(sizer_9, 1, wx.EXPAND, 0)
+      self.notebook_1_pane_1.SetAutoLayout(True)
+      self.notebook_1_pane_1.SetSizer(sizer_5)
+      sizer_5.Fit(self.notebook_1_pane_1)
+      sizer_5.SetSizeHints(self.notebook_1_pane_1)
+      sizer_11.Add(self.label_5, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.entry_config, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.button_write_config, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.button_default, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
+      sizer_10.Add(sizer_11, 0, wx.EXPAND, 0)
+      sizer_10.Add(self.static_line_4, 0, wx.EXPAND, 0)
+      sizer_12.Add(self.label_6, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_12.Add(self.button_check, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_10.Add(sizer_12, 0, wx.EXPAND, 0)
+      self.notebook_1_pane_2.SetAutoLayout(True)
+      self.notebook_1_pane_2.SetSizer(sizer_10)
+      sizer_10.Fit(self.notebook_1_pane_2)
+      sizer_10.SetSizeHints(self.notebook_1_pane_2)
+      self.notebook_1.AddPage(self.notebook_1_pane_1, "Principal")
+      self.notebook_1.AddPage(self.notebook_1_pane_2, "Avanzado")
+      sizer_2.Add(self.notebook_1, 1, wx.ALL|wx.EXPAND, 4)
+      sizer_4.Add(self.icono_conexion, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
+      sizer_4.Add(self.label_conexion, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.SHAPED, 10)
+      sizer_4.Add(self.button_picp, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 10)
+      sizer_3.Add(sizer_4, 1, wx.ALIGN_CENTER_VERTICAL, 0)
+      sizer_2.Add(sizer_3, 0, wx.ALL|wx.EXPAND, 4)
+      self.panel_1.SetAutoLayout(True)
+      self.panel_1.SetSizer(sizer_2)
+      sizer_2.Fit(self.panel_1)
+      sizer_2.SetSizeHints(self.panel_1)
+      sizer_1.Add(self.panel_1, 0, 0, 0)
+      self.SetAutoLayout(True)
+      self.SetSizer(sizer_1)
+      sizer_1.Fit(self)
+      sizer_1.SetSizeHints(self)
+      self.Layout()
+      # end wxGlade
+      
+      #--------------------------------------------
+      # Fin del codigo generado automaticamente
+      #--------------------------------------------
+      
+      #-- Limitar la entrada de texto de la palabra de configuracion 
+      #-- a 4 digitos
+      self.entry_config.SetMaxLength(4)
+      
+      #-------------------------------------------
+      #- Encontrar la ruta a los iconos .xpm
+      #-------------------------------------------
+      PIXMAP_name=os.sep+"pixmaps";
+      EXEC_dir = determine_path()
+      IMAGE_ON_DIR = EXEC_dir  + PIXMAP_name + os.sep + "on.xpm"
+      IMAGE_OFF_DIR= EXEC_dir  + PIXMAP_name + os.sep + "off.xpm"
+      
+      #-- Debug: imprimir los directorios donde buscar los iconos
+      #print IMAGE_ON_DIR
+      #print IMAGE_OFF_DIR
+      
+      
+      #---------------------------------------
+      #-- Variables globales
+      #---------------------------------------
+      
+      #-- Stargate para la programacion
+      self.picp=None;
+      
+      #-- Estado en el que se encuentra la GUI
+      self.estado_GUI=None
+      
+      #--  Crear el temporizador
+      self.timer = wx.Timer(self, 999999)
+      self.Bind(wx.EVT_TIMER, self.skypic_check)
+      
+      #-- Cargar las imagenes del estado de la conexion
+      self.imagen_on = wx.Bitmap(IMAGE_ON_DIR, wx.BITMAP_TYPE_XPM)
+      self.imagen_off = wx.Bitmap(IMAGE_OFF_DIR, wx.BITMAP_TYPE_XPM)
+      
+      #-- Flag de cancelar
+      self.cancelar=False
+      
+      #-- Palabras grabadas
+      self.grabado=0;
+      
+      #-- Valor de la palabra de configuracion
+      self.config_word=DEFAULT_CONFIG_WORD
+      
+      #-- Palabra de configuracion OK o no
+      self.config_ok=True;
+      
+      #-- Fichero especificado existe o no
+      self.file_ok=False
+      
+      #-- Otros
+      self.interfaz_estado(GUI_INICIAL);
+  
+  #---------------------------------------------------------
+  #-- Comprobacion periodica de la conexion con la Skypic  
+  #-- La invoca el temporizador
+  #---------------------------------------------------------
+  def skypic_check(self,event):
+    
+    if self.picp:
+    
+      #-- Comprobar si hay conexion con el servidor y si
+      #-- es del tipo correcto
+      
+      es_picp = self.picp.check_server_type()
+      
+      #--DEBUG: Para ver en la consola si esta activado o no
+      #print "PICP: %s" % es_picp
+      
+      #-- Actualizar el interfaz en funcion de que se haya detectado o no
+      if es_picp:
+        self.interfaz_estado(GUI_OK_PICP)
+      else:
+        self.interfaz_estado(GUI_OK_SERIAL)      
+
+  #---------------------------------------
+  #-- Menu de About
+  #----------------------------------------  
+  def EVT_MENU(self, event): # wxGlade: MyFrame.<event_handler>
+     d=MyDialog(None,-1)
+     d.ShowModal()
+     d.Destroy()
+
+#-----------------------------------------------------------------------#
+#                                                                       #
+#     FUNCIONES DE RETROLLAMADA DE LOS ELEMENTOS DEL INTERFAZ           #
+#                                                                       #
+#-----------------------------------------------------------------------#
+  
+  
+  #--------------------------------------------
+  #- Boton de Abrir/Cerrar el puerto serie
+  #--------------------------------------------
+  def boton_abrir_cerrar_clicked(self, event):  # wxGlade: MyFrame.<event_handler>
+    
+    #-- Su funcionamiento depende del estado en el que esta el interfaz
+    
+    if self.estado_GUI==GUI_INICIAL:
+      #-- En estado inicial la accion del boton es ABRIR
+      self.open_port()
+      
+    else:
+      #-- En el resto de estados la accion es CERRAR
+      
+      #-- Cerrarlo! 
+      if self.picp:
+        self.picp.close()
+        
+      #-- Actualizar interfaz
+      self.interfaz_estado(GUI_INICIAL);
+
+      #-- Actualizar barra de estado
+      self.statusbar.SetStatusText("Puerto serie CERRADO",0);
+      
+      
+  #-------------------------------------
+  #-- Boton de buscar fichero apretado  
+  #-------------------------------------
+  def search_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    
+    #-- Abrir un dialogo de busqueda de ficheros
+    filechooser = wx.FileDialog(self,wildcard = "*.hex;*.HEX")
+    
+    #-- Esperar a que el usuario seleccione el fichero
+    opcion = filechooser.ShowModal()
+    
+    #-- Segun la opcion...
+    if opcion == wx.ID_OK:
+    
+      #-- Se ha pulsado ok. Obtener el nombre del fichero
+      fichero = filechooser.GetPath()
+     
+      #-- Meter el fichero en el entry "fichero .hex"
+      self.entry_file.SetValue(fichero)
+      
+  #----------------------------------------------------------
+  #-- Realizar la grabacion del fichero .hex seleccionado
+  #----------------------------------------------------------
+  def grabar_clicked(self,widget): # wxGlade: MyFrame.<event_handler>
+    
+    #-- Obtener el nombre del fichero a grabar
+    file = str(self.entry_file.GetValue())
+    
+    #-- Realizar el parseo del fichero 
+    try:
+      hr = libIris.IntelHex.HexReader (file)
+    except libIris.IntelHex.ReaderError,msg:
+      self.statusbar.SetStatusText("%s" % msg)
+      return      
+     
+    #-- Obtener la palabra de configuracion. Usar la establecida por defecto
+    #-- si no existe    
+    config = get_config(hr.memory())
+    if config == -1:
+      config = DEFAULT_CONFIG_WORD;
+      
+    #-- Poner la palabra de configuracion en el entry
+    self.entry_config.SetValue("%04X" % config);    
+    
+    #-- Realizar la grabacion
+    self.burn_program(hr.dataBlocks())
+ 
+  #------------------------------------
+  #-- Cambio en el nombre del fichero  
+  #------------------------------------
+  def file_changed(self,widget):  # wxGlade: MyFrame.<event_handler>
+  
+    #-- Leer nombre del fichero 
+    file_name = str(self.entry_file.GetValue())
+    
+    #-- El estado del interfaz se cambia seguen que 
+    #-- el fichero exista o no
+    if not os.path.exists(file_name):
+      self.file_ok=False
+    else:
+      self.file_ok=True
+    
+    #-- Actualizar el estado del interfaz
+    if self.file_ok:
+      self.button_grabar.Enable()
+    else:
+      self.button_grabar.Disable()
+ 
+
+  #------------------------
+  #-- Boton de cancelacion
+  #------------------------ 
+  def button_cancel_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    #-- Poner el flag de cancelar a True y deshabilitar el boton
+    self.cancelar=True
+    self.button_cancel.Disable() 
+
+  #----------------------------------
+  #-- Grabar el programa de test 1
+  #----------------------------------
+  def test_clicked(self,widget):        # wxGlade: MyFrame.<event_handler>
+    self.burn_program(libIris.Pic16_Firmware.ledp1)    
+  
+  #----------------------------------
+  #-- Grabar el programa de test 2
+  #----------------------------------
+  def test2_clicked(self,widget):  # wxGlade: MyFrame.<event_handler>
+    self.burn_program(libIris.Pic16_Firmware.ledp2) 
+  
+  #-----------------------------
+  #-- Grabar el bootloader
+  #-----------------------------
+  def boot_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.burn_program(bootloader)   
+  
+  
+  #------------------------------------------
+  #-- Boton Write (Pestana Avanzado)
+  #-- Escribir palabra de configuracion 
+  #------------------------------------------
+  def write_config_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.burn_config()
+    
+
+  #--------------------------------------------------------------------
+  #-- Boton Default (Pestana Avanzado)
+  #-- Establecer el valor por defecto de la palabra de configuracion 
+  #--------------------------------------------------------------------
+  def default_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.entry_config.SetValue("%04X" % DEFAULT_CONFIG_WORD);
+    
+    
+  #-----------------------------------------
+  #-- Cambio en la palabra de confiuracion  
+  #-----------------------------------------
+  def config_changed(self, event): # wxGlade: MyFrame.<event_handler>
+    #-- Leer el valor del entry
+    config_str = self.entry_config.GetValue()
+    #print "config_str: %s" % config_str
+    
+    #-- Comprobar si la cadena actual es valida o no
+    try:
+      #-- Convertir a un numero hexadecimal
+      self.config_word = int (config_str, 16);
+      
+      #-- Indicar que palabra correcta
+      self.config_ok=True;
+      
+    except ValueError:
+    
+      #-- Inicar que palabra incorrecta
+      self.config_ok=False;
+    
+    #-- La palabra de configuracion 0000 es peligrosa...
+    if self.config_ok:
+      if self.config_word==0:
+        self.statusbar.SetStatusText("CUIDADO!! Palabra de config. peligrosa")
+      else:
+        self.statusbar.SetStatusText(" ")
+        
+    #-- Actualizar estado del interfaz    
+    self.interfaz_estado(GUI_OK_PICP,force=True);    
+    
+  
+  #-------------------------------
+  #-- Boton de Detectar
+  #-- Comprobar el PIC destino
+  #-------------------------------
+  def check_clicked(self,widget): # wxGlade: MyFrame.<event_handler>
+    self.check_pic();
+  
+  
+  #-----------------------------
+  #-- Grabar el PICP
+  #-----------------------------
+  def picp_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    #print "Download picp"
+    self.download_program(libIris.Pic16_Firmware.picp) 
+  
+  
+#-----------------------------------------------------------------------#
+#                                                                       #
+#     FUNCIONES PARA IMPLEMENTAR LAS ACCIONES                           #
+#                                                                       #
+#-----------------------------------------------------------------------#
+  
+  #------------------------------------------------------------
+  #-- Abrir el puerto serie leyendo el dispositivo del entry
+  #-- DEVUELVE:
+  #--   -True: Ok
+  #--   -False: Error al abrir el puerto serie
+  #------------------------------------------------------------
+  def open_port(self):
+    #-- Primero obtener el nombre del dispositivo serie
+    serialName=self.entry_serial.GetValue()
+    
+    #-- Si habia un "Stargate" abierto, cerrarlo primero
+    if self.picp:
+      self.picp.close()
+    
+    #-- Abrir el puerto y crear el stargate
+    try:
+      self.picp = libStargate.Picp.Open(serialName, logCallback=None)
+      self.statusbar.SetStatusText("OK. Puerto serie Abierto",0);
+      
+      #-- Cambiar el estado de la GUI
+      self.interfaz_estado(GUI_OK_SERIAL);
+      return True
+      
+    except libStargate.Main.Error, msg:
+      self.picp = None
+      
+      #-- Si hay error indicarlo en la barra de estado y abortar
+      self.statusbar.SetStatusText("%s" % msg, 0)
+      
+      #-- Cambiar estado del interfaz
+      self.interfaz_estado(GUI_INICIAL);
+      return False  
+  
+  
+  #-----------------------------------------------------
+  #-- Detectar el PIC destino
+  #-- DEVUELVE:
+  #--   True: Pic detectado
+  #--   False: No detectado o error de comunicacion
+  #-----------------------------------------------------
+  def check_pic(self):
+    try:
+      id,config = self.picp.readConfig()
+    except: 
+      self.statusbar.SetStatusText("Error de comunicacion")
+      return False;
+      
+    if id!=0x3FFF and id!=0x00:  
+      self.statusbar.SetStatusText("PIC DETECTADO. ID: %04X. Palabra config: %04X"
+                                    % (id,config))   
+      return True;
+    else:
+      self.statusbar.SetStatusText("PIC DESTINO NO DETECTADO")   
+      return False;
+  
+  #------------------------------------
+  #-- Grabar palabra de configuracion
+  #------------------------------------
+  def burn_config(self):
+  
+    #-- Detectar pic destino. Si no esta se aborta
+    pic_detected=self.check_pic();
+    if (not pic_detected):
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR: PIC no detectado. Config word no Grabada")
+      self.update() 
+      return;
+  
+    #-- Grabar palabra de configuracion
+    try:
+      self.picp.writeConfig(self.config_word);
+    except:
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de comunicacion")
+      self.update()    
+      
+    #-- Actualizar barra de status
+    self.statusbar.SetStatusText("GRABADA PALABRA DE CONFIGURACION: %04X" 
+                                  % self.config_word)      
+  
+  #-----------------------
+  #-- Grabar firmware
+  #-----------------------
+  def burn_program(self,prog):  
+    
+    #-- Detectar pic destino. Si no esta se aborta
+    pic_detected=self.check_pic();
+    if (not pic_detected):
+      return;   
+
+    #-- Pasar al interfaz de "PROGRESO"
+    self.interfaz_estado(GUI_PROGESS)
+    
+    #-- Inicialmente no hay cancelacion
+    self.cancelar=False;
+    
+    #-- Grabar el programa
+    try:
+      ok=self.picp.writeProgram (prog,stateCallback=self.burn_state)
+    except libStargate.Picp.Error,msg:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("%s" % msg)
+      self.update()
+      
+      #-- Actualizar interfaz
+      self.interfaz_estado(GUI_OK_PICP)
+      
+      return;
+      
+    #-- El ok nos indica si se ha grabado bien o no
+    if not ok:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ABORTADO")
+      self.update()
+      
+      #-- Pasar al interfaz de "PICP"
+      self.interfaz_estado(GUI_OK_PICP)
+      
+      return
+
+      
+    #-- Grabar palabra de configuracion
+    try:
+      self.picp.writeConfig(self.config_word);
+    except:
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de comunicacion")
+      self.update()
+      return      
+      
+    #-- Actualizar barra de status
+    self.statusbar.SetStatusText("GRABADA PALABRA DE CONFIGURACION: %04X" 
+                                  % self.config_word)
+    self.update()                              
+    
+    #-- Pasar al interfaz de "PICP"
+    self.interfaz_estado(GUI_OK_PICP)
+    
+
+  #---------------------------------------------------------------------------#
+  #-- Funcion de estado por defecto
+  #-- Se invoca durante la grabacion
+  #-- Implementa el comportamiento segun el estado de la grabacion en curso
+  #---------------------------------------------------------------------------#
+  def burn_state(self,op,inc,total):
+
+    #--------------------------------------------------
+    #- Comienzo de la grabacion
+    #--------------------------------------------------
+    if op==libStargate.Picp.WRITING_START:
+    
+      self.grabado=0;
+    
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0)
+
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("GRABACION DEL PIC EN PROGRESO...")
+      self.update()      
+      return True
+     
+    
+    #------------------------------------------------
+    #--  Grabacion de una palabra
+    #------------------------------------------------    
+    elif op==libStargate.Picp.WRITING_INC:
+    
+      #-- Actualizar contador de bytes grabados
+      self.grabado=self.grabado+inc;
+    
+      #-- Actualizar barra de progreso
+      self.progressbar.SetValue(100*self.grabado/total) 
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+        
+      return True
+      
+    #------------------------------------
+    #-- Fin de la grabacion
+    #------------------------------------    
+    elif op==libStargate.Picp.WRITING_END:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("OK...")
+      self.update()
+      return True
+      
+    #----------------------------------
+    #-- Comienzo de la verificacion
+    #----------------------------------    
+    elif op==libStargate.Picp.VERIFYING_START:
+      
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("Verificacion de la grabacion...")
+      
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0) 
+      self.update()
+      
+      #-- Contador de bytes a 0
+      self.grabado=0;
+      
+      return True
+      
+    #-------------------------------------
+    #-- Error de verificacion
+    #-------------------------------------    
+    elif op==libStargate.Picp.VERIFYING_ERROR:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de verificacion")
+      self.update()
+      return False
+      
+    #-----------------------------------
+    #--  Verificacion de una palabra    
+    #------------------------------------
+    elif op==libStargate.Picp.VERIFYING_INC:
+      #-- Actualizar contador de bytes verificados
+      self.grabado=self.grabado+inc;
+    
+      #-- Actualizar barra de progreso
+      self.progressbar.SetValue(100*self.grabado/total) 
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+      
+      return True
+      
+    #--------------------------------------------
+    #-- Fin de la verificacion
+    #--------------------------------------------    
+    elif op==libStargate.Picp.VERIFYING_END:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("VERIFICACION OK")
+      self.progressbar.SetValue(100)
+      self.update()
+      
+      return True
+   
+    #-----------------------
+    #-- Evento desconocido  
+    #-----------------------    
+    else:
+      print "DESCONOCIDO: %d" % op
+      return False  
+
+  
+
+#-------------------------------------------------------------------------#
+#                                                                         #
+#   METODOS PARA LA DESCARGA DEL FIRMWARE PICP. INTERFAZ CON LA LIBIRIS   #
+#                                                                         #
+#-------------------------------------------------------------------------#
+  
+
+  #--------------------------------------------------------------
+  #- Metodo principal para descargar un programa en la skypic
+  #--------------------------------------------------------------
+  def download_program(self,prog):
+    #-- Poner la barra de progreso a 0
+    self.progressbar.SetValue(0)
+    self.update()
+    
+    #-- Desactivar flag de cancelacion
+    self.cancelar=False
+    
+    #--------------------------------------------------------------------
+    #-- Crear un objeto IRIS para la descarga de firmware. Se asocia
+    #-- al puerto serie abierto
+    #--------------------------------------------------------------------
+    
+    #-- Primero obtener el nombre del dispositivo serie
+    serialName=self.entry_serial.GetValue()
+    
+    #-- NOTA para Windows: Hay que cerrar el puerto serie, ya que sino
+    #-- al llamar al IRIS dara un error. En windows si un puerto serie ya
+    #-- esta abierto, no se puede abrir ningun otro (ni siquiera el mismo)
+    if self.picp:
+      self.picp.close()
+    
+    try:
+      self.iris = libIris.Pic16_Bootloader.Iris(serialName,logCallback=None)
+    except libIris.Pic16_Bootloader.IrisError,msg:
+    
+      #-- Si hay error indicarlo en la barra de estado y abortar
+      self.statusbar.SetStatusText("%s" % msg,0);
+      return
+    
+    #-- Hay que esperar a que detecte el Bootloader
+    self.statusbar.SetStatusText("Pulse Reset en la skypic",0);
+    
+    #-- Pasar al interfaz de "PROGRESO"
+    self.interfaz_estado(GUI_PROGESS)
+    self.update();
+    
+    #-- DESCARGAR EL FIRMWARE PICP!!!
+    try:
+      self.iris.download(prog,stateCallback=self.state)
+    except libIris.Pic16_Bootloader.IrisError,msg:
+      
+      #-- NOTA para Windows: Idem. Es necesario cerrar el puerto serie
+      self.iris.close()
+      
+      #-- Re-abrir el puerto serie
+      self.open_port()
+      self.statusbar.SetStatusText("%s" % msg,0);
+      return
+      
+    #-- NOTA para Windows: Idem. Es necesario cerrar el puerto serie
+    self.iris.close()    
+      
+    #-- SERVIDOR PICP cargado
+    #-- Re-abrir el puerto serie
+    self.open_port()
+    
+    self.statusbar.SetStatusText("Descarga completada",0);
+    
+      
+  #------------------------------------------------------------------------
+  #-- Funcion de retrollamada de libIris. Segun el estado de la descarga
+  #-- Se hace una cosa u otra
+  #------------------------------------------------------------------------  
+  def state(self,op,inc,total):
+    
+    #-----------------------------
+    #-- Comienzo de descarga
+    #-----------------------------
+    if op==libIris.Pic16_Bootloader.WRITING_START:
+
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0)
+
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("Descargando firmware...",0);
+      self.update()      
+      return True
+      
+    #------------------------------
+    #-- Incremento en la descarga  
+    #------------------------------    
+    elif op==libIris.Pic16_Bootloader.WRITING_INC:  
+      self.progressbar.SetValue(100*inc/total)      
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+        
+      return True
+
+    #-------------------------------
+    #-- Fin de la descarga
+    #-------------------------------
+    elif op==libIris.Pic16_Bootloader.WRITING_END: 
+      self.progressbar.SetValue(100)
+      self.statusbar.SetStatusText("Completado",0);
+      self.update()
+      return True
+      
+    #---------------------------------------------------
+    #-- Comienzo de la identificacion del bootloader    
+    #---------------------------------------------------    
+    elif op==libIris.Pic16_Bootloader.IDENT_START:
+      #-- Hay que esperar a que detecte el Bootloader
+      self.statusbar.SetStatusText("Pulse Reset en la skypic", 0)
+      self.update()
+      return True
+      
+      
+    #-----------------------------------------------------------------
+    #-- Respuesta no recibida del bootloader tras un mini-timeout    
+    #-----------------------------------------------------------------
+    elif op==libIris.Pic16_Bootloader.IDENT_NACK:
+    
+      #-- Mientras que el tiempo total acumulado sea menor que el 
+      #-- TIMEOUT indicado, continuar esperando
+      self.update()
+      
+      #-- Si apretado boton de cancelar abortar...
+      if self.cancelar:
+        return False
+      
+      if total<=TIMEOUT:
+       return True
+      else :
+        return False      
+
+#-----------------------------------------------------------------------------#
+#                                                                             #
+#              FUNCIONES DE GESTION DEL INTERFAZ                              #
+#                                                                             #
+#-----------------------------------------------------------------------------#
+  
+  #------------------------------------------------
+  #-- Procesar eventos pendientes del interfaz 
+  #------------------------------------------------
+  def update(self):
+    while (self.app.Pending()):
+        self.app.Dispatch();  
+  
+  #------------------------------------------------------------------------#
+  #-- Establecer estado interfaz. Esta funcion determina que partes del   
+  #-- interfaz estan activas en cada momento, segun la situacion
+  #--
+  #-- ESTADO DEL INTERFAZ
+  #--
+  #--   INICIAL:   Comienzo del programa. Puerto serie NO abierto
+  #--   OK_SERIAL: Puerto serie abierto correctamente
+  #--   OK_PICP:   Servidor PICP para la grabacion detectado
+  #--   PROGRESS:  Barra de progreso actualizandose
+  #-----------------------------------------------------------------------#
+  def interfaz_estado(self,state,force=False):
+    
+    #-- Por razones de eficiencia, el interfaz solo se actualiza si
+    #-- el nuevo estado es diferente del actual.
+    #-- Si el Flag force esta activado se actualiza el interfaz sin
+    #-- tener en cuenta esto
+    if self.estado_GUI==state and force==False:
+      return;
+    
+    #-- Cambiar al estado indicado
+    self.estado_GUI=state;
+    
+    #-----------------------------
+    #-- ESTADO INICIAL
+    #-----------------------------
+    if state==GUI_INICIAL:
+      
+      #-- Debug
+      #print "GUI Estado: INICIAL"
+      
+      #--- Activar combo del puerto serie
+      self.entry_serial.Enable();
+      
+      #-- El boton de Abrir es de Abrir
+      self.button_abrir_cerrar.SetLabel("  Abrir  ")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- STARGATE
+      self.button_picp.Disable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+     
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+      
+      #-- El temporizador en este estado debe estar parado
+      if self.timer.IsRunning():
+        self.timer.Stop()
+        
+      #-- no Hay conexion con PICP
+      self.label_conexion.SetLabel("SIN CONEXION\n")
+      self.icono_conexion.SetBitmap(self.imagen_off)
+      
+    #----------------------------
+    #-- ESTADO OK_SERIAL
+    #----------------------------    
+    elif state==GUI_OK_SERIAL:
+    
+      #-- Debug
+      #print "GUI Estado: GUI_OK_SERIAL"
+      
+      #-- Desactivar combo del puerto serie
+      self.entry_serial.Disable();
+      
+      #-- El boton de Abrir es ahora de Cerrar
+      self.button_abrir_cerrar.SetLabel("Cerrar")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- Se permite descargar el servidor PICP
+      self.button_picp.Enable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+      
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+      
+      #-- El temporizador se Activa, para comprobar la conexion con 
+      #-- la Skypic
+      self.timer.Start(PING_TIMEOUT,wx.TIMER_CONTINUOUS)
+      
+      #-- no Hay conexion con PICP
+      self.label_conexion.SetLabel("SIN CONEXION\n")
+      self.icono_conexion.SetBitmap(self.imagen_off)
+      
+    
+    #-------------------------
+    #-- ESTADO OK_PICP
+    #-------------------------    
+    elif state==GUI_OK_PICP:
+    
+      #-- Debug
+      #print "GUI Estado: GUI_OK_PICP"  
+
+      #-- Desactivar combo del puerto serie
+      self.entry_serial.Disable();
+      
+      #-- El boton de Abrir es ahora de Cerrar
+      self.button_abrir_cerrar.SetLabel("Cerrar")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- Se permite descargar el servidor PICP
+      self.button_picp.Disable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Enable()
+      self.button_search.Enable()
+      
+      #-- Actualizar el estado del interfaz
+      if self.file_ok:
+        self.button_grabar.Enable()
+      else:
+        self.button_grabar.Disable()
+      
+      
+      #-- FIRMWARE
+      self.button_boot.Enable()
+      self.button_test.Enable()
+      self.button_test2.Enable()
+      
+      #-- STARGATE
+      self.button_picp.Disable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+     
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Enable()
+      self.entry_config.Enable()
+      
+      #-- Si la palabra de configuracion actual es distinta de la 
+      #-- que hay por defecto, se activa el boton de default
+      if self.config_word!=DEFAULT_CONFIG_WORD:
+        self.button_default.Enable()
+      else:
+        self.button_default.Disable()  
+    
+      #-- El boton de write solo se activa si la palabra de 
+      #-- config. es correcta.
+      if self.config_ok:
+        self.button_write_config.Enable()
+      else:
+        self.button_write_config.Disable()
+      
+      
+      
+      #-- El temporizador se Activa, para comprobar la conexion con 
+      #-- la Skypic
+      self.timer.Start(PING_TIMEOUT,wx.TIMER_CONTINUOUS)
+
+      #-- Hay conexion con PICP: Indicarlo
+      self.label_conexion.SetLabel("CONECTADA")
+      self.icono_conexion.SetBitmap(self.imagen_on)
+      
+    #----------------------------
+    #-- ESTADO: PROGRESS
+    #----------------------------    
+    elif state==GUI_PROGESS:
+      #-- Debug
+      #print "GUI Estado: GUI_PROGESS"
+      
+      #-- El temporizador en este estado debe estar parado
+      if self.timer.IsRunning():
+        self.timer.Stop()
+        
+      #-- Boton de cancelacion activa
+      self.button_cancel.Enable() 
+
+      #-- Boton de descarga deshabilitado
+      self.button_picp.Disable()
+      
+      #--- Activar combo del puerto serie
+      self.entry_serial.Disable()
+      
+      #-- Desactivar boton de abrir/cerrar
+      self.button_abrir_cerrar.Disable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+
+    else:
+      print "Estado GUI NO implementado"    
+      
+
+# end of class MyFrame
+
+
+#---------------------------------------------------------
+#-- Funcion para obtener  la lista de puerto serie
+#-- Esto depende de la plataforma en la que se ejecute
+#---------------------------------------------------------
+def getSerialPorts():
+
+  #-- Windows
+  if os.name == 'nt':
+    
+    #-- Se usan los cinco primeros puertos serie
+    return ["","COM1","COM2","COM3","COM4","COM5"]
+    
+  #-- Linux  
+  elif os.name == 'posix':
+    return ["","/dev/ttyS0","/dev/ttyS1","/dev/ttyUSB0","/dev/ttyUSB1"]
+
+  else:
+    return []
+
+
+#---------------------------------------------------
+#-  Aplicacion principal
+#---------------------------------------------------
+class MyApp(wx.App):
+      
+    def OnInit(self):
+        self.iris=None
+        frame = MyFrame(self,None, -1, "")
+        frame.Show(True)
+        self.SetTopWindow(frame)
+        
+        #-- Anadir los nombres de los puertos serie al combobox
+        serialports = getSerialPorts()
+        for disp in serialports:
+          frame.entry_serial.Append(disp) 
+            
+        return True
+        
+    def OnExit(self):
+        print "Fin..."
+
+
+#-------------------------------
+#-  METODO DE ENTRADA
+#-------------------------------
+def start():
+    app = MyApp(0)
+    app.MainLoop()
+
+
+if __name__ == "__main__":
+    start()
diff --git a/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/pixmaps/off.xpm 
b/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/pixmaps/off.xpm
new file mode 100644
index 0000000..9705021
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/pixmaps/off.xpm
@@ -0,0 +1,197 @@
+/* XPM */
+static char * off_xpm[] = {
+"35 35 159 2",
+"      c None",
+".     c #E8E8E8",
+"+     c #A3A3A3",
+"@     c #E5E5E5",
+"#     c #E4E4E4",
+"$     c #D9D9D9",
+"%     c #D8D8D8",
+"&     c #B6B6B6",
+"*     c #3C3C3C",
+"=     c #303030",
+"-     c #E0E0E0",
+";     c #DCDCDC",
+">     c #D2D2D2",
+",     c #747474",
+"'     c #323232",
+")     c #D6D6D6",
+"!     c #DADADA",
+"~     c #D7D7D7",
+"{     c #B0B0B0",
+"]     c #464646",
+"^     c #C2C2C2",
+"/     c #BDBDBD",
+"(     c #BABABA",
+"_     c #737373",
+":     c #BEBEBE",
+"<     c #B8B8B8",
+"[     c #AFAFAF",
+"}     c #4E4E4E",
+"|     c #A8A8AC",
+"1     c #99999B",
+"2     c #A8A8AE",
+"3     c #B2B2B5",
+"4     c #AFAFB4",
+"5     c #B1B1B4",
+"6     c #B3B3B5",
+"7     c #B0B0B4",
+"8     c #B4B4B6",
+"9     c #3CE464",
+"0     c #34E75E",
+"a     c #22AF4B",
+"b     c #959595",
+"c     c #B9B9BC",
+"d     c #ABABAF",
+"e     c #A3A3A7",
+"f     c #BBBBBF",
+"g     c #AFAFB3",
+"h     c #A2A2A6",
+"i     c #B8B8BB",
+"j     c #B4B4B8",
+"k     c #9F9FA3",
+"l     c #53A76E",
+"m     c #4DA569",
+"n     c #4FA66A",
+"o     c #ADADAD",
+"p     c #929294",
+"q     c #ABABAC",
+"r     c #A9A9AA",
+"s     c #AEAEB0",
+"t     c #ACACAD",
+"u     c #ADADAF",
+"v     c #ADADAE",
+"w     c #AAAAAB",
+"x     c #B6B6B7",
+"y     c #BDBDBE",
+"z     c #C1C1C1",
+"A     c #C3C3C3",
+"B     c #BEBEBF",
+"C     c #9C9C9E",
+"D     c #A4A4A4",
+"E     c #9E9E9F",
+"F     c #A6A6A8",
+"G     c #B3B3B3",
+"H     c #A7A7A8",
+"I     c #A6A6A6",
+"J     c #A7A7A7",
+"K     c #B2B2B2",
+"L     c #ACACAE",
+"M     c #AFAFB1",
+"N     c #B2B2B4",
+"O     c #A9A9AC",
+"P     c #989898",
+"Q     c #939393",
+"R     c #979797",
+"S     c #AEAEAE",
+"T     c #C9C9C9",
+"U     c #A5A5A5",
+"V     c #4F4F4F",
+"W     c #4D4D4D",
+"X     c #454545",
+"Y     c #7F7F7F",
+"Z     c #5E5E5E",
+"`     c #404040",
+" .    c #BFBFBF",
+"..    c #797979",
+"+.    c #4A4A4A",
+"@.    c #FF7878",
+"#.    c #CD553E",
+"$.    c #888888",
+"%.    c #545454",
+"&.    c #FF4E4E",
+"*.    c #FF4848",
+"=.    c #F9403D",
+"-.    c #C03619",
+";.    c #FD7C7C",
+">.    c #FF7979",
+",.    c #FB706E",
+"'.    c #CB5038",
+").    c #DD9A50",
+"!.    c #E1AD57",
+"~.    c #D49F4B",
+"{.    c #F0634C",
+"].    c #FE4140",
+"^.    c #BE391B",
+"/.    c #D19494",
+"(.    c #FB6E6E",
+"_.    c #FF6565",
+":.    c #CD4730",
+"<.    c #E6BF22",
+"[.    c #FF8D41",
+"}.    c #FF4949",
+"|.    c #F6423E",
+"1.    c #B4442A",
+"2.    c #BAAFAA",
+"3.    c #BCBCBC",
+"4.    c #7E7E7E",
+"5.    c #5D5D5E",
+"6.    c #565656",
+"7.    c #C0623A",
+"8.    c #FF6060",
+"9.    c #FF5959",
+"0.    c #DE4536",
+"a.    c #FF4A4A",
+"b.    c #FD4443",
+"c.    c #A5351C",
+"d.    c #59463E",
+"e.    c #505050",
+"f.    c #BE5131",
+"g.    c #FF5353",
+"h.    c #FF4444",
+"i.    c #BA3617",
+"j.    c #5A3004",
+"k.    c #FF5050",
+"l.    c #FF3F3F",
+"m.    c #CD331C",
+"n.    c #FF4545",
+"o.    c #CE3721",
+"p.    c #FF3737",
+"q.    c #FD3030",
+"r.    c #CB2C14",
+"s.    c #F7433F",
+"t.    c #BD3617",
+"u.    c #FF2A2A",
+"v.    c #FC2827",
+"w.    c #CD2C15",
+"x.    c #FF5454",
+"y.    c #F84643",
+"z.    c #FF2828",
+"A.    c #FF5757",
+"B.    c #BD391A",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                . . . . . . . . . . . . . . . . . . . . . . . . +     ",
+"            @ # $ % % % % % % % % % % % % % % % % % % % % % % & * =   ",
+"        . - ; % % % % % % % % % % % % % % % % % % % % % % % > , ' =   ",
+"    ) % ! ~ ~ ) ~ ~ ) ~ ) ) ) ~ ~ ) ~ ) ) ) ~ ~ ) ~ ) ~ ) ) { ] = =   ",
+"  % ^ / / / / / / / / / / / / / / / / / / / / / / / / / / ( _ = = =   ",
+"  % : < < < < < < < < < < < < < < < < < < < < < < < < < < [ } = = =   ",
+"  % : < | 1 2 3 4 5 6 7 7 8 < < < < < < < < < < 9 0 a < < [ } = = =   ",
+"  % : < b c d e f g h i j k < < < < < < < < < < l m n < < [ } = = =   ",
+"  % : < o p q r s t r u v w < < < < < < < < < < < < < < < [ } = = =   ",
+"  % : x y z A A A A A A A A A A A A A A A A A A A A A B & [ } = = =   ",
+"  % : w C D D D D D D D D D D D D D D D D D D D D D D E F [ } = = =   ",
+"  % : G H I I I I I I I I I I I I I I I I I I I I I I J K [ } = = =   ",
+"  % : L M / / / / / / / / / / / / / / / / / / / / / / N O [ } = =     ",
+"  % : { P Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R S [ } =       ",
+"  T K o o o o o o o o o o o o o o o o o o o o o o o o o o U } =       ",
+"    V W W W W W W W W W W W W W W W W W W W W W W W W W W W X         ",
+"                              Y Z `                                   ",
+"                               ...+.                                  ",
+"                      @   #   % $.%.  &.*.=.-.                        ",
+"                      ;.>.,.'.).!.~.{.*.].^.                          ",
+"     .z z z z z z z z z /.(._.:.<.[.}.|.1.2.z z z z z z z z 3.4.      ",
+"    5.6.6.6.6.6.6.6.6.6.6.7.8.9.0.a.b.c.d.6.6.6.6.6.6.6.6.6.e.X       ",
+"                            f.g.}.h.i.j.                              ",
+"                            k.a.h.l.m.                                ",
+"                          k.&.n.o.p.q.r.                              ",
+"                        k.&.s.t.    u.v.w.                            ",
+"                      x.&.y.-.        z.z.w.                          ",
+"                    A.k.}.B.          z.z.v.r.                        "};
diff --git a/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/pixmaps/on.xpm 
b/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/pixmaps/on.xpm
new file mode 100644
index 0000000..1288a00
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/build/lib.linux-i686-2.7/pyburn_wx/pixmaps/on.xpm
@@ -0,0 +1,160 @@
+/* XPM */
+static char * on_xpm[] = {
+"35 35 122 2",
+"      c None",
+".     c #F1F1F1",
+"+     c #EFEFEF",
+"@     c #EBEBEB",
+"#     c #EAEAEA",
+"$     c #E1E1E1",
+"%     c #7F7F7F",
+"&     c #333333",
+"*     c #F8F8F8",
+"=     c #F3F3F3",
+"-     c #EDEDED",
+";     c #E2E2E2",
+">     c #DDDDDD",
+",     c #A4A4A4",
+"'     c #3A3A3A",
+")     c #F2F2F2",
+"!     c #ECECEC",
+"~     c #E8E8E8",
+"{     c #CBCBCB",
+"]     c #626262",
+"^     c #343434",
+"/     c #D6D6D6",
+"(     c #D5D5D5",
+"_     c #D8D8D8",
+":     c #D9D9D9",
+"<     c #D4D4D4",
+"[     c #9D9D9D",
+"}     c #3E3E3E",
+"|     c #D7D7D7",
+"1     c #BFBFBF",
+"2     c #BABABA",
+"3     c #B4B4B4",
+"4     c #B9B9B9",
+"5     c #B2B2B2",
+"6     c #AFAFB0",
+"7     c #A9A9A9",
+"8     c #AEAEAF",
+"9     c #B1B1B1",
+"0     c #B0B0B0",
+"a     c #B1B1B2",
+"b     c #97C3A2",
+"c     c #95C4A1",
+"d     c #96B298",
+"e     c #AAAAAA",
+"f     c #535353",
+"g     c #9D9D9E",
+"h     c #B2B2B5",
+"i     c #B2B2B4",
+"j     c #C0C0C2",
+"k     c #B9B9BB",
+"l     c #BEBEC0",
+"m     c #BCBCBE",
+"n     c #AEAEB0",
+"o     c #3BCA53",
+"p     c #33CC4C",
+"q     c #36A63C",
+"r     c #959595",
+"s     c #A6A6A8",
+"t     c #9C9C9E",
+"u     c #969698",
+"v     c #A8A8AB",
+"w     c #A0A0A2",
+"x     c #959597",
+"y     c #A3A3A5",
+"z     c #959596",
+"A     c #97AD97",
+"B     c #95AC95",
+"C     c #96AC96",
+"D     c #999999",
+"E     c #BBBBBB",
+"F     c #C5C5C6",
+"G     c #C9C9CA",
+"H     c #ADADAE",
+"I     c #E3E3E3",
+"J     c #A4A4A5",
+"K     c #878787",
+"L     c #848484",
+"M     c #868686",
+"N     c #A1A1A1",
+"O     c #BFBFC0",
+"P     c #C2C2C2",
+"Q     c #919191",
+"R     c #949494",
+"S     c #929292",
+"T     c #A1A1A2",
+"U     c #AEAEAE",
+"V     c #ADADAD",
+"W     c #A7A7A7",
+"X     c #8E8E8E",
+"Y     c #898989",
+"Z     c #424242",
+"`     c #404040",
+" .    c #414141",
+"..    c #747474",
+"+.    c #494949",
+"@.    c #C7C7C7",
+"#.    c #7E7E7E",
+"$.    c #505050",
+"%.    c #DDD5BF",
+"&.    c #938D7D",
+"*.    c #676151",
+"=.    c #FFDF33",
+"-.    c #FFCC29",
+";.    c #E9BF53",
+">.    c #ECB664",
+",.    c #A2A2A3",
+"'.    c #A3A3A3",
+").    c #F3BA24",
+"!.    c #FFBD12",
+"~.    c #D8A534",
+"{.    c #9C9488",
+"].    c #6E6E6E",
+"^.    c #5F5F5F",
+"/.    c #3C3C3C",
+"(.    c #96642E",
+"_.    c #9D6325",
+":.    c #98622B",
+"<.    c #594530",
+"[.    c #3A3A33",
+"}.    c #383838",
+"|.    c #804000",
+"1.    c #7D3F00",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                . + @ # # # # # # # # # # # # # # # # # # # # $ % &   ",
+"          * = - ; > > > > > > > > > > > > > > > > > > > > > > , ' &   ",
+"        ) ! # ~ ; > > > > > > > > > > > > > > > > > > > > > { ] ^ &   ",
+"    / ( _ : : : _ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( / / ( < [ } & &   ",
+"  | 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 ] & & &   ",
+"  | 4 5 6 7 8 9 6 0 9 6 0 a 5 5 5 5 5 5 5 5 5 5 b c d 5 5 e f & & &   ",
+"  | 4 5 g 9 h i j k i l m n 5 5 5 5 5 5 5 5 5 5 o p q 5 5 e f & & &   ",
+"  | 4 5 r s t u v w x s y z 5 5 5 5 5 5 5 5 5 5 A B C 5 5 e f & & &   ",
+"  : 4 5 5 D 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 e f & & &   ",
+"  $ E 8 F | | | | | | | | | | | | | | | | | | | | | | G H e f & & &   ",
+"  I E J K L L L L L L L L L L L L L L L L L L L L L L M N e f & & &   ",
+"  I E 6 O { { { { { { { { { { { { { { { { { { { { { { P 6 e f & &     ",
+"  I E J Q R R R R R R R R R R R R R R R R R R R R R R S T e f & &     ",
+"  I E 9 U V V V V V V V V V V V V V V V V V V V V V V U 9 e f &       ",
+"  W S X X X X X X X X X X X X X X X X X X X X X X X X X X Y f &       ",
+"    Z ` ` ` ` ` ` ` ` ` ` ` ` Z  .` ` ` ` ` ` ` ` ` ` ` ` ` }         ",
+"                              5 ..+.                                  ",
+"                              @.#.$.                                  ",
+"                              %.&.*.                                  ",
+"                            =.=.=.-.;.>.                              ",
+"    ,.'.'.'.'.'.'.'.'.'.'.).!.!.!.~.{.'.'.'.'.'.'.'.'.'.'.'.D ].^.    ",
+"    } /./././././././././.(._._._.:.<.[././././././././././.' }.      ",
+"                            |.|.|.|.1.                                ",
+"                                                                      "};
diff --git a/chronopic-firmware/pyburn-wx-1.0/build/scripts-2.7/pyburn-wx.py 
b/chronopic-firmware/pyburn-wx-1.0/build/scripts-2.7/pyburn-wx.py
new file mode 100644
index 0000000..93e8d1e
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/build/scripts-2.7/pyburn-wx.py
@@ -0,0 +1,11 @@
+#!/usr/bin/python
+
+##This will work in development on a relative folder basis
+##It will then work when installed in site-packages on a target system
+##where the runner script is in /usr/bin (or wherever)
+##
+##So, you don't need anything special - no fancy path tricks.
+
+import pyburn_wx.main
+
+pyburn_wx.main.start()
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/all-wcprops 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/all-wcprops
new file mode 100644
index 0000000..55af51b
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/all-wcprops
@@ -0,0 +1,47 @@
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/pyburn/!svn/ver/71/pyburn-wx/pyburn-wx-1.0/debian
+END
+control
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/pyburn/!svn/ver/71/pyburn-wx/pyburn-wx-1.0/debian/control
+END
+compat
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/debian/compat
+END
+pyburn-wx.manpages
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/debian/pyburn-wx.manpages
+END
+changelog
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/debian/changelog
+END
+copyright
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/debian/copyright
+END
+pyburn-wx.xml
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/debian/pyburn-wx.xml
+END
+rules
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/debian/rules
+END
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/entries 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/entries
new file mode 100644
index 0000000..8160fb2
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/entries
@@ -0,0 +1,266 @@
+10
+
+dir
+71
+http://svn.iearobotics.com/pyburn/pyburn-wx/pyburn-wx-1.0/debian
+http://svn.iearobotics.com/pyburn
+
+
+
+2009-09-16T19:53:10.220670Z
+71
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+81021e76-403d-0410-8966-deacf4f2e7aa
+
+control
+file
+
+
+
+
+2012-07-19T14:49:14.691899Z
+e808a2d62e3fcc0424302890f67160e2
+2009-09-16T19:53:10.220670Z
+71
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+752
+
+compat
+file
+
+
+
+
+2012-07-19T14:49:14.691899Z
+1dcca23355272056f04fe8bf20edfce0
+2008-09-26T08:04:59.417986Z
+60
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2
+
+pyburn-wx.manpages
+file
+
+
+
+
+2012-07-19T14:49:14.691899Z
+026300bf23b4c68b0cb2af7995e10dc7
+2008-09-26T10:35:47.413753Z
+63
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+19
+
+changelog
+file
+
+
+
+
+2012-07-19T14:49:14.691899Z
+fa2f1ba24acd8add6b69cbe2807d536a
+2008-09-26T08:04:59.417986Z
+60
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+191
+
+copyright
+file
+
+
+
+
+2012-07-19T14:49:14.691899Z
+5644ab3270e60c4043bc3ed83e7da1c2
+2008-09-26T08:04:59.417986Z
+60
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1395
+
+pyburn-wx.xml
+file
+
+
+
+
+2012-07-19T14:49:14.695899Z
+87695bb5c5875c0347209511d40e14f6
+2008-09-26T07:42:19.775363Z
+59
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3031
+
+rules
+file
+
+
+
+
+2012-07-19T14:49:14.695899Z
+4d3f9bc7615843faf8089ef394310ac4
+2008-09-26T08:19:36.519587Z
+61
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+460
+
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/changelog.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/changelog.svn-base
new file mode 100644
index 0000000..a57dd8f
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/changelog.svn-base
@@ -0,0 +1,6 @@
+pyburn-wx (1.0-1) unstable; urgency=low
+
+  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>
+
+ -- Juan Gonzalez <juan iearobotics com>  Fri, 26 Sep 2008 09:50:53 +0200
+
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/compat.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/compat.svn-base
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/compat.svn-base
@@ -0,0 +1 @@
+5
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/control.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/control.svn-base
new file mode 100644
index 0000000..18b8096
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/control.svn-base
@@ -0,0 +1,15 @@
+Source: pyburn-wx
+Section: electronics
+Priority: optional
+Maintainer: Juan Gonzalez <juan iearobotics com>
+Build-Depends: python-support (>= 0.3), cdbs, docbook-xsl, debhelper(>= 5.0.37.2)
+Standards-Version: 3.7.2
+XS-Python-Version: all
+
+Package: pyburn-wx
+Architecture: any
+Depends: ${python:Depends}, python-libiris, python-libstargate
+XB-Python-Version: ${python:Versions}
+Description: Grabacion de microcontroladores PICs (a bajo nivel) usando la tarjeta Skypic
+ Grabacion de PICs mediante una interfaz grafica muy sencilla. Permite grabar ficheros .hex. Tanto el 
Bootloader como dos programas de test que hacen parpadear un led se pueden grabar con solo apretar un boton.  
+ Mas informacion: http://www.iearobotics.com/wiki/index.php?title=Pyburn
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/copyright.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/copyright.svn-base
new file mode 100644
index 0000000..bdbbb5a
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/copyright.svn-base
@@ -0,0 +1,35 @@
+This package was debianized by Juan Gonzalez <juan iearobotics com> on
+Fri, 26 Sep 2008 09:50:53 +0200.
+
+It was downloaded from <fill in http/ftp site>
+
+Upstream Author: <put author(s) name and email here>
+
+Copyright: <put the year(s) of the copyright, and the names of the
+            copyright holder(s) here>
+
+License:
+
+   This package is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This package is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this package; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+The Debian packaging is (C) 2008, Juan Gonzalez <juan iearobotics com> and
+is licensed under the GPL, see above.
+
+
+# Please also look if there are files or directories which have a
+# different copyright/license attached and list them here.
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/pyburn-wx.manpages.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/pyburn-wx.manpages.svn-base
new file mode 100644
index 0000000..2d5f980
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/pyburn-wx.manpages.svn-base
@@ -0,0 +1 @@
+debian/pyburn-wx.1
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/pyburn-wx.xml.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/pyburn-wx.xml.svn-base
new file mode 100644
index 0000000..42e4fe7
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/pyburn-wx.xml.svn-base
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" 
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"; [
+<!--
+
+Process this file with an XSLT processor: `xsltproc \
+-''-nonet /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
+manpages/docbook.xsl manpage.dbk'.  A manual page
+<package>.<section> will be generated.  You may view the
+manual page with: nroff -man <package>.<section> | less'.  A
+typical entry in a Makefile or Makefile.am is:
+
+DB2MAN=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
+manpages/docbook.xsl
+XP=xsltproc -''-nonet
+
+manpage.1: manpage.dbk
+        $(XP) $(DB2MAN) $<
+    
+The xsltproc binary is found in the xsltproc package.  The
+XSL files are in docbook-xsl.  Please remember that if you
+create the nroff version in one of the debian/rules file
+targets (such as build), you will need to include xsltproc
+and docbook-xsl in your Build-Depends control field.
+
+--><!-- Fill in your name for FIRSTNAME and SURNAME. --><!ENTITY dhfirstname "<firstname>Juan</firstname>">
+<!ENTITY dhsurname "<surname>Gonzalez</surname>">
+<!-- Please adjust the date whenever revising the manpage. --><!ENTITY dhdate "<date>Septiembre 26, 
2008</date>">
+<!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+       allowed: see man(7), man(1). --><!ENTITY dhsection "<manvolnum>1</manvolnum>">
+<!ENTITY dhemail "<email>juan iearobotics com</email>">
+<!ENTITY dhusername "Juan Gonzalez">
+<!ENTITY dhucpackage "<refentrytitle>PYBURN-WX</refentrytitle>">
+<!ENTITY dhpackage "pyburn-wx">
+<!ENTITY debian "<productname>Debian</productname>">
+<!ENTITY gnu "<acronym>GNU</acronym>">
+<!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+<refentry>
+  <refmeta>
+    &dhucpackage;
+
+    &dhsection;
+  </refmeta>
+  <refnamediv>
+    <refname>&dhpackage;</refname>
+    <refpurpose>Grabacion de firmware en microcontroladores PICS usando la tarjeta Skypic como grabadora. 
+  </refpurpose>
+  </refnamediv>
+  <refsect1>
+    <title>DESCRIPTION</title>
+    <para>
+     Grabacion de PICs mediante una interfaz grafica muy sencilla. Permite grabar ficheros .hex. 
+     Tanto el Bootloader como dos programas de test que hacen parpadear un led se pueden grabar
+     con solo apretar un boton.
+     Mas informacion:
+      http://www.iearobotics.com/wiki/index.php?title=Pyburn
+    </para>
+    
+
+  <refsect1>
+    <title>AUTOR</title>
+    <para> Juan Gonzalez  <email>juan iearobotics com</email> </para>
+    
+  </refsect1>    
+    
+   
+  </refsect1>
+  
+  <refsect1>
+    <title>LICENCIA</title>
+    <para>This manual page was written for
+      the &debian; system (but may be used by others).  Permission is
+      granted to copy, distribute and/or modify this document under
+      the terms of the &gnu; General Public License, Version 2 any 
+         later version published by the Free Software Foundation.
+    </para>
+    <para>
+         On Debian systems, the complete text of the GNU General Public
+         License can be found in /usr/share/common-licenses/GPL.
+       </para>
+  </refsect1>
+</refentry>
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/rules.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/rules.svn-base
new file mode 100644
index 0000000..c26a541
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/.svn/text-base/rules.svn-base
@@ -0,0 +1,18 @@
+#!/usr/bin/make -f
+  
+DEB_PYTHON_SYSTEM=pycentral
+DBK2MAN_XSL=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/python-distutils.mk
+
+NAME=pyburn-wx
+
+build/$(NAME)::
+       xsltproc -o debian/$(NAME) --nonet $(DBK2MAN_XSL) debian/$(NAME).xml
+
+install/$(NAME)::
+       mv $(CURDIR)/debian/$(NAME)/usr/bin/$(NAME).py $(CURDIR)/debian/$(NAME)/usr/bin/$(NAME)
+       
+clean::
+       rm -f $(NAME).1
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/changelog 
b/chronopic-firmware/pyburn-wx-1.0/debian/changelog
new file mode 100644
index 0000000..a57dd8f
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/changelog
@@ -0,0 +1,6 @@
+pyburn-wx (1.0-1) unstable; urgency=low
+
+  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>
+
+ -- Juan Gonzalez <juan iearobotics com>  Fri, 26 Sep 2008 09:50:53 +0200
+
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/compat b/chronopic-firmware/pyburn-wx-1.0/debian/compat
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/control b/chronopic-firmware/pyburn-wx-1.0/debian/control
new file mode 100644
index 0000000..18b8096
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/control
@@ -0,0 +1,15 @@
+Source: pyburn-wx
+Section: electronics
+Priority: optional
+Maintainer: Juan Gonzalez <juan iearobotics com>
+Build-Depends: python-support (>= 0.3), cdbs, docbook-xsl, debhelper(>= 5.0.37.2)
+Standards-Version: 3.7.2
+XS-Python-Version: all
+
+Package: pyburn-wx
+Architecture: any
+Depends: ${python:Depends}, python-libiris, python-libstargate
+XB-Python-Version: ${python:Versions}
+Description: Grabacion de microcontroladores PICs (a bajo nivel) usando la tarjeta Skypic
+ Grabacion de PICs mediante una interfaz grafica muy sencilla. Permite grabar ficheros .hex. Tanto el 
Bootloader como dos programas de test que hacen parpadear un led se pueden grabar con solo apretar un boton.  
+ Mas informacion: http://www.iearobotics.com/wiki/index.php?title=Pyburn
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/copyright 
b/chronopic-firmware/pyburn-wx-1.0/debian/copyright
new file mode 100644
index 0000000..bdbbb5a
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/copyright
@@ -0,0 +1,35 @@
+This package was debianized by Juan Gonzalez <juan iearobotics com> on
+Fri, 26 Sep 2008 09:50:53 +0200.
+
+It was downloaded from <fill in http/ftp site>
+
+Upstream Author: <put author(s) name and email here>
+
+Copyright: <put the year(s) of the copyright, and the names of the
+            copyright holder(s) here>
+
+License:
+
+   This package is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This package is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this package; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+The Debian packaging is (C) 2008, Juan Gonzalez <juan iearobotics com> and
+is licensed under the GPL, see above.
+
+
+# Please also look if there are files or directories which have a
+# different copyright/license attached and list them here.
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/pyburn-wx.manpages 
b/chronopic-firmware/pyburn-wx-1.0/debian/pyburn-wx.manpages
new file mode 100644
index 0000000..2d5f980
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/pyburn-wx.manpages
@@ -0,0 +1 @@
+debian/pyburn-wx.1
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/pyburn-wx.xml 
b/chronopic-firmware/pyburn-wx-1.0/debian/pyburn-wx.xml
new file mode 100644
index 0000000..42e4fe7
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/pyburn-wx.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" 
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"; [
+<!--
+
+Process this file with an XSLT processor: `xsltproc \
+-''-nonet /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
+manpages/docbook.xsl manpage.dbk'.  A manual page
+<package>.<section> will be generated.  You may view the
+manual page with: nroff -man <package>.<section> | less'.  A
+typical entry in a Makefile or Makefile.am is:
+
+DB2MAN=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
+manpages/docbook.xsl
+XP=xsltproc -''-nonet
+
+manpage.1: manpage.dbk
+        $(XP) $(DB2MAN) $<
+    
+The xsltproc binary is found in the xsltproc package.  The
+XSL files are in docbook-xsl.  Please remember that if you
+create the nroff version in one of the debian/rules file
+targets (such as build), you will need to include xsltproc
+and docbook-xsl in your Build-Depends control field.
+
+--><!-- Fill in your name for FIRSTNAME and SURNAME. --><!ENTITY dhfirstname "<firstname>Juan</firstname>">
+<!ENTITY dhsurname "<surname>Gonzalez</surname>">
+<!-- Please adjust the date whenever revising the manpage. --><!ENTITY dhdate "<date>Septiembre 26, 
2008</date>">
+<!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+       allowed: see man(7), man(1). --><!ENTITY dhsection "<manvolnum>1</manvolnum>">
+<!ENTITY dhemail "<email>juan iearobotics com</email>">
+<!ENTITY dhusername "Juan Gonzalez">
+<!ENTITY dhucpackage "<refentrytitle>PYBURN-WX</refentrytitle>">
+<!ENTITY dhpackage "pyburn-wx">
+<!ENTITY debian "<productname>Debian</productname>">
+<!ENTITY gnu "<acronym>GNU</acronym>">
+<!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
+]>
+<refentry>
+  <refmeta>
+    &dhucpackage;
+
+    &dhsection;
+  </refmeta>
+  <refnamediv>
+    <refname>&dhpackage;</refname>
+    <refpurpose>Grabacion de firmware en microcontroladores PICS usando la tarjeta Skypic como grabadora. 
+  </refpurpose>
+  </refnamediv>
+  <refsect1>
+    <title>DESCRIPTION</title>
+    <para>
+     Grabacion de PICs mediante una interfaz grafica muy sencilla. Permite grabar ficheros .hex. 
+     Tanto el Bootloader como dos programas de test que hacen parpadear un led se pueden grabar
+     con solo apretar un boton.
+     Mas informacion:
+      http://www.iearobotics.com/wiki/index.php?title=Pyburn
+    </para>
+    
+
+  <refsect1>
+    <title>AUTOR</title>
+    <para> Juan Gonzalez  <email>juan iearobotics com</email> </para>
+    
+  </refsect1>    
+    
+   
+  </refsect1>
+  
+  <refsect1>
+    <title>LICENCIA</title>
+    <para>This manual page was written for
+      the &debian; system (but may be used by others).  Permission is
+      granted to copy, distribute and/or modify this document under
+      the terms of the &gnu; General Public License, Version 2 any 
+         later version published by the Free Software Foundation.
+    </para>
+    <para>
+         On Debian systems, the complete text of the GNU General Public
+         License can be found in /usr/share/common-licenses/GPL.
+       </para>
+  </refsect1>
+</refentry>
diff --git a/chronopic-firmware/pyburn-wx-1.0/debian/rules b/chronopic-firmware/pyburn-wx-1.0/debian/rules
new file mode 100644
index 0000000..c26a541
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/debian/rules
@@ -0,0 +1,18 @@
+#!/usr/bin/make -f
+  
+DEB_PYTHON_SYSTEM=pycentral
+DBK2MAN_XSL=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/python-distutils.mk
+
+NAME=pyburn-wx
+
+build/$(NAME)::
+       xsltproc -o debian/$(NAME) --nonet $(DBK2MAN_XSL) debian/$(NAME).xml
+
+install/$(NAME)::
+       mv $(CURDIR)/debian/$(NAME)/usr/bin/$(NAME).py $(CURDIR)/debian/$(NAME)/usr/bin/$(NAME)
+       
+clean::
+       rm -f $(NAME).1
diff --git a/chronopic-firmware/pyburn-wx-1.0/make_man b/chronopic-firmware/pyburn-wx-1.0/make_man
new file mode 100644
index 0000000..5e550a7
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/make_man
@@ -0,0 +1,19 @@
+#!/usr/bin/make -f
+
+all: man
+  
+DBK2MAN_XSL=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl
+
+NAME=pyburn-wx
+NUM=1
+TARGET=$(NAME).$(NUM)
+
+man:: debian/$(TARGET)
+
+debian/$(TARGET): debian/$(NAME).xml
+       xsltproc  -o debian/$(TARGET) --nonet $(DBK2MAN_XSL)   debian/$(NAME).xml 
+
+
+view:: debian/$(TARGET)
+       nroff -man debian/$(TARGET) | less
+
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn-wx.prj b/chronopic-firmware/pyburn-wx-1.0/pyburn-wx.prj
new file mode 100644
index 0000000..25131ec
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn-wx.prj
@@ -0,0 +1,124 @@
+# Anjuta Version 1.2.4a 
+Compatibility Level: 1 
+
+<PROJECT_DESCRIPTION_START>
+<PROJECT_DESCRIPTION_END>
+<CONFIG_PROGS_START>
+<CONFIG_PROGS_END>
+<CONFIG_LIBS_START>
+<CONFIG_LIBS_END>
+<CONFIG_HEADERS_START>
+<CONFIG_HEADERS_END>
+<CONFIG_CHARACTERISTICS_START>
+<CONFIG_CHARACTERISTICS_END>
+<CONFIG_LIB_FUNCS_START>
+<CONFIG_LIB_FUNCS_END>
+<CONFIG_ADDITIONAL_START>
+<CONFIG_ADDITIONAL_END>
+<CONFIG_FILES_START>
+<CONFIG_FILES_END>
+<MAKEFILE_AM_START>
+<MAKEFILE_AM_END>
+
+props.file.type=project
+
+anjuta.version=1.2.4a
+anjuta.compatibility.level=1
+
+project.name=pyburn-wx
+project.type=GENERIC
+project.target.type=EXECUTABLE
+project.version=1.0
+project.author=Juan Gonzalez
+project.source.target=unknown
+project.has.gettext=0
+project.gui.command=
+project.programming.language=C
+project.excluded.modules=intl
+
+project.config.extra.modules.before=
+project.config.extra.modules.after=
+project.config.blocked=1
+project.config.disable.overwriting=1 1 1 1 1 1 1 1 1 
+
+project.menu.entry=pyburn-wx Version 1.0
+project.menu.group=Application
+project.menu.comment=pyburn-wx Version 1.0
+project.menu.icon=
+project.menu.need.terminal=0
+
+project.configure.options=
+anjuta.program.arguments=
+preferences.build.option.jobs=0
+preferences.build.option.silent=0
+preferences.build.option.autosave=0
+preferences.anjuta.make.options=-k
+preferences.make=make
+preferences.build.option.keep.going=1
+preferences.build.option.warn.undef=0
+preferences.autoformat.custom.style= -i8 -sc -bli0 -bl0 -cbi0 -ss
+preferences.indent.opening=0
+preferences.autoformat.disable=1
+preferences.indent.automatic=1
+preferences.use.tabs=0
+preferences.indent.size=2
+preferences.tabsize=2
+preferences.indent.closing=0
+
+module.include.name=.
+module.include.type=
+module.include.files=
+
+module.source.name=.
+module.source.type=
+module.source.files=\
+       setup.py\
+       pyburn-wx.py\
+       pyburn_wx/__init__.py\
+       pyburn_wx/main.py
+
+module.pixmap.name=.
+module.pixmap.type=
+module.pixmap.files=\
+       pyburn_wx/pixmaps/off.xpm\
+       pyburn_wx/pixmaps/on.xpm
+
+module.data.name=.
+module.data.type=
+module.data.files=\
+       make_man\
+       debian/rules\
+       debian/control
+
+module.help.name=.
+module.help.type=
+module.help.files=
+
+module.doc.name=.
+module.doc.type=
+module.doc.files=\
+       pyburn_wx/TODO.txt\
+       README\
+       debian/pyburn-wx.xml\
+       MANIFEST.in
+
+module.po.files=
+
+compiler.options.supports=
+compiler.options.include.paths=\
+       .\
+       ..
+compiler.options.library.paths=
+compiler.options.libraries=
+compiler.options.libraries.selected=
+compiler.options.defines=\
+       HAVE_CONFIG_H
+compiler.options.defines.selected=
+compiler.options.warning.buttons=0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 
+compiler.options.optimize.buttons=0 0 1 0 
+compiler.options.other.buttons=1 0 
+compiler.options.other.c.flags=
+compiler.options.other.l.flags=
+compiler.options.other.l.libs=
+
+project.src.paths=
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn-wx.py b/chronopic-firmware/pyburn-wx-1.0/pyburn-wx.py
new file mode 100644
index 0000000..8db523f
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn-wx.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python2.4
+
+##This will work in development on a relative folder basis
+##It will then work when installed in site-packages on a target system
+##where the runner script is in /usr/bin (or wherever)
+##
+##So, you don't need anything special - no fancy path tricks.
+
+import pyburn_wx.main
+
+pyburn_wx.main.start()
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/all-wcprops 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/all-wcprops
new file mode 100644
index 0000000..0f467f6
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/all-wcprops
@@ -0,0 +1,35 @@
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx
+END
+main.py
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx/main.py
+END
+pyburn-wx.wxg
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx/pyburn-wx.wxg
+END
+TODO.txt
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx/TODO.txt
+END
+__init__.py
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx/__init__.py
+END
+ledp.hex
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx/ledp.hex
+END
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/entries 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/entries
new file mode 100644
index 0000000..bf92534
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/entries
@@ -0,0 +1,201 @@
+10
+
+dir
+71
+http://svn.iearobotics.com/pyburn/pyburn-wx/pyburn-wx-1.0/pyburn_wx
+http://svn.iearobotics.com/pyburn
+
+
+
+2008-09-30T06:23:08.713444Z
+70
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+81021e76-403d-0410-8966-deacf4f2e7aa
+
+main.py
+file
+
+
+
+
+2012-07-19T14:49:15.295902Z
+d100ad72e612c42742a4aea7ed4eff7e
+2008-09-29T05:58:24.583333Z
+67
+obijuan
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+49182
+
+pyburn-wx.wxg
+file
+
+
+
+
+2012-07-19T14:49:15.291902Z
+d88b2f761248ce0ecaca905aa890511d
+2008-09-29T06:00:54.116765Z
+68
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+33251
+
+pixmaps
+dir
+
+TODO.txt
+file
+
+
+
+
+2012-07-19T14:49:15.291902Z
+d41d8cd98f00b204e9800998ecf8427e
+2008-09-30T06:23:08.713444Z
+70
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0
+
+__init__.py
+file
+
+
+
+
+2012-07-19T14:49:15.291902Z
+9cfe87d17d2b1c3899ebf67f87e4cc27
+2008-09-25T06:03:58.641060Z
+57
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+155
+
+ledp.hex
+file
+
+
+
+
+2012-07-19T14:49:15.291902Z
+561b27dbad6dd9cb727ce9ceb4aa3fa3
+2008-09-29T05:58:24.583333Z
+67
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+240
+
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/prop-base/main.py.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/prop-base/main.py.svn-base
new file mode 100644
index 0000000..869ac71
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/prop-base/main.py.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 1
+*
+END
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/TODO.txt.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/TODO.txt.svn-base
new file mode 100644
index 0000000..e69de29
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/__init__.py.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/__init__.py.svn-base
new file mode 100644
index 0000000..0f71a94
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/__init__.py.svn-base
@@ -0,0 +1,13 @@
+#! /usr/bin/python
+# -*- coding: iso-8859-15 -*-
+
+#-- Pyburn-wx
+
+""" 
+  Grabacion de microcontroladores PICs a bajo nivel
+
+
+"""
+
+#-- Version
+VERSION = 1.0
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/ledp.hex.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/ledp.hex.svn-base
new file mode 100644
index 0000000..98f09d1
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/ledp.hex.svn-base
@@ -0,0 +1,8 @@
+:0400000000000428D0
+:080008008A110A120728FD30DD
+:10001000831603138600023083128606FF30FF002A
+:10002000FF3014200B28080083120313A3007F085D
+:10003000A2002208230403192228FF30A207031C70
+:06004000A30319280800CB
+:02400E00FF3F72
+:00000001FF
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/main.py.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/main.py.svn-base
new file mode 100644
index 0000000..7d74496
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/main.py.svn-base
@@ -0,0 +1,1281 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2008 by Juan Gonzalez 
+# Author: Juan Gonzalez <juan iearobotics com>
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+import wx
+import os
+import sys
+
+#-- Modulos de Stargate
+import libStargate.Picp
+
+#-- Modulos de LibIris
+import libIris.Pic16_Bootloader
+import libIris.Pic16_Firmware
+import libIris.IntelHex
+
+#-- Bootloader. Obtenido con:
+#-- hex2python PIC16_bootloader_1.2.hex
+
+bootloader=[[0x0000, 0x0000, 0x158A, 0x160A, 0x2E88],[0x1E80, 0x158A, 0x160A, 0x2E80, 0x018A, 0x158A, 
0x160A, 0x2E83, 0x0000, 0x1E03, 0x2E83, 0x1683, 0x3087, 0x0086, 0x1283, 0x0186, 0x3090, 0x0098, 0x1683, 
0x1518, 0x1698, 0x301F, 0x0099, 0x1283, 0x3003, 0x00FA, 0x3031, 0x0090, 0x140C, 0x26F1, 0x3AEA, 0x1D03, 
0x2EB4, 0x01FA, 0x2EBB, 0x26F1, 0x00F9, 0x3AE3, 0x1903, 0x2EBD, 0x0879, 0x3AEA, 0x1903, 0x2EBB, 0x0879, 
0x3AED, 0x1D03, 0x2EA2, 0x30E4, 0x26EC, 0x3003, 0x00FA, 0x26F1, 0x0190, 0x0198, 0x1683, 0x0198, 0x1283, 
0x018C, 0x2E83, 0x30EB, 0x2EEA, 0x26F1, 0x00F6, 0x26F1, 0x00F5, 0x26F1, 0x00F1, 0x00FB, 0x26F1, 0x00F3, 
0x01F2, 0x3021, 0x1283, 0x1303, 0x0276, 0x1903, 0x2ED6, 0x0875, 0x3903, 0x00FC, 0x00FD, 0x1003, 0x0DFC, 
0x3020, 0x077C, 0x2ED7, 0x3020, 0x0084, 0x26F1, 0x0080, 0x07F2, 0x0A84, 0x0BFB, 0x2ED8, 0x0872, 0x0673, 
0x30E8, 0x1D03, 0x2EEA, 0x30E7, 0x26EC, 0x2703, 0x3800, 0x30E4, 0x1903, 0x30E5, 0x26EC, 0x2EA2, 0x0064, 
0x1E0C, 0x2EEC, 0x0099, 0x0008, 0x0064, 0x087A, 0x1903,
  0x2EFF, 0x1C0C, 0x2EFF, 0x1010, 0x0BFA, 0x2EFB, 0x3400, 0x100C, 0x300B, 0x008F, 0x1410, 0x1E8C, 0x2EF1, 
0x081A, 0x0008, 0x3021, 0x0276, 0x1903, 0x2F55, 0x1683, 0x1703, 0x178C, 0x1283, 0x1303, 0x0875, 0x39FC, 
0x1703, 0x008D, 0x1303, 0x0876, 0x1703, 0x008F, 0x3020, 0x0084, 0x1303, 0x087D, 0x1903, 0x2F2D, 0x1683, 
0x1703, 0x140C, 0x0000, 0x0000, 0x1283, 0x080E, 0x0080, 0x0A84, 0x080C, 0x0080, 0x0A84, 0x0A8D, 0x1303, 
0x03FD, 0x03F5, 0x0AF1, 0x0AF1, 0x2F16, 0x0871, 0x00FC, 0x3E20, 0x0084, 0x1003, 0x0CFC, 0x0876, 0x1703, 
0x008F, 0x1303, 0x0875, 0x1703, 0x008D, 0x1303, 0x087C, 0x1703, 0x078D, 0x1903, 0x0A8F, 0x1703, 0x080D, 
0x3903, 0x1903, 0x2F55, 0x1683, 0x140C, 0x0000, 0x0000, 0x1283, 0x080E, 0x0080, 0x0A84, 0x080C, 0x0080, 
0x0A84, 0x0A8D, 0x1303, 0x0AF1, 0x0AF1, 0x2F40, 0x0875, 0x00F7, 0x0876, 0x00F8, 0x01FB, 0x3002, 0x00F4, 
0x0871, 0x027B, 0x1803, 0x3401, 0x087B, 0x3E20, 0x0084, 0x3021, 0x0278, 0x1703, 0x1683, 0x1903, 0x2F73, 
0x178C, 0x0183, 0x301E, 0x0278, 0x3080, 0x1903, 0x02
 77, 0x1803, 0x2FBB, 0x2F75, 0x138C, 0x0183, 0x0877, 0x1703, 0x008D, 0x1303, 0x0878, 0x1D03, 0x2F8A, 0x3004, 
0x0277, 0x1803, 0x2F8A, 0x1703, 0x1683, 0x1F8C, 0x2F87, 0x1283, 0x3084, 0x078D, 0x0183, 0x301E, 0x2F8B, 
0x0878, 0x1703, 0x008F, 0x0800, 0x008E, 0x0A84, 0x0800, 0x008C, 0x1683, 0x150C, 0x3055, 0x008D, 0x30AA, 
0x008D, 0x148C, 0x0000, 0x0000, 0x0183, 0x1683, 0x1703, 0x1B8C, 0x2FC3, 0x1283, 0x1303, 0x0064, 0x1E0D, 
0x2FA2, 0x120D, 0x1683, 0x1703, 0x110C, 0x140C, 0x0000, 0x0000, 0x1283, 0x0384, 0x0800, 0x060E, 0x1D03, 
0x2FB7, 0x0A84, 0x0800, 0x060C, 0x1903, 0x2FBB, 0x0183, 0x0BF4, 0x2F5C, 0x3400, 0x1283, 0x1303, 0x3002, 
0x07FB, 0x0AF7, 0x1903, 0x0AF8, 0x2F5A, 0x1283, 0x1303, 0x120D, 0x1683, 0x1703, 0x110C, 0x1283, 0x1703, 
0x080D, 0x3903, 0x3C03, 0x1D03, 0x2FBB, 0x3003, 0x028D, 0x1283, 0x1303, 0x3004, 0x00FC, 0x3007, 0x0284, 
0x0000, 0x1683, 0x1703, 0x140C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x1283, 0x1703, 
0x060E, 0x1D03, 0x2FED, 0x0A84, 0x0800, 0x060C, 0
 x1903, 0x2FF4, 0x1283, 0x1303, 0x30FC, 0x05F7, 0x3006, 0x02FB, 0x2FB7, 0x1283, 0x1703, 0x0A8D, 0x0A84, 
0x1283, 0x1303, 0x0BFC, 0x2FD8, 0x2FBB],[0x2000, 0x0002, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x3F32],]
+
+
+#-- Estados para el interfaz
+GUI_INICIAL    = 0
+GUI_OK_SERIAL  = 1
+GUI_OK_PICP    = 2
+GUI_PROGESS    = 3
+
+#-- Timeout para la realizacion del PING a la Skypic. En mili-segundos
+PING_TIMEOUT = 500
+
+#-- Timeout para la deteccion del bootloader (en segundos)
+#-- Usado para la descarga del Firmware PICP
+TIMEOUT = 800
+
+#-- Valor por defecto de la palabra de configuracion
+DEFAULT_CONFIG_WORD = 0x3F3A
+
+#--------------------------------------------------------------------
+#-- Obtener la palara de configuracion de un fichero .hex parseado
+#-- Esta funcion deberia estar en la libIris
+#-- DEVUELVE:
+#--  * El valor de palabra de configuracion (si existe)
+#--  * -1 si no existe
+#--------------------------------------------------------------------
+def get_config(mem):
+  for dir,(vh,vl) in mem:
+    if dir==0x2007:
+      return vh*256 + vl
+      
+  return -1
+
+#-------------------------------------------------------------------
+#-- Determinar el directorio desde donde se esta ejecutando pyburn
+#-------------------------------------------------------------------
+def determine_path ():
+    """Borrowed from wxglade.py"""
+    try:
+        root = __file__
+        if os.path.islink (root):
+            root = os.path.realpath (root)
+        return os.path.dirname (os.path.abspath (root))
+    except:
+        print "I'm sorry, but something is wrong."
+        print "There is no __file__ variable. Please contact the author."
+        sys.exit ()
+
+
+#---------------------------------------------------
+#-- Dialogo de About
+#-- Generado con wxglade
+#---------------------------------------------------
+class MyDialog(wx.Dialog):
+    def __init__(self, *args, **kwds):
+        # begin wxGlade: MyDialog.__init__
+        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
+        wx.Dialog.__init__(self, *args, **kwds)
+        self.text_ctrl_1 = wx.TextCtrl(self, -1, "Pyburn 1.0\nGrabacion de microcontroladores PICs usando la 
Skypic\nhttp://www.iearobotics.com/wiki/index.php?title=Pyburn\n\n(c) Juan Gonzalez, Sep-2008\nLICENCIA 
GPL\n\nLibrerias libIris y libStargate:\n(c) Rafael Trevino y Juan Gonzalez\n", 
style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH|wx.TE_AUTO_URL|wx.NO_BORDER)
+        self.static_line_5 = wx.StaticLine(self, -1)
+        self.button_1 = wx.Button(self, -1, "OK")
+
+        self.__set_properties()
+        self.__do_layout()
+
+        self.Bind(wx.EVT_BUTTON, self.about_ok_clicked, self.button_1)
+        # end wxGlade
+
+    def __set_properties(self):
+        # begin wxGlade: MyDialog.__set_properties
+        self.SetTitle("Sobre Pyburn")
+        self.text_ctrl_1.SetMinSize((400, 200))
+        self.text_ctrl_1.SetBackgroundColour(wx.Colour(246, 244, 241))
+        # end wxGlade
+
+    def __do_layout(self):
+        # begin wxGlade: MyDialog.__do_layout
+        sizer_13 = wx.BoxSizer(wx.VERTICAL)
+        sizer_13.Add(self.text_ctrl_1, 0, wx.EXPAND, 0)
+        sizer_13.Add(self.static_line_5, 0, wx.EXPAND, 0)
+        sizer_13.Add(self.button_1, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+        self.SetAutoLayout(True)
+        self.SetSizer(sizer_13)
+        sizer_13.Fit(self)
+        sizer_13.SetSizeHints(self)
+        self.Layout()
+        # end wxGlade
+
+    def about_ok_clicked(self, event): # wxGlade: MyDialog.<event_handler>
+        #print "OK!"
+        self.EndModal(0)
+
+# end of class MyDialog
+
+
+#---------------------------------------------------
+#-- Clase principal, que implementa el interfaz
+#-- Creada con wxglade
+#---------------------------------------------------
+class MyFrame(wx.Frame):
+  def __init__(self, app, *args, **kwds):
+  
+  
+      #----------------------------------------------------------------
+      #--- Esta parte del codigo se ha generado automaticamente con la
+      #-- herramienta wxglade. NO modificar.
+      #---------------------------------------------------------------
+      # begin wxGlade: MyFrame.__init__
+      kwds["style"] = wx.DEFAULT_FRAME_STYLE
+      wx.Frame.__init__(self, *args, **kwds)
+      self.panel_1 = wx.Panel(self, -1)
+      self.notebook_1 = wx.Notebook(self.panel_1, -1, style=0)
+      self.notebook_1_pane_2 = wx.Panel(self.notebook_1, -1)
+      self.sizer_3_staticbox = wx.StaticBox(self.panel_1, -1, "Skypic grabadora")
+      self.notebook_1_pane_1 = wx.Panel(self.notebook_1, -1)
+      
+      # Menu Bar
+      self.frame_1_menubar = wx.MenuBar()
+      self.SetMenuBar(self.frame_1_menubar)
+      self.Help = wx.Menu()
+      self.About = wx.MenuItem(self.Help, wx.NewId(), "Sobre Pyburn", "", wx.ITEM_NORMAL)
+      self.Help.AppendItem(self.About)
+      self.frame_1_menubar.Append(self.Help, "Ayuda")
+      # Menu Bar end
+      self.statusbar = self.CreateStatusBar(1, 0)
+      self.label_2 = wx.StaticText(self.notebook_1_pane_1, -1, "Puerto serie:")
+      self.entry_serial = wx.ComboBox(self.notebook_1_pane_1, -1, choices=[], style=wx.CB_DROPDOWN)
+      self.button_abrir_cerrar = wx.Button(self.notebook_1_pane_1, -1, "  Abrir  ", style=wx.BU_EXACTFIT)
+      self.static_line_1 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.label_3 = wx.StaticText(self.notebook_1_pane_1, -1, "Firmware:", style=wx.ALIGN_CENTRE)
+      self.button_boot = wx.Button(self.notebook_1_pane_1, -1, "Bootloader", style=wx.BU_EXACTFIT)
+      self.button_test = wx.Button(self.notebook_1_pane_1, -1, "Test 1", style=wx.BU_EXACTFIT)
+      self.button_test2 = wx.Button(self.notebook_1_pane_1, -1, "Test 2", style=wx.BU_EXACTFIT)
+      self.static_line_2 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.label_4 = wx.StaticText(self.notebook_1_pane_1, -1, "Fichero .hex:")
+      self.entry_file = wx.TextCtrl(self.notebook_1_pane_1, -1, "")
+      self.button_search = wx.Button(self.notebook_1_pane_1, -1, "Buscar", style=wx.BU_EXACTFIT)
+      self.button_grabar = wx.Button(self.notebook_1_pane_1, -1, "Grabar!", style=wx.BU_EXACTFIT)
+      self.static_line_3 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.progressbar = wx.Gauge(self.notebook_1_pane_1, -1, 100)
+      self.button_cancel = wx.Button(self.notebook_1_pane_1, -1, "Cancelar", style=wx.BU_EXACTFIT)
+      self.label_5 = wx.StaticText(self.notebook_1_pane_2, -1, "Palabra de configuracion:")
+      self.entry_config = wx.TextCtrl(self.notebook_1_pane_2, -1, "3F3A")
+      self.button_write_config = wx.Button(self.notebook_1_pane_2, -1, "Write", style=wx.BU_EXACTFIT)
+      self.button_default = wx.Button(self.notebook_1_pane_2, -1, "Default", style=wx.BU_EXACTFIT)
+      self.static_line_4 = wx.StaticLine(self.notebook_1_pane_2, -1)
+      self.label_6 = wx.StaticText(self.notebook_1_pane_2, -1, "PIC destino:")
+      self.button_check = wx.Button(self.notebook_1_pane_2, -1, "Detectar", style=wx.BU_EXACTFIT)
+      self.icono_conexion = wx.StaticBitmap(self.panel_1, -1, wx.NullBitmap)
+      self.label_conexion = wx.StaticText(self.panel_1, -1, "SIN CONEXION\n")
+      self.button_picp = wx.Button(self.panel_1, -1, "Descargar Firmware")
+
+      self.__set_properties()
+      self.__do_layout()
+
+      self.Bind(wx.EVT_MENU, self.EVT_MENU, self.About)
+      self.Bind(wx.EVT_BUTTON, self.boton_abrir_cerrar_clicked, self.button_abrir_cerrar)
+      self.Bind(wx.EVT_BUTTON, self.boot_clicked, self.button_boot)
+      self.Bind(wx.EVT_BUTTON, self.test_clicked, self.button_test)
+      self.Bind(wx.EVT_BUTTON, self.test2_clicked, self.button_test2)
+      self.Bind(wx.EVT_TEXT, self.file_changed, self.entry_file)
+      self.Bind(wx.EVT_BUTTON, self.search_clicked, self.button_search)
+      self.Bind(wx.EVT_BUTTON, self.grabar_clicked, self.button_grabar)
+      self.Bind(wx.EVT_BUTTON, self.button_cancel_clicked, self.button_cancel)
+      self.Bind(wx.EVT_TEXT, self.config_changed, self.entry_config)
+      self.Bind(wx.EVT_BUTTON, self.write_config_clicked, self.button_write_config)
+      self.Bind(wx.EVT_BUTTON, self.default_clicked, self.button_default)
+      self.Bind(wx.EVT_BUTTON, self.check_clicked, self.button_check)
+      self.Bind(wx.EVT_BUTTON, self.picp_clicked, self.button_picp)
+      # end wxGlade
+      
+      #-- Guardar la aplicacion
+      self.app=app;
+
+  def __set_properties(self):
+      # begin wxGlade: MyFrame.__set_properties
+      self.SetTitle("Pyburn-wx")
+      self.statusbar.SetStatusWidths([-1])
+      # statusbar fields
+      statusbar_fields = ["Inicio"]
+      for i in range(len(statusbar_fields)):
+          self.statusbar.SetStatusText(statusbar_fields[i], i)
+      self.entry_serial.SetMinSize((250, 30))
+      self.entry_serial.SetToolTipString("Seleccionar puerto serie donde esta conectada la Skypic grabadora")
+      self.button_abrir_cerrar.SetToolTipString("Abrir/cerrar el puerto serie")
+      self.button_boot.SetToolTipString("Grabar el Bootloader en la Skypic destino")
+      self.button_test.SetToolTipString("Grabar un programa de test en la skypic destino, que hace parpadear 
el led")
+      self.button_test2.SetToolTipString("Grabar un programa de test en la skypic destino, que hacer 
parpadear el led")
+      self.entry_file.SetMinSize((200, 27))
+      self.button_search.SetToolTipString("Seleccionar el fichero .hex a grabar en la Skypic destino")
+      self.button_grabar.SetToolTipString("Grabar el fichero .hex en la Skypic destino")
+      self.progressbar.SetMinSize((350, 20))
+      self.button_write_config.SetToolTipString("Grabar la palabra de configuracion en la Skypic destino")
+      self.button_default.SetToolTipString("Establecer el valor por defecto de la palabra de configuracion")
+      self.button_check.SetToolTipString("Detectar la skypic destino: el pic y su palabra de configuracion")
+      self.icono_conexion.SetToolTipString(u"Indica si la Skypic grabadora está conectada o no. Si no está 
conectada o el firmware no es el correcto aparecera \"SIN CONEXION\"")
+      self.button_picp.SetToolTipString("Descargar el Firmware necesario para que la Skypic conectada al 
puerto serie se convierta en grabadora")
+      # end wxGlade
+
+  def __do_layout(self):
+      # begin wxGlade: MyFrame.__do_layout
+      sizer_1 = wx.BoxSizer(wx.VERTICAL)
+      sizer_2 = wx.BoxSizer(wx.VERTICAL)
+      sizer_3 = wx.StaticBoxSizer(self.sizer_3_staticbox, wx.HORIZONTAL)
+      sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_10 = wx.BoxSizer(wx.VERTICAL)
+      sizer_12 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_11 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_5 = wx.BoxSizer(wx.VERTICAL)
+      sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_6.Add(self.label_2, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_6.Add(self.entry_serial, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_6.Add(self.button_abrir_cerrar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_5.Add(sizer_6, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_1, 0, wx.EXPAND, 0)
+      sizer_7.Add(self.label_3, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_7.Add(self.button_boot, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 7)
+      sizer_7.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
+      sizer_7.Add(self.button_test, 0, wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
+      sizer_7.Add(self.button_test2, 0, wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
+      sizer_5.Add(sizer_7, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_2, 0, wx.EXPAND, 0)
+      sizer_8.Add(self.label_4, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_8.Add(self.entry_file, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_8.Add(self.button_search, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_8.Add(self.button_grabar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_5.Add(sizer_8, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_3, 0, wx.EXPAND, 0)
+      sizer_9.Add(self.progressbar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5)
+      sizer_9.Add(self.button_cancel, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_5.Add(sizer_9, 1, wx.EXPAND, 0)
+      self.notebook_1_pane_1.SetAutoLayout(True)
+      self.notebook_1_pane_1.SetSizer(sizer_5)
+      sizer_5.Fit(self.notebook_1_pane_1)
+      sizer_5.SetSizeHints(self.notebook_1_pane_1)
+      sizer_11.Add(self.label_5, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.entry_config, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.button_write_config, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.button_default, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
+      sizer_10.Add(sizer_11, 0, wx.EXPAND, 0)
+      sizer_10.Add(self.static_line_4, 0, wx.EXPAND, 0)
+      sizer_12.Add(self.label_6, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_12.Add(self.button_check, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_10.Add(sizer_12, 0, wx.EXPAND, 0)
+      self.notebook_1_pane_2.SetAutoLayout(True)
+      self.notebook_1_pane_2.SetSizer(sizer_10)
+      sizer_10.Fit(self.notebook_1_pane_2)
+      sizer_10.SetSizeHints(self.notebook_1_pane_2)
+      self.notebook_1.AddPage(self.notebook_1_pane_1, "Principal")
+      self.notebook_1.AddPage(self.notebook_1_pane_2, "Avanzado")
+      sizer_2.Add(self.notebook_1, 1, wx.ALL|wx.EXPAND, 4)
+      sizer_4.Add(self.icono_conexion, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
+      sizer_4.Add(self.label_conexion, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.SHAPED, 10)
+      sizer_4.Add(self.button_picp, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 10)
+      sizer_3.Add(sizer_4, 1, wx.ALIGN_CENTER_VERTICAL, 0)
+      sizer_2.Add(sizer_3, 0, wx.ALL|wx.EXPAND, 4)
+      self.panel_1.SetAutoLayout(True)
+      self.panel_1.SetSizer(sizer_2)
+      sizer_2.Fit(self.panel_1)
+      sizer_2.SetSizeHints(self.panel_1)
+      sizer_1.Add(self.panel_1, 0, 0, 0)
+      self.SetAutoLayout(True)
+      self.SetSizer(sizer_1)
+      sizer_1.Fit(self)
+      sizer_1.SetSizeHints(self)
+      self.Layout()
+      # end wxGlade
+      
+      #--------------------------------------------
+      # Fin del codigo generado automaticamente
+      #--------------------------------------------
+      
+      #-- Limitar la entrada de texto de la palabra de configuracion 
+      #-- a 4 digitos
+      self.entry_config.SetMaxLength(4)
+      
+      #-------------------------------------------
+      #- Encontrar la ruta a los iconos .xpm
+      #-------------------------------------------
+      PIXMAP_name=os.sep+"pixmaps";
+      EXEC_dir = determine_path()
+      IMAGE_ON_DIR = EXEC_dir  + PIXMAP_name + os.sep + "on.xpm"
+      IMAGE_OFF_DIR= EXEC_dir  + PIXMAP_name + os.sep + "off.xpm"
+      
+      #-- Debug: imprimir los directorios donde buscar los iconos
+      #print IMAGE_ON_DIR
+      #print IMAGE_OFF_DIR
+      
+      
+      #---------------------------------------
+      #-- Variables globales
+      #---------------------------------------
+      
+      #-- Stargate para la programacion
+      self.picp=None;
+      
+      #-- Estado en el que se encuentra la GUI
+      self.estado_GUI=None
+      
+      #--  Crear el temporizador
+      self.timer = wx.Timer(self, 999999)
+      self.Bind(wx.EVT_TIMER, self.skypic_check)
+      
+      #-- Cargar las imagenes del estado de la conexion
+      self.imagen_on = wx.Bitmap(IMAGE_ON_DIR, wx.BITMAP_TYPE_XPM)
+      self.imagen_off = wx.Bitmap(IMAGE_OFF_DIR, wx.BITMAP_TYPE_XPM)
+      
+      #-- Flag de cancelar
+      self.cancelar=False
+      
+      #-- Palabras grabadas
+      self.grabado=0;
+      
+      #-- Valor de la palabra de configuracion
+      self.config_word=DEFAULT_CONFIG_WORD
+      
+      #-- Palabra de configuracion OK o no
+      self.config_ok=True;
+      
+      #-- Fichero especificado existe o no
+      self.file_ok=False
+      
+      #-- Otros
+      self.interfaz_estado(GUI_INICIAL);
+  
+  #---------------------------------------------------------
+  #-- Comprobacion periodica de la conexion con la Skypic  
+  #-- La invoca el temporizador
+  #---------------------------------------------------------
+  def skypic_check(self,event):
+    
+    if self.picp:
+    
+      #-- Comprobar si hay conexion con el servidor y si
+      #-- es del tipo correcto
+      
+      es_picp = self.picp.check_server_type()
+      
+      #--DEBUG: Para ver en la consola si esta activado o no
+      #print "PICP: %s" % es_picp
+      
+      #-- Actualizar el interfaz en funcion de que se haya detectado o no
+      if es_picp:
+        self.interfaz_estado(GUI_OK_PICP)
+      else:
+        self.interfaz_estado(GUI_OK_SERIAL)      
+
+  #---------------------------------------
+  #-- Menu de About
+  #----------------------------------------  
+  def EVT_MENU(self, event): # wxGlade: MyFrame.<event_handler>
+     d=MyDialog(None,-1)
+     d.ShowModal()
+     d.Destroy()
+
+#-----------------------------------------------------------------------#
+#                                                                       #
+#     FUNCIONES DE RETROLLAMADA DE LOS ELEMENTOS DEL INTERFAZ           #
+#                                                                       #
+#-----------------------------------------------------------------------#
+  
+  
+  #--------------------------------------------
+  #- Boton de Abrir/Cerrar el puerto serie
+  #--------------------------------------------
+  def boton_abrir_cerrar_clicked(self, event):  # wxGlade: MyFrame.<event_handler>
+    
+    #-- Su funcionamiento depende del estado en el que esta el interfaz
+    
+    if self.estado_GUI==GUI_INICIAL:
+      #-- En estado inicial la accion del boton es ABRIR
+      self.open_port()
+      
+    else:
+      #-- En el resto de estados la accion es CERRAR
+      
+      #-- Cerrarlo! 
+      if self.picp:
+        self.picp.close()
+        
+      #-- Actualizar interfaz
+      self.interfaz_estado(GUI_INICIAL);
+
+      #-- Actualizar barra de estado
+      self.statusbar.SetStatusText("Puerto serie CERRADO",0);
+      
+      
+  #-------------------------------------
+  #-- Boton de buscar fichero apretado  
+  #-------------------------------------
+  def search_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    
+    #-- Abrir un dialogo de busqueda de ficheros
+    filechooser = wx.FileDialog(self,wildcard = "*.hex;*.HEX")
+    
+    #-- Esperar a que el usuario seleccione el fichero
+    opcion = filechooser.ShowModal()
+    
+    #-- Segun la opcion...
+    if opcion == wx.ID_OK:
+    
+      #-- Se ha pulsado ok. Obtener el nombre del fichero
+      fichero = filechooser.GetPath()
+     
+      #-- Meter el fichero en el entry "fichero .hex"
+      self.entry_file.SetValue(fichero)
+      
+  #----------------------------------------------------------
+  #-- Realizar la grabacion del fichero .hex seleccionado
+  #----------------------------------------------------------
+  def grabar_clicked(self,widget): # wxGlade: MyFrame.<event_handler>
+    
+    #-- Obtener el nombre del fichero a grabar
+    file = str(self.entry_file.GetValue())
+    
+    #-- Realizar el parseo del fichero 
+    try:
+      hr = libIris.IntelHex.HexReader (file)
+    except libIris.IntelHex.ReaderError,msg:
+      self.statusbar.SetStatusText("%s" % msg)
+      return      
+     
+    #-- Obtener la palabra de configuracion. Usar la establecida por defecto
+    #-- si no existe    
+    config = get_config(hr.memory())
+    if config == -1:
+      config = DEFAULT_CONFIG_WORD;
+      
+    #-- Poner la palabra de configuracion en el entry
+    self.entry_config.SetValue("%04X" % config);    
+    
+    #-- Realizar la grabacion
+    self.burn_program(hr.dataBlocks())
+ 
+  #------------------------------------
+  #-- Cambio en el nombre del fichero  
+  #------------------------------------
+  def file_changed(self,widget):  # wxGlade: MyFrame.<event_handler>
+  
+    #-- Leer nombre del fichero 
+    file_name = str(self.entry_file.GetValue())
+    
+    #-- El estado del interfaz se cambia seguen que 
+    #-- el fichero exista o no
+    if not os.path.exists(file_name):
+      self.file_ok=False
+    else:
+      self.file_ok=True
+    
+    #-- Actualizar el estado del interfaz
+    if self.file_ok:
+      self.button_grabar.Enable()
+    else:
+      self.button_grabar.Disable()
+ 
+
+  #------------------------
+  #-- Boton de cancelacion
+  #------------------------ 
+  def button_cancel_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    #-- Poner el flag de cancelar a True y deshabilitar el boton
+    self.cancelar=True
+    self.button_cancel.Disable() 
+
+  #----------------------------------
+  #-- Grabar el programa de test 1
+  #----------------------------------
+  def test_clicked(self,widget):        # wxGlade: MyFrame.<event_handler>
+    self.burn_program(libIris.Pic16_Firmware.ledp1)    
+  
+  #----------------------------------
+  #-- Grabar el programa de test 2
+  #----------------------------------
+  def test2_clicked(self,widget):  # wxGlade: MyFrame.<event_handler>
+    self.burn_program(libIris.Pic16_Firmware.ledp2) 
+  
+  #-----------------------------
+  #-- Grabar el bootloader
+  #-----------------------------
+  def boot_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.burn_program(bootloader)   
+  
+  
+  #------------------------------------------
+  #-- Boton Write (Pestana Avanzado)
+  #-- Escribir palabra de configuracion 
+  #------------------------------------------
+  def write_config_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.burn_config()
+    
+
+  #--------------------------------------------------------------------
+  #-- Boton Default (Pestana Avanzado)
+  #-- Establecer el valor por defecto de la palabra de configuracion 
+  #--------------------------------------------------------------------
+  def default_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.entry_config.SetValue("%04X" % DEFAULT_CONFIG_WORD);
+    
+    
+  #-----------------------------------------
+  #-- Cambio en la palabra de confiuracion  
+  #-----------------------------------------
+  def config_changed(self, event): # wxGlade: MyFrame.<event_handler>
+    #-- Leer el valor del entry
+    config_str = self.entry_config.GetValue()
+    #print "config_str: %s" % config_str
+    
+    #-- Comprobar si la cadena actual es valida o no
+    try:
+      #-- Convertir a un numero hexadecimal
+      self.config_word = int (config_str, 16);
+      
+      #-- Indicar que palabra correcta
+      self.config_ok=True;
+      
+    except ValueError:
+    
+      #-- Inicar que palabra incorrecta
+      self.config_ok=False;
+    
+    #-- La palabra de configuracion 0000 es peligrosa...
+    if self.config_ok:
+      if self.config_word==0:
+        self.statusbar.SetStatusText("CUIDADO!! Palabra de config. peligrosa")
+      else:
+        self.statusbar.SetStatusText(" ")
+        
+    #-- Actualizar estado del interfaz    
+    self.interfaz_estado(GUI_OK_PICP,force=True);    
+    
+  
+  #-------------------------------
+  #-- Boton de Detectar
+  #-- Comprobar el PIC destino
+  #-------------------------------
+  def check_clicked(self,widget): # wxGlade: MyFrame.<event_handler>
+    self.check_pic();
+  
+  
+  #-----------------------------
+  #-- Grabar el PICP
+  #-----------------------------
+  def picp_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    #print "Download picp"
+    self.download_program(libIris.Pic16_Firmware.picp) 
+  
+  
+#-----------------------------------------------------------------------#
+#                                                                       #
+#     FUNCIONES PARA IMPLEMENTAR LAS ACCIONES                           #
+#                                                                       #
+#-----------------------------------------------------------------------#
+  
+  #------------------------------------------------------------
+  #-- Abrir el puerto serie leyendo el dispositivo del entry
+  #-- DEVUELVE:
+  #--   -True: Ok
+  #--   -False: Error al abrir el puerto serie
+  #------------------------------------------------------------
+  def open_port(self):
+    #-- Primero obtener el nombre del dispositivo serie
+    serialName=self.entry_serial.GetValue()
+    
+    #-- Si habia un "Stargate" abierto, cerrarlo primero
+    if self.picp:
+      self.picp.close()
+    
+    #-- Abrir el puerto y crear el stargate
+    try:
+      self.picp = libStargate.Picp.Open(serialName, logCallback=None)
+      self.statusbar.SetStatusText("OK. Puerto serie Abierto",0);
+      
+      #-- Cambiar el estado de la GUI
+      self.interfaz_estado(GUI_OK_SERIAL);
+      return True
+      
+    except libStargate.Main.Error, msg:
+      self.picp = None
+      
+      #-- Si hay error indicarlo en la barra de estado y abortar
+      self.statusbar.SetStatusText("%s" % msg, 0)
+      
+      #-- Cambiar estado del interfaz
+      self.interfaz_estado(GUI_INICIAL);
+      return False  
+  
+  
+  #-----------------------------------------------------
+  #-- Detectar el PIC destino
+  #-- DEVUELVE:
+  #--   True: Pic detectado
+  #--   False: No detectado o error de comunicacion
+  #-----------------------------------------------------
+  def check_pic(self):
+    try:
+      id,config = self.picp.readConfig()
+    except: 
+      self.statusbar.SetStatusText("Error de comunicacion")
+      return False;
+      
+    if id!=0x3FFF and id!=0x00:  
+      self.statusbar.SetStatusText("PIC DETECTADO. ID: %04X. Palabra config: %04X"
+                                    % (id,config))   
+      return True;
+    else:
+      self.statusbar.SetStatusText("PIC DESTINO NO DETECTADO")   
+      return False;
+  
+  #------------------------------------
+  #-- Grabar palabra de configuracion
+  #------------------------------------
+  def burn_config(self):
+  
+    #-- Detectar pic destino. Si no esta se aborta
+    pic_detected=self.check_pic();
+    if (not pic_detected):
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR: PIC no detectado. Config word no Grabada")
+      self.update() 
+      return;
+  
+    #-- Grabar palabra de configuracion
+    try:
+      self.picp.writeConfig(self.config_word);
+    except:
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de comunicacion")
+      self.update()    
+      
+    #-- Actualizar barra de status
+    self.statusbar.SetStatusText("GRABADA PALABRA DE CONFIGURACION: %04X" 
+                                  % self.config_word)      
+  
+  #-----------------------
+  #-- Grabar firmware
+  #-----------------------
+  def burn_program(self,prog):  
+    
+    #-- Detectar pic destino. Si no esta se aborta
+    pic_detected=self.check_pic();
+    if (not pic_detected):
+      return;   
+
+    #-- Pasar al interfaz de "PROGRESO"
+    self.interfaz_estado(GUI_PROGESS)
+    
+    #-- Inicialmente no hay cancelacion
+    self.cancelar=False;
+    
+    #-- Grabar el programa
+    try:
+      ok=self.picp.writeProgram (prog,stateCallback=self.burn_state)
+    except libStargate.Picp.Error,msg:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("%s" % msg)
+      self.update()
+      
+      #-- Actualizar interfaz
+      self.interfaz_estado(GUI_OK_PICP)
+      
+      return;
+      
+    #-- El ok nos indica si se ha grabado bien o no
+    if not ok:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ABORTADO")
+      self.update()
+      
+      #-- Pasar al interfaz de "PICP"
+      self.interfaz_estado(GUI_OK_PICP)
+      
+      return
+
+      
+    #-- Grabar palabra de configuracion
+    try:
+      self.picp.writeConfig(self.config_word);
+    except:
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de comunicacion")
+      self.update()
+      return      
+      
+    #-- Actualizar barra de status
+    self.statusbar.SetStatusText("GRABADA PALABRA DE CONFIGURACION: %04X" 
+                                  % self.config_word)
+    self.update()                              
+    
+    #-- Pasar al interfaz de "PICP"
+    self.interfaz_estado(GUI_OK_PICP)
+    
+
+  #---------------------------------------------------------------------------#
+  #-- Funcion de estado por defecto
+  #-- Se invoca durante la grabacion
+  #-- Implementa el comportamiento segun el estado de la grabacion en curso
+  #---------------------------------------------------------------------------#
+  def burn_state(self,op,inc,total):
+
+    #--------------------------------------------------
+    #- Comienzo de la grabacion
+    #--------------------------------------------------
+    if op==libStargate.Picp.WRITING_START:
+    
+      self.grabado=0;
+    
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0)
+
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("GRABACION DEL PIC EN PROGRESO...")
+      self.update()      
+      return True
+     
+    
+    #------------------------------------------------
+    #--  Grabacion de una palabra
+    #------------------------------------------------    
+    elif op==libStargate.Picp.WRITING_INC:
+    
+      #-- Actualizar contador de bytes grabados
+      self.grabado=self.grabado+inc;
+    
+      #-- Actualizar barra de progreso
+      self.progressbar.SetValue(100*self.grabado/total) 
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+        
+      return True
+      
+    #------------------------------------
+    #-- Fin de la grabacion
+    #------------------------------------    
+    elif op==libStargate.Picp.WRITING_END:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("OK...")
+      self.update()
+      return True
+      
+    #----------------------------------
+    #-- Comienzo de la verificacion
+    #----------------------------------    
+    elif op==libStargate.Picp.VERIFYING_START:
+      
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("Verificacion de la grabacion...")
+      
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0) 
+      self.update()
+      
+      #-- Contador de bytes a 0
+      self.grabado=0;
+      
+      return True
+      
+    #-------------------------------------
+    #-- Error de verificacion
+    #-------------------------------------    
+    elif op==libStargate.Picp.VERIFYING_ERROR:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de verificacion")
+      self.update()
+      return False
+      
+    #-----------------------------------
+    #--  Verificacion de una palabra    
+    #------------------------------------
+    elif op==libStargate.Picp.VERIFYING_INC:
+      #-- Actualizar contador de bytes verificados
+      self.grabado=self.grabado+inc;
+    
+      #-- Actualizar barra de progreso
+      self.progressbar.SetValue(100*self.grabado/total) 
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+      
+      return True
+      
+    #--------------------------------------------
+    #-- Fin de la verificacion
+    #--------------------------------------------    
+    elif op==libStargate.Picp.VERIFYING_END:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("VERIFICACION OK")
+      self.progressbar.SetValue(100)
+      self.update()
+      
+      return True
+   
+    #-----------------------
+    #-- Evento desconocido  
+    #-----------------------    
+    else:
+      print "DESCONOCIDO: %d" % op
+      return False  
+
+  
+
+#-------------------------------------------------------------------------#
+#                                                                         #
+#   METODOS PARA LA DESCARGA DEL FIRMWARE PICP. INTERFAZ CON LA LIBIRIS   #
+#                                                                         #
+#-------------------------------------------------------------------------#
+  
+
+  #--------------------------------------------------------------
+  #- Metodo principal para descargar un programa en la skypic
+  #--------------------------------------------------------------
+  def download_program(self,prog):
+    #-- Poner la barra de progreso a 0
+    self.progressbar.SetValue(0)
+    self.update()
+    
+    #-- Desactivar flag de cancelacion
+    self.cancelar=False
+    
+    #--------------------------------------------------------------------
+    #-- Crear un objeto IRIS para la descarga de firmware. Se asocia
+    #-- al puerto serie abierto
+    #--------------------------------------------------------------------
+    
+    #-- Primero obtener el nombre del dispositivo serie
+    serialName=self.entry_serial.GetValue()
+    
+    #-- NOTA para Windows: Hay que cerrar el puerto serie, ya que sino
+    #-- al llamar al IRIS dara un error. En windows si un puerto serie ya
+    #-- esta abierto, no se puede abrir ningun otro (ni siquiera el mismo)
+    if self.picp:
+      self.picp.close()
+    
+    try:
+      self.iris = libIris.Pic16_Bootloader.Iris(serialName,logCallback=None)
+    except libIris.Pic16_Bootloader.IrisError,msg:
+    
+      #-- Si hay error indicarlo en la barra de estado y abortar
+      self.statusbar.SetStatusText("%s" % msg,0);
+      return
+    
+    #-- Hay que esperar a que detecte el Bootloader
+    self.statusbar.SetStatusText("Pulse Reset en la skypic",0);
+    
+    #-- Pasar al interfaz de "PROGRESO"
+    self.interfaz_estado(GUI_PROGESS)
+    self.update();
+    
+    #-- DESCARGAR EL FIRMWARE PICP!!!
+    try:
+      self.iris.download(prog,stateCallback=self.state)
+    except libIris.Pic16_Bootloader.IrisError,msg:
+      
+      #-- NOTA para Windows: Idem. Es necesario cerrar el puerto serie
+      self.iris.close()
+      
+      #-- Re-abrir el puerto serie
+      self.open_port()
+      self.statusbar.SetStatusText("%s" % msg,0);
+      return
+      
+    #-- NOTA para Windows: Idem. Es necesario cerrar el puerto serie
+    self.iris.close()    
+      
+    #-- SERVIDOR PICP cargado
+    #-- Re-abrir el puerto serie
+    self.open_port()
+    
+    self.statusbar.SetStatusText("Descarga completada",0);
+    
+      
+  #------------------------------------------------------------------------
+  #-- Funcion de retrollamada de libIris. Segun el estado de la descarga
+  #-- Se hace una cosa u otra
+  #------------------------------------------------------------------------  
+  def state(self,op,inc,total):
+    
+    #-----------------------------
+    #-- Comienzo de descarga
+    #-----------------------------
+    if op==libIris.Pic16_Bootloader.WRITING_START:
+
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0)
+
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("Descargando firmware...",0);
+      self.update()      
+      return True
+      
+    #------------------------------
+    #-- Incremento en la descarga  
+    #------------------------------    
+    elif op==libIris.Pic16_Bootloader.WRITING_INC:  
+      self.progressbar.SetValue(100*inc/total)      
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+        
+      return True
+
+    #-------------------------------
+    #-- Fin de la descarga
+    #-------------------------------
+    elif op==libIris.Pic16_Bootloader.WRITING_END: 
+      self.progressbar.SetValue(100)
+      self.statusbar.SetStatusText("Completado",0);
+      self.update()
+      return True
+      
+    #---------------------------------------------------
+    #-- Comienzo de la identificacion del bootloader    
+    #---------------------------------------------------    
+    elif op==libIris.Pic16_Bootloader.IDENT_START:
+      #-- Hay que esperar a que detecte el Bootloader
+      self.statusbar.SetStatusText("Pulse Reset en la skypic", 0)
+      self.update()
+      return True
+      
+      
+    #-----------------------------------------------------------------
+    #-- Respuesta no recibida del bootloader tras un mini-timeout    
+    #-----------------------------------------------------------------
+    elif op==libIris.Pic16_Bootloader.IDENT_NACK:
+    
+      #-- Mientras que el tiempo total acumulado sea menor que el 
+      #-- TIMEOUT indicado, continuar esperando
+      self.update()
+      
+      #-- Si apretado boton de cancelar abortar...
+      if self.cancelar:
+        return False
+      
+      if total<=TIMEOUT:
+       return True
+      else :
+        return False      
+
+#-----------------------------------------------------------------------------#
+#                                                                             #
+#              FUNCIONES DE GESTION DEL INTERFAZ                              #
+#                                                                             #
+#-----------------------------------------------------------------------------#
+  
+  #------------------------------------------------
+  #-- Procesar eventos pendientes del interfaz 
+  #------------------------------------------------
+  def update(self):
+    while (self.app.Pending()):
+        self.app.Dispatch();  
+  
+  #------------------------------------------------------------------------#
+  #-- Establecer estado interfaz. Esta funcion determina que partes del   
+  #-- interfaz estan activas en cada momento, segun la situacion
+  #--
+  #-- ESTADO DEL INTERFAZ
+  #--
+  #--   INICIAL:   Comienzo del programa. Puerto serie NO abierto
+  #--   OK_SERIAL: Puerto serie abierto correctamente
+  #--   OK_PICP:   Servidor PICP para la grabacion detectado
+  #--   PROGRESS:  Barra de progreso actualizandose
+  #-----------------------------------------------------------------------#
+  def interfaz_estado(self,state,force=False):
+    
+    #-- Por razones de eficiencia, el interfaz solo se actualiza si
+    #-- el nuevo estado es diferente del actual.
+    #-- Si el Flag force esta activado se actualiza el interfaz sin
+    #-- tener en cuenta esto
+    if self.estado_GUI==state and force==False:
+      return;
+    
+    #-- Cambiar al estado indicado
+    self.estado_GUI=state;
+    
+    #-----------------------------
+    #-- ESTADO INICIAL
+    #-----------------------------
+    if state==GUI_INICIAL:
+      
+      #-- Debug
+      #print "GUI Estado: INICIAL"
+      
+      #--- Activar combo del puerto serie
+      self.entry_serial.Enable();
+      
+      #-- El boton de Abrir es de Abrir
+      self.button_abrir_cerrar.SetLabel("  Abrir  ")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- STARGATE
+      self.button_picp.Disable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+     
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+      
+      #-- El temporizador en este estado debe estar parado
+      if self.timer.IsRunning():
+        self.timer.Stop()
+        
+      #-- no Hay conexion con PICP
+      self.label_conexion.SetLabel("SIN CONEXION\n")
+      self.icono_conexion.SetBitmap(self.imagen_off)
+      
+    #----------------------------
+    #-- ESTADO OK_SERIAL
+    #----------------------------    
+    elif state==GUI_OK_SERIAL:
+    
+      #-- Debug
+      #print "GUI Estado: GUI_OK_SERIAL"
+      
+      #-- Desactivar combo del puerto serie
+      self.entry_serial.Disable();
+      
+      #-- El boton de Abrir es ahora de Cerrar
+      self.button_abrir_cerrar.SetLabel("Cerrar")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- Se permite descargar el servidor PICP
+      self.button_picp.Enable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+      
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+      
+      #-- El temporizador se Activa, para comprobar la conexion con 
+      #-- la Skypic
+      self.timer.Start(PING_TIMEOUT,wx.TIMER_CONTINUOUS)
+      
+      #-- no Hay conexion con PICP
+      self.label_conexion.SetLabel("SIN CONEXION\n")
+      self.icono_conexion.SetBitmap(self.imagen_off)
+      
+    
+    #-------------------------
+    #-- ESTADO OK_PICP
+    #-------------------------    
+    elif state==GUI_OK_PICP:
+    
+      #-- Debug
+      #print "GUI Estado: GUI_OK_PICP"  
+
+      #-- Desactivar combo del puerto serie
+      self.entry_serial.Disable();
+      
+      #-- El boton de Abrir es ahora de Cerrar
+      self.button_abrir_cerrar.SetLabel("Cerrar")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- Se permite descargar el servidor PICP
+      self.button_picp.Disable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Enable()
+      self.button_search.Enable()
+      
+      #-- Actualizar el estado del interfaz
+      if self.file_ok:
+        self.button_grabar.Enable()
+      else:
+        self.button_grabar.Disable()
+      
+      
+      #-- FIRMWARE
+      self.button_boot.Enable()
+      self.button_test.Enable()
+      self.button_test2.Enable()
+      
+      #-- STARGATE
+      self.button_picp.Disable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+     
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Enable()
+      self.entry_config.Enable()
+      
+      #-- Si la palabra de configuracion actual es distinta de la 
+      #-- que hay por defecto, se activa el boton de default
+      if self.config_word!=DEFAULT_CONFIG_WORD:
+        self.button_default.Enable()
+      else:
+        self.button_default.Disable()  
+    
+      #-- El boton de write solo se activa si la palabra de 
+      #-- config. es correcta.
+      if self.config_ok:
+        self.button_write_config.Enable()
+      else:
+        self.button_write_config.Disable()
+      
+      
+      
+      #-- El temporizador se Activa, para comprobar la conexion con 
+      #-- la Skypic
+      self.timer.Start(PING_TIMEOUT,wx.TIMER_CONTINUOUS)
+
+      #-- Hay conexion con PICP: Indicarlo
+      self.label_conexion.SetLabel("CONECTADA")
+      self.icono_conexion.SetBitmap(self.imagen_on)
+      
+    #----------------------------
+    #-- ESTADO: PROGRESS
+    #----------------------------    
+    elif state==GUI_PROGESS:
+      #-- Debug
+      #print "GUI Estado: GUI_PROGESS"
+      
+      #-- El temporizador en este estado debe estar parado
+      if self.timer.IsRunning():
+        self.timer.Stop()
+        
+      #-- Boton de cancelacion activa
+      self.button_cancel.Enable() 
+
+      #-- Boton de descarga deshabilitado
+      self.button_picp.Disable()
+      
+      #--- Activar combo del puerto serie
+      self.entry_serial.Disable()
+      
+      #-- Desactivar boton de abrir/cerrar
+      self.button_abrir_cerrar.Disable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+
+    else:
+      print "Estado GUI NO implementado"    
+      
+
+# end of class MyFrame
+
+
+#---------------------------------------------------------
+#-- Funcion para obtener  la lista de puerto serie
+#-- Esto depende de la plataforma en la que se ejecute
+#---------------------------------------------------------
+def getSerialPorts():
+
+  #-- Windows
+  if os.name == 'nt':
+    
+    #-- Se usan los cinco primeros puertos serie
+    return ["","COM1","COM2","COM3","COM4","COM5"]
+    
+  #-- Linux  
+  elif os.name == 'posix':
+    return ["","/dev/ttyS0","/dev/ttyS1","/dev/ttyUSB0","/dev/ttyUSB1"]
+
+  else:
+    return []
+
+
+#---------------------------------------------------
+#-  Aplicacion principal
+#---------------------------------------------------
+class MyApp(wx.App):
+      
+    def OnInit(self):
+        self.iris=None
+        frame = MyFrame(self,None, -1, "")
+        frame.Show(True)
+        self.SetTopWindow(frame)
+        
+        #-- Anadir los nombres de los puertos serie al combobox
+        serialports = getSerialPorts()
+        for disp in serialports:
+          frame.entry_serial.Append(disp) 
+            
+        return True
+        
+    def OnExit(self):
+        print "Fin..."
+
+
+#-------------------------------
+#-  METODO DE ENTRADA
+#-------------------------------
+def start():
+    app = MyApp(0)
+    app.MainLoop()
+
+
+if __name__ == "__main__":
+    start()
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/pyburn-wx.wxg.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/pyburn-wx.wxg.svn-base
new file mode 100644
index 0000000..36e8b35
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/.svn/text-base/pyburn-wx.wxg.svn-base
@@ -0,0 +1,461 @@
+<?xml version="1.0"?>
+<!-- generated by wxGlade 0.4.1 on Mon Sep 29 07:58:40 2008 -->
+
+<application path="main.py" name="" class="" option="0" language="python" top_window="" encoding="UTF-8" 
use_gettext="0" overwrite="0" use_new_namespace="1" for_version="2.6">
+    <object class="MyFrame" name="frame_1" base="EditFrame">
+        <style>wxDEFAULT_FRAME_STYLE</style>
+        <title>Pyburn-wx</title>
+        <menubar>1</menubar>
+        <statusbar>1</statusbar>
+        <object class="wxMenuBar" name="frame_1_menubar" base="EditMenuBar">
+            <menus>
+                <menu name="Help" label="Ayuda">
+                    <item>
+                        <label>Sobre Pyburn</label>
+                        <name>About</name>
+                        <handler>EVT_MENU</handler>
+                    </item>
+                </menu>
+            </menus>
+        </object>
+        <object class="wxStatusBar" name="statusbar" base="EditStatusBar">
+            <fields>
+                <field width="-1">Inicio</field>
+            </fields>
+        </object>
+        <object class="wxBoxSizer" name="sizer_1" base="EditBoxSizer">
+            <orient>wxVERTICAL</orient>
+            <object class="sizeritem">
+                <border>0</border>
+                <option>0</option>
+                <object class="wxPanel" name="panel_1" base="EditPanel">
+                    <style>wxTAB_TRAVERSAL</style>
+                    <object class="wxBoxSizer" name="sizer_2" base="EditBoxSizer">
+                        <orient>wxVERTICAL</orient>
+                        <object class="sizeritem">
+                            <flag>wxALL|wxEXPAND</flag>
+                            <border>4</border>
+                            <option>1</option>
+                            <object class="wxNotebook" name="notebook_1" base="EditNotebook">
+                                <style>0</style>
+                                <tabs>
+                                    <tab window="notebook_1_pane_1">Principal</tab>
+                                    <tab window="notebook_1_pane_2">Avanzado</tab>
+                                </tabs>
+                                <object class="wxPanel" name="notebook_1_pane_1" base="EditPanel">
+                                    <style>wxTAB_TRAVERSAL</style>
+                                    <object class="wxBoxSizer" name="sizer_5" base="EditBoxSizer">
+                                        <orient>wxVERTICAL</orient>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>1</option>
+                                            <object class="wxBoxSizer" name="sizer_6" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_2" 
base="EditStaticText">
+                                                        <attribute>1</attribute>
+                                                        <label>Puerto serie:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxComboBox" name="entry_serial" 
base="EditComboBox">
+                                                        <selection>-1</selection>
+                                                        <tooltip>Seleccionar puerto serie donde esta 
conectada la Skypic grabadora</tooltip>
+                                                        <choices>
+                                                        </choices>
+                                                        <size>250, 30</size>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_abrir_cerrar" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>  Abrir  </label>
+                                                        <tooltip>Abrir/cerrar el puerto serie</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">boton_abrir_cerrar_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxStaticLine" name="static_line_1" 
base="EditStaticLine">
+                                                <style>wxLI_HORIZONTAL</style>
+                                                <attribute>1</attribute>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>1</option>
+                                            <object class="wxBoxSizer" name="sizer_7" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_3" 
base="EditStaticText">
+                                                        <style>wxALIGN_CENTRE</style>
+                                                        <attribute>1</attribute>
+                                                        <label>Firmware:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxFIXED_MINSIZE</flag>
+                                                    <border>7</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_boot" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Bootloader</label>
+                                                        <tooltip>Grabar el Bootloader en la Skypic 
destino</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">boot_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    <flag>wxADJUST_MINSIZE</flag>
+                                                    <border>0</border>
+                                                    <option>0</option>
+                                                    <object class="spacer" name="spacer" base="EditSpacer">
+                                                        <height>20</height>
+                                                        <width>20</width>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL|wxFIXED_MINSIZE</flag>
+                                                    <border>0</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_test" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Test 1</label>
+                                                        <tooltip>Grabar un programa de test en la skypic 
destino, que hace parpadear el led</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">test_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL|wxFIXED_MINSIZE</flag>
+                                                    <border>0</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_test2" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Test 2</label>
+                                                        <tooltip>Grabar un programa de test en la skypic 
destino, que hacer parpadear el led</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">test2_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxStaticLine" name="static_line_2" 
base="EditStaticLine">
+                                                <style>wxLI_HORIZONTAL</style>
+                                                <attribute>1</attribute>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>1</option>
+                                            <object class="wxBoxSizer" name="sizer_8" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>4</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_4" 
base="EditStaticText">
+                                                        <attribute>1</attribute>
+                                                        <label>Fichero .hex:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxTextCtrl" name="entry_file" 
base="EditTextCtrl">
+                                                        <events>
+                                                            <handler event="EVT_TEXT">file_changed</handler>
+                                                        </events>
+                                                        <size>200, 27</size>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>4</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_search" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Buscar</label>
+                                                        <tooltip>Seleccionar el fichero .hex a grabar en la 
Skypic destino</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">search_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>4</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_grabar" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Grabar!</label>
+                                                        <tooltip>Grabar el fichero .hex en la Skypic 
destino</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">grabar_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxStaticLine" name="static_line_3" 
base="EditStaticLine">
+                                                <style>wxLI_HORIZONTAL</style>
+                                                <attribute>1</attribute>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>1</option>
+                                            <object class="wxBoxSizer" name="sizer_9" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    <flag>wxALL|wxALIGN_CENTER_VERTICAL</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxGauge" name="progressbar" 
base="EditGauge">
+                                                        <style>wxGA_HORIZONTAL</style>
+                                                        <range>100</range>
+                                                        <size>350, 20</size>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_cancel" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Cancelar</label>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">button_cancel_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                                <object class="wxPanel" name="notebook_1_pane_2" base="EditPanel">
+                                    <style>wxTAB_TRAVERSAL</style>
+                                    <object class="wxBoxSizer" name="sizer_10" base="EditBoxSizer">
+                                        <orient>wxVERTICAL</orient>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxBoxSizer" name="sizer_11" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_5" 
base="EditStaticText">
+                                                        <attribute>1</attribute>
+                                                        <label>Palabra de configuracion:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxTextCtrl" name="entry_config" 
base="EditTextCtrl">
+                                                        <value>3F3A</value>
+                                                        <events>
+                                                            <handler 
event="EVT_TEXT">config_changed</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_write_config" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Write</label>
+                                                        <tooltip>Grabar la palabra de configuracion en la 
Skypic destino</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">write_config_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>0</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_default" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Default</label>
+                                                        <tooltip>Establecer el valor por defecto de la 
palabra de configuracion</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">default_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxStaticLine" name="static_line_4" 
base="EditStaticLine">
+                                                <style>wxLI_HORIZONTAL</style>
+                                                <attribute>1</attribute>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxBoxSizer" name="sizer_12" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_6" 
base="EditStaticText">
+                                                        <attribute>1</attribute>
+                                                        <label>PIC destino:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_check" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Detectar</label>
+                                                        <tooltip>Detectar la skypic destino: el pic y su 
palabra de configuracion</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">check_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                        <object class="sizeritem">
+                            <flag>wxALL|wxEXPAND</flag>
+                            <border>4</border>
+                            <option>0</option>
+                            <object class="wxStaticBoxSizer" name="sizer_3" base="EditStaticBoxSizer">
+                                <orient>wxHORIZONTAL</orient>
+                                <label>Skypic grabadora</label>
+                                <object class="sizeritem">
+                                    <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                    <border>0</border>
+                                    <option>1</option>
+                                    <object class="wxBoxSizer" name="sizer_4" base="EditBoxSizer">
+                                        <orient>wxHORIZONTAL</orient>
+                                        <object class="sizeritem">
+                                            <flag>wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL</flag>
+                                            <border>5</border>
+                                            <option>0</option>
+                                            <object class="wxStaticBitmap" name="icono_conexion" 
base="EditStaticBitmap">
+                                                <attribute>1</attribute>
+                                                <tooltip>Indica si la Skypic grabadora está conectada o no. 
Si no está conectada o el firmware no es el correcto aparecera "SIN CONEXION"</tooltip>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxALL|wxALIGN_CENTER_VERTICAL|wxSHAPED</flag>
+                                            <border>10</border>
+                                            <option>0</option>
+                                            <object class="wxStaticText" name="label_conexion" 
base="EditStaticText">
+                                                <attribute>1</attribute>
+                                                <label>SIN CONEXION\n</label>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxRIGHT|wxALIGN_CENTER_VERTICAL</flag>
+                                            <border>10</border>
+                                            <option>0</option>
+                                            <object class="wxButton" name="button_picp" base="EditButton">
+                                                <label>Descargar Firmware</label>
+                                                <tooltip>Descargar el Firmware necesario para que la Skypic 
conectada al puerto serie se convierta en grabadora</tooltip>
+                                                <events>
+                                                    <handler event="EVT_BUTTON">picp_clicked</handler>
+                                                </events>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+            </object>
+        </object>
+    </object>
+    <object class="MyDialog" name="AboutDialog" base="EditDialog">
+        <style>wxDEFAULT_DIALOG_STYLE</style>
+        <title>Sobre Pyburn</title>
+        <object class="wxBoxSizer" name="sizer_13" base="EditBoxSizer">
+            <orient>wxVERTICAL</orient>
+            <object class="sizeritem">
+                <flag>wxEXPAND</flag>
+                <border>0</border>
+                <option>0</option>
+                <object class="wxTextCtrl" name="text_ctrl_1" base="EditTextCtrl">
+                    <style>wxTE_MULTILINE|wxTE_READONLY|wxTE_RICH|wxTE_AUTO_URL|wxNO_BORDER</style>
+                    <value>Pyburn 1.0\nGrabacion de microcontroladores PICs usando la 
Skypic\nhttp://www.iearobotics.com/wiki/index.php?title=Pyburn\n\n(c) Juan Gonzalez, Sep-2008\nLICENCIA 
GPL\n\nLibrerias libIris y libStargate:\n(c) Rafael Trevino y Juan Gonzalez\n</value>
+                    <background>#f6f4f1</background>
+                    <size>400, 200</size>
+                </object>
+            </object>
+            <object class="sizeritem">
+                <flag>wxEXPAND</flag>
+                <border>0</border>
+                <option>0</option>
+                <object class="wxStaticLine" name="static_line_5" base="EditStaticLine">
+                    <style>wxLI_HORIZONTAL</style>
+                    <attribute>1</attribute>
+                </object>
+            </object>
+            <object class="sizeritem">
+                <flag>wxEXPAND|wxADJUST_MINSIZE</flag>
+                <border>0</border>
+                <option>0</option>
+                <object class="wxButton" name="button_1" base="EditButton">
+                    <label>OK</label>
+                    <events>
+                        <handler event="EVT_BUTTON">about_ok_clicked</handler>
+                    </events>
+                </object>
+            </object>
+        </object>
+    </object>
+</application>
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/TODO.txt 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/TODO.txt
new file mode 100644
index 0000000..e69de29
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/__init__.py 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/__init__.py
new file mode 100644
index 0000000..0f71a94
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/__init__.py
@@ -0,0 +1,13 @@
+#! /usr/bin/python
+# -*- coding: iso-8859-15 -*-
+
+#-- Pyburn-wx
+
+""" 
+  Grabacion de microcontroladores PICs a bajo nivel
+
+
+"""
+
+#-- Version
+VERSION = 1.0
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/__init__.pyc 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/__init__.pyc
new file mode 100644
index 0000000..5b2d10a
Binary files /dev/null and b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/__init__.pyc differ
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/ledp.hex 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/ledp.hex
new file mode 100644
index 0000000..98f09d1
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/ledp.hex
@@ -0,0 +1,8 @@
+:0400000000000428D0
+:080008008A110A120728FD30DD
+:10001000831603138600023083128606FF30FF002A
+:10002000FF3014200B28080083120313A3007F085D
+:10003000A2002208230403192228FF30A207031C70
+:06004000A30319280800CB
+:02400E00FF3F72
+:00000001FF
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/main.py 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/main.py
new file mode 100644
index 0000000..7d74496
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/main.py
@@ -0,0 +1,1281 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2008 by Juan Gonzalez 
+# Author: Juan Gonzalez <juan iearobotics com>
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+import wx
+import os
+import sys
+
+#-- Modulos de Stargate
+import libStargate.Picp
+
+#-- Modulos de LibIris
+import libIris.Pic16_Bootloader
+import libIris.Pic16_Firmware
+import libIris.IntelHex
+
+#-- Bootloader. Obtenido con:
+#-- hex2python PIC16_bootloader_1.2.hex
+
+bootloader=[[0x0000, 0x0000, 0x158A, 0x160A, 0x2E88],[0x1E80, 0x158A, 0x160A, 0x2E80, 0x018A, 0x158A, 
0x160A, 0x2E83, 0x0000, 0x1E03, 0x2E83, 0x1683, 0x3087, 0x0086, 0x1283, 0x0186, 0x3090, 0x0098, 0x1683, 
0x1518, 0x1698, 0x301F, 0x0099, 0x1283, 0x3003, 0x00FA, 0x3031, 0x0090, 0x140C, 0x26F1, 0x3AEA, 0x1D03, 
0x2EB4, 0x01FA, 0x2EBB, 0x26F1, 0x00F9, 0x3AE3, 0x1903, 0x2EBD, 0x0879, 0x3AEA, 0x1903, 0x2EBB, 0x0879, 
0x3AED, 0x1D03, 0x2EA2, 0x30E4, 0x26EC, 0x3003, 0x00FA, 0x26F1, 0x0190, 0x0198, 0x1683, 0x0198, 0x1283, 
0x018C, 0x2E83, 0x30EB, 0x2EEA, 0x26F1, 0x00F6, 0x26F1, 0x00F5, 0x26F1, 0x00F1, 0x00FB, 0x26F1, 0x00F3, 
0x01F2, 0x3021, 0x1283, 0x1303, 0x0276, 0x1903, 0x2ED6, 0x0875, 0x3903, 0x00FC, 0x00FD, 0x1003, 0x0DFC, 
0x3020, 0x077C, 0x2ED7, 0x3020, 0x0084, 0x26F1, 0x0080, 0x07F2, 0x0A84, 0x0BFB, 0x2ED8, 0x0872, 0x0673, 
0x30E8, 0x1D03, 0x2EEA, 0x30E7, 0x26EC, 0x2703, 0x3800, 0x30E4, 0x1903, 0x30E5, 0x26EC, 0x2EA2, 0x0064, 
0x1E0C, 0x2EEC, 0x0099, 0x0008, 0x0064, 0x087A, 0x1903,
  0x2EFF, 0x1C0C, 0x2EFF, 0x1010, 0x0BFA, 0x2EFB, 0x3400, 0x100C, 0x300B, 0x008F, 0x1410, 0x1E8C, 0x2EF1, 
0x081A, 0x0008, 0x3021, 0x0276, 0x1903, 0x2F55, 0x1683, 0x1703, 0x178C, 0x1283, 0x1303, 0x0875, 0x39FC, 
0x1703, 0x008D, 0x1303, 0x0876, 0x1703, 0x008F, 0x3020, 0x0084, 0x1303, 0x087D, 0x1903, 0x2F2D, 0x1683, 
0x1703, 0x140C, 0x0000, 0x0000, 0x1283, 0x080E, 0x0080, 0x0A84, 0x080C, 0x0080, 0x0A84, 0x0A8D, 0x1303, 
0x03FD, 0x03F5, 0x0AF1, 0x0AF1, 0x2F16, 0x0871, 0x00FC, 0x3E20, 0x0084, 0x1003, 0x0CFC, 0x0876, 0x1703, 
0x008F, 0x1303, 0x0875, 0x1703, 0x008D, 0x1303, 0x087C, 0x1703, 0x078D, 0x1903, 0x0A8F, 0x1703, 0x080D, 
0x3903, 0x1903, 0x2F55, 0x1683, 0x140C, 0x0000, 0x0000, 0x1283, 0x080E, 0x0080, 0x0A84, 0x080C, 0x0080, 
0x0A84, 0x0A8D, 0x1303, 0x0AF1, 0x0AF1, 0x2F40, 0x0875, 0x00F7, 0x0876, 0x00F8, 0x01FB, 0x3002, 0x00F4, 
0x0871, 0x027B, 0x1803, 0x3401, 0x087B, 0x3E20, 0x0084, 0x3021, 0x0278, 0x1703, 0x1683, 0x1903, 0x2F73, 
0x178C, 0x0183, 0x301E, 0x0278, 0x3080, 0x1903, 0x02
 77, 0x1803, 0x2FBB, 0x2F75, 0x138C, 0x0183, 0x0877, 0x1703, 0x008D, 0x1303, 0x0878, 0x1D03, 0x2F8A, 0x3004, 
0x0277, 0x1803, 0x2F8A, 0x1703, 0x1683, 0x1F8C, 0x2F87, 0x1283, 0x3084, 0x078D, 0x0183, 0x301E, 0x2F8B, 
0x0878, 0x1703, 0x008F, 0x0800, 0x008E, 0x0A84, 0x0800, 0x008C, 0x1683, 0x150C, 0x3055, 0x008D, 0x30AA, 
0x008D, 0x148C, 0x0000, 0x0000, 0x0183, 0x1683, 0x1703, 0x1B8C, 0x2FC3, 0x1283, 0x1303, 0x0064, 0x1E0D, 
0x2FA2, 0x120D, 0x1683, 0x1703, 0x110C, 0x140C, 0x0000, 0x0000, 0x1283, 0x0384, 0x0800, 0x060E, 0x1D03, 
0x2FB7, 0x0A84, 0x0800, 0x060C, 0x1903, 0x2FBB, 0x0183, 0x0BF4, 0x2F5C, 0x3400, 0x1283, 0x1303, 0x3002, 
0x07FB, 0x0AF7, 0x1903, 0x0AF8, 0x2F5A, 0x1283, 0x1303, 0x120D, 0x1683, 0x1703, 0x110C, 0x1283, 0x1703, 
0x080D, 0x3903, 0x3C03, 0x1D03, 0x2FBB, 0x3003, 0x028D, 0x1283, 0x1303, 0x3004, 0x00FC, 0x3007, 0x0284, 
0x0000, 0x1683, 0x1703, 0x140C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x1283, 0x1703, 
0x060E, 0x1D03, 0x2FED, 0x0A84, 0x0800, 0x060C, 0
 x1903, 0x2FF4, 0x1283, 0x1303, 0x30FC, 0x05F7, 0x3006, 0x02FB, 0x2FB7, 0x1283, 0x1703, 0x0A8D, 0x0A84, 
0x1283, 0x1303, 0x0BFC, 0x2FD8, 0x2FBB],[0x2000, 0x0002, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
0x3F32],]
+
+
+#-- Estados para el interfaz
+GUI_INICIAL    = 0
+GUI_OK_SERIAL  = 1
+GUI_OK_PICP    = 2
+GUI_PROGESS    = 3
+
+#-- Timeout para la realizacion del PING a la Skypic. En mili-segundos
+PING_TIMEOUT = 500
+
+#-- Timeout para la deteccion del bootloader (en segundos)
+#-- Usado para la descarga del Firmware PICP
+TIMEOUT = 800
+
+#-- Valor por defecto de la palabra de configuracion
+DEFAULT_CONFIG_WORD = 0x3F3A
+
+#--------------------------------------------------------------------
+#-- Obtener la palara de configuracion de un fichero .hex parseado
+#-- Esta funcion deberia estar en la libIris
+#-- DEVUELVE:
+#--  * El valor de palabra de configuracion (si existe)
+#--  * -1 si no existe
+#--------------------------------------------------------------------
+def get_config(mem):
+  for dir,(vh,vl) in mem:
+    if dir==0x2007:
+      return vh*256 + vl
+      
+  return -1
+
+#-------------------------------------------------------------------
+#-- Determinar el directorio desde donde se esta ejecutando pyburn
+#-------------------------------------------------------------------
+def determine_path ():
+    """Borrowed from wxglade.py"""
+    try:
+        root = __file__
+        if os.path.islink (root):
+            root = os.path.realpath (root)
+        return os.path.dirname (os.path.abspath (root))
+    except:
+        print "I'm sorry, but something is wrong."
+        print "There is no __file__ variable. Please contact the author."
+        sys.exit ()
+
+
+#---------------------------------------------------
+#-- Dialogo de About
+#-- Generado con wxglade
+#---------------------------------------------------
+class MyDialog(wx.Dialog):
+    def __init__(self, *args, **kwds):
+        # begin wxGlade: MyDialog.__init__
+        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
+        wx.Dialog.__init__(self, *args, **kwds)
+        self.text_ctrl_1 = wx.TextCtrl(self, -1, "Pyburn 1.0\nGrabacion de microcontroladores PICs usando la 
Skypic\nhttp://www.iearobotics.com/wiki/index.php?title=Pyburn\n\n(c) Juan Gonzalez, Sep-2008\nLICENCIA 
GPL\n\nLibrerias libIris y libStargate:\n(c) Rafael Trevino y Juan Gonzalez\n", 
style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_RICH|wx.TE_AUTO_URL|wx.NO_BORDER)
+        self.static_line_5 = wx.StaticLine(self, -1)
+        self.button_1 = wx.Button(self, -1, "OK")
+
+        self.__set_properties()
+        self.__do_layout()
+
+        self.Bind(wx.EVT_BUTTON, self.about_ok_clicked, self.button_1)
+        # end wxGlade
+
+    def __set_properties(self):
+        # begin wxGlade: MyDialog.__set_properties
+        self.SetTitle("Sobre Pyburn")
+        self.text_ctrl_1.SetMinSize((400, 200))
+        self.text_ctrl_1.SetBackgroundColour(wx.Colour(246, 244, 241))
+        # end wxGlade
+
+    def __do_layout(self):
+        # begin wxGlade: MyDialog.__do_layout
+        sizer_13 = wx.BoxSizer(wx.VERTICAL)
+        sizer_13.Add(self.text_ctrl_1, 0, wx.EXPAND, 0)
+        sizer_13.Add(self.static_line_5, 0, wx.EXPAND, 0)
+        sizer_13.Add(self.button_1, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
+        self.SetAutoLayout(True)
+        self.SetSizer(sizer_13)
+        sizer_13.Fit(self)
+        sizer_13.SetSizeHints(self)
+        self.Layout()
+        # end wxGlade
+
+    def about_ok_clicked(self, event): # wxGlade: MyDialog.<event_handler>
+        #print "OK!"
+        self.EndModal(0)
+
+# end of class MyDialog
+
+
+#---------------------------------------------------
+#-- Clase principal, que implementa el interfaz
+#-- Creada con wxglade
+#---------------------------------------------------
+class MyFrame(wx.Frame):
+  def __init__(self, app, *args, **kwds):
+  
+  
+      #----------------------------------------------------------------
+      #--- Esta parte del codigo se ha generado automaticamente con la
+      #-- herramienta wxglade. NO modificar.
+      #---------------------------------------------------------------
+      # begin wxGlade: MyFrame.__init__
+      kwds["style"] = wx.DEFAULT_FRAME_STYLE
+      wx.Frame.__init__(self, *args, **kwds)
+      self.panel_1 = wx.Panel(self, -1)
+      self.notebook_1 = wx.Notebook(self.panel_1, -1, style=0)
+      self.notebook_1_pane_2 = wx.Panel(self.notebook_1, -1)
+      self.sizer_3_staticbox = wx.StaticBox(self.panel_1, -1, "Skypic grabadora")
+      self.notebook_1_pane_1 = wx.Panel(self.notebook_1, -1)
+      
+      # Menu Bar
+      self.frame_1_menubar = wx.MenuBar()
+      self.SetMenuBar(self.frame_1_menubar)
+      self.Help = wx.Menu()
+      self.About = wx.MenuItem(self.Help, wx.NewId(), "Sobre Pyburn", "", wx.ITEM_NORMAL)
+      self.Help.AppendItem(self.About)
+      self.frame_1_menubar.Append(self.Help, "Ayuda")
+      # Menu Bar end
+      self.statusbar = self.CreateStatusBar(1, 0)
+      self.label_2 = wx.StaticText(self.notebook_1_pane_1, -1, "Puerto serie:")
+      self.entry_serial = wx.ComboBox(self.notebook_1_pane_1, -1, choices=[], style=wx.CB_DROPDOWN)
+      self.button_abrir_cerrar = wx.Button(self.notebook_1_pane_1, -1, "  Abrir  ", style=wx.BU_EXACTFIT)
+      self.static_line_1 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.label_3 = wx.StaticText(self.notebook_1_pane_1, -1, "Firmware:", style=wx.ALIGN_CENTRE)
+      self.button_boot = wx.Button(self.notebook_1_pane_1, -1, "Bootloader", style=wx.BU_EXACTFIT)
+      self.button_test = wx.Button(self.notebook_1_pane_1, -1, "Test 1", style=wx.BU_EXACTFIT)
+      self.button_test2 = wx.Button(self.notebook_1_pane_1, -1, "Test 2", style=wx.BU_EXACTFIT)
+      self.static_line_2 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.label_4 = wx.StaticText(self.notebook_1_pane_1, -1, "Fichero .hex:")
+      self.entry_file = wx.TextCtrl(self.notebook_1_pane_1, -1, "")
+      self.button_search = wx.Button(self.notebook_1_pane_1, -1, "Buscar", style=wx.BU_EXACTFIT)
+      self.button_grabar = wx.Button(self.notebook_1_pane_1, -1, "Grabar!", style=wx.BU_EXACTFIT)
+      self.static_line_3 = wx.StaticLine(self.notebook_1_pane_1, -1)
+      self.progressbar = wx.Gauge(self.notebook_1_pane_1, -1, 100)
+      self.button_cancel = wx.Button(self.notebook_1_pane_1, -1, "Cancelar", style=wx.BU_EXACTFIT)
+      self.label_5 = wx.StaticText(self.notebook_1_pane_2, -1, "Palabra de configuracion:")
+      self.entry_config = wx.TextCtrl(self.notebook_1_pane_2, -1, "3F3A")
+      self.button_write_config = wx.Button(self.notebook_1_pane_2, -1, "Write", style=wx.BU_EXACTFIT)
+      self.button_default = wx.Button(self.notebook_1_pane_2, -1, "Default", style=wx.BU_EXACTFIT)
+      self.static_line_4 = wx.StaticLine(self.notebook_1_pane_2, -1)
+      self.label_6 = wx.StaticText(self.notebook_1_pane_2, -1, "PIC destino:")
+      self.button_check = wx.Button(self.notebook_1_pane_2, -1, "Detectar", style=wx.BU_EXACTFIT)
+      self.icono_conexion = wx.StaticBitmap(self.panel_1, -1, wx.NullBitmap)
+      self.label_conexion = wx.StaticText(self.panel_1, -1, "SIN CONEXION\n")
+      self.button_picp = wx.Button(self.panel_1, -1, "Descargar Firmware")
+
+      self.__set_properties()
+      self.__do_layout()
+
+      self.Bind(wx.EVT_MENU, self.EVT_MENU, self.About)
+      self.Bind(wx.EVT_BUTTON, self.boton_abrir_cerrar_clicked, self.button_abrir_cerrar)
+      self.Bind(wx.EVT_BUTTON, self.boot_clicked, self.button_boot)
+      self.Bind(wx.EVT_BUTTON, self.test_clicked, self.button_test)
+      self.Bind(wx.EVT_BUTTON, self.test2_clicked, self.button_test2)
+      self.Bind(wx.EVT_TEXT, self.file_changed, self.entry_file)
+      self.Bind(wx.EVT_BUTTON, self.search_clicked, self.button_search)
+      self.Bind(wx.EVT_BUTTON, self.grabar_clicked, self.button_grabar)
+      self.Bind(wx.EVT_BUTTON, self.button_cancel_clicked, self.button_cancel)
+      self.Bind(wx.EVT_TEXT, self.config_changed, self.entry_config)
+      self.Bind(wx.EVT_BUTTON, self.write_config_clicked, self.button_write_config)
+      self.Bind(wx.EVT_BUTTON, self.default_clicked, self.button_default)
+      self.Bind(wx.EVT_BUTTON, self.check_clicked, self.button_check)
+      self.Bind(wx.EVT_BUTTON, self.picp_clicked, self.button_picp)
+      # end wxGlade
+      
+      #-- Guardar la aplicacion
+      self.app=app;
+
+  def __set_properties(self):
+      # begin wxGlade: MyFrame.__set_properties
+      self.SetTitle("Pyburn-wx")
+      self.statusbar.SetStatusWidths([-1])
+      # statusbar fields
+      statusbar_fields = ["Inicio"]
+      for i in range(len(statusbar_fields)):
+          self.statusbar.SetStatusText(statusbar_fields[i], i)
+      self.entry_serial.SetMinSize((250, 30))
+      self.entry_serial.SetToolTipString("Seleccionar puerto serie donde esta conectada la Skypic grabadora")
+      self.button_abrir_cerrar.SetToolTipString("Abrir/cerrar el puerto serie")
+      self.button_boot.SetToolTipString("Grabar el Bootloader en la Skypic destino")
+      self.button_test.SetToolTipString("Grabar un programa de test en la skypic destino, que hace parpadear 
el led")
+      self.button_test2.SetToolTipString("Grabar un programa de test en la skypic destino, que hacer 
parpadear el led")
+      self.entry_file.SetMinSize((200, 27))
+      self.button_search.SetToolTipString("Seleccionar el fichero .hex a grabar en la Skypic destino")
+      self.button_grabar.SetToolTipString("Grabar el fichero .hex en la Skypic destino")
+      self.progressbar.SetMinSize((350, 20))
+      self.button_write_config.SetToolTipString("Grabar la palabra de configuracion en la Skypic destino")
+      self.button_default.SetToolTipString("Establecer el valor por defecto de la palabra de configuracion")
+      self.button_check.SetToolTipString("Detectar la skypic destino: el pic y su palabra de configuracion")
+      self.icono_conexion.SetToolTipString(u"Indica si la Skypic grabadora está conectada o no. Si no está 
conectada o el firmware no es el correcto aparecera \"SIN CONEXION\"")
+      self.button_picp.SetToolTipString("Descargar el Firmware necesario para que la Skypic conectada al 
puerto serie se convierta en grabadora")
+      # end wxGlade
+
+  def __do_layout(self):
+      # begin wxGlade: MyFrame.__do_layout
+      sizer_1 = wx.BoxSizer(wx.VERTICAL)
+      sizer_2 = wx.BoxSizer(wx.VERTICAL)
+      sizer_3 = wx.StaticBoxSizer(self.sizer_3_staticbox, wx.HORIZONTAL)
+      sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_10 = wx.BoxSizer(wx.VERTICAL)
+      sizer_12 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_11 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_5 = wx.BoxSizer(wx.VERTICAL)
+      sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
+      sizer_6.Add(self.label_2, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_6.Add(self.entry_serial, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_6.Add(self.button_abrir_cerrar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_5.Add(sizer_6, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_1, 0, wx.EXPAND, 0)
+      sizer_7.Add(self.label_3, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_7.Add(self.button_boot, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 7)
+      sizer_7.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
+      sizer_7.Add(self.button_test, 0, wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
+      sizer_7.Add(self.button_test2, 0, wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
+      sizer_5.Add(sizer_7, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_2, 0, wx.EXPAND, 0)
+      sizer_8.Add(self.label_4, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_8.Add(self.entry_file, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_8.Add(self.button_search, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_8.Add(self.button_grabar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 4)
+      sizer_5.Add(sizer_8, 1, wx.EXPAND, 0)
+      sizer_5.Add(self.static_line_3, 0, wx.EXPAND, 0)
+      sizer_9.Add(self.progressbar, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5)
+      sizer_9.Add(self.button_cancel, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_5.Add(sizer_9, 1, wx.EXPAND, 0)
+      self.notebook_1_pane_1.SetAutoLayout(True)
+      self.notebook_1_pane_1.SetSizer(sizer_5)
+      sizer_5.Fit(self.notebook_1_pane_1)
+      sizer_5.SetSizeHints(self.notebook_1_pane_1)
+      sizer_11.Add(self.label_5, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.entry_config, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.button_write_config, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_11.Add(self.button_default, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
+      sizer_10.Add(sizer_11, 0, wx.EXPAND, 0)
+      sizer_10.Add(self.static_line_4, 0, wx.EXPAND, 0)
+      sizer_12.Add(self.label_6, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_12.Add(self.button_check, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
+      sizer_10.Add(sizer_12, 0, wx.EXPAND, 0)
+      self.notebook_1_pane_2.SetAutoLayout(True)
+      self.notebook_1_pane_2.SetSizer(sizer_10)
+      sizer_10.Fit(self.notebook_1_pane_2)
+      sizer_10.SetSizeHints(self.notebook_1_pane_2)
+      self.notebook_1.AddPage(self.notebook_1_pane_1, "Principal")
+      self.notebook_1.AddPage(self.notebook_1_pane_2, "Avanzado")
+      sizer_2.Add(self.notebook_1, 1, wx.ALL|wx.EXPAND, 4)
+      sizer_4.Add(self.icono_conexion, 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
+      sizer_4.Add(self.label_conexion, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.SHAPED, 10)
+      sizer_4.Add(self.button_picp, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 10)
+      sizer_3.Add(sizer_4, 1, wx.ALIGN_CENTER_VERTICAL, 0)
+      sizer_2.Add(sizer_3, 0, wx.ALL|wx.EXPAND, 4)
+      self.panel_1.SetAutoLayout(True)
+      self.panel_1.SetSizer(sizer_2)
+      sizer_2.Fit(self.panel_1)
+      sizer_2.SetSizeHints(self.panel_1)
+      sizer_1.Add(self.panel_1, 0, 0, 0)
+      self.SetAutoLayout(True)
+      self.SetSizer(sizer_1)
+      sizer_1.Fit(self)
+      sizer_1.SetSizeHints(self)
+      self.Layout()
+      # end wxGlade
+      
+      #--------------------------------------------
+      # Fin del codigo generado automaticamente
+      #--------------------------------------------
+      
+      #-- Limitar la entrada de texto de la palabra de configuracion 
+      #-- a 4 digitos
+      self.entry_config.SetMaxLength(4)
+      
+      #-------------------------------------------
+      #- Encontrar la ruta a los iconos .xpm
+      #-------------------------------------------
+      PIXMAP_name=os.sep+"pixmaps";
+      EXEC_dir = determine_path()
+      IMAGE_ON_DIR = EXEC_dir  + PIXMAP_name + os.sep + "on.xpm"
+      IMAGE_OFF_DIR= EXEC_dir  + PIXMAP_name + os.sep + "off.xpm"
+      
+      #-- Debug: imprimir los directorios donde buscar los iconos
+      #print IMAGE_ON_DIR
+      #print IMAGE_OFF_DIR
+      
+      
+      #---------------------------------------
+      #-- Variables globales
+      #---------------------------------------
+      
+      #-- Stargate para la programacion
+      self.picp=None;
+      
+      #-- Estado en el que se encuentra la GUI
+      self.estado_GUI=None
+      
+      #--  Crear el temporizador
+      self.timer = wx.Timer(self, 999999)
+      self.Bind(wx.EVT_TIMER, self.skypic_check)
+      
+      #-- Cargar las imagenes del estado de la conexion
+      self.imagen_on = wx.Bitmap(IMAGE_ON_DIR, wx.BITMAP_TYPE_XPM)
+      self.imagen_off = wx.Bitmap(IMAGE_OFF_DIR, wx.BITMAP_TYPE_XPM)
+      
+      #-- Flag de cancelar
+      self.cancelar=False
+      
+      #-- Palabras grabadas
+      self.grabado=0;
+      
+      #-- Valor de la palabra de configuracion
+      self.config_word=DEFAULT_CONFIG_WORD
+      
+      #-- Palabra de configuracion OK o no
+      self.config_ok=True;
+      
+      #-- Fichero especificado existe o no
+      self.file_ok=False
+      
+      #-- Otros
+      self.interfaz_estado(GUI_INICIAL);
+  
+  #---------------------------------------------------------
+  #-- Comprobacion periodica de la conexion con la Skypic  
+  #-- La invoca el temporizador
+  #---------------------------------------------------------
+  def skypic_check(self,event):
+    
+    if self.picp:
+    
+      #-- Comprobar si hay conexion con el servidor y si
+      #-- es del tipo correcto
+      
+      es_picp = self.picp.check_server_type()
+      
+      #--DEBUG: Para ver en la consola si esta activado o no
+      #print "PICP: %s" % es_picp
+      
+      #-- Actualizar el interfaz en funcion de que se haya detectado o no
+      if es_picp:
+        self.interfaz_estado(GUI_OK_PICP)
+      else:
+        self.interfaz_estado(GUI_OK_SERIAL)      
+
+  #---------------------------------------
+  #-- Menu de About
+  #----------------------------------------  
+  def EVT_MENU(self, event): # wxGlade: MyFrame.<event_handler>
+     d=MyDialog(None,-1)
+     d.ShowModal()
+     d.Destroy()
+
+#-----------------------------------------------------------------------#
+#                                                                       #
+#     FUNCIONES DE RETROLLAMADA DE LOS ELEMENTOS DEL INTERFAZ           #
+#                                                                       #
+#-----------------------------------------------------------------------#
+  
+  
+  #--------------------------------------------
+  #- Boton de Abrir/Cerrar el puerto serie
+  #--------------------------------------------
+  def boton_abrir_cerrar_clicked(self, event):  # wxGlade: MyFrame.<event_handler>
+    
+    #-- Su funcionamiento depende del estado en el que esta el interfaz
+    
+    if self.estado_GUI==GUI_INICIAL:
+      #-- En estado inicial la accion del boton es ABRIR
+      self.open_port()
+      
+    else:
+      #-- En el resto de estados la accion es CERRAR
+      
+      #-- Cerrarlo! 
+      if self.picp:
+        self.picp.close()
+        
+      #-- Actualizar interfaz
+      self.interfaz_estado(GUI_INICIAL);
+
+      #-- Actualizar barra de estado
+      self.statusbar.SetStatusText("Puerto serie CERRADO",0);
+      
+      
+  #-------------------------------------
+  #-- Boton de buscar fichero apretado  
+  #-------------------------------------
+  def search_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    
+    #-- Abrir un dialogo de busqueda de ficheros
+    filechooser = wx.FileDialog(self,wildcard = "*.hex;*.HEX")
+    
+    #-- Esperar a que el usuario seleccione el fichero
+    opcion = filechooser.ShowModal()
+    
+    #-- Segun la opcion...
+    if opcion == wx.ID_OK:
+    
+      #-- Se ha pulsado ok. Obtener el nombre del fichero
+      fichero = filechooser.GetPath()
+     
+      #-- Meter el fichero en el entry "fichero .hex"
+      self.entry_file.SetValue(fichero)
+      
+  #----------------------------------------------------------
+  #-- Realizar la grabacion del fichero .hex seleccionado
+  #----------------------------------------------------------
+  def grabar_clicked(self,widget): # wxGlade: MyFrame.<event_handler>
+    
+    #-- Obtener el nombre del fichero a grabar
+    file = str(self.entry_file.GetValue())
+    
+    #-- Realizar el parseo del fichero 
+    try:
+      hr = libIris.IntelHex.HexReader (file)
+    except libIris.IntelHex.ReaderError,msg:
+      self.statusbar.SetStatusText("%s" % msg)
+      return      
+     
+    #-- Obtener la palabra de configuracion. Usar la establecida por defecto
+    #-- si no existe    
+    config = get_config(hr.memory())
+    if config == -1:
+      config = DEFAULT_CONFIG_WORD;
+      
+    #-- Poner la palabra de configuracion en el entry
+    self.entry_config.SetValue("%04X" % config);    
+    
+    #-- Realizar la grabacion
+    self.burn_program(hr.dataBlocks())
+ 
+  #------------------------------------
+  #-- Cambio en el nombre del fichero  
+  #------------------------------------
+  def file_changed(self,widget):  # wxGlade: MyFrame.<event_handler>
+  
+    #-- Leer nombre del fichero 
+    file_name = str(self.entry_file.GetValue())
+    
+    #-- El estado del interfaz se cambia seguen que 
+    #-- el fichero exista o no
+    if not os.path.exists(file_name):
+      self.file_ok=False
+    else:
+      self.file_ok=True
+    
+    #-- Actualizar el estado del interfaz
+    if self.file_ok:
+      self.button_grabar.Enable()
+    else:
+      self.button_grabar.Disable()
+ 
+
+  #------------------------
+  #-- Boton de cancelacion
+  #------------------------ 
+  def button_cancel_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    #-- Poner el flag de cancelar a True y deshabilitar el boton
+    self.cancelar=True
+    self.button_cancel.Disable() 
+
+  #----------------------------------
+  #-- Grabar el programa de test 1
+  #----------------------------------
+  def test_clicked(self,widget):        # wxGlade: MyFrame.<event_handler>
+    self.burn_program(libIris.Pic16_Firmware.ledp1)    
+  
+  #----------------------------------
+  #-- Grabar el programa de test 2
+  #----------------------------------
+  def test2_clicked(self,widget):  # wxGlade: MyFrame.<event_handler>
+    self.burn_program(libIris.Pic16_Firmware.ledp2) 
+  
+  #-----------------------------
+  #-- Grabar el bootloader
+  #-----------------------------
+  def boot_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.burn_program(bootloader)   
+  
+  
+  #------------------------------------------
+  #-- Boton Write (Pestana Avanzado)
+  #-- Escribir palabra de configuracion 
+  #------------------------------------------
+  def write_config_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.burn_config()
+    
+
+  #--------------------------------------------------------------------
+  #-- Boton Default (Pestana Avanzado)
+  #-- Establecer el valor por defecto de la palabra de configuracion 
+  #--------------------------------------------------------------------
+  def default_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    self.entry_config.SetValue("%04X" % DEFAULT_CONFIG_WORD);
+    
+    
+  #-----------------------------------------
+  #-- Cambio en la palabra de confiuracion  
+  #-----------------------------------------
+  def config_changed(self, event): # wxGlade: MyFrame.<event_handler>
+    #-- Leer el valor del entry
+    config_str = self.entry_config.GetValue()
+    #print "config_str: %s" % config_str
+    
+    #-- Comprobar si la cadena actual es valida o no
+    try:
+      #-- Convertir a un numero hexadecimal
+      self.config_word = int (config_str, 16);
+      
+      #-- Indicar que palabra correcta
+      self.config_ok=True;
+      
+    except ValueError:
+    
+      #-- Inicar que palabra incorrecta
+      self.config_ok=False;
+    
+    #-- La palabra de configuracion 0000 es peligrosa...
+    if self.config_ok:
+      if self.config_word==0:
+        self.statusbar.SetStatusText("CUIDADO!! Palabra de config. peligrosa")
+      else:
+        self.statusbar.SetStatusText(" ")
+        
+    #-- Actualizar estado del interfaz    
+    self.interfaz_estado(GUI_OK_PICP,force=True);    
+    
+  
+  #-------------------------------
+  #-- Boton de Detectar
+  #-- Comprobar el PIC destino
+  #-------------------------------
+  def check_clicked(self,widget): # wxGlade: MyFrame.<event_handler>
+    self.check_pic();
+  
+  
+  #-----------------------------
+  #-- Grabar el PICP
+  #-----------------------------
+  def picp_clicked(self, event): # wxGlade: MyFrame.<event_handler>
+    #print "Download picp"
+    self.download_program(libIris.Pic16_Firmware.picp) 
+  
+  
+#-----------------------------------------------------------------------#
+#                                                                       #
+#     FUNCIONES PARA IMPLEMENTAR LAS ACCIONES                           #
+#                                                                       #
+#-----------------------------------------------------------------------#
+  
+  #------------------------------------------------------------
+  #-- Abrir el puerto serie leyendo el dispositivo del entry
+  #-- DEVUELVE:
+  #--   -True: Ok
+  #--   -False: Error al abrir el puerto serie
+  #------------------------------------------------------------
+  def open_port(self):
+    #-- Primero obtener el nombre del dispositivo serie
+    serialName=self.entry_serial.GetValue()
+    
+    #-- Si habia un "Stargate" abierto, cerrarlo primero
+    if self.picp:
+      self.picp.close()
+    
+    #-- Abrir el puerto y crear el stargate
+    try:
+      self.picp = libStargate.Picp.Open(serialName, logCallback=None)
+      self.statusbar.SetStatusText("OK. Puerto serie Abierto",0);
+      
+      #-- Cambiar el estado de la GUI
+      self.interfaz_estado(GUI_OK_SERIAL);
+      return True
+      
+    except libStargate.Main.Error, msg:
+      self.picp = None
+      
+      #-- Si hay error indicarlo en la barra de estado y abortar
+      self.statusbar.SetStatusText("%s" % msg, 0)
+      
+      #-- Cambiar estado del interfaz
+      self.interfaz_estado(GUI_INICIAL);
+      return False  
+  
+  
+  #-----------------------------------------------------
+  #-- Detectar el PIC destino
+  #-- DEVUELVE:
+  #--   True: Pic detectado
+  #--   False: No detectado o error de comunicacion
+  #-----------------------------------------------------
+  def check_pic(self):
+    try:
+      id,config = self.picp.readConfig()
+    except: 
+      self.statusbar.SetStatusText("Error de comunicacion")
+      return False;
+      
+    if id!=0x3FFF and id!=0x00:  
+      self.statusbar.SetStatusText("PIC DETECTADO. ID: %04X. Palabra config: %04X"
+                                    % (id,config))   
+      return True;
+    else:
+      self.statusbar.SetStatusText("PIC DESTINO NO DETECTADO")   
+      return False;
+  
+  #------------------------------------
+  #-- Grabar palabra de configuracion
+  #------------------------------------
+  def burn_config(self):
+  
+    #-- Detectar pic destino. Si no esta se aborta
+    pic_detected=self.check_pic();
+    if (not pic_detected):
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR: PIC no detectado. Config word no Grabada")
+      self.update() 
+      return;
+  
+    #-- Grabar palabra de configuracion
+    try:
+      self.picp.writeConfig(self.config_word);
+    except:
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de comunicacion")
+      self.update()    
+      
+    #-- Actualizar barra de status
+    self.statusbar.SetStatusText("GRABADA PALABRA DE CONFIGURACION: %04X" 
+                                  % self.config_word)      
+  
+  #-----------------------
+  #-- Grabar firmware
+  #-----------------------
+  def burn_program(self,prog):  
+    
+    #-- Detectar pic destino. Si no esta se aborta
+    pic_detected=self.check_pic();
+    if (not pic_detected):
+      return;   
+
+    #-- Pasar al interfaz de "PROGRESO"
+    self.interfaz_estado(GUI_PROGESS)
+    
+    #-- Inicialmente no hay cancelacion
+    self.cancelar=False;
+    
+    #-- Grabar el programa
+    try:
+      ok=self.picp.writeProgram (prog,stateCallback=self.burn_state)
+    except libStargate.Picp.Error,msg:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("%s" % msg)
+      self.update()
+      
+      #-- Actualizar interfaz
+      self.interfaz_estado(GUI_OK_PICP)
+      
+      return;
+      
+    #-- El ok nos indica si se ha grabado bien o no
+    if not ok:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ABORTADO")
+      self.update()
+      
+      #-- Pasar al interfaz de "PICP"
+      self.interfaz_estado(GUI_OK_PICP)
+      
+      return
+
+      
+    #-- Grabar palabra de configuracion
+    try:
+      self.picp.writeConfig(self.config_word);
+    except:
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de comunicacion")
+      self.update()
+      return      
+      
+    #-- Actualizar barra de status
+    self.statusbar.SetStatusText("GRABADA PALABRA DE CONFIGURACION: %04X" 
+                                  % self.config_word)
+    self.update()                              
+    
+    #-- Pasar al interfaz de "PICP"
+    self.interfaz_estado(GUI_OK_PICP)
+    
+
+  #---------------------------------------------------------------------------#
+  #-- Funcion de estado por defecto
+  #-- Se invoca durante la grabacion
+  #-- Implementa el comportamiento segun el estado de la grabacion en curso
+  #---------------------------------------------------------------------------#
+  def burn_state(self,op,inc,total):
+
+    #--------------------------------------------------
+    #- Comienzo de la grabacion
+    #--------------------------------------------------
+    if op==libStargate.Picp.WRITING_START:
+    
+      self.grabado=0;
+    
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0)
+
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("GRABACION DEL PIC EN PROGRESO...")
+      self.update()      
+      return True
+     
+    
+    #------------------------------------------------
+    #--  Grabacion de una palabra
+    #------------------------------------------------    
+    elif op==libStargate.Picp.WRITING_INC:
+    
+      #-- Actualizar contador de bytes grabados
+      self.grabado=self.grabado+inc;
+    
+      #-- Actualizar barra de progreso
+      self.progressbar.SetValue(100*self.grabado/total) 
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+        
+      return True
+      
+    #------------------------------------
+    #-- Fin de la grabacion
+    #------------------------------------    
+    elif op==libStargate.Picp.WRITING_END:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("OK...")
+      self.update()
+      return True
+      
+    #----------------------------------
+    #-- Comienzo de la verificacion
+    #----------------------------------    
+    elif op==libStargate.Picp.VERIFYING_START:
+      
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("Verificacion de la grabacion...")
+      
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0) 
+      self.update()
+      
+      #-- Contador de bytes a 0
+      self.grabado=0;
+      
+      return True
+      
+    #-------------------------------------
+    #-- Error de verificacion
+    #-------------------------------------    
+    elif op==libStargate.Picp.VERIFYING_ERROR:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("ERROR de verificacion")
+      self.update()
+      return False
+      
+    #-----------------------------------
+    #--  Verificacion de una palabra    
+    #------------------------------------
+    elif op==libStargate.Picp.VERIFYING_INC:
+      #-- Actualizar contador de bytes verificados
+      self.grabado=self.grabado+inc;
+    
+      #-- Actualizar barra de progreso
+      self.progressbar.SetValue(100*self.grabado/total) 
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+      
+      return True
+      
+    #--------------------------------------------
+    #-- Fin de la verificacion
+    #--------------------------------------------    
+    elif op==libStargate.Picp.VERIFYING_END:
+    
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("VERIFICACION OK")
+      self.progressbar.SetValue(100)
+      self.update()
+      
+      return True
+   
+    #-----------------------
+    #-- Evento desconocido  
+    #-----------------------    
+    else:
+      print "DESCONOCIDO: %d" % op
+      return False  
+
+  
+
+#-------------------------------------------------------------------------#
+#                                                                         #
+#   METODOS PARA LA DESCARGA DEL FIRMWARE PICP. INTERFAZ CON LA LIBIRIS   #
+#                                                                         #
+#-------------------------------------------------------------------------#
+  
+
+  #--------------------------------------------------------------
+  #- Metodo principal para descargar un programa en la skypic
+  #--------------------------------------------------------------
+  def download_program(self,prog):
+    #-- Poner la barra de progreso a 0
+    self.progressbar.SetValue(0)
+    self.update()
+    
+    #-- Desactivar flag de cancelacion
+    self.cancelar=False
+    
+    #--------------------------------------------------------------------
+    #-- Crear un objeto IRIS para la descarga de firmware. Se asocia
+    #-- al puerto serie abierto
+    #--------------------------------------------------------------------
+    
+    #-- Primero obtener el nombre del dispositivo serie
+    serialName=self.entry_serial.GetValue()
+    
+    #-- NOTA para Windows: Hay que cerrar el puerto serie, ya que sino
+    #-- al llamar al IRIS dara un error. En windows si un puerto serie ya
+    #-- esta abierto, no se puede abrir ningun otro (ni siquiera el mismo)
+    if self.picp:
+      self.picp.close()
+    
+    try:
+      self.iris = libIris.Pic16_Bootloader.Iris(serialName,logCallback=None)
+    except libIris.Pic16_Bootloader.IrisError,msg:
+    
+      #-- Si hay error indicarlo en la barra de estado y abortar
+      self.statusbar.SetStatusText("%s" % msg,0);
+      return
+    
+    #-- Hay que esperar a que detecte el Bootloader
+    self.statusbar.SetStatusText("Pulse Reset en la skypic",0);
+    
+    #-- Pasar al interfaz de "PROGRESO"
+    self.interfaz_estado(GUI_PROGESS)
+    self.update();
+    
+    #-- DESCARGAR EL FIRMWARE PICP!!!
+    try:
+      self.iris.download(prog,stateCallback=self.state)
+    except libIris.Pic16_Bootloader.IrisError,msg:
+      
+      #-- NOTA para Windows: Idem. Es necesario cerrar el puerto serie
+      self.iris.close()
+      
+      #-- Re-abrir el puerto serie
+      self.open_port()
+      self.statusbar.SetStatusText("%s" % msg,0);
+      return
+      
+    #-- NOTA para Windows: Idem. Es necesario cerrar el puerto serie
+    self.iris.close()    
+      
+    #-- SERVIDOR PICP cargado
+    #-- Re-abrir el puerto serie
+    self.open_port()
+    
+    self.statusbar.SetStatusText("Descarga completada",0);
+    
+      
+  #------------------------------------------------------------------------
+  #-- Funcion de retrollamada de libIris. Segun el estado de la descarga
+  #-- Se hace una cosa u otra
+  #------------------------------------------------------------------------  
+  def state(self,op,inc,total):
+    
+    #-----------------------------
+    #-- Comienzo de descarga
+    #-----------------------------
+    if op==libIris.Pic16_Bootloader.WRITING_START:
+
+      #-- Barra de progreso a cero
+      self.progressbar.SetValue(0)
+
+      #-- Actualizar barra de status
+      self.statusbar.SetStatusText("Descargando firmware...",0);
+      self.update()      
+      return True
+      
+    #------------------------------
+    #-- Incremento en la descarga  
+    #------------------------------    
+    elif op==libIris.Pic16_Bootloader.WRITING_INC:  
+      self.progressbar.SetValue(100*inc/total)      
+      self.update()
+      
+      #-- Comprobar si se ha apretado boton de Cancelar
+      if self.cancelar:
+        return False
+        
+      return True
+
+    #-------------------------------
+    #-- Fin de la descarga
+    #-------------------------------
+    elif op==libIris.Pic16_Bootloader.WRITING_END: 
+      self.progressbar.SetValue(100)
+      self.statusbar.SetStatusText("Completado",0);
+      self.update()
+      return True
+      
+    #---------------------------------------------------
+    #-- Comienzo de la identificacion del bootloader    
+    #---------------------------------------------------    
+    elif op==libIris.Pic16_Bootloader.IDENT_START:
+      #-- Hay que esperar a que detecte el Bootloader
+      self.statusbar.SetStatusText("Pulse Reset en la skypic", 0)
+      self.update()
+      return True
+      
+      
+    #-----------------------------------------------------------------
+    #-- Respuesta no recibida del bootloader tras un mini-timeout    
+    #-----------------------------------------------------------------
+    elif op==libIris.Pic16_Bootloader.IDENT_NACK:
+    
+      #-- Mientras que el tiempo total acumulado sea menor que el 
+      #-- TIMEOUT indicado, continuar esperando
+      self.update()
+      
+      #-- Si apretado boton de cancelar abortar...
+      if self.cancelar:
+        return False
+      
+      if total<=TIMEOUT:
+       return True
+      else :
+        return False      
+
+#-----------------------------------------------------------------------------#
+#                                                                             #
+#              FUNCIONES DE GESTION DEL INTERFAZ                              #
+#                                                                             #
+#-----------------------------------------------------------------------------#
+  
+  #------------------------------------------------
+  #-- Procesar eventos pendientes del interfaz 
+  #------------------------------------------------
+  def update(self):
+    while (self.app.Pending()):
+        self.app.Dispatch();  
+  
+  #------------------------------------------------------------------------#
+  #-- Establecer estado interfaz. Esta funcion determina que partes del   
+  #-- interfaz estan activas en cada momento, segun la situacion
+  #--
+  #-- ESTADO DEL INTERFAZ
+  #--
+  #--   INICIAL:   Comienzo del programa. Puerto serie NO abierto
+  #--   OK_SERIAL: Puerto serie abierto correctamente
+  #--   OK_PICP:   Servidor PICP para la grabacion detectado
+  #--   PROGRESS:  Barra de progreso actualizandose
+  #-----------------------------------------------------------------------#
+  def interfaz_estado(self,state,force=False):
+    
+    #-- Por razones de eficiencia, el interfaz solo se actualiza si
+    #-- el nuevo estado es diferente del actual.
+    #-- Si el Flag force esta activado se actualiza el interfaz sin
+    #-- tener en cuenta esto
+    if self.estado_GUI==state and force==False:
+      return;
+    
+    #-- Cambiar al estado indicado
+    self.estado_GUI=state;
+    
+    #-----------------------------
+    #-- ESTADO INICIAL
+    #-----------------------------
+    if state==GUI_INICIAL:
+      
+      #-- Debug
+      #print "GUI Estado: INICIAL"
+      
+      #--- Activar combo del puerto serie
+      self.entry_serial.Enable();
+      
+      #-- El boton de Abrir es de Abrir
+      self.button_abrir_cerrar.SetLabel("  Abrir  ")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- STARGATE
+      self.button_picp.Disable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+     
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+      
+      #-- El temporizador en este estado debe estar parado
+      if self.timer.IsRunning():
+        self.timer.Stop()
+        
+      #-- no Hay conexion con PICP
+      self.label_conexion.SetLabel("SIN CONEXION\n")
+      self.icono_conexion.SetBitmap(self.imagen_off)
+      
+    #----------------------------
+    #-- ESTADO OK_SERIAL
+    #----------------------------    
+    elif state==GUI_OK_SERIAL:
+    
+      #-- Debug
+      #print "GUI Estado: GUI_OK_SERIAL"
+      
+      #-- Desactivar combo del puerto serie
+      self.entry_serial.Disable();
+      
+      #-- El boton de Abrir es ahora de Cerrar
+      self.button_abrir_cerrar.SetLabel("Cerrar")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- Se permite descargar el servidor PICP
+      self.button_picp.Enable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+      
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+      
+      #-- El temporizador se Activa, para comprobar la conexion con 
+      #-- la Skypic
+      self.timer.Start(PING_TIMEOUT,wx.TIMER_CONTINUOUS)
+      
+      #-- no Hay conexion con PICP
+      self.label_conexion.SetLabel("SIN CONEXION\n")
+      self.icono_conexion.SetBitmap(self.imagen_off)
+      
+    
+    #-------------------------
+    #-- ESTADO OK_PICP
+    #-------------------------    
+    elif state==GUI_OK_PICP:
+    
+      #-- Debug
+      #print "GUI Estado: GUI_OK_PICP"  
+
+      #-- Desactivar combo del puerto serie
+      self.entry_serial.Disable();
+      
+      #-- El boton de Abrir es ahora de Cerrar
+      self.button_abrir_cerrar.SetLabel("Cerrar")
+      self.button_abrir_cerrar.Enable()
+      
+      #-- Se permite descargar el servidor PICP
+      self.button_picp.Disable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Enable()
+      self.button_search.Enable()
+      
+      #-- Actualizar el estado del interfaz
+      if self.file_ok:
+        self.button_grabar.Enable()
+      else:
+        self.button_grabar.Disable()
+      
+      
+      #-- FIRMWARE
+      self.button_boot.Enable()
+      self.button_test.Enable()
+      self.button_test2.Enable()
+      
+      #-- STARGATE
+      self.button_picp.Disable()
+      
+      #-- OTROS
+      self.button_cancel.Disable()
+     
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Enable()
+      self.entry_config.Enable()
+      
+      #-- Si la palabra de configuracion actual es distinta de la 
+      #-- que hay por defecto, se activa el boton de default
+      if self.config_word!=DEFAULT_CONFIG_WORD:
+        self.button_default.Enable()
+      else:
+        self.button_default.Disable()  
+    
+      #-- El boton de write solo se activa si la palabra de 
+      #-- config. es correcta.
+      if self.config_ok:
+        self.button_write_config.Enable()
+      else:
+        self.button_write_config.Disable()
+      
+      
+      
+      #-- El temporizador se Activa, para comprobar la conexion con 
+      #-- la Skypic
+      self.timer.Start(PING_TIMEOUT,wx.TIMER_CONTINUOUS)
+
+      #-- Hay conexion con PICP: Indicarlo
+      self.label_conexion.SetLabel("CONECTADA")
+      self.icono_conexion.SetBitmap(self.imagen_on)
+      
+    #----------------------------
+    #-- ESTADO: PROGRESS
+    #----------------------------    
+    elif state==GUI_PROGESS:
+      #-- Debug
+      #print "GUI Estado: GUI_PROGESS"
+      
+      #-- El temporizador en este estado debe estar parado
+      if self.timer.IsRunning():
+        self.timer.Stop()
+        
+      #-- Boton de cancelacion activa
+      self.button_cancel.Enable() 
+
+      #-- Boton de descarga deshabilitado
+      self.button_picp.Disable()
+      
+      #--- Activar combo del puerto serie
+      self.entry_serial.Disable()
+      
+      #-- Desactivar boton de abrir/cerrar
+      self.button_abrir_cerrar.Disable()
+      
+      #-- FICHERO .HEX
+      self.entry_file.Disable()
+      self.button_search.Disable()
+      self.button_grabar.Disable()
+      
+      #-- FIRMWARE
+      self.button_boot.Disable()
+      self.button_test.Disable()
+      self.button_test2.Disable()
+      
+      #-- PESTANA DE "AVANZADO"
+      self.button_check.Disable()
+      self.entry_config.Disable()
+      self.button_write_config.Disable()
+      self.button_default.Disable()
+
+    else:
+      print "Estado GUI NO implementado"    
+      
+
+# end of class MyFrame
+
+
+#---------------------------------------------------------
+#-- Funcion para obtener  la lista de puerto serie
+#-- Esto depende de la plataforma en la que se ejecute
+#---------------------------------------------------------
+def getSerialPorts():
+
+  #-- Windows
+  if os.name == 'nt':
+    
+    #-- Se usan los cinco primeros puertos serie
+    return ["","COM1","COM2","COM3","COM4","COM5"]
+    
+  #-- Linux  
+  elif os.name == 'posix':
+    return ["","/dev/ttyS0","/dev/ttyS1","/dev/ttyUSB0","/dev/ttyUSB1"]
+
+  else:
+    return []
+
+
+#---------------------------------------------------
+#-  Aplicacion principal
+#---------------------------------------------------
+class MyApp(wx.App):
+      
+    def OnInit(self):
+        self.iris=None
+        frame = MyFrame(self,None, -1, "")
+        frame.Show(True)
+        self.SetTopWindow(frame)
+        
+        #-- Anadir los nombres de los puertos serie al combobox
+        serialports = getSerialPorts()
+        for disp in serialports:
+          frame.entry_serial.Append(disp) 
+            
+        return True
+        
+    def OnExit(self):
+        print "Fin..."
+
+
+#-------------------------------
+#-  METODO DE ENTRADA
+#-------------------------------
+def start():
+    app = MyApp(0)
+    app.MainLoop()
+
+
+if __name__ == "__main__":
+    start()
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/main.pyc 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/main.pyc
new file mode 100644
index 0000000..7f004c5
Binary files /dev/null and b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/main.pyc differ
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/all-wcprops 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/all-wcprops
new file mode 100644
index 0000000..6e9d853
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx/pixmaps
+END
+on.xpm
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx/pixmaps/on.xpm
+END
+off.xpm
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/pyburn/!svn/ver/70/pyburn-wx/pyburn-wx-1.0/pyburn_wx/pixmaps/off.xpm
+END
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/entries 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/entries
new file mode 100644
index 0000000..b99b08f
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+71
+http://svn.iearobotics.com/pyburn/pyburn-wx/pyburn-wx-1.0/pyburn_wx/pixmaps
+http://svn.iearobotics.com/pyburn
+
+
+
+2008-09-25T05:33:46.949374Z
+52
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+81021e76-403d-0410-8966-deacf4f2e7aa
+
+off.xpm
+file
+
+
+
+
+2012-07-19T14:49:14.891900Z
+2d38e902743506ebd0974531d53d55b2
+2008-08-27T16:26:03.085391Z
+35
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5185
+
+on.xpm
+file
+
+
+
+
+2012-07-19T14:49:14.891900Z
+9e3116a2c89d8d67f08f2f01b05a1f2e
+2008-08-27T16:26:03.085391Z
+35
+obijuan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4592
+
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/text-base/off.xpm.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/text-base/off.xpm.svn-base
new file mode 100644
index 0000000..9705021
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/text-base/off.xpm.svn-base
@@ -0,0 +1,197 @@
+/* XPM */
+static char * off_xpm[] = {
+"35 35 159 2",
+"      c None",
+".     c #E8E8E8",
+"+     c #A3A3A3",
+"@     c #E5E5E5",
+"#     c #E4E4E4",
+"$     c #D9D9D9",
+"%     c #D8D8D8",
+"&     c #B6B6B6",
+"*     c #3C3C3C",
+"=     c #303030",
+"-     c #E0E0E0",
+";     c #DCDCDC",
+">     c #D2D2D2",
+",     c #747474",
+"'     c #323232",
+")     c #D6D6D6",
+"!     c #DADADA",
+"~     c #D7D7D7",
+"{     c #B0B0B0",
+"]     c #464646",
+"^     c #C2C2C2",
+"/     c #BDBDBD",
+"(     c #BABABA",
+"_     c #737373",
+":     c #BEBEBE",
+"<     c #B8B8B8",
+"[     c #AFAFAF",
+"}     c #4E4E4E",
+"|     c #A8A8AC",
+"1     c #99999B",
+"2     c #A8A8AE",
+"3     c #B2B2B5",
+"4     c #AFAFB4",
+"5     c #B1B1B4",
+"6     c #B3B3B5",
+"7     c #B0B0B4",
+"8     c #B4B4B6",
+"9     c #3CE464",
+"0     c #34E75E",
+"a     c #22AF4B",
+"b     c #959595",
+"c     c #B9B9BC",
+"d     c #ABABAF",
+"e     c #A3A3A7",
+"f     c #BBBBBF",
+"g     c #AFAFB3",
+"h     c #A2A2A6",
+"i     c #B8B8BB",
+"j     c #B4B4B8",
+"k     c #9F9FA3",
+"l     c #53A76E",
+"m     c #4DA569",
+"n     c #4FA66A",
+"o     c #ADADAD",
+"p     c #929294",
+"q     c #ABABAC",
+"r     c #A9A9AA",
+"s     c #AEAEB0",
+"t     c #ACACAD",
+"u     c #ADADAF",
+"v     c #ADADAE",
+"w     c #AAAAAB",
+"x     c #B6B6B7",
+"y     c #BDBDBE",
+"z     c #C1C1C1",
+"A     c #C3C3C3",
+"B     c #BEBEBF",
+"C     c #9C9C9E",
+"D     c #A4A4A4",
+"E     c #9E9E9F",
+"F     c #A6A6A8",
+"G     c #B3B3B3",
+"H     c #A7A7A8",
+"I     c #A6A6A6",
+"J     c #A7A7A7",
+"K     c #B2B2B2",
+"L     c #ACACAE",
+"M     c #AFAFB1",
+"N     c #B2B2B4",
+"O     c #A9A9AC",
+"P     c #989898",
+"Q     c #939393",
+"R     c #979797",
+"S     c #AEAEAE",
+"T     c #C9C9C9",
+"U     c #A5A5A5",
+"V     c #4F4F4F",
+"W     c #4D4D4D",
+"X     c #454545",
+"Y     c #7F7F7F",
+"Z     c #5E5E5E",
+"`     c #404040",
+" .    c #BFBFBF",
+"..    c #797979",
+"+.    c #4A4A4A",
+"@.    c #FF7878",
+"#.    c #CD553E",
+"$.    c #888888",
+"%.    c #545454",
+"&.    c #FF4E4E",
+"*.    c #FF4848",
+"=.    c #F9403D",
+"-.    c #C03619",
+";.    c #FD7C7C",
+">.    c #FF7979",
+",.    c #FB706E",
+"'.    c #CB5038",
+").    c #DD9A50",
+"!.    c #E1AD57",
+"~.    c #D49F4B",
+"{.    c #F0634C",
+"].    c #FE4140",
+"^.    c #BE391B",
+"/.    c #D19494",
+"(.    c #FB6E6E",
+"_.    c #FF6565",
+":.    c #CD4730",
+"<.    c #E6BF22",
+"[.    c #FF8D41",
+"}.    c #FF4949",
+"|.    c #F6423E",
+"1.    c #B4442A",
+"2.    c #BAAFAA",
+"3.    c #BCBCBC",
+"4.    c #7E7E7E",
+"5.    c #5D5D5E",
+"6.    c #565656",
+"7.    c #C0623A",
+"8.    c #FF6060",
+"9.    c #FF5959",
+"0.    c #DE4536",
+"a.    c #FF4A4A",
+"b.    c #FD4443",
+"c.    c #A5351C",
+"d.    c #59463E",
+"e.    c #505050",
+"f.    c #BE5131",
+"g.    c #FF5353",
+"h.    c #FF4444",
+"i.    c #BA3617",
+"j.    c #5A3004",
+"k.    c #FF5050",
+"l.    c #FF3F3F",
+"m.    c #CD331C",
+"n.    c #FF4545",
+"o.    c #CE3721",
+"p.    c #FF3737",
+"q.    c #FD3030",
+"r.    c #CB2C14",
+"s.    c #F7433F",
+"t.    c #BD3617",
+"u.    c #FF2A2A",
+"v.    c #FC2827",
+"w.    c #CD2C15",
+"x.    c #FF5454",
+"y.    c #F84643",
+"z.    c #FF2828",
+"A.    c #FF5757",
+"B.    c #BD391A",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                . . . . . . . . . . . . . . . . . . . . . . . . +     ",
+"            @ # $ % % % % % % % % % % % % % % % % % % % % % % & * =   ",
+"        . - ; % % % % % % % % % % % % % % % % % % % % % % % > , ' =   ",
+"    ) % ! ~ ~ ) ~ ~ ) ~ ) ) ) ~ ~ ) ~ ) ) ) ~ ~ ) ~ ) ~ ) ) { ] = =   ",
+"  % ^ / / / / / / / / / / / / / / / / / / / / / / / / / / ( _ = = =   ",
+"  % : < < < < < < < < < < < < < < < < < < < < < < < < < < [ } = = =   ",
+"  % : < | 1 2 3 4 5 6 7 7 8 < < < < < < < < < < 9 0 a < < [ } = = =   ",
+"  % : < b c d e f g h i j k < < < < < < < < < < l m n < < [ } = = =   ",
+"  % : < o p q r s t r u v w < < < < < < < < < < < < < < < [ } = = =   ",
+"  % : x y z A A A A A A A A A A A A A A A A A A A A A B & [ } = = =   ",
+"  % : w C D D D D D D D D D D D D D D D D D D D D D D E F [ } = = =   ",
+"  % : G H I I I I I I I I I I I I I I I I I I I I I I J K [ } = = =   ",
+"  % : L M / / / / / / / / / / / / / / / / / / / / / / N O [ } = =     ",
+"  % : { P Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R S [ } =       ",
+"  T K o o o o o o o o o o o o o o o o o o o o o o o o o o U } =       ",
+"    V W W W W W W W W W W W W W W W W W W W W W W W W W W W X         ",
+"                              Y Z `                                   ",
+"                               ...+.                                  ",
+"                      @   #   % $.%.  &.*.=.-.                        ",
+"                      ;.>.,.'.).!.~.{.*.].^.                          ",
+"     .z z z z z z z z z /.(._.:.<.[.}.|.1.2.z z z z z z z z 3.4.      ",
+"    5.6.6.6.6.6.6.6.6.6.6.7.8.9.0.a.b.c.d.6.6.6.6.6.6.6.6.6.e.X       ",
+"                            f.g.}.h.i.j.                              ",
+"                            k.a.h.l.m.                                ",
+"                          k.&.n.o.p.q.r.                              ",
+"                        k.&.s.t.    u.v.w.                            ",
+"                      x.&.y.-.        z.z.w.                          ",
+"                    A.k.}.B.          z.z.v.r.                        "};
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/text-base/on.xpm.svn-base 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/text-base/on.xpm.svn-base
new file mode 100644
index 0000000..1288a00
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/.svn/text-base/on.xpm.svn-base
@@ -0,0 +1,160 @@
+/* XPM */
+static char * on_xpm[] = {
+"35 35 122 2",
+"      c None",
+".     c #F1F1F1",
+"+     c #EFEFEF",
+"@     c #EBEBEB",
+"#     c #EAEAEA",
+"$     c #E1E1E1",
+"%     c #7F7F7F",
+"&     c #333333",
+"*     c #F8F8F8",
+"=     c #F3F3F3",
+"-     c #EDEDED",
+";     c #E2E2E2",
+">     c #DDDDDD",
+",     c #A4A4A4",
+"'     c #3A3A3A",
+")     c #F2F2F2",
+"!     c #ECECEC",
+"~     c #E8E8E8",
+"{     c #CBCBCB",
+"]     c #626262",
+"^     c #343434",
+"/     c #D6D6D6",
+"(     c #D5D5D5",
+"_     c #D8D8D8",
+":     c #D9D9D9",
+"<     c #D4D4D4",
+"[     c #9D9D9D",
+"}     c #3E3E3E",
+"|     c #D7D7D7",
+"1     c #BFBFBF",
+"2     c #BABABA",
+"3     c #B4B4B4",
+"4     c #B9B9B9",
+"5     c #B2B2B2",
+"6     c #AFAFB0",
+"7     c #A9A9A9",
+"8     c #AEAEAF",
+"9     c #B1B1B1",
+"0     c #B0B0B0",
+"a     c #B1B1B2",
+"b     c #97C3A2",
+"c     c #95C4A1",
+"d     c #96B298",
+"e     c #AAAAAA",
+"f     c #535353",
+"g     c #9D9D9E",
+"h     c #B2B2B5",
+"i     c #B2B2B4",
+"j     c #C0C0C2",
+"k     c #B9B9BB",
+"l     c #BEBEC0",
+"m     c #BCBCBE",
+"n     c #AEAEB0",
+"o     c #3BCA53",
+"p     c #33CC4C",
+"q     c #36A63C",
+"r     c #959595",
+"s     c #A6A6A8",
+"t     c #9C9C9E",
+"u     c #969698",
+"v     c #A8A8AB",
+"w     c #A0A0A2",
+"x     c #959597",
+"y     c #A3A3A5",
+"z     c #959596",
+"A     c #97AD97",
+"B     c #95AC95",
+"C     c #96AC96",
+"D     c #999999",
+"E     c #BBBBBB",
+"F     c #C5C5C6",
+"G     c #C9C9CA",
+"H     c #ADADAE",
+"I     c #E3E3E3",
+"J     c #A4A4A5",
+"K     c #878787",
+"L     c #848484",
+"M     c #868686",
+"N     c #A1A1A1",
+"O     c #BFBFC0",
+"P     c #C2C2C2",
+"Q     c #919191",
+"R     c #949494",
+"S     c #929292",
+"T     c #A1A1A2",
+"U     c #AEAEAE",
+"V     c #ADADAD",
+"W     c #A7A7A7",
+"X     c #8E8E8E",
+"Y     c #898989",
+"Z     c #424242",
+"`     c #404040",
+" .    c #414141",
+"..    c #747474",
+"+.    c #494949",
+"@.    c #C7C7C7",
+"#.    c #7E7E7E",
+"$.    c #505050",
+"%.    c #DDD5BF",
+"&.    c #938D7D",
+"*.    c #676151",
+"=.    c #FFDF33",
+"-.    c #FFCC29",
+";.    c #E9BF53",
+">.    c #ECB664",
+",.    c #A2A2A3",
+"'.    c #A3A3A3",
+").    c #F3BA24",
+"!.    c #FFBD12",
+"~.    c #D8A534",
+"{.    c #9C9488",
+"].    c #6E6E6E",
+"^.    c #5F5F5F",
+"/.    c #3C3C3C",
+"(.    c #96642E",
+"_.    c #9D6325",
+":.    c #98622B",
+"<.    c #594530",
+"[.    c #3A3A33",
+"}.    c #383838",
+"|.    c #804000",
+"1.    c #7D3F00",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                . + @ # # # # # # # # # # # # # # # # # # # # $ % &   ",
+"          * = - ; > > > > > > > > > > > > > > > > > > > > > > , ' &   ",
+"        ) ! # ~ ; > > > > > > > > > > > > > > > > > > > > > { ] ^ &   ",
+"    / ( _ : : : _ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( / / ( < [ } & &   ",
+"  | 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 ] & & &   ",
+"  | 4 5 6 7 8 9 6 0 9 6 0 a 5 5 5 5 5 5 5 5 5 5 b c d 5 5 e f & & &   ",
+"  | 4 5 g 9 h i j k i l m n 5 5 5 5 5 5 5 5 5 5 o p q 5 5 e f & & &   ",
+"  | 4 5 r s t u v w x s y z 5 5 5 5 5 5 5 5 5 5 A B C 5 5 e f & & &   ",
+"  : 4 5 5 D 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 e f & & &   ",
+"  $ E 8 F | | | | | | | | | | | | | | | | | | | | | | G H e f & & &   ",
+"  I E J K L L L L L L L L L L L L L L L L L L L L L L M N e f & & &   ",
+"  I E 6 O { { { { { { { { { { { { { { { { { { { { { { P 6 e f & &     ",
+"  I E J Q R R R R R R R R R R R R R R R R R R R R R R S T e f & &     ",
+"  I E 9 U V V V V V V V V V V V V V V V V V V V V V V U 9 e f &       ",
+"  W S X X X X X X X X X X X X X X X X X X X X X X X X X X Y f &       ",
+"    Z ` ` ` ` ` ` ` ` ` ` ` ` Z  .` ` ` ` ` ` ` ` ` ` ` ` ` }         ",
+"                              5 ..+.                                  ",
+"                              @.#.$.                                  ",
+"                              %.&.*.                                  ",
+"                            =.=.=.-.;.>.                              ",
+"    ,.'.'.'.'.'.'.'.'.'.'.).!.!.!.~.{.'.'.'.'.'.'.'.'.'.'.'.D ].^.    ",
+"    } /./././././././././.(._._._.:.<.[././././././././././.' }.      ",
+"                            |.|.|.|.1.                                ",
+"                                                                      "};
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/off.xpm 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/off.xpm
new file mode 100644
index 0000000..9705021
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/off.xpm
@@ -0,0 +1,197 @@
+/* XPM */
+static char * off_xpm[] = {
+"35 35 159 2",
+"      c None",
+".     c #E8E8E8",
+"+     c #A3A3A3",
+"@     c #E5E5E5",
+"#     c #E4E4E4",
+"$     c #D9D9D9",
+"%     c #D8D8D8",
+"&     c #B6B6B6",
+"*     c #3C3C3C",
+"=     c #303030",
+"-     c #E0E0E0",
+";     c #DCDCDC",
+">     c #D2D2D2",
+",     c #747474",
+"'     c #323232",
+")     c #D6D6D6",
+"!     c #DADADA",
+"~     c #D7D7D7",
+"{     c #B0B0B0",
+"]     c #464646",
+"^     c #C2C2C2",
+"/     c #BDBDBD",
+"(     c #BABABA",
+"_     c #737373",
+":     c #BEBEBE",
+"<     c #B8B8B8",
+"[     c #AFAFAF",
+"}     c #4E4E4E",
+"|     c #A8A8AC",
+"1     c #99999B",
+"2     c #A8A8AE",
+"3     c #B2B2B5",
+"4     c #AFAFB4",
+"5     c #B1B1B4",
+"6     c #B3B3B5",
+"7     c #B0B0B4",
+"8     c #B4B4B6",
+"9     c #3CE464",
+"0     c #34E75E",
+"a     c #22AF4B",
+"b     c #959595",
+"c     c #B9B9BC",
+"d     c #ABABAF",
+"e     c #A3A3A7",
+"f     c #BBBBBF",
+"g     c #AFAFB3",
+"h     c #A2A2A6",
+"i     c #B8B8BB",
+"j     c #B4B4B8",
+"k     c #9F9FA3",
+"l     c #53A76E",
+"m     c #4DA569",
+"n     c #4FA66A",
+"o     c #ADADAD",
+"p     c #929294",
+"q     c #ABABAC",
+"r     c #A9A9AA",
+"s     c #AEAEB0",
+"t     c #ACACAD",
+"u     c #ADADAF",
+"v     c #ADADAE",
+"w     c #AAAAAB",
+"x     c #B6B6B7",
+"y     c #BDBDBE",
+"z     c #C1C1C1",
+"A     c #C3C3C3",
+"B     c #BEBEBF",
+"C     c #9C9C9E",
+"D     c #A4A4A4",
+"E     c #9E9E9F",
+"F     c #A6A6A8",
+"G     c #B3B3B3",
+"H     c #A7A7A8",
+"I     c #A6A6A6",
+"J     c #A7A7A7",
+"K     c #B2B2B2",
+"L     c #ACACAE",
+"M     c #AFAFB1",
+"N     c #B2B2B4",
+"O     c #A9A9AC",
+"P     c #989898",
+"Q     c #939393",
+"R     c #979797",
+"S     c #AEAEAE",
+"T     c #C9C9C9",
+"U     c #A5A5A5",
+"V     c #4F4F4F",
+"W     c #4D4D4D",
+"X     c #454545",
+"Y     c #7F7F7F",
+"Z     c #5E5E5E",
+"`     c #404040",
+" .    c #BFBFBF",
+"..    c #797979",
+"+.    c #4A4A4A",
+"@.    c #FF7878",
+"#.    c #CD553E",
+"$.    c #888888",
+"%.    c #545454",
+"&.    c #FF4E4E",
+"*.    c #FF4848",
+"=.    c #F9403D",
+"-.    c #C03619",
+";.    c #FD7C7C",
+">.    c #FF7979",
+",.    c #FB706E",
+"'.    c #CB5038",
+").    c #DD9A50",
+"!.    c #E1AD57",
+"~.    c #D49F4B",
+"{.    c #F0634C",
+"].    c #FE4140",
+"^.    c #BE391B",
+"/.    c #D19494",
+"(.    c #FB6E6E",
+"_.    c #FF6565",
+":.    c #CD4730",
+"<.    c #E6BF22",
+"[.    c #FF8D41",
+"}.    c #FF4949",
+"|.    c #F6423E",
+"1.    c #B4442A",
+"2.    c #BAAFAA",
+"3.    c #BCBCBC",
+"4.    c #7E7E7E",
+"5.    c #5D5D5E",
+"6.    c #565656",
+"7.    c #C0623A",
+"8.    c #FF6060",
+"9.    c #FF5959",
+"0.    c #DE4536",
+"a.    c #FF4A4A",
+"b.    c #FD4443",
+"c.    c #A5351C",
+"d.    c #59463E",
+"e.    c #505050",
+"f.    c #BE5131",
+"g.    c #FF5353",
+"h.    c #FF4444",
+"i.    c #BA3617",
+"j.    c #5A3004",
+"k.    c #FF5050",
+"l.    c #FF3F3F",
+"m.    c #CD331C",
+"n.    c #FF4545",
+"o.    c #CE3721",
+"p.    c #FF3737",
+"q.    c #FD3030",
+"r.    c #CB2C14",
+"s.    c #F7433F",
+"t.    c #BD3617",
+"u.    c #FF2A2A",
+"v.    c #FC2827",
+"w.    c #CD2C15",
+"x.    c #FF5454",
+"y.    c #F84643",
+"z.    c #FF2828",
+"A.    c #FF5757",
+"B.    c #BD391A",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                . . . . . . . . . . . . . . . . . . . . . . . . +     ",
+"            @ # $ % % % % % % % % % % % % % % % % % % % % % % & * =   ",
+"        . - ; % % % % % % % % % % % % % % % % % % % % % % % > , ' =   ",
+"    ) % ! ~ ~ ) ~ ~ ) ~ ) ) ) ~ ~ ) ~ ) ) ) ~ ~ ) ~ ) ~ ) ) { ] = =   ",
+"  % ^ / / / / / / / / / / / / / / / / / / / / / / / / / / ( _ = = =   ",
+"  % : < < < < < < < < < < < < < < < < < < < < < < < < < < [ } = = =   ",
+"  % : < | 1 2 3 4 5 6 7 7 8 < < < < < < < < < < 9 0 a < < [ } = = =   ",
+"  % : < b c d e f g h i j k < < < < < < < < < < l m n < < [ } = = =   ",
+"  % : < o p q r s t r u v w < < < < < < < < < < < < < < < [ } = = =   ",
+"  % : x y z A A A A A A A A A A A A A A A A A A A A A B & [ } = = =   ",
+"  % : w C D D D D D D D D D D D D D D D D D D D D D D E F [ } = = =   ",
+"  % : G H I I I I I I I I I I I I I I I I I I I I I I J K [ } = = =   ",
+"  % : L M / / / / / / / / / / / / / / / / / / / / / / N O [ } = =     ",
+"  % : { P Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q R S [ } =       ",
+"  T K o o o o o o o o o o o o o o o o o o o o o o o o o o U } =       ",
+"    V W W W W W W W W W W W W W W W W W W W W W W W W W W W X         ",
+"                              Y Z `                                   ",
+"                               ...+.                                  ",
+"                      @   #   % $.%.  &.*.=.-.                        ",
+"                      ;.>.,.'.).!.~.{.*.].^.                          ",
+"     .z z z z z z z z z /.(._.:.<.[.}.|.1.2.z z z z z z z z 3.4.      ",
+"    5.6.6.6.6.6.6.6.6.6.6.7.8.9.0.a.b.c.d.6.6.6.6.6.6.6.6.6.e.X       ",
+"                            f.g.}.h.i.j.                              ",
+"                            k.a.h.l.m.                                ",
+"                          k.&.n.o.p.q.r.                              ",
+"                        k.&.s.t.    u.v.w.                            ",
+"                      x.&.y.-.        z.z.w.                          ",
+"                    A.k.}.B.          z.z.v.r.                        "};
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/on.xpm 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/on.xpm
new file mode 100644
index 0000000..1288a00
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pixmaps/on.xpm
@@ -0,0 +1,160 @@
+/* XPM */
+static char * on_xpm[] = {
+"35 35 122 2",
+"      c None",
+".     c #F1F1F1",
+"+     c #EFEFEF",
+"@     c #EBEBEB",
+"#     c #EAEAEA",
+"$     c #E1E1E1",
+"%     c #7F7F7F",
+"&     c #333333",
+"*     c #F8F8F8",
+"=     c #F3F3F3",
+"-     c #EDEDED",
+";     c #E2E2E2",
+">     c #DDDDDD",
+",     c #A4A4A4",
+"'     c #3A3A3A",
+")     c #F2F2F2",
+"!     c #ECECEC",
+"~     c #E8E8E8",
+"{     c #CBCBCB",
+"]     c #626262",
+"^     c #343434",
+"/     c #D6D6D6",
+"(     c #D5D5D5",
+"_     c #D8D8D8",
+":     c #D9D9D9",
+"<     c #D4D4D4",
+"[     c #9D9D9D",
+"}     c #3E3E3E",
+"|     c #D7D7D7",
+"1     c #BFBFBF",
+"2     c #BABABA",
+"3     c #B4B4B4",
+"4     c #B9B9B9",
+"5     c #B2B2B2",
+"6     c #AFAFB0",
+"7     c #A9A9A9",
+"8     c #AEAEAF",
+"9     c #B1B1B1",
+"0     c #B0B0B0",
+"a     c #B1B1B2",
+"b     c #97C3A2",
+"c     c #95C4A1",
+"d     c #96B298",
+"e     c #AAAAAA",
+"f     c #535353",
+"g     c #9D9D9E",
+"h     c #B2B2B5",
+"i     c #B2B2B4",
+"j     c #C0C0C2",
+"k     c #B9B9BB",
+"l     c #BEBEC0",
+"m     c #BCBCBE",
+"n     c #AEAEB0",
+"o     c #3BCA53",
+"p     c #33CC4C",
+"q     c #36A63C",
+"r     c #959595",
+"s     c #A6A6A8",
+"t     c #9C9C9E",
+"u     c #969698",
+"v     c #A8A8AB",
+"w     c #A0A0A2",
+"x     c #959597",
+"y     c #A3A3A5",
+"z     c #959596",
+"A     c #97AD97",
+"B     c #95AC95",
+"C     c #96AC96",
+"D     c #999999",
+"E     c #BBBBBB",
+"F     c #C5C5C6",
+"G     c #C9C9CA",
+"H     c #ADADAE",
+"I     c #E3E3E3",
+"J     c #A4A4A5",
+"K     c #878787",
+"L     c #848484",
+"M     c #868686",
+"N     c #A1A1A1",
+"O     c #BFBFC0",
+"P     c #C2C2C2",
+"Q     c #919191",
+"R     c #949494",
+"S     c #929292",
+"T     c #A1A1A2",
+"U     c #AEAEAE",
+"V     c #ADADAD",
+"W     c #A7A7A7",
+"X     c #8E8E8E",
+"Y     c #898989",
+"Z     c #424242",
+"`     c #404040",
+" .    c #414141",
+"..    c #747474",
+"+.    c #494949",
+"@.    c #C7C7C7",
+"#.    c #7E7E7E",
+"$.    c #505050",
+"%.    c #DDD5BF",
+"&.    c #938D7D",
+"*.    c #676151",
+"=.    c #FFDF33",
+"-.    c #FFCC29",
+";.    c #E9BF53",
+">.    c #ECB664",
+",.    c #A2A2A3",
+"'.    c #A3A3A3",
+").    c #F3BA24",
+"!.    c #FFBD12",
+"~.    c #D8A534",
+"{.    c #9C9488",
+"].    c #6E6E6E",
+"^.    c #5F5F5F",
+"/.    c #3C3C3C",
+"(.    c #96642E",
+"_.    c #9D6325",
+":.    c #98622B",
+"<.    c #594530",
+"[.    c #3A3A33",
+"}.    c #383838",
+"|.    c #804000",
+"1.    c #7D3F00",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                                                                      ",
+"                . + @ # # # # # # # # # # # # # # # # # # # # $ % &   ",
+"          * = - ; > > > > > > > > > > > > > > > > > > > > > > , ' &   ",
+"        ) ! # ~ ; > > > > > > > > > > > > > > > > > > > > > { ] ^ &   ",
+"    / ( _ : : : _ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( / / ( < [ } & &   ",
+"  | 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 ] & & &   ",
+"  | 4 5 6 7 8 9 6 0 9 6 0 a 5 5 5 5 5 5 5 5 5 5 b c d 5 5 e f & & &   ",
+"  | 4 5 g 9 h i j k i l m n 5 5 5 5 5 5 5 5 5 5 o p q 5 5 e f & & &   ",
+"  | 4 5 r s t u v w x s y z 5 5 5 5 5 5 5 5 5 5 A B C 5 5 e f & & &   ",
+"  : 4 5 5 D 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 e f & & &   ",
+"  $ E 8 F | | | | | | | | | | | | | | | | | | | | | | G H e f & & &   ",
+"  I E J K L L L L L L L L L L L L L L L L L L L L L L M N e f & & &   ",
+"  I E 6 O { { { { { { { { { { { { { { { { { { { { { { P 6 e f & &     ",
+"  I E J Q R R R R R R R R R R R R R R R R R R R R R R S T e f & &     ",
+"  I E 9 U V V V V V V V V V V V V V V V V V V V V V V U 9 e f &       ",
+"  W S X X X X X X X X X X X X X X X X X X X X X X X X X X Y f &       ",
+"    Z ` ` ` ` ` ` ` ` ` ` ` ` Z  .` ` ` ` ` ` ` ` ` ` ` ` ` }         ",
+"                              5 ..+.                                  ",
+"                              @.#.$.                                  ",
+"                              %.&.*.                                  ",
+"                            =.=.=.-.;.>.                              ",
+"    ,.'.'.'.'.'.'.'.'.'.'.).!.!.!.~.{.'.'.'.'.'.'.'.'.'.'.'.D ].^.    ",
+"    } /./././././././././.(._._._.:.<.[././././././././././.' }.      ",
+"                            |.|.|.|.1.                                ",
+"                                                                      "};
diff --git a/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pyburn-wx.wxg 
b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pyburn-wx.wxg
new file mode 100644
index 0000000..36e8b35
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/pyburn_wx/pyburn-wx.wxg
@@ -0,0 +1,461 @@
+<?xml version="1.0"?>
+<!-- generated by wxGlade 0.4.1 on Mon Sep 29 07:58:40 2008 -->
+
+<application path="main.py" name="" class="" option="0" language="python" top_window="" encoding="UTF-8" 
use_gettext="0" overwrite="0" use_new_namespace="1" for_version="2.6">
+    <object class="MyFrame" name="frame_1" base="EditFrame">
+        <style>wxDEFAULT_FRAME_STYLE</style>
+        <title>Pyburn-wx</title>
+        <menubar>1</menubar>
+        <statusbar>1</statusbar>
+        <object class="wxMenuBar" name="frame_1_menubar" base="EditMenuBar">
+            <menus>
+                <menu name="Help" label="Ayuda">
+                    <item>
+                        <label>Sobre Pyburn</label>
+                        <name>About</name>
+                        <handler>EVT_MENU</handler>
+                    </item>
+                </menu>
+            </menus>
+        </object>
+        <object class="wxStatusBar" name="statusbar" base="EditStatusBar">
+            <fields>
+                <field width="-1">Inicio</field>
+            </fields>
+        </object>
+        <object class="wxBoxSizer" name="sizer_1" base="EditBoxSizer">
+            <orient>wxVERTICAL</orient>
+            <object class="sizeritem">
+                <border>0</border>
+                <option>0</option>
+                <object class="wxPanel" name="panel_1" base="EditPanel">
+                    <style>wxTAB_TRAVERSAL</style>
+                    <object class="wxBoxSizer" name="sizer_2" base="EditBoxSizer">
+                        <orient>wxVERTICAL</orient>
+                        <object class="sizeritem">
+                            <flag>wxALL|wxEXPAND</flag>
+                            <border>4</border>
+                            <option>1</option>
+                            <object class="wxNotebook" name="notebook_1" base="EditNotebook">
+                                <style>0</style>
+                                <tabs>
+                                    <tab window="notebook_1_pane_1">Principal</tab>
+                                    <tab window="notebook_1_pane_2">Avanzado</tab>
+                                </tabs>
+                                <object class="wxPanel" name="notebook_1_pane_1" base="EditPanel">
+                                    <style>wxTAB_TRAVERSAL</style>
+                                    <object class="wxBoxSizer" name="sizer_5" base="EditBoxSizer">
+                                        <orient>wxVERTICAL</orient>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>1</option>
+                                            <object class="wxBoxSizer" name="sizer_6" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_2" 
base="EditStaticText">
+                                                        <attribute>1</attribute>
+                                                        <label>Puerto serie:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxComboBox" name="entry_serial" 
base="EditComboBox">
+                                                        <selection>-1</selection>
+                                                        <tooltip>Seleccionar puerto serie donde esta 
conectada la Skypic grabadora</tooltip>
+                                                        <choices>
+                                                        </choices>
+                                                        <size>250, 30</size>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_abrir_cerrar" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>  Abrir  </label>
+                                                        <tooltip>Abrir/cerrar el puerto serie</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">boton_abrir_cerrar_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxStaticLine" name="static_line_1" 
base="EditStaticLine">
+                                                <style>wxLI_HORIZONTAL</style>
+                                                <attribute>1</attribute>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>1</option>
+                                            <object class="wxBoxSizer" name="sizer_7" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_3" 
base="EditStaticText">
+                                                        <style>wxALIGN_CENTRE</style>
+                                                        <attribute>1</attribute>
+                                                        <label>Firmware:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxFIXED_MINSIZE</flag>
+                                                    <border>7</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_boot" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Bootloader</label>
+                                                        <tooltip>Grabar el Bootloader en la Skypic 
destino</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">boot_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    <flag>wxADJUST_MINSIZE</flag>
+                                                    <border>0</border>
+                                                    <option>0</option>
+                                                    <object class="spacer" name="spacer" base="EditSpacer">
+                                                        <height>20</height>
+                                                        <width>20</width>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL|wxFIXED_MINSIZE</flag>
+                                                    <border>0</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_test" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Test 1</label>
+                                                        <tooltip>Grabar un programa de test en la skypic 
destino, que hace parpadear el led</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">test_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL|wxFIXED_MINSIZE</flag>
+                                                    <border>0</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_test2" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Test 2</label>
+                                                        <tooltip>Grabar un programa de test en la skypic 
destino, que hacer parpadear el led</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">test2_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxStaticLine" name="static_line_2" 
base="EditStaticLine">
+                                                <style>wxLI_HORIZONTAL</style>
+                                                <attribute>1</attribute>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>1</option>
+                                            <object class="wxBoxSizer" name="sizer_8" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>4</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_4" 
base="EditStaticText">
+                                                        <attribute>1</attribute>
+                                                        <label>Fichero .hex:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxTextCtrl" name="entry_file" 
base="EditTextCtrl">
+                                                        <events>
+                                                            <handler event="EVT_TEXT">file_changed</handler>
+                                                        </events>
+                                                        <size>200, 27</size>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>4</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_search" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Buscar</label>
+                                                        <tooltip>Seleccionar el fichero .hex a grabar en la 
Skypic destino</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">search_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>4</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_grabar" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Grabar!</label>
+                                                        <tooltip>Grabar el fichero .hex en la Skypic 
destino</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">grabar_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxStaticLine" name="static_line_3" 
base="EditStaticLine">
+                                                <style>wxLI_HORIZONTAL</style>
+                                                <attribute>1</attribute>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>1</option>
+                                            <object class="wxBoxSizer" name="sizer_9" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    <flag>wxALL|wxALIGN_CENTER_VERTICAL</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxGauge" name="progressbar" 
base="EditGauge">
+                                                        <style>wxGA_HORIZONTAL</style>
+                                                        <range>100</range>
+                                                        <size>350, 20</size>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_cancel" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Cancelar</label>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">button_cancel_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                                <object class="wxPanel" name="notebook_1_pane_2" base="EditPanel">
+                                    <style>wxTAB_TRAVERSAL</style>
+                                    <object class="wxBoxSizer" name="sizer_10" base="EditBoxSizer">
+                                        <orient>wxVERTICAL</orient>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxBoxSizer" name="sizer_11" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_5" 
base="EditStaticText">
+                                                        <attribute>1</attribute>
+                                                        <label>Palabra de configuracion:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxTextCtrl" name="entry_config" 
base="EditTextCtrl">
+                                                        <value>3F3A</value>
+                                                        <events>
+                                                            <handler 
event="EVT_TEXT">config_changed</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_write_config" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Write</label>
+                                                        <tooltip>Grabar la palabra de configuracion en la 
Skypic destino</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">write_config_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>0</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_default" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Default</label>
+                                                        <tooltip>Establecer el valor por defecto de la 
palabra de configuracion</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">default_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxStaticLine" name="static_line_4" 
base="EditStaticLine">
+                                                <style>wxLI_HORIZONTAL</style>
+                                                <attribute>1</attribute>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxEXPAND</flag>
+                                            <border>0</border>
+                                            <option>0</option>
+                                            <object class="wxBoxSizer" name="sizer_12" base="EditBoxSizer">
+                                                <orient>wxHORIZONTAL</orient>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxStaticText" name="label_6" 
base="EditStaticText">
+                                                        <attribute>1</attribute>
+                                                        <label>PIC destino:</label>
+                                                    </object>
+                                                </object>
+                                                <object class="sizeritem">
+                                                    
<flag>wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE</flag>
+                                                    <border>5</border>
+                                                    <option>0</option>
+                                                    <object class="wxButton" name="button_check" 
base="EditButton">
+                                                        <style>wxBU_EXACTFIT</style>
+                                                        <label>Detectar</label>
+                                                        <tooltip>Detectar la skypic destino: el pic y su 
palabra de configuracion</tooltip>
+                                                        <events>
+                                                            <handler 
event="EVT_BUTTON">check_clicked</handler>
+                                                        </events>
+                                                    </object>
+                                                </object>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                        <object class="sizeritem">
+                            <flag>wxALL|wxEXPAND</flag>
+                            <border>4</border>
+                            <option>0</option>
+                            <object class="wxStaticBoxSizer" name="sizer_3" base="EditStaticBoxSizer">
+                                <orient>wxHORIZONTAL</orient>
+                                <label>Skypic grabadora</label>
+                                <object class="sizeritem">
+                                    <flag>wxALIGN_CENTER_VERTICAL</flag>
+                                    <border>0</border>
+                                    <option>1</option>
+                                    <object class="wxBoxSizer" name="sizer_4" base="EditBoxSizer">
+                                        <orient>wxHORIZONTAL</orient>
+                                        <object class="sizeritem">
+                                            <flag>wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL</flag>
+                                            <border>5</border>
+                                            <option>0</option>
+                                            <object class="wxStaticBitmap" name="icono_conexion" 
base="EditStaticBitmap">
+                                                <attribute>1</attribute>
+                                                <tooltip>Indica si la Skypic grabadora está conectada o no. 
Si no está conectada o el firmware no es el correcto aparecera "SIN CONEXION"</tooltip>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxALL|wxALIGN_CENTER_VERTICAL|wxSHAPED</flag>
+                                            <border>10</border>
+                                            <option>0</option>
+                                            <object class="wxStaticText" name="label_conexion" 
base="EditStaticText">
+                                                <attribute>1</attribute>
+                                                <label>SIN CONEXION\n</label>
+                                            </object>
+                                        </object>
+                                        <object class="sizeritem">
+                                            <flag>wxRIGHT|wxALIGN_CENTER_VERTICAL</flag>
+                                            <border>10</border>
+                                            <option>0</option>
+                                            <object class="wxButton" name="button_picp" base="EditButton">
+                                                <label>Descargar Firmware</label>
+                                                <tooltip>Descargar el Firmware necesario para que la Skypic 
conectada al puerto serie se convierta en grabadora</tooltip>
+                                                <events>
+                                                    <handler event="EVT_BUTTON">picp_clicked</handler>
+                                                </events>
+                                            </object>
+                                        </object>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+            </object>
+        </object>
+    </object>
+    <object class="MyDialog" name="AboutDialog" base="EditDialog">
+        <style>wxDEFAULT_DIALOG_STYLE</style>
+        <title>Sobre Pyburn</title>
+        <object class="wxBoxSizer" name="sizer_13" base="EditBoxSizer">
+            <orient>wxVERTICAL</orient>
+            <object class="sizeritem">
+                <flag>wxEXPAND</flag>
+                <border>0</border>
+                <option>0</option>
+                <object class="wxTextCtrl" name="text_ctrl_1" base="EditTextCtrl">
+                    <style>wxTE_MULTILINE|wxTE_READONLY|wxTE_RICH|wxTE_AUTO_URL|wxNO_BORDER</style>
+                    <value>Pyburn 1.0\nGrabacion de microcontroladores PICs usando la 
Skypic\nhttp://www.iearobotics.com/wiki/index.php?title=Pyburn\n\n(c) Juan Gonzalez, Sep-2008\nLICENCIA 
GPL\n\nLibrerias libIris y libStargate:\n(c) Rafael Trevino y Juan Gonzalez\n</value>
+                    <background>#f6f4f1</background>
+                    <size>400, 200</size>
+                </object>
+            </object>
+            <object class="sizeritem">
+                <flag>wxEXPAND</flag>
+                <border>0</border>
+                <option>0</option>
+                <object class="wxStaticLine" name="static_line_5" base="EditStaticLine">
+                    <style>wxLI_HORIZONTAL</style>
+                    <attribute>1</attribute>
+                </object>
+            </object>
+            <object class="sizeritem">
+                <flag>wxEXPAND|wxADJUST_MINSIZE</flag>
+                <border>0</border>
+                <option>0</option>
+                <object class="wxButton" name="button_1" base="EditButton">
+                    <label>OK</label>
+                    <events>
+                        <handler event="EVT_BUTTON">about_ok_clicked</handler>
+                    </events>
+                </object>
+            </object>
+        </object>
+    </object>
+</application>
diff --git a/chronopic-firmware/pyburn-wx-1.0/setup.py b/chronopic-firmware/pyburn-wx-1.0/setup.py
new file mode 100644
index 0000000..d00e24c
--- /dev/null
+++ b/chronopic-firmware/pyburn-wx-1.0/setup.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+#-*- coding: iso-8859-15 -*-
+
+from distutils.core import setup
+
+
+files = ["pixmaps/*"]
+
+setup(name         = 'pyburn-wx',
+      version      = '1.0',
+      description  = 'Grabacion de microcontroladores PICs a bajo nivel',
+      author       = 'Juan Gonzalez',
+      author_email = 'juan iearobotics com',
+      url          = 'http://www.iearobotics.com/wiki/index.php?title=Pyburn',
+      license      = 'GPL v2 or later',
+      packages = ['pyburn_wx'],
+      package_data = {'pyburn_wx' : files },
+      scripts      = ['pyburn-wx.py',],
+      )


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]