[chronojump] Added libiris to comp cpic-firmwarecord on linux



commit 0e55145ce0cbca22076b864c79d7b7b6b3e4ea01
Author: Xavier de Blas <xaviblas gmail com>
Date:   Thu Jan 16 17:31:59 2014 +0100

    Added libiris to comp cpic-firmwarecord on linux

 chronopic-firmware/chronopic-firmwarecord/README   |    4 +
 .../linux-compile/Libiris/libiris-1.2/README.txt   |   30 ++
 .../Libiris/libiris-1.2/README_DEVELOPER.txt       |   65 +++
 .../linux-compile/Libiris/libiris-1.2/TODO.txt     |   31 ++
 .../build/lib.linux-i686-2.7/libIris/IntelHex.py   |  536 ++++++++++++++++++++
 .../lib.linux-i686-2.7/libIris/Pic16_Bootloader.py |  446 ++++++++++++++++
 .../lib.linux-i686-2.7/libIris/Pic16_Firmware.py   |   70 +++
 .../build/lib.linux-i686-2.7/libIris/__init__.py   |   50 ++
 .../libiris-1.2/build/scripts-2.7/hex-view.py      |   98 ++++
 .../libiris-1.2/build/scripts-2.7/hex2python.py    |   94 ++++
 .../libiris-1.2/build/scripts-2.7/skypic-test.py   |   80 +++
 .../Libiris/libiris-1.2/debian/changelog           |   35 ++
 .../Libiris/libiris-1.2/debian/compat              |    1 +
 .../Libiris/libiris-1.2/debian/control             |   15 +
 .../Libiris/libiris-1.2/debian/copyright           |   34 ++
 .../Libiris/libiris-1.2/debian/libiris.3           |   69 +++
 .../Libiris/libiris-1.2/debian/libiris.xml         |  148 ++++++
 .../linux-compile/Libiris/libiris-1.2/debian/rules |   19 +
 .../Libiris/libiris-1.2/libIris-utils/hex-view.py  |   98 ++++
 .../libiris-1.2/libIris-utils/hex2python.py        |   94 ++++
 .../libiris-1.2/libIris-utils/skypic-test.py       |   80 +++
 .../linux-compile/Libiris/libiris-1.2/libIris.prj  |  131 +++++
 .../Libiris/libiris-1.2/libIris/IntelHex.py        |  536 ++++++++++++++++++++
 .../libiris-1.2/libIris/Pic16_Bootloader.py        |  446 ++++++++++++++++
 .../Libiris/libiris-1.2/libIris/Pic16_Firmware.py  |   70 +++
 .../Libiris/libiris-1.2/libIris/__init__.py        |   50 ++
 .../linux-compile/Libiris/libiris-1.2/make_man     |   16 +
 .../linux-compile/Libiris/libiris-1.2/setup.py     |   17 +
 .../test-IntelHex/PIC16_bootloader_1.2.hex         |   53 ++
 .../test-IntelHex/Picp-pic16f876-skypic-2.hex      |   54 ++
 .../Libiris/libiris-1.2/test-IntelHex/ledon.hex    |    5 +
 .../Libiris/libiris-1.2/test-IntelHex/ledp.hex     |    8 +
 .../Libiris/libiris-1.2/test-IntelHex/ledp1.hex    |    7 +
 .../Libiris/libiris-1.2/test-IntelHex/ledp2.hex    |    7 +
 .../Libiris/libiris-1.2/test-IntelHex/pruebas.txt  |  173 +++++++
 .../sg-echo-pic16F876A-skypic-0-BOOT.hex           |    5 +
 .../sg-generic-pic16f876a-skypic-0-BOOT.hex        |   11 +
 .../test-IntelHex/sg-servos8-pic16f876-skypic.hex  |   35 ++
 .../libiris-1.2/test-IntelHex/test-formats.py      |   70 +++
 .../libiris-1.2/test-IntelHex/test-outputs.py      |   82 +++
 .../libiris-1.2/test-IntelHex/test-readHex.py      |   53 ++
 .../libiris-1.2/test-IntelHex/test-stats.py        |   67 +++
 .../Libiris/libiris-1.2/test-IntelHex/wrong1.hex   |    6 +
 .../Libiris/libiris-1.2/test-IntelHex/wrong2.hex   |    4 +
 .../Libiris/libiris-1.2/test-IntelHex/wrong3.hex   |    5 +
 .../Libiris/libiris-1.2/test-IntelHex/wrong4.hex   |    5 +
 .../Libiris/libiris-1.2/test-libIris/ledp1.hex     |    7 +
 .../Libiris/libiris-1.2/test-libIris/ledp2.hex     |    7 +
 .../libiris-1.2/test-libIris/test-download.py      |   63 +++
 .../libiris-1.2/test-libIris/test-firmware.py      |   53 ++
 .../linux-compile/README.txt                       |   24 +
 .../python-libstargate_1.2-1_i386-ubuntu-10.04.deb |  Bin 0 -> 13122 bytes
 52 files changed, 4167 insertions(+), 0 deletions(-)
---
diff --git a/chronopic-firmware/chronopic-firmwarecord/README 
b/chronopic-firmware/chronopic-firmwarecord/README
index 813a072..3ad63cd 100644
--- a/chronopic-firmware/chronopic-firmwarecord/README
+++ b/chronopic-firmware/chronopic-firmwarecord/README
@@ -1,3 +1,7 @@
+For Linux see folder: linux-compile
+For Windows continue reading
+
+
 System setup
 ------------
 
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/README.txt 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/README.txt
new file mode 100644
index 0000000..dccb7a1
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/README.txt
@@ -0,0 +1,30 @@
+Libreria LibIris
+----------------
+
+
+-----------------
+INSTALACION
+-----------------
+
+Para instalar ejecutar:
+
+  > python setup.py install
+  
+En Linux hay que ejecutarlo como root o bien usar sudo:
+
+  $ sudo python setup.py install
+
+
+
+
+-----------------------------
+ORGANIZACION DE DIRECTORIOS 
+-----------------------------
+
+  * debian --> Ficheros de control para empaquetar para Debian/Ubuntu
+  * libIris --> Ficheros python con la libIris
+  * libIris-utils--> Utilidades incluidas con la libiris
+  * test-IntelHex --> Pruebas para le modulo libIris.IntelHex y 
+                      ficheros .hex de ejemplo
+  * test-libIris --> Pruebas de los modulos libIris.Pic16_Firmware y 
+                     libIris.Pic16_Bootloader
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/README_DEVELOPER.txt 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/README_DEVELOPER.txt
new file mode 100644
index 0000000..6a7db0a
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/README_DEVELOPER.txt
@@ -0,0 +1,65 @@
+PAQUETE libiris
+---------------
+
+1.- Paginas man
+
+  Para crear la pagina man de libiris ejecutar:
+
+  $ ./make_man
+
+  Esto crea la pagina de manual a partir de la version en xml
+
+  Para visulizar la pagina ejecutar:
+
+  $ ./make_man view
+
+
+2.- Para empaquetar para debian
+
+  2.1.- Version en .tgz
+  ---------------------
+
+ - Si lo que tienes son las fuentes que vienen con el fichero .tgz, hay que descomprimirlo,
+   entrar en el directorio y ejecutar:
+
+  $  dpkg-buildpackage -rfakeroot
+
+  Esto creará el fichero .deb y otros en el directorio superior
+
+  -Para hacer "limpieza" ejecutar:
+
+  $ fakeroot debian/rules clean
+
+  2.2.- Version del SVN
+  ---------------------
+
+  -Para empaquetar una version que se encuentra en el SVN hay que optener una versión
+   "limpia" (sin los ficheros .svn). Para eso hay que exportar.
+
+  -Ir a un directorio de trabajo:
+
+   $ cd exportar
+
+  -Exportar:
+
+      $ svn export http://svn.iearobotics.com/libIris/libiris-1.2 libiris-1.2
+
+  -Entrar en el directorio libiris-1.2 y seguir lo pasos del punto 2.1
+  
+  -NOTA PARA DESARROLLADORES: Cuando se hacen pruebas de empaquetamiento es
+    un rollo el tener que estar exportando, empaquetando y probando. Por eso,
+    para las pruebas se puede directamente invocar el comando
+    
+  $  dpkg-buildpackage -rfakeroot
+  
+    y probar el fichero .deb creado. Cuando esté todo depurado, generar 
+    nuevamente el paquete .deb pero usando el método de exportar.
+    
+3.- Crear ejecutable para Windows
+---------------------------------
+
+  El autoinstalable para Windows se genera de la siguiente manera:
+  
+  > python setup.py bdist_wininst
+
+  Y esto genera un .exe que realiza la instalacion.
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/TODO.txt 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/TODO.txt
new file mode 100644
index 0000000..c7cbebc
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/TODO.txt
@@ -0,0 +1,31 @@
+------------------------------------------------
+--  COSAS POR HACER
+------------------------------------------------
+
+2007-08-01 Rafael Treviño <skasi 7 gmail com>
+* TODO: Crear todos los destructores que se ocupan de cerrar los puertos serie
+  
+* Modificar libIris para usar IntelHex 
+
+
+------------------------------------------------
+--  BUGS ENCONTRADOS
+------------------------------------------------  
+
+
+-------------------------------------------------
+--- BUGS SOLUCIONADOS
+-------------------------------------------------
+
+2007-07-31  Juan Gonzalez <juan iearobotics com>
+* BUG: el programa test-readHex.py peta cuando se le pasa como parametro
+  el fichero PIC16_bootloader_1.2.hex
+ 
+$ ./test-readHex.py PIC16_bootloader_1.2.hex
+File: "PIC16_bootloader_1.2.hex"
+Traceback (most recent call last):
+  File "./test-readHex.py", line 39, in ?
+    data = hr.readHex (fd)
+  File "/home/juan/desarrollo/libIris/libIris.py", line 74, in readHex
+    raise ReaderError, 'Can\'t handle %X record type.' % rectype
+libIris.ReaderError: Can't handle 4 record type.
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/IntelHex.py
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/IntelHex.py
new file mode 100644
index 0000000..6a8111f
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/IntelHex.py
@@ -0,0 +1,536 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: File downloader library for SkyPIC
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         Juan Gonzalez Gomez <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.
+
+
+
+
+#------------------------------------------------------------------------------
+"""
+ Libreria para el analisis de ficheros .hex que esten en formato Hex de 
+ Intel. Se incluyen ademas funciones para realizar conversiones entre
+ diferentes formas de representacion de los programas en codigo maquina
+ 
+ FORMATOS DE DATOS. En esta libreria se usan tres tipos de formatos 
+  para representar la informacion que hay en un fichero .HEX
+
+ -FORMATO 1: Memoria (mem). Se asocia cada direccion con su palabra.
+    Es una lista de tuplas (direccion,palabra). La palabra se representa
+    a su vez mediante una otra tupla con su byte alto y su byte bajo
+    El formato lo podemos expresar asi: 
+    mem = [tupla1, tupla2....] = [(dir1, pal1), (dir2,pal2), ...] =
+        = [ (dir1, (dato1h,dato1l)), (dir2,(dato2h,dato2l)), ... ]
+    Este es el formato mas generico
+
+ -FORMATO 2: Lista de bloques. Los contenidos que estan en posiciones de
+    memoria consecutivas se agrupan en bloques. La representacion es una
+    lista de bloques:
+    programa = [bloque1, bloque2.....] Cada uno de estos bloques es a su 
+    vez una lista de PALABRAS (no bytes). La primera palabra es la direccion
+   de comienzo del bloque
+    bloque1 = [direccion, palabra1, palabra2,.....]
+
+ -FORMATO 3: Lista de bloques de 16 palabras. Es el mismo que el formato 2
+    pero ahora los bloques son como maximo de 16 palabras
+
+ USO DE LOS FORMATOS
+
+ -FORMATO 1: Es el mas generico. Contiene tuplas con las direcciones y 
+             las palabras almacenadas. 
+ -FORMATO 2: Bloques contiguos de palabras. Su principal utilidad es para
+             almacenar programas que se grabaran en el PIC. Los bloques
+             pueden ser de cualquier tamano
+ -FORMATO 3: Bloques contiguos de como maximo 16 palabras. Es igual que el 
+             formato 2 pero con la limitacion de tamano de bloques. Su 
+             principal utilidad es para la carga de programas con el 
+             Bootloader. Por cada bloque de 16 palabras se envia un 
+             checksum para comprobar que el envio es correcto
+ 
+"""
+#------------------------------------------------------------------------------
+
+
+class ReaderError (Exception):
+#----------------------------------------------------------------------------
+  """
+  Excepciones producidas en el modulo IntelHex
+  """
+#----------------------------------------------------------------------------  
+  pass
+
+
+
+
+class HexReader:
+#----------------------------------------------------------------------------
+  """
+  Clase principal para la lectura de ficheros .HEX y realizar conversiones
+  """
+#----------------------------------------------------------------------------
+
+  
+  def __init__ (self, file):
+  #----------------------------------------------------------------------------
+    """
+    Inicializacion de la clase. Se le pasa el fichero que se quiere parsear
+    Bien se puede pasar el descriptor o el nombre del fichero
+    """
+  #----------------------------------------------------------------------------
+  
+    #-- Comprobar si lo que se pasa es una cadena con el nombre del 
+    #-- fichero. En ese caso se abre el fichero para obtener su descriptor
+    if isinstance (file, str): 
+    
+      #-- Abrir el fichero o devolver una excepcion si hay error
+      try:
+        fd = open (file)
+      except IOError,msg:
+        raise ReaderError, msg
+        
+      #-- Indicar que se especifico el fichero por su nombre  
+      fileName=True;  
+        
+    else:
+      fd = file; #-- El argumento se toma directamente como un descriptor
+      fileName=False;
+      
+    #-- Realizar el parseo y obtener el contenido en formato 2
+    self.__memory = readHex(fd)
+    
+    #-- En el caso de que se haya especificado el fichero mediante un
+    #-- nombre se cierra el fichero. En caso contrario se deja abierto
+    if fileName:
+      fd.close()
+    
+  
+  def memory (self):
+  #-------------------------------------------------------------
+    """
+    Devolver el fichero .HEX en formato 1, como una memoria  
+    """
+  #-------------------------------------------------------------
+    return self.__memory
+
+
+  def dataBlocks(self):
+  #----------------------------------------------------------------------  
+    """
+    Devolver el fichero .HEX como una lista de bloques en formato 2
+    """
+  #----------------------------------------------------------------------
+    return memToBlocks(self.__memory)  
+
+  
+  
+  def dataBlocks16(self): 
+  #----------------------------------------------------------------------
+    """
+    Devolver el fichero .Hex como una lista de bloques en formato 3
+    """
+  #----------------------------------------------------------------------
+    return memToBlocks16(self.__memory) 
+
+  
+  
+  def size(self):
+  #-------------------------------------------------------------------------
+    """
+    Devolver el tamano en palabras. No se distingue entre codigo y datos
+    """
+  #-------------------------------------------------------------------------
+    return len(self.__memory)
+
+  
+  def blocks(self):
+  #------------------------------------------------------------------
+    """
+    Devolver el numero de bloques 
+    """
+  #------------------------------------------------------------------
+    blocks = memToBlocks(self.__memory)
+    return len(blocks)
+    
+  
+  def blocks16(self):
+  #------------------------------------------------------------------
+    """
+    Devolver el numero de bloques con tamano maximo de 16 palabras
+    """
+  #------------------------------------------------------------------
+    blocks = memToBlocks16(self.__memory)
+    return len(blocks)  
+
+  
+  
+  def outputPython(self,name="prog"):
+  #-------------------------------------------------------------------
+    """
+    Devuelve una cadena de Salida en formato python con el codigo
+    maquina del fichero .hex
+    """
+  #-------------------------------------------------------------------
+    
+    #-- Convertir a bloques y luego a cadena python
+    blocks = memToBlocks(self.__memory)
+    return blocksToStrPython(blocks,name)
+    
+  
+  def outputPython16(self,name="prog"):
+  #-------------------------------------------------------------------
+    """
+    Devuelve una cadena de Salida en formato python con el codigo
+    maquina del fichero .hex
+    La lista esta formada por bloques con tamano menor o igual a 16
+    """
+  #-------------------------------------------------------------------
+    
+    #-- Convertir a bloques y luego a cadena python
+    blocks = memToBlocks16(self.__memory)
+    return blocksToStrPython(blocks,name)  
+  
+  
+  def outputTable(self):
+  #------------------------------------------------------------
+    """
+    Salida como una tabla Direccion - Contenido
+    """
+  #------------------------------------------------------------  
+    return memToStrTable(self.__memory)
+   
+  
+  def outputBlocks(self):
+  #----------------------------------------------------------
+    """
+    Salida como bloques en formato 2. Direccion - Bloque
+    """
+  #----------------------------------------------------------
+    blocks = memToBlocks(self.__memory)
+    return blocksToStr(blocks)
+    
+  
+  def outputBlocks16(self):
+  #----------------------------------------------------------
+    """
+    Salida como bloques en formato 3. Direccion - Bloque
+    """
+  #----------------------------------------------------------
+    blocks = memToBlocks16(self.__memory)
+    return blocksToStr(blocks)
+
+
+
+
+#------------------------------------------------------------------------------
+#           FUNCIONES ESTATICAS QUE SE PUEDEN INVOCAR DIRECTAMENTE
+#------------------------------------------------------------------------------
+
+
+
+def readHex (fd):
+#--------------------------------------------------------------
+  """
+  Funciona para analizar ficheros .HEX.
+  ENTRADAS: Descriptor del fichero
+  DEVUELVE: Una lista en el FORMATO 1 (memoria)
+  """
+#--------------------------------------------------------------
+
+  #-- Leer las lineas del fichero .hex
+  lines = fd.readlines ()
+  fd.close ()
+
+  # Inicializar la lista de salida
+  mem = []
+
+  #-- Recorrer todas las lineas del fichero
+  for line in lines:
+  
+    #-- FORMAT .HEX
+    #-- CAMPO 1. (1 byte) Comienzo de linea. Caracter ':'
+    if line [0] != ':':
+      raise ReaderError, 'Error en formato HEX: Comienzo de linea incorrecto'
+
+    #-- CAMPO 2. (2 bytes) Numero de bytes de los datos
+    count = int (line [1:3], 16)
+    
+    #-- CAMPO 3. (2 bytes) Direccion de comienzo de los datos
+    addr = int (line [3:7], 16) / 2
+    
+    #-- CAMPO 4. (1 byte). Tipo de comando (registro)
+    rectype = int (line [7:9], 16)
+
+    #-- El registro de tipo 1 indica que es el final del fichero
+    #-- Si es asi se termina y se devuelve el contenido leido
+    if rectype == 1:
+      return mem
+
+    #-- Si es un registro mayor a 1 se ignora
+    #-- Los registro de tipo 4 no tengo muy claro para que son
+    #-- Creo que indican cual es la direccion de comienzo del
+    #-- programa
+    #-- Los registros normales son los de tipo 0 (datos)
+    if rectype > 1:
+      continue
+
+    #-- Inicializar Checksum
+    chk = count + (addr * 2 & 0xFF) + (addr >> 7) + rectype
+
+    #-- CAMPO 5: Datos. Una cadena de "count" bytes. Se deben interpretar
+    #-- como palabras. El primer byte es el bajo y el segundo el alto
+    for loop in xrange (0, count / 2):
+      #-- Crear la tupla con el (byte alto, byte bajo)
+      data = (int (line [11 + 4 * loop: 13 + 4 * loop], 16),
+              int (line [9 + 4 * loop: 11 + 4 * loop], 16))
+      
+      #-- Actualizar checksum      
+      chk += data [0] + data [1]        
+              
+      #-- En el pic las palabras son de 14 bits por lo que el byte alto
+      #-- NUNCA puede ser mayor de 0x3F        
+      if data [0] > 0x3F:
+        raise ReaderError, 'Error en formato HEX: Palabra incorrecta'
+        
+      #-- Anadir la tupla con la direccion y los datos  
+      mem.append ((addr, data))
+      
+      #-- Incrementar la direccion
+      addr += 1
+      
+    #-- CAMPO 6: Checksum del fichero
+    checksum = int (line [9 + count * 2: 11 + count * 2], 16)
+    chk = (0x100 - chk & 0xFF) & 0xFF  
+
+    #-- Comprobación del checksum. Ver si el checksum del fichero es igual
+    #-- al calculado.
+    if chk != checksum:
+      raise ReaderError, 'Error en formato HEX: Fallo en checksum'
+
+  raise ReaderError, 'Error en formato HEX: Final erroneo'
+  
+
+
+def memToBlocks(mem):
+#---------------------------------------------------------------------- 
+  """
+  Conversion del FORMATO 1 (memoria) al FORMATO 2: lista de bloques
+  contiguos
+  ENTRADA: Lista en formato 1 (memoria)
+  DEVUELVE: Lista en FORMATO 2
+  """
+#----------------------------------------------------------------------
+
+  #-- obtener una copia local de la memoria para no borrar la original
+  data = [] + mem
+
+  #-- Obtener la primera tupla
+  address, (d0, d1) = data [0]
+  del data [0]
+  a = address
+
+  #-- Inicializar programa. Un programa es una lista de bloques contiguos
+  #-- de palabras
+  program = []
+  
+  #-- Comenzar el primer bloque. Situar el primer elemento
+  block = [a, (d0 * 0x100 + d1)]
+
+  #-- Repetir para cada palabra del fichero .hex
+  while len (data):
+  
+    #-- Obtener la siguiente palabra y su direccion
+    address, (d0, d1) = data [0]
+    del data [0]
+    
+    #-- Si la palabra esta a continuacion de la anterior
+    if address== a + 1: 
+      #-- Anadir palabra al bloque
+      block.append (d0 * 0x100 + d1)
+      a = address
+    else:  
+      #-- La palabra NO es contigua
+      #-- Hay dos casos:
+      #-- 1) Que este en el mismo subbloque de 8. En ese caso se considera
+      #-- que forman parte del mismo bloque. Los "gaps" se rellenan con ceros
+      #-- 2) Que esten en diferentes subbloques. Eso significa que 
+      #--    pertenecen a bloques separados.
+      if address/8 == (a+1)/8:  #-- Caso 1. Mismo subbloque
+        block.extend ((address - (a + 1)) * [0])
+        block.append (d0 * 0x100 + d1)
+        a = address
+      else:   #-- Caso 2: Distinto Bloque
+        #-- Anadir el bloque actual al programa
+        #-- Pero SOLO si es un bloque de codigo. Es decir, si su direccion
+        #-- de inicio esta por debajo de 0x2000. A partir de esa direccion
+        #-- lo que se tiene es la configuracion
+        program.append (block)
+        
+        #-- Crear el bloque nuevo. Meter el primer elemento
+        a = address
+        block = [a, (d0 * 0x100 + d1)]
+      
+  #-- Falta por añadir al programa el ultimo bloque leido 
+  program.append (block)
+    
+  return program
+
+
+
+def blocksToBlocks16(prog1):
+#--------------------------------------------------------------------------
+  """
+  CONVERSION DEL FORMATO 2  al FORMATO 3: Lista de bloques de
+  datos de tamano maximo de 16 palabras
+  ENTRADA: Lista en formato 2
+  DEVUELVE: Lista de bloques en FORMATO 3
+  """
+#---------------------------------------------------------------------------
+  #-- Programa de salida: lista de bloques de tamano 16 palabras
+  prog2 = []
+  
+  #---- Recorrer todos los bloques y trocearlos en bloques de 16 palabras
+  for block in prog1:
+
+    #-- Si el bloque tiene un tamano menor o igual a 16 no hace
+    #-- falta trocearlo
+    if len(block)<=16:
+      prog2.append(block)
+    else:
+      #-- Bloque tiene tamano mayor a 16. Hay que trocear.
+      
+      #-- Guardar la direccion de inicio
+      addr = block[0]
+      del block[0]
+      
+      #-- Calcular el numero de subbloques de 16 palabras que hay 
+      nblock = len(block)/16;
+     
+      #-- Obtener los subbloques completos
+      for i in range(nblock):
+        nuevo_bloque = [addr] + block[0:16]
+        
+        #-- Anadir subbloque
+        prog2.append(nuevo_bloque)
+        addr+=16;
+        del block[0:16]
+        
+      
+      #--- El ultimo bloque esta formados por los "restos"
+      if (len(block)!=0):
+        nuevo_bloque = [addr] + block
+        prog2.append(nuevo_bloque)   
+
+  return prog2
+
+
+
+def memToBlocks16(mem): 
+#--------------------------------------------------------------------------
+  """
+  CONVERSION DEL FORMATO 1 (memoria) al FORMATO 3: Lista de bloques de
+  datos de tamano maximo de 16 palabras
+  ENTRADA: Lista en formato 2
+  DEVUELVE: Lista de bloques en FORMATO 3
+  """
+#---------------------------------------------------------------------------
+ 
+  #-- Primero agrupar en bloques contiguos
+  prog1 = memToBlocks(mem)
+  
+  #-- "trocear" en bloques de 16
+  return blocksToBlocks16(prog1)
+
+
+
+
+#------------------------------------------------------------------------------#
+#            FUNCIONES DE CONVERSION A CADENAS DE CARACTERES                   #
+#------------------------------------------------------------------------------#
+
+
+def blocksToStrPython(program,name="prog"):
+#-------------------------------------------------------------------
+  """
+  Convertir a una cadena en formato de lista de Python
+  Se crea una cadena con syntaxis python con el codigo maquina
+  El parametro name es el nombre del programa en el codigo python
+  ENTRADAS:
+     -blocks:  LIsta de bloques en FORMATO 2 o 3
+     -name: Cadena a asignar como nombre a la lista de salida
+  DEVUELVE: Una cadena con la lista, en formato PYTHON
+  """
+#-------------------------------------------------------------------
+
+  #-- Comienzo de la cadena
+  prog_str = "%s=[" % (name)
+  
+  #-- Recorrer todos los bloques y pasarlos a un string
+  for block in program:
+    cad=["0x%04X" % (palabra) for palabra in block]
+    prog_str = prog_str + "[" + ", ".join(cad) + "],"
+    
+  #-- Final de la cadena  
+  prog_str+="]"  
+  
+  #-- Devolver la cadena
+  return prog_str
+  
+  #-- Esta es la version compacta. Hace lo mismo que todo lo anterior
+  #-- return '%s = [%s]' % (name, ', '.join (['[%s]' % (', '.join (["0x%04X" %
+  #            palabra for palabra in block])) for block in self.__program]))
+
+ 
+
+def memToStrTable(mem):
+#--------------------------------------------------------------------------
+  """
+  Convertir una memoria (formato 1) en una cadena en forma de tabla. 
+  Cada una de las filas contiene la direccion y su contenido
+  ENTRADAS: mem: Memoria en FORMATO 1
+  """
+#--------------------------------------------------------------------------
+
+  #-- Volcar la memoria
+  tabla=  "Dir: Contenido\n"
+  tabla+= "---- ---------\n"
+  for addres,palabra in mem:
+    tabla+= "%04X: %04X\n" % (addres, palabra[0]*0x100 + palabra[1])
+  return tabla
+  
+
+
+def blocksToStr(data):
+#----------------------------------------------------------------
+  """
+  Convertir a una lista en formato 2 o 3 en una cadena
+  ENTRADAS: data: datos en FORMATO 2 o 3
+  """
+#----------------------------------------------------------------
+  salida=""
+  for block in data:
+    salida+= "Direccion: %04X\n" % (block[0])
+    cad=["%04X" % (palabra) for palabra in block[1:]]
+    salida= salida + " ".join(cad)
+    salida+="\n\n"
+  return salida
+
+  #-- Esta es la version compacta (sustituye al resto)
+  #-- return ''.join (['Direccion: %04X\n%s\n\n' % (block [0], ' '.join  
+  #(["%04X" % (palabra) for palabra in block[1:]])) for block in self.__program])
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/Pic16_Bootloader.py
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/Pic16_Bootloader.py
new file mode 100644
index 0000000..a7205cd
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/Pic16_Bootloader.py
@@ -0,0 +1,446 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: File downloader library for SkyPIC
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+"""
+  Modulo Cliente para comunicarse con el PIC_BOOTLOADER y descargar       
+  ficheros .hex en la tarejta Skypic
+
+  Ademas se incorporan metodos para que el usuario pueda acceder 
+  a los diferentes servicios del Bootloader por si quiere implementarse
+  su propio programa de descarga o quiere hacer modificaciones a bajo 
+  nivel en el bootloader
+"""
+
+import serial 
+import time
+import IntelHex
+import sys
+
+
+#############
+# CONSTANTS #
+#############
+
+#--------------------------------------
+#- Configuracion del puerto serie 
+#--------------------------------------
+#-- Timeout por defecto para el acceso al puerto serie
+SERIAL_TIMEOUT = 0.2
+
+#--- Velocidad de transmision para la comunicacion con el PIC Bootloader
+BAUDIOS = 38400
+
+#------------------------------------------------------------------
+#-  IDENTIFICACION DE LOS COMANDOS DEL PROTOCOLO DEL BOOTLOADER  
+#------------------------------------------------------------------
+CMD_WRITE    = '\xE3'  #-- Escritura de un bloque
+CMD_DATA_OK  = '\xE7'  #-- Datos enviados correctamente
+CMD_OK       = '\xE4'  #-- Operacion ejecutada
+CMD_IDENT    = '\xEA'  #-- Comando de identificacion del bootloader
+CMD_IDACK    = '\xEB'  #-- Bootloader identificado
+CMD_SEND_DONE= '\xED'  #-- Comando de ejecucion
+
+#------------------------------------------------------------------------
+#-- Constantes usadas con el metodo download para indicar
+#-- lo que va ocurriendo con la descarga 
+#------------------------------------------------------------------------
+WRITING_START=1      #-- Comienzo de la escritura
+WRITING_INC=2        #-- Escritura de una palabra
+WRITING_END=3        #-- Fin de la escritura
+
+IDENT_START=4        #-- Comienzo de la identificacion del bootloader
+IDENT_NACK=5         #-- No se ha recibido respuesta
+
+#-- Timeout por defecto, en segundos, que se espera a detectar el 
+#-- Bootloader
+DEFAULT_TIMEOUT = 10
+
+
+#----------------------------------------
+#- Clase para la gestion de los errores
+#----------------------------------------
+class IrisError (Exception):
+  """
+  Excepciones producidas en el modulo Pic16_Bootloader
+  """
+  pass
+
+
+def default_logCallback(msg):
+  """
+    Funcion de "log" por defecto. 
+    Simplemente se imprimen los mensajes
+  """
+  sys.stdout.write(msg)
+  sys.stdout.flush()
+
+
+#-----------------------------------------------------------------------------
+def default_stateCallback(op,inc,total):
+  """
+  Funcion de estado por defecto
+  Se imprime informacion en la consola
+  La funcion debe devolver TRUE si todo esta OK y se quiere continuar
+  con el proceso. FALSE en caso contrario. La descarga se aborta
+ Los parametros recibidos son:
+   -op: Tipo de operacion. Indica la fase de la descarga que se ha iniciado
+   -inc: 
+      -En el estado IDENT_NACK indica el numero reitentos hasta el momento
+      -En el estado WRITING_INC indica el numero de bloques enviados
+   -total:
+      -En el estado IDENT_NACK indica el tiempo total transcurrido desde
+       el comienzo de la identificacion (en segundos)
+      -En el estado WRITING_INC indica el numero total de bloques del
+       del programa a transmitir
+
+  El usuario puede crear su propia funcion de estado para actualizar el
+  interfaz de su aplicacion como quiera. Esta funcion es un ejemplo para
+  una interfaz de consola
+  """
+
+
+  #--------------------------------------------------
+  #- Comienzo de la identificacion del Bootloader 
+  #--------------------------------------------------
+  if op==IDENT_START:
+    print "Esperando Bootloader"
+    return True
+    
+  #-------------------------------------------------------------------------
+  #-- Timeout en la identificacion. 
+  #-- Cuando el tiempo transcurrido supera el timeout en la identificacion
+  #-- se aborta devolviendose False
+  #-------------------------------------------------------------------------  
+  elif op==IDENT_NACK:
+    sys.stdout.write('.')
+    sys.stdout.flush()
+    if total<=DEFAULT_TIMEOUT:
+      return True
+    else :
+      return False  
+  
+  #-----------------------------------------------------------------------
+  #-- Comienzo de la descarga
+  #-- Se imprime una barra de status en ASCII formada por '.' y se lleva
+  #-- el cursor a la izquierda (imprimiendo el caracter '\b'
+  #----------------------------------------------------------------------
+  elif op==WRITING_START:
+    sys.stdout.write("\nDescargando:\n")
+    cad="".join(["." for i in range(total)])
+    back="".join(["\b" for i in range(total)])
+    
+    #-- Imprimir la "barra de estado" con '.'. Un '.' por cada bloque
+    sys.stdout.write(cad)
+    
+    #-- Llevar el cursos a la izquierda
+    sys.stdout.write(back)
+    sys.stdout.flush()
+    
+    return True
+  
+  #----------------------------------------------------------------------
+  #-- Se ha grabado un bloque. Se actualiza la "barra de estado ascii"  
+  #----------------------------------------------------------------------
+  elif op==WRITING_INC:  
+    sys.stdout.write("*")
+    sys.stdout.flush()
+    return True
+    
+  #----------------------------------------
+  #- Fin de la descarga
+  #----------------------------------------
+  elif op==WRITING_END: 
+    print " OK"
+    return True
+    
+
+#----------------------------------------------------------------------------
+#--                           CLASE  PRINCIPAL    
+#----------------------------------------------------------------------------
+class Iris:
+  """
+  Clase prinipal del modulo Pic16_Bootloader. Se utiliza para comunicarse
+  con el Bootloader y descargar programas en la Skypic
+  """
+
+  #---------------------
+  #- Destructor 
+  #---------------------
+  def __del__(self):
+  
+    #-- Cerrar el pueto serie
+    if self.__serial:
+      #print "Debug: cerrando puerto serie: %s" % (self.__serial.portstr)
+      self.__serial.close()
+
+
+  def __init__ (self, serialName, logCallback = default_logCallback):
+  #-------------------------------------------------------------------------
+    """
+  Constructor
+  ENTRADAS:
+    serialName: Dispositivo serie
+    logCallback: Funcion de retrollamada para el "log"    
+    """
+  #--------------------------------------------------------------------------  
+    
+    self.__serial = None
+    self.__log = logCallback
+    
+    #-- Abrir puerto serie
+    try:
+      self.__serial = serial.Serial(serialName, BAUDIOS)
+    except serial.SerialException:
+      raise IrisError,'Error al abrir puerto serie %s.' % serialName
+
+    if self.__log:
+      self.__log ('Serial port %s opened.\n' % self.__serial.portstr)
+
+    #-- Configurar timeout
+    #-- He detectado que en Linux al configurar el timeout se modifica
+    #-- el estado del DTR. No en todos los casos (depende del driver
+    #-- del conversor USB-serie usado). El problema siempre esta en que
+    #-- los valores del DTR no estan estandarizados y cada driver los 
+    #-- maneja a su propia manera.
+    #-- La solucion que se esta utilizando es la de configurar el 
+    #-- timeout al principio
+    self.__serial.timeout = SERIAL_TIMEOUT
+  
+    #-- Vaciar los buffers del puerto serie
+    self.__serial.flushInput()
+    self.__serial.flushOutput()
+
+  
+  def close(self):
+  #-----------------------------
+    """
+    Cerrar el puerto serie
+    """
+  #-----------------------------
+    if self.__serial!=None:
+      self.__serial.close()
+      
+ 
+  
+  def sendDone (self):
+  #--------------------------------------------------------------------
+    """
+    Enviar comando SENDDONE para que arranque el programa cargado
+    """
+  #--------------------------------------------------------------------  
+  
+    #-- Enviar el comando
+    self.__serial.write (CMD_SEND_DONE)
+    
+    #-- Esperar la respuesta
+    ch = self.__serial.read (1)
+    if ch != CMD_OK:
+      raise IrisError, "Error en Done"
+      
+    if self.__log:
+      self.__log ('Ejecutando programa\n')  
+      
+
+  def skypicReset (self):
+  #----------------------------------------------------------------
+    """
+    Hacer reset de la Skypic. Solo funcionara si el jumper JP4
+    esta colocado en la posicion DTR
+    """
+  #----------------------------------------------------------------
+  
+    #-- Desactivar la senal DTR durante 0.5 segundos
+    self.__serial.setDTR (0)
+    
+    #-- Esto es para depurar
+    #if self.__log:
+    #  self.__log("%s: DTR OFF\n" % self.__serial.portstr)
+    time.sleep (0.5)
+    
+    #-- Volver a activarla. Reset hecho
+    self.__serial.setDTR (1)
+    
+    #-- Esto es para depurar
+    #if self.__log:
+    #  self.__log("%s: DTR ON\n" % self.__serial.portstr)
+    
+    if self.__log:
+      self.__log ('Reset Skypic\n')
+    
+
+  
+  def identBootloader (self, timeoutCallback=default_stateCallback):
+  #-----------------------------------------------------------------------
+    """
+   Identificar el Bootloader
+   Devuelve: 
+      -TRUE si se ha detectado
+      -FALSE si ha transcurrido el timeout y no se ha detectado
+       Esto puede ocurrir bien porque no haya comunicacion con el bootloader
+       o bien porque no se haya pulsado el boton de reset de la skypic
+   ENTRADAS:
+      -timeoutCallback : Funcion de estado. Se invoca al comienzo de la 
+         identificacion y si no se ha podio encontrar el Bootloader
+    """
+  #-----------------------------------------------------------------------
+     
+    #-- Inicializacion de la funcion de callback
+    if timeoutCallback:
+      timeoutCallback(IDENT_START,0,0)    
+
+    # Timeout or bad reply
+    nack=0;
+    while True:
+
+      #-- Enviar comando de identificacion
+      self.__serial.write (CMD_IDENT)
+
+      #-- Esperar la respuesta
+      id = self.__serial.read (1)
+
+      #-- Condicion de deteccion del bootloader
+      if len (id) == 1 and id == CMD_IDACK:
+        if self.__log:
+          self.__log ('Bootloader OK\n')
+        return True
+          
+      nack+=1    
+      #-- Invocar la funcion de callback
+      if timeoutCallback:
+        ret = timeoutCallback(IDENT_NACK,nack,float(nack)*SERIAL_TIMEOUT) 
+        if ret==False:
+          #-- Bootloder NO detectado
+          if self.__log:
+            self.__log ('TIMEOUT\n')
+          
+          raise IrisError,'Bootloader No detectado'
+    
+
+  def writeData(self,block):
+  #--------------------------------------------------
+    """
+    Escribir un bloque a traves del booloader
+    El primer elemento del bloque es la direccion
+    """
+  #--------------------------------------------------
+    
+    #-- Obtener la direccion de comienzo del bloque
+    addr=block[0]
+    
+    #-- Obtener el bloque en bytes
+    #-- Se almacena en data. Primero el byte alto y luego el bajo
+    data=[]
+    for i in block[1:]:
+      data.append(i>>8 & 0xFF)  #-- Andir byte alto
+      data.append(i&0xFF)       #-- Anadir byte bajo
+      
+    #-- Calcular el Checksum  
+    chk = sum(data) & 0xFF
+      
+    #-- Tamano del bloque en bytes
+    tam = len (data)
+
+    #------------------------------------
+    #-- Comenzar la escritura del bloque 
+    #------------------------------------
+    #-- Enviar comando
+    self.__serial.write (CMD_WRITE)
+    
+    #-- Enviar direccion de comienzo del bloque
+    self.__serial.write ('%c%c' % (chr (addr >> 8 & 0xFF),
+                                   chr (addr & 0xFF)))
+                                   
+    #-- Enviar tamano
+    self.__serial.write (chr (tam))
+    
+    #-- Enviar checksum
+    self.__serial.write (chr (chk))
+    
+    #-- Enviar los datos
+    for d in data:
+      self.__serial.write (chr(d))
+    
+    #-----------------------------
+    #-- Comprobar las respuestas 
+    #-----------------------------
+    
+    # --- Datos correctos?
+    ch = self.__serial.read (1)
+    if ch != CMD_DATA_OK:
+      raise IrisError, 'Data error.'
+
+    # --- Escritura ok?
+    ch = self.__serial.read (1)
+    if ch != CMD_OK:
+      raise IrisError, 'Write error.'
+    
+  
+  def download (self, program, stateCallback=default_stateCallback):
+  #---------------------------------------------------------------------------
+    """
+    Descargar un programa a traves del bootloader
+    Para cada fase de la descarga se invoca la funcion de retrollamda
+    stateCallback
+    """
+  #---------------------------------------------------------------------------
+  
+    #-- Hacer un reset
+    self.skypicReset()
+    
+    #-- Identificar el bootloader
+    #-- Se invoca a la funcion de estado
+    self.identBootloader(timeoutCallback=stateCallback)
+    
+    #-- Obtener Tamano del programa en bloques
+    tam = len(program)
+    
+    #-- Invocar la funcion de estado para indicar el comienzo
+    #-- de la descarga
+    if stateCallback:
+      ok=stateCallback(WRITING_START, 0, tam);
+      if not ok:
+        raise IrisError, "Abortado"
+      
+    #-- Escribir los bloques
+    count=1;
+    for block in program:
+      self.writeData(block)
+      
+      #-- Invocar funcion de estado para indicar que se ha descargado
+      #-- un bloque
+      if stateCallback:
+        ok=stateCallback(WRITING_INC,count,tam); 
+        if not ok:
+          raise IrisError, "Abortado"        
+      
+      #-- Incrementar contador de numero de bloques descargados
+      count=count + 1
+      
+    #-- Invocar la funcion de estado para indicar que se ha terminado
+    #-- la descarga, siempre que no haya sido abortada    
+    if stateCallback:
+      ok=stateCallback(WRITING_END,0,tam);  
+      if not ok:
+          raise IrisError, "Abortado" 
+      
+    #-- Ejecutar el programa  
+    self.sendDone ()
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/Pic16_Firmware.py
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/Pic16_Firmware.py
new file mode 100644
index 0000000..5762006
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/Pic16_Firmware.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: File downloader library for SkyPIC
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+
+#----------------------------------------------------------------------------
+"""
+ Libreria que contiene FIRMWARE para la Skypic 
+ El firmware ha sido obtenido a partir de los ficheros .hex utilizando 
+ la herramienta hex2python, de la siguiente manera:
+
+  $ ./hex2python.py fichero.hex f3 nombre_lista
+
+ Por ejemplo, el clasico programa del led parpdeante se ha obtenido asi:
+
+ ./hex2python.py ledp1.hex f3 ledp1
+"""
+#----------------------------------------------------------------------------
+
+
+#---------------------------------------------------------------------------
+#- LEDON. Encender el led de la Skypic
+#---------------------------------------------------------------------------
+ledon=[[0x0000, 0x0000, 0x118A, 0x120A, 0x280C, 0x0000, 0x1683, 0x1303, 0x1086, 0x1283, 0x1486, 0x280A, 
0x0008, 0x118A, 0x120A, 0x2805],]
+
+#----------------------------------------------------------------------
+#- LEDP1.  Programa del ledp, que hace parpadear el led de la skypic
+#----------------------------------------------------------------------
+ledp1=[[0x0000, 0x0000, 0x118A, 0x120A, 0x2821, 0x0000, 0x30FD, 0x1683, 0x1303, 0x0086, 0x3002, 0x1283, 
0x0686, 0x30FF, 0x00FF, 0x30FF, 0x2012],[0x0010, 0x2809, 0x0008, 0x1283, 0x1303, 0x00A3, 0x087F, 0x00A2, 
0x0822, 0x0423, 0x1903, 0x2820, 0x30FF, 0x07A2, 0x1C03, 0x03A3, 0x2817],[0x0020, 0x0008, 0x118A, 0x120A, 
0x2805],]
+
+#----------------------------------------------------------------------
+#- LEDP2.  Programa del ledp, que hace parpadear el led de la skypic. 
+#- Se diferencia del ledp1 en que el parpadeo es mas rapido
+#----------------------------------------------------------------------
+ledp2=[[0x0000, 0x0000, 0x118A, 0x120A, 0x2821, 0x0000, 0x30FD, 0x1683, 0x1303, 0x0086, 0x3002, 0x1283, 
0x0686, 0x3000, 0x00FF, 0x3080, 0x2012],[0x0010, 0x2809, 0x0008, 0x1283, 0x1303, 0x00A3, 0x087F, 0x00A2, 
0x0822, 0x0423, 0x1903, 0x2820, 0x30FF, 0x07A2, 0x1C03, 0x03A3, 0x2817],[0x0020, 0x0008, 0x118A, 0x120A, 
0x2805],]
+
+#----------------------------------------------------------------------------
+#-          FIRMWARE DEL PROYECTO STARGATE 
+#----------------------------------------------------------------------------
+
+#--- Servidor de Eco. V1. Velocidad 9600 Baudios
+echo=[[0x0000, 0x0183, 0x3000, 0x008A, 0x2804, 0x1683, 0x3081, 0x0099, 0x3024, 0x0098, 0x1283, 0x3090, 
0x0098, 0x1683, 0x0186, 0x1283, 0x30FF],[0x0010, 0x0086, 0x2015, 0x2019, 0x0086, 0x2811, 0x1E8C, 0x2815, 
0x081A, 0x0008, 0x1E0C, 0x2819, 0x0099, 0x0008],]
+
+#--- Servidor GENERICO. V1. Velocidad 9600 baudios
+generic=[[0x0000, 0x0183, 0x3000, 0x008A, 0x2804, 0x1683, 0x3081, 0x0099, 0x3024, 0x0098, 0x1283, 0x3090, 
0x0098, 0x1683, 0x1086, 0x1283, 0x3002],[0x0010, 0x0086, 0x2048, 0x00A0, 0x3050, 0x0220, 0x1903, 0x2824, 
0x3049, 0x0220, 0x1903, 0x2827, 0x304C, 0x0220, 0x1903, 0x2830, 0x3053],[0x0020, 0x0220, 0x1903, 0x2838, 
0x2811, 0x304F, 0x204C, 0x2811, 0x3049, 0x204C, 0x3020, 0x204C, 0x3030, 0x204C, 0x3010, 0x204C, 
0x2811],[0x0030, 0x203E, 0x0800, 0x00A3, 0x304C, 0x204C, 0x0823, 0x204C, 0x2811, 0x203E, 0x2048, 0x0080, 
0x3053, 0x204C, 0x2811, 0x2048, 0x0084],[0x0040, 0x2048, 0x00A1, 0x1821, 0x2846, 0x1383, 0x2847, 0x1783, 
0x0008, 0x1E8C, 0x2848, 0x081A, 0x0008, 0x1E0C, 0x284C, 0x0099, 0x0008],]
+
+#--- Servidor SERVOS8. V1. Velocidad 9600 baudios
+servos8=[[0x0000, 0x0000, 0x118A, 0x120A, 0x2907, 0x00F2, 0x0E03, 0x0183, 0x1283, 0x1303, 0x00F1, 0x080A, 
0x00F0, 0x018A, 0x110B, 0x3000, 0x1283],[0x0010, 0x1303, 0x042B, 0x1D03, 0x2820, 0x0829, 0x052A, 0x1283, 
0x1303, 0x0086, 0x30EA, 0x0081, 0x3001, 0x1283, 0x1303, 0x00AB, 0x2862],[0x0020, 0x082B, 0x3A01, 0x1D03, 
0x2839, 0x0828, 0x3E20, 0x00AF, 0x3000, 0x1803, 0x3E01, 0x00B0, 0x082F, 0x0084, 0x1383, 0x1830, 
0x1783],[0x0030, 0x0800, 0x1283, 0x1303, 0x0081, 0x3002, 0x1283, 0x1303, 0x00AB, 0x2862, 0x082B, 0x3A02, 
0x1D03, 0x2861, 0x1283, 0x1303, 0x0186],[0x0040, 0x1283, 0x1303, 0x0828, 0x3E20, 0x00AF, 0x3000, 0x1803, 
0x3E01, 0x00B0, 0x082F, 0x0084, 0x1383, 0x1830, 0x1783, 0x0800, 0x3C52],[0x0050, 0x1283, 0x1303, 0x0081, 
0x1283, 0x1303, 0x01AB, 0x1003, 0x0DA9, 0x0AA8, 0x3000, 0x0429, 0x1D03, 0x2862, 0x3001, 0x00A9, 
0x01A8],[0x0060, 0x2862, 0x01AB, 0x1283, 0x1303, 0x0870, 0x008A, 0x0183, 0x0E71, 0x0083, 0x0EF2, 0x0E72, 
0x0009, 0x1683, 0x1303, 0x0186, 0x3002],[0x0070, 0x1283, 0x00
 86, 0x1283, 0x1303, 0x01B4, 0x3008, 0x0234, 0x1803, 0x2889, 0x0834, 0x3E20, 0x00B5, 0x3000, 0x1803, 0x3E01, 
0x00B6],[0x0080, 0x0835, 0x0084, 0x1383, 0x1836, 0x1783, 0x30B0, 0x0080, 0x0AB4, 0x2875, 0x01AA, 0x01A8, 
0x01AB, 0x3001, 0x00A9, 0x20FD, 0x20DF],[0x0090, 0x20F7, 0x1283, 0x1303, 0x00B4, 0x3A45, 0x1903, 0x28AA, 
0x0834, 0x3A49, 0x1903, 0x28A6, 0x0834, 0x3A50, 0x1903, 0x28A4, 0x0834],[0x00A0, 0x3A57, 0x1903, 0x28A8, 
0x2890, 0x20DC, 0x2890, 0x20D3, 0x2890, 0x20B2, 0x2890, 0x20AD, 0x2890, 0x0008, 0x20F7, 0x1283, 
0x1303],[0x00B0, 0x00AA, 0x0008, 0x20F7, 0x1283, 0x1303, 0x00AC, 0x20F7, 0x1283, 0x1303, 0x00B1, 0x3099, 
0x0231, 0x1C03, 0x28C0, 0x3099, 0x00B1],[0x00C0, 0x032C, 0x00B2, 0x3E20, 0x00B2, 0x3000, 0x1803, 0x3E01, 
0x00B3, 0x0831, 0x3CFF, 0x00B1, 0x0832, 0x0084, 0x1383, 0x1833, 0x1783],[0x00D0, 0x0831, 0x0080, 0x0008, 
0x3049, 0x20E9, 0x3030, 0x20E9, 0x3030, 0x20E9, 0x3011, 0x20E9, 0x0008, 0x304F, 0x20E9, 0x0008, 
0x3005],[0x00E0, 0x1683, 0x1303, 0x0081, 0x110B, 0x168B, 0x
 178B, 0x1283, 0x0181, 0x0008, 0x1283, 0x1303, 0x00AE, 0x1283, 0x1303, 0x1E0C, 0x28EC],[0x00F0, 0x1283, 
0x1303, 0x082E, 0x1283, 0x1303, 0x0099, 0x0008, 0x1283, 0x1303, 0x1E8C, 0x28F7, 0x081A, 0x0008, 0x3081, 
0x1683, 0x1303],[0x0100, 0x0099, 0x3024, 0x0098, 0x3090, 0x1283, 0x0098, 0x0008, 0x118A, 0x120A, 0x286C],]
+
+
+#--- Servidor PICP. V2. Velocidad 9600 baudios
+picp=[[0x0000, 0x0000, 0x118A, 0x120A, 0x2997, 0x0000, 0x218D, 0x3067, 0x1683, 0x0086, 0x1283, 0x0186, 
0x2174, 0x2187, 0x1283, 0x1303, 0x00B5],[0x0010, 0x3A41, 0x1903, 0x2842, 0x0835, 0x3A42, 0x1903, 0x2840, 
0x0835, 0x3A43, 0x1903, 0x2846, 0x0835, 0x3A44, 0x1903, 0x283E, 0x0835],[0x0020, 0x3A49, 0x1903, 0x283A, 
0x0835, 0x3A4A, 0x1903, 0x284A, 0x0835, 0x3A50, 0x1903, 0x2838, 0x0835, 0x3A52, 0x1903, 0x2844, 
0x0835],[0x0030, 0x3A54, 0x1903, 0x283C, 0x0835, 0x3A57, 0x1903, 0x2848, 0x280C, 0x20E2, 0x280C, 0x20D9, 
0x280C, 0x20CD, 0x280C, 0x20BA, 0x280C],[0x0040, 0x20B5, 0x280C, 0x20B0, 0x280C, 0x20A2, 0x280C, 0x2099, 
0x280C, 0x2084, 0x280C, 0x204D, 0x280C, 0x0008, 0x2187, 0x1283, 0x1303],[0x0050, 0x00B2, 0x2187, 0x1283, 
0x1303, 0x00B3, 0x3000, 0x0433, 0x1903, 0x285C, 0x3001, 0x00B4, 0x285D, 0x01B4, 0x3000, 0x0434, 
0x1903],[0x0060, 0x286F, 0x30FF, 0x00B4, 0x3006, 0x2110, 0x1283, 0x1303, 0x0BB4, 0x2863, 0x3006, 0x2110, 
0x1283, 0x1303, 0x03B3, 0x2855, 0x3000],[0x0070, 0x0432, 0x1903,
  0x2876, 0x3001, 0x00B3, 0x2877, 0x01B3, 0x3000, 0x0433, 0x1903, 0x2881, 0x3006, 0x2110, 0x1283, 0x1303, 
0x03B2],[0x0080, 0x286F, 0x304A, 0x2179, 0x0008, 0x2187, 0x1283, 0x1303, 0x00B0, 0x2187, 0x1283, 0x1303, 
0x00B1, 0x3002, 0x2110, 0x1283, 0x1303],[0x0090, 0x0830, 0x00FF, 0x0831, 0x20FA, 0x3008, 0x2110, 0x3057, 
0x2179, 0x0008, 0x3000, 0x2110, 0x3000, 0x00FF, 0x3000, 0x20FA, 0x3043],[0x00A0, 0x2179, 0x0008, 0x3004, 
0x2110, 0x20E5, 0x3052, 0x2179, 0x1283, 0x1303, 0x0820, 0x2179, 0x1283, 0x1303, 0x0821, 0x2179, 
0x0008],[0x00B0, 0x3006, 0x2110, 0x3041, 0x2179, 0x0008, 0x3008, 0x2110, 0x3042, 0x2179, 0x0008, 0x2187, 
0x1283, 0x1303, 0x00AE, 0x2187, 0x1283],[0x00C0, 0x1303, 0x00AF, 0x3002, 0x2110, 0x1283, 0x1303, 0x082E, 
0x00FF, 0x082F, 0x20FA, 0x3044, 0x2179, 0x0008, 0x3010, 0x1283, 0x1303],[0x00D0, 0x0086, 0x3002, 0x2161, 
0x1283, 0x1303, 0x0186, 0x3054, 0x2179, 0x0008, 0x3049, 0x2179, 0x3040, 0x2179, 0x3030, 0x2179, 
0x3012],[0x00E0, 0x2179, 0x0008, 0x304F, 0x2179, 0x0008, 0x168
 3, 0x1303, 0x1786, 0x3001, 0x2127, 0x3008, 0x2127, 0x00A0, 0x3007, 0x2127, 0x00A1],[0x00F0, 0x1003, 0x0C21, 
0x00AD, 0x303F, 0x052D, 0x00A1, 0x1683, 0x1303, 0x0186, 0x0008, 0x1283, 0x1303, 0x00AB, 0x087F, 0x00AC, 
0x3001],[0x0100, 0x00FF, 0x3000, 0x2144, 0x3008, 0x00FF, 0x1283, 0x1303, 0x082C, 0x2144, 0x3007, 0x00FF, 
0x1283, 0x1303, 0x082B, 0x2144, 0x0008],[0x0110, 0x1283, 0x1303, 0x00AA, 0x30F0, 0x1283, 0x1303, 0x0586, 
0x3006, 0x00FF, 0x1283, 0x1303, 0x082A, 0x2144, 0x1283, 0x1303, 0x1786],[0x0120, 0x30FF, 0x0085, 0x0185, 
0x30FF, 0x0085, 0x0185, 0x0008, 0x1283, 0x1303, 0x00A7, 0x01A8, 0x01A9, 0x0827, 0x0229, 0x1803, 
0x2942],[0x0130, 0x1003, 0x0CA8, 0x1283, 0x1303, 0x1586, 0x30F0, 0x0586, 0x1B86, 0x293D, 0x1283, 0x1303, 
0x13A8, 0x2940, 0x1283, 0x1303, 0x17A8],[0x0140, 0x0AA9, 0x292C, 0x0828, 0x0008, 0x1283, 0x1303, 0x00A4, 
0x087F, 0x00A5, 0x01A6, 0x0825, 0x0226, 0x1803, 0x2960, 0x1824, 0x2954],[0x0150, 0x1283, 0x1303, 0x1386, 
0x2957, 0x1283, 0x1303, 0x1786, 0x1586, 0x30F0, 0x0
 586, 0x1003, 0x1283, 0x1303, 0x0CA4, 0x0AA6, 0x294A],[0x0160, 0x0008, 0x1283, 0x1303, 0x00A3, 0x3000, 
0x0423, 0x1903, 0x2973, 0x303D, 0x1283, 0x1303, 0x0081, 0x110B, 0x1D0B, 0x296D, 0x1283],[0x0170, 0x1303, 
0x03A3, 0x2964, 0x0008, 0x3087, 0x1683, 0x1303, 0x0081, 0x0008, 0x1283, 0x1303, 0x00A2, 0x1283, 0x1303, 
0x1E0C, 0x297C],[0x0180, 0x1283, 0x1303, 0x0822, 0x1283, 0x1303, 0x0099, 0x0008, 0x1283, 0x1303, 0x1E8C, 
0x2987, 0x081A, 0x0008, 0x3081, 0x1683, 0x1303],[0x0190, 0x0099, 0x3024, 0x0098, 0x3090, 0x1283, 0x0098, 
0x0008, 0x118A, 0x120A, 0x2805],]
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/__init__.py
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/__init__.py
new file mode 100644
index 0000000..922dc5c
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/lib.linux-i686-2.7/libIris/__init__.py
@@ -0,0 +1,50 @@
+#! /usr/bin/python
+# -*- coding: iso-8859-15 -*-
+
+#-- Paqute LibIris
+
+
+# Description: File downloader library for SkyPIC
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+""" 
+  Paquete LibIris: Descarga de programas en la tarjeta skypic
+
+Este paquete esta formado por tres modulos:
+
+  * IntelHex        : Lectura de ficheros en formato .hex de Intel
+  * Pic16_Bootloader: Descarga de ficheros a traves del bootloader
+  * Pic16_Firmware  : Programas para el PIC16F876A. Incluye los servidores
+                      del proyecto stargate y programas de prubas, como el 
+                      ledp
+                      
+Incluye ademas las siguientes utilidades:
+
+  * hex-view  :  Visualizacion de ficheros .hex
+  * hex2python:  Convertir un fichero .hex a un script en python que contiene
+                 el codigo maquina en una lista
+  * skypic-test: Prueba de descargas en la skypic. Se graba el programama del
+                 ledp. Permite comprobar si la skypic esta funcionando
+                 correctamente
+
+
+"""
+
+#-- Version de la libIris
+VERSION = 1.2
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/hex-view.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/hex-view.py
new file mode 100755
index 0000000..664ebea
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/hex-view.py
@@ -0,0 +1,98 @@
+#!/usr/bin/python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+#---------------------------------------------------------
+#-- Visualizacion de ficheros .HEX 
+#---------------------------------------------------------
+
+import sys
+sys.path = ['..'] + sys.path
+import libIris.IntelHex
+
+FORMATOS = ['f1','f2','f3']
+
+def help():
+  print "Forma de uso: hex-view <fichero.hex> [Formato salida]"
+  print "-Formato de salida:"
+  print "   f1: Tabla con direccion - contenido. Formato por defecto"
+  print "   f2: Direccion - bloques contiguos"
+  print "   f3: Direccion - bloques de tamano maximo 16 palabras"
+  print "-Ejemplo:"
+  print "  hex-view ledp.hex f2"
+
+
+#--------------------------
+#-- Analizar argumentos  
+#--------------------------
+# --- Primer argumento: fichero .hex
+try:
+  file = sys.argv [1]
+except IndexError:
+  print "Error. Argumentos incorrectos"
+  print ""
+  help()
+  sys.exit(-1)
+
+#--- Segundo argumento [opcional]: Formato
+try:
+  formato = sys.argv[2]
+except IndexError:
+  formato = "f1"
+
+#-- Comprobar si el formato especificado es correcto
+if not formato in FORMATOS:
+  print "Formato desconocido"
+  print ""
+  help()
+  sys.exit(-1)
+
+#-- Imprimir nombre del fichero 
+print '\nFichero: "%s"' % file
+
+#-----------------------
+#-- Realizar el parseo
+#-----------------------
+
+try:
+  hr = libIris.IntelHex.HexReader (file)
+except libIris.IntelHex.ReaderError,msg:
+  print "Error: %s" % msg
+  sys.exit(-1)  
+  
+print "Tamano : %d palabras" % hr.size()
+
+#--------------------------------------------
+# Mostrar el fichero con el formato elegido
+#--------------------------------------------
+if formato == FORMATOS[0]:
+  print ""
+  print (hr.outputTable())
+  
+elif formato == FORMATOS[1]:
+  print "Bloques: %d" % hr.blocks()
+  print ""
+  print hr.outputBlocks()
+
+elif formato == FORMATOS[2]:
+  print "Bloques: %d" % hr.blocks16()
+  print ""
+  print hr.outputBlocks16()
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/hex2python.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/hex2python.py
new file mode 100755
index 0000000..c3aa657
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/hex2python.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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 sys
+sys.path = ['..'] + sys.path
+import libIris.IntelHex
+
+def help():
+  print "Forma de uso: hex2python <fichero.hex> [formato bloques] [nombre lista]"
+  print "-formato de los bloques:"
+  print "  f2: Bloques contiguos"
+  print "  f3: Bloques de tamano maximo 16 palabras"
+  print "Ejemplo: "
+  print "  hex2python ledp.hex f2 ledp"  
+
+
+#--------------------------
+#-- Analizar argumentos  
+#--------------------------
+# --- Primer argumento: fichero .hex
+try:
+  file = sys.argv [1]
+except IndexError:
+  help()
+  sys.exit(0)
+
+FORMATOS = ['f2','f3']
+
+#--- Segundo argumento (opcional): Formato de los bloques
+try:
+  formato = sys.argv[2]
+except IndexError:
+  formato = "f2"
+
+#--- tercer argumento [opcional]: Nombre de la lista
+try:
+  prog_name = sys.argv[3]
+except IndexError:
+  prog_name = "prog"
+  
+#-- Comprobar si el formato especificado es correcto
+if not formato in FORMATOS:
+  print "Formato de bloques desconocido"
+  print ""
+  help()
+  sys.exit(-1)  
+  
+  
+#-----------------------
+#-- Realizar el parseo
+#-----------------------
+
+try:
+  hr = libIris.IntelHex.HexReader (file)
+except libIris.IntelHex.ReaderError,msg:
+  sys.stderr.write("Error: %s" % str(msg))
+  sys.stderr.write("\n")
+  sys.exit(-1)
+  
+#------------------------
+#-- Generar la salida
+#------------------------
+
+#-- Obtener la cadena de salida en formato python
+if formato == FORMATOS[0]:
+  cad = hr.outputPython(prog_name)
+  
+else:
+  cad = hr.outputPython16(prog_name)
+
+
+#-- Sacar por la salida estandar
+sys.stdout.write("\n")
+sys.stdout.write(cad)
+sys.stdout.write("\n")
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/skypic-test.py
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/skypic-test.py
new file mode 100755
index 0000000..3de44ea
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/build/scripts-2.7/skypic-test.py
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+#------------------------------------------------------------------------
+#--  Programa de pruebas para hacer un test de descarga en la skypic
+#------------------------------------------------------------------------
+
+import sys
+sys.path = ['..'] + sys.path
+import libIris.Pic16_Bootloader
+import libIris.IntelHex
+import libIris.Pic16_Firmware
+
+#----------------------------------------------------
+#-- Mostrar la ayuda de como se usa la aplicacion
+#----------------------------------------------------
+def help():
+  print """
+Uso: skypic-test <port>
+
+ -Port: Nombre del dispositivo serie donde esta conectada la Skypic
+ 
+ Ejemplo:
+    
+   $ skypic-test.py /dev/ttyUSB0
+  """
+
+
+#-- Mensaje de comienzo
+print 'Skypic-test. Prueba rapida de la Skypic. Licencia GPL\n'
+
+#----------------------------
+#-- Analizar los parametros
+#----------------------------
+
+#-- Leer el fichero o el nombre del firmware a cargar
+try:
+  disp = sys.argv[1]
+except IndexError:
+  print "Nombre de programa no indicado"
+  help()
+  sys.exit(-1)
+
+
+#-- Abrir puerto serie
+try:
+  iris = libIris.Pic16_Bootloader.Iris(disp)
+except libIris.Pic16_Bootloader.IrisError,msg:
+  print msg
+  sys.exit(-1)
+
+#-- Obtener firmware a descargar. Se puede utilizar cualquier de 
+#-- los que se encuentren en la libreria Pic16_Firmware
+program = libIris.Pic16_Firmware.ledp2
+
+#-- Realizar la descarga
+try:
+  iris.download(program)
+except libIris.Pic16_Bootloader.IrisError,msg:
+  print "\nError: %s" % msg
+  sys.exit(-1)
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/changelog 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/changelog
new file mode 100644
index 0000000..8568e07
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/changelog
@@ -0,0 +1,35 @@
+libiris (1.2-5) unstable; urgency=low
+
+  * Anadidos los ultimos cambios que se han realizado en la libiris-1.2 
+
+ -- juan <juan Roma local lan>  Sun, 16 Sep 2007 17:03:27 +0200
+
+libiris (1.2-4) unstable; urgency=low
+
+  * Anadidos como ejemplos los scripts de los directorios test-IntelHex y
+    test-libIris. Tambien los ficheros .hex que hay en ellos
+
+ -- juan <juan Roma local lan>  Sun,  2 Sep 2007 01:09:54 +0200
+
+libiris (1.2-3) unstable; urgency=low
+
+  * Ademas de instalar la libreria libiris se instalan las tres utilidades:
+    -hex-view
+    -hex2python
+    -skypic-test
+
+ -- juan <juan Roma local lan>  Sun,  2 Sep 2007 00:57:15 +0200
+
+libiris (1.2-2) unstable; urgency=low
+
+  * Cambiado el nombre del paquete a python-libiris para seguir las
+    reglas de debian
+
+ -- juan <juan Roma local lan>  Sat,  1 Sep 2007 13:20:05 +0200
+
+libiris (1.2-1) unstable; urgency=low
+
+  * Initial release (Closes: #nnnn)  <nnnn is the bug number of your ITP>
+
+ -- Juan Gonzalez <juan iearobotics com>  Fri, 31 Aug 2007 21:59:13 +0200
+
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/compat 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/compat
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/control 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/control
new file mode 100644
index 0000000..ec91ac2
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/control
@@ -0,0 +1,15 @@
+Source: libiris
+Section: python
+Priority: optional
+Maintainer: Juan Gonzalez <juan iearobotics com>
+Build-Depends: cdbs, cdbs, debhelper (>= 5)
+XS-Python-Version: all
+Standards-Version: 3.7.2
+
+Package: python-libiris
+Architecture: any
+Depends: ${python:Depends}, python-serial
+XB-Python-Version: ${python:Versions}
+Description: Libreria para descarga de programas en la tarjeta Skypic
+ Libreria en python para implementar aplicaciones que pueden descargar
+ firmware en la tarjeta Skypic, basada en el PIC16F876A
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/copyright 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/copyright
new file mode 100644
index 0000000..f5cba38
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/copyright
@@ -0,0 +1,34 @@
+This package was debianized by Juan Gonzalez <juan iearobotics com> on
+Fri, 31 Aug 2007 21:59:13 +0200.
+
+It was downloaded from http://www.iearobotics.com/wiki/index.php?title=LibIris
+
+Upstream Author: Rafael Treviño <skasi 7 gmail com>
+                 Juan Gonzalez <juan iearobotics com>
+
+Copyright: (c) 2007 Rafael Treviño, Juan gonzalez
+
+
+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) 2007, Juan Gonzalez <juan iearobotics com> and
+is licensed under the GPL, see above.
+
+
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/libiris.3 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/libiris.3
new file mode 100644
index 0000000..c63d19c
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/libiris.3
@@ -0,0 +1,69 @@
+.\"     Title: LIBIRIS
+.\"    Author: 
+.\" Generator: DocBook XSL Stylesheets v1.71.0 <http://docbook.sf.net/>
+.\"      Date: 09/08/2007
+.\"    Manual: 
+.\"    Source: 
+.\"
+.TH "LIBIRIS" "3" "09/08/2007" "" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+libiris \- Libreria para la descarga de programas en la tarjeta Skypic.
+.SH "DESCRIPTION"
+.PP
+Con esta libreria es muy sencillo realizar herramientas en python para descargar programas en la tarjeta 
Skypic, o en cualquier otra que tenga un microcontrolador PIC16F87A con este bootloader cargado: 
http://www.iearobotics.com/wiki/index.php?title=PIC_Bootloader
+.PP
+La libreria
+\fBlibiris\fR
+esta formada por tres modulos:
+.PP
+\fBIntelhex\fR
+.RS 3n
+Lectura de ficheros en formato .hex
+.RE
+.PP
+\fBPIC16_Bootloader\fR
+.RS 3n
+Descarga de ficheros a traves del Bootloader
+.RE
+.PP
+\fBPIC16_Firmware\fR
+.RS 3n
+Programas para el PIC16F876A. Entre ellos los servidores del proyecto Stargate
+.RE
+.PP
+Y por las siguientes utilidades para la consola:
+.PP
+\fBhex\-view\fR
+.RS 3n
+Visualizacion de ficheros .hex
+.RE
+.PP
+\fBhex2python\fR
+.RS 3n
+Convertir un fichero .hex a un script en python, que contiene el codigo maquina en una lista
+.RE
+.PP
+\fBskypic\-test\fR
+.RS 3n
+Prueba de descarga en la skypic. Se graba el programa del ledp parpadeante. Permite comprobar si la skypic 
esta funcionando correctamente Stargate
+.RE
+.SH "AUTORES"
+.PP
+Rafael Trevino
+<skasi 7 gmail com>
+.PP
+Juan Gonzalez
+<juan iearobotics com>
+.SH "LICENCIA"
+.PP
+This manual page was written for the
+Debian(TM)
+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.
+.PP
+On Debian systems, the complete text of the GNU General Public License can be found in 
/usr/share/common\-licenses/GPL.
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/libiris.xml 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/libiris.xml
new file mode 100644
index 0000000..3d35f7a
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/libiris.xml
@@ -0,0 +1,148 @@
+<?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>agosto 31, 2007</date>">
+<!-- SECTION should be 1-8, maybe w/ subsection other parameters are
+       allowed: see man(7), man(1). --><!ENTITY dhsection "<manvolnum>3</manvolnum>">
+<!ENTITY dhemail "<email>juan iearobotics com</email>">
+<!ENTITY dhusername "Juan Gonzalez">
+<!ENTITY dhucpackage "<refentrytitle>LIBIRIS</refentrytitle>">
+<!ENTITY dhpackage "libiris">
+<!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>Libreria para la descarga de programas en la tarjeta Skypic. 
+  </refpurpose>
+  </refnamediv>
+  <refsect1>
+    <title>DESCRIPTION</title>
+    <para>
+     Con esta libreria es muy sencillo realizar herramientas en python para descargar programas en la 
tarjeta Skypic,
+    o en cualquier otra que tenga un microcontrolador PIC16F87A con este bootloader cargado:
+    http://www.iearobotics.com/wiki/index.php?title=PIC_Bootloader
+    </para>
+    <para>La libreria <command>&dhpackage;</command> esta formada por tres modulos:
+   </para>
+
+  <variablelist>
+      <varlistentry>
+       <term>
+            <command>Intelhex</command>
+         </term>
+        <listitem>
+          <para> Lectura de ficheros en formato .hex</para>
+        </listitem>
+      </varlistentry>
+      
+      <varlistentry>
+       <term>
+            <command>PIC16_Bootloader</command>
+       </term>
+        <listitem>
+          <para>Descarga de ficheros a traves del Bootloader</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+            <command>PIC16_Firmware</command>
+       </term>
+        <listitem>
+          <para>Programas para el PIC16F876A. Entre ellos los servidores del proyecto 
+         Stargate</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+    
+    <para>
+           Y por las siguientes utilidades para la consola:
+    </para>
+    
+      <variablelist>
+      <varlistentry>
+       <term>
+            <command>hex-view</command>
+         </term>
+        <listitem>
+          <para> Visualizacion de ficheros .hex</para>
+        </listitem>
+      </varlistentry>
+      
+      <varlistentry>
+       <term>
+            <command>hex2python</command>
+       </term>
+        <listitem>
+          <para>Convertir un fichero .hex a un script en python, que contiene el
+         codigo maquina en una lista</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+            <command>skypic-test</command>
+       </term>
+        <listitem>
+          <para>Prueba de descarga en la skypic. Se graba el programa del ledp
+           parpadeante. Permite comprobar si la skypic esta funcionando correctamente
+         Stargate</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+    
+
+  <refsect1>
+    <title>AUTORES</title>
+    
+    <para> Rafael Trevino <email>skasi 7 gmail com</email> </para>
+    <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/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/rules 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/rules
new file mode 100644
index 0000000..e49a17a
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/debian/rules
@@ -0,0 +1,19 @@
+#!/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
+
+build/python-libiris::
+       xsltproc --nonet $(DBK2MAN_XSL) debian/libiris.xml
+
+install/python-libiris::
+       mv $(CURDIR)/debian/python-libiris/usr/bin/hex-view.py 
$(CURDIR)/debian/python-libiris/usr/bin/hex-view
+       mv $(CURDIR)/debian/python-libiris/usr/bin/hex2python.py 
$(CURDIR)/debian/python-libiris/usr/bin/hex2python
+       mv $(CURDIR)/debian/python-libiris/usr/bin/skypic-test.py 
$(CURDIR)/debian/python-libiris/usr/bin/skypic-test
+       dh_installexamples test-libIris/*.py test-IntelHex/*
+
+clean::
+       -rm libiris.3
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/hex-view.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/hex-view.py
new file mode 100644
index 0000000..73cfbfa
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/hex-view.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+#---------------------------------------------------------
+#-- Visualizacion de ficheros .HEX 
+#---------------------------------------------------------
+
+import sys
+sys.path = ['..'] + sys.path
+import libIris.IntelHex
+
+FORMATOS = ['f1','f2','f3']
+
+def help():
+  print "Forma de uso: hex-view <fichero.hex> [Formato salida]"
+  print "-Formato de salida:"
+  print "   f1: Tabla con direccion - contenido. Formato por defecto"
+  print "   f2: Direccion - bloques contiguos"
+  print "   f3: Direccion - bloques de tamano maximo 16 palabras"
+  print "-Ejemplo:"
+  print "  hex-view ledp.hex f2"
+
+
+#--------------------------
+#-- Analizar argumentos  
+#--------------------------
+# --- Primer argumento: fichero .hex
+try:
+  file = sys.argv [1]
+except IndexError:
+  print "Error. Argumentos incorrectos"
+  print ""
+  help()
+  sys.exit(-1)
+
+#--- Segundo argumento [opcional]: Formato
+try:
+  formato = sys.argv[2]
+except IndexError:
+  formato = "f1"
+
+#-- Comprobar si el formato especificado es correcto
+if not formato in FORMATOS:
+  print "Formato desconocido"
+  print ""
+  help()
+  sys.exit(-1)
+
+#-- Imprimir nombre del fichero 
+print '\nFichero: "%s"' % file
+
+#-----------------------
+#-- Realizar el parseo
+#-----------------------
+
+try:
+  hr = libIris.IntelHex.HexReader (file)
+except libIris.IntelHex.ReaderError,msg:
+  print "Error: %s" % msg
+  sys.exit(-1)  
+  
+print "Tamano : %d palabras" % hr.size()
+
+#--------------------------------------------
+# Mostrar el fichero con el formato elegido
+#--------------------------------------------
+if formato == FORMATOS[0]:
+  print ""
+  print (hr.outputTable())
+  
+elif formato == FORMATOS[1]:
+  print "Bloques: %d" % hr.blocks()
+  print ""
+  print hr.outputBlocks()
+
+elif formato == FORMATOS[2]:
+  print "Bloques: %d" % hr.blocks16()
+  print ""
+  print hr.outputBlocks16()
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/hex2python.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/hex2python.py
new file mode 100644
index 0000000..6e58e81
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/hex2python.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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 sys
+sys.path = ['..'] + sys.path
+import libIris.IntelHex
+
+def help():
+  print "Forma de uso: hex2python <fichero.hex> [formato bloques] [nombre lista]"
+  print "-formato de los bloques:"
+  print "  f2: Bloques contiguos"
+  print "  f3: Bloques de tamano maximo 16 palabras"
+  print "Ejemplo: "
+  print "  hex2python ledp.hex f2 ledp"  
+
+
+#--------------------------
+#-- Analizar argumentos  
+#--------------------------
+# --- Primer argumento: fichero .hex
+try:
+  file = sys.argv [1]
+except IndexError:
+  help()
+  sys.exit(0)
+
+FORMATOS = ['f2','f3']
+
+#--- Segundo argumento (opcional): Formato de los bloques
+try:
+  formato = sys.argv[2]
+except IndexError:
+  formato = "f2"
+
+#--- tercer argumento [opcional]: Nombre de la lista
+try:
+  prog_name = sys.argv[3]
+except IndexError:
+  prog_name = "prog"
+  
+#-- Comprobar si el formato especificado es correcto
+if not formato in FORMATOS:
+  print "Formato de bloques desconocido"
+  print ""
+  help()
+  sys.exit(-1)  
+  
+  
+#-----------------------
+#-- Realizar el parseo
+#-----------------------
+
+try:
+  hr = libIris.IntelHex.HexReader (file)
+except libIris.IntelHex.ReaderError,msg:
+  sys.stderr.write("Error: %s" % str(msg))
+  sys.stderr.write("\n")
+  sys.exit(-1)
+  
+#------------------------
+#-- Generar la salida
+#------------------------
+
+#-- Obtener la cadena de salida en formato python
+if formato == FORMATOS[0]:
+  cad = hr.outputPython(prog_name)
+  
+else:
+  cad = hr.outputPython16(prog_name)
+
+
+#-- Sacar por la salida estandar
+sys.stdout.write("\n")
+sys.stdout.write(cad)
+sys.stdout.write("\n")
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/skypic-test.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/skypic-test.py
new file mode 100644
index 0000000..adab0a5
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris-utils/skypic-test.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+#------------------------------------------------------------------------
+#--  Programa de pruebas para hacer un test de descarga en la skypic
+#------------------------------------------------------------------------
+
+import sys
+sys.path = ['..'] + sys.path
+import libIris.Pic16_Bootloader
+import libIris.IntelHex
+import libIris.Pic16_Firmware
+
+#----------------------------------------------------
+#-- Mostrar la ayuda de como se usa la aplicacion
+#----------------------------------------------------
+def help():
+  print """
+Uso: skypic-test <port>
+
+ -Port: Nombre del dispositivo serie donde esta conectada la Skypic
+ 
+ Ejemplo:
+    
+   $ skypic-test.py /dev/ttyUSB0
+  """
+
+
+#-- Mensaje de comienzo
+print 'Skypic-test. Prueba rapida de la Skypic. Licencia GPL\n'
+
+#----------------------------
+#-- Analizar los parametros
+#----------------------------
+
+#-- Leer el fichero o el nombre del firmware a cargar
+try:
+  disp = sys.argv[1]
+except IndexError:
+  print "Nombre de programa no indicado"
+  help()
+  sys.exit(-1)
+
+
+#-- Abrir puerto serie
+try:
+  iris = libIris.Pic16_Bootloader.Iris(disp)
+except libIris.Pic16_Bootloader.IrisError,msg:
+  print msg
+  sys.exit(-1)
+
+#-- Obtener firmware a descargar. Se puede utilizar cualquier de 
+#-- los que se encuentren en la libreria Pic16_Firmware
+program = libIris.Pic16_Firmware.ledp2
+
+#-- Realizar la descarga
+try:
+  iris.download(program)
+except libIris.Pic16_Bootloader.IrisError,msg:
+  print "\nError: %s" % msg
+  sys.exit(-1)
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris.prj 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris.prj
new file mode 100644
index 0000000..78474f6
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris.prj
@@ -0,0 +1,131 @@
+# 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=libIris
+project.type=GENERIC
+project.target.type=EXECUTABLE
+project.version=1.0
+project.author=Rafael treviño
+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=libIris Version 1.0
+project.menu.group=Application
+project.menu.comment=libIris 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=\
+       test-IntelHex/test-formats.py\
+       test-IntelHex/test-outputs.py\
+       test-IntelHex/test-readHex.py\
+       test-IntelHex/test-stats.py\
+       test-libIris/test-download.py\
+       test-libIris/test-firmware.py\
+       libIris/__init__.py\
+       libIris/IntelHex.py\
+       libIris/Pic16_Bootloader.py\
+       libIris/Pic16_Firmware.py\
+       libIris-utils/hex-view.py\
+       libIris-utils/hex2python.py\
+       libIris-utils/skypic-test.py
+
+module.pixmap.name=.
+module.pixmap.type=
+module.pixmap.files=
+
+module.data.name=.
+module.data.type=
+module.data.files=\
+       debian/control\
+       debian/rules\
+       setup.py
+
+module.help.name=.
+module.help.type=
+module.help.files=
+
+module.doc.name=.
+module.doc.type=
+module.doc.files=\
+       TODO.txt\
+       test-IntelHex/pruebas.txt\
+       README.txt\
+       README_DEVELOPER.txt
+
+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/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/IntelHex.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/IntelHex.py
new file mode 100644
index 0000000..6a8111f
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/IntelHex.py
@@ -0,0 +1,536 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: File downloader library for SkyPIC
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         Juan Gonzalez Gomez <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.
+
+
+
+
+#------------------------------------------------------------------------------
+"""
+ Libreria para el analisis de ficheros .hex que esten en formato Hex de 
+ Intel. Se incluyen ademas funciones para realizar conversiones entre
+ diferentes formas de representacion de los programas en codigo maquina
+ 
+ FORMATOS DE DATOS. En esta libreria se usan tres tipos de formatos 
+  para representar la informacion que hay en un fichero .HEX
+
+ -FORMATO 1: Memoria (mem). Se asocia cada direccion con su palabra.
+    Es una lista de tuplas (direccion,palabra). La palabra se representa
+    a su vez mediante una otra tupla con su byte alto y su byte bajo
+    El formato lo podemos expresar asi: 
+    mem = [tupla1, tupla2....] = [(dir1, pal1), (dir2,pal2), ...] =
+        = [ (dir1, (dato1h,dato1l)), (dir2,(dato2h,dato2l)), ... ]
+    Este es el formato mas generico
+
+ -FORMATO 2: Lista de bloques. Los contenidos que estan en posiciones de
+    memoria consecutivas se agrupan en bloques. La representacion es una
+    lista de bloques:
+    programa = [bloque1, bloque2.....] Cada uno de estos bloques es a su 
+    vez una lista de PALABRAS (no bytes). La primera palabra es la direccion
+   de comienzo del bloque
+    bloque1 = [direccion, palabra1, palabra2,.....]
+
+ -FORMATO 3: Lista de bloques de 16 palabras. Es el mismo que el formato 2
+    pero ahora los bloques son como maximo de 16 palabras
+
+ USO DE LOS FORMATOS
+
+ -FORMATO 1: Es el mas generico. Contiene tuplas con las direcciones y 
+             las palabras almacenadas. 
+ -FORMATO 2: Bloques contiguos de palabras. Su principal utilidad es para
+             almacenar programas que se grabaran en el PIC. Los bloques
+             pueden ser de cualquier tamano
+ -FORMATO 3: Bloques contiguos de como maximo 16 palabras. Es igual que el 
+             formato 2 pero con la limitacion de tamano de bloques. Su 
+             principal utilidad es para la carga de programas con el 
+             Bootloader. Por cada bloque de 16 palabras se envia un 
+             checksum para comprobar que el envio es correcto
+ 
+"""
+#------------------------------------------------------------------------------
+
+
+class ReaderError (Exception):
+#----------------------------------------------------------------------------
+  """
+  Excepciones producidas en el modulo IntelHex
+  """
+#----------------------------------------------------------------------------  
+  pass
+
+
+
+
+class HexReader:
+#----------------------------------------------------------------------------
+  """
+  Clase principal para la lectura de ficheros .HEX y realizar conversiones
+  """
+#----------------------------------------------------------------------------
+
+  
+  def __init__ (self, file):
+  #----------------------------------------------------------------------------
+    """
+    Inicializacion de la clase. Se le pasa el fichero que se quiere parsear
+    Bien se puede pasar el descriptor o el nombre del fichero
+    """
+  #----------------------------------------------------------------------------
+  
+    #-- Comprobar si lo que se pasa es una cadena con el nombre del 
+    #-- fichero. En ese caso se abre el fichero para obtener su descriptor
+    if isinstance (file, str): 
+    
+      #-- Abrir el fichero o devolver una excepcion si hay error
+      try:
+        fd = open (file)
+      except IOError,msg:
+        raise ReaderError, msg
+        
+      #-- Indicar que se especifico el fichero por su nombre  
+      fileName=True;  
+        
+    else:
+      fd = file; #-- El argumento se toma directamente como un descriptor
+      fileName=False;
+      
+    #-- Realizar el parseo y obtener el contenido en formato 2
+    self.__memory = readHex(fd)
+    
+    #-- En el caso de que se haya especificado el fichero mediante un
+    #-- nombre se cierra el fichero. En caso contrario se deja abierto
+    if fileName:
+      fd.close()
+    
+  
+  def memory (self):
+  #-------------------------------------------------------------
+    """
+    Devolver el fichero .HEX en formato 1, como una memoria  
+    """
+  #-------------------------------------------------------------
+    return self.__memory
+
+
+  def dataBlocks(self):
+  #----------------------------------------------------------------------  
+    """
+    Devolver el fichero .HEX como una lista de bloques en formato 2
+    """
+  #----------------------------------------------------------------------
+    return memToBlocks(self.__memory)  
+
+  
+  
+  def dataBlocks16(self): 
+  #----------------------------------------------------------------------
+    """
+    Devolver el fichero .Hex como una lista de bloques en formato 3
+    """
+  #----------------------------------------------------------------------
+    return memToBlocks16(self.__memory) 
+
+  
+  
+  def size(self):
+  #-------------------------------------------------------------------------
+    """
+    Devolver el tamano en palabras. No se distingue entre codigo y datos
+    """
+  #-------------------------------------------------------------------------
+    return len(self.__memory)
+
+  
+  def blocks(self):
+  #------------------------------------------------------------------
+    """
+    Devolver el numero de bloques 
+    """
+  #------------------------------------------------------------------
+    blocks = memToBlocks(self.__memory)
+    return len(blocks)
+    
+  
+  def blocks16(self):
+  #------------------------------------------------------------------
+    """
+    Devolver el numero de bloques con tamano maximo de 16 palabras
+    """
+  #------------------------------------------------------------------
+    blocks = memToBlocks16(self.__memory)
+    return len(blocks)  
+
+  
+  
+  def outputPython(self,name="prog"):
+  #-------------------------------------------------------------------
+    """
+    Devuelve una cadena de Salida en formato python con el codigo
+    maquina del fichero .hex
+    """
+  #-------------------------------------------------------------------
+    
+    #-- Convertir a bloques y luego a cadena python
+    blocks = memToBlocks(self.__memory)
+    return blocksToStrPython(blocks,name)
+    
+  
+  def outputPython16(self,name="prog"):
+  #-------------------------------------------------------------------
+    """
+    Devuelve una cadena de Salida en formato python con el codigo
+    maquina del fichero .hex
+    La lista esta formada por bloques con tamano menor o igual a 16
+    """
+  #-------------------------------------------------------------------
+    
+    #-- Convertir a bloques y luego a cadena python
+    blocks = memToBlocks16(self.__memory)
+    return blocksToStrPython(blocks,name)  
+  
+  
+  def outputTable(self):
+  #------------------------------------------------------------
+    """
+    Salida como una tabla Direccion - Contenido
+    """
+  #------------------------------------------------------------  
+    return memToStrTable(self.__memory)
+   
+  
+  def outputBlocks(self):
+  #----------------------------------------------------------
+    """
+    Salida como bloques en formato 2. Direccion - Bloque
+    """
+  #----------------------------------------------------------
+    blocks = memToBlocks(self.__memory)
+    return blocksToStr(blocks)
+    
+  
+  def outputBlocks16(self):
+  #----------------------------------------------------------
+    """
+    Salida como bloques en formato 3. Direccion - Bloque
+    """
+  #----------------------------------------------------------
+    blocks = memToBlocks16(self.__memory)
+    return blocksToStr(blocks)
+
+
+
+
+#------------------------------------------------------------------------------
+#           FUNCIONES ESTATICAS QUE SE PUEDEN INVOCAR DIRECTAMENTE
+#------------------------------------------------------------------------------
+
+
+
+def readHex (fd):
+#--------------------------------------------------------------
+  """
+  Funciona para analizar ficheros .HEX.
+  ENTRADAS: Descriptor del fichero
+  DEVUELVE: Una lista en el FORMATO 1 (memoria)
+  """
+#--------------------------------------------------------------
+
+  #-- Leer las lineas del fichero .hex
+  lines = fd.readlines ()
+  fd.close ()
+
+  # Inicializar la lista de salida
+  mem = []
+
+  #-- Recorrer todas las lineas del fichero
+  for line in lines:
+  
+    #-- FORMAT .HEX
+    #-- CAMPO 1. (1 byte) Comienzo de linea. Caracter ':'
+    if line [0] != ':':
+      raise ReaderError, 'Error en formato HEX: Comienzo de linea incorrecto'
+
+    #-- CAMPO 2. (2 bytes) Numero de bytes de los datos
+    count = int (line [1:3], 16)
+    
+    #-- CAMPO 3. (2 bytes) Direccion de comienzo de los datos
+    addr = int (line [3:7], 16) / 2
+    
+    #-- CAMPO 4. (1 byte). Tipo de comando (registro)
+    rectype = int (line [7:9], 16)
+
+    #-- El registro de tipo 1 indica que es el final del fichero
+    #-- Si es asi se termina y se devuelve el contenido leido
+    if rectype == 1:
+      return mem
+
+    #-- Si es un registro mayor a 1 se ignora
+    #-- Los registro de tipo 4 no tengo muy claro para que son
+    #-- Creo que indican cual es la direccion de comienzo del
+    #-- programa
+    #-- Los registros normales son los de tipo 0 (datos)
+    if rectype > 1:
+      continue
+
+    #-- Inicializar Checksum
+    chk = count + (addr * 2 & 0xFF) + (addr >> 7) + rectype
+
+    #-- CAMPO 5: Datos. Una cadena de "count" bytes. Se deben interpretar
+    #-- como palabras. El primer byte es el bajo y el segundo el alto
+    for loop in xrange (0, count / 2):
+      #-- Crear la tupla con el (byte alto, byte bajo)
+      data = (int (line [11 + 4 * loop: 13 + 4 * loop], 16),
+              int (line [9 + 4 * loop: 11 + 4 * loop], 16))
+      
+      #-- Actualizar checksum      
+      chk += data [0] + data [1]        
+              
+      #-- En el pic las palabras son de 14 bits por lo que el byte alto
+      #-- NUNCA puede ser mayor de 0x3F        
+      if data [0] > 0x3F:
+        raise ReaderError, 'Error en formato HEX: Palabra incorrecta'
+        
+      #-- Anadir la tupla con la direccion y los datos  
+      mem.append ((addr, data))
+      
+      #-- Incrementar la direccion
+      addr += 1
+      
+    #-- CAMPO 6: Checksum del fichero
+    checksum = int (line [9 + count * 2: 11 + count * 2], 16)
+    chk = (0x100 - chk & 0xFF) & 0xFF  
+
+    #-- Comprobación del checksum. Ver si el checksum del fichero es igual
+    #-- al calculado.
+    if chk != checksum:
+      raise ReaderError, 'Error en formato HEX: Fallo en checksum'
+
+  raise ReaderError, 'Error en formato HEX: Final erroneo'
+  
+
+
+def memToBlocks(mem):
+#---------------------------------------------------------------------- 
+  """
+  Conversion del FORMATO 1 (memoria) al FORMATO 2: lista de bloques
+  contiguos
+  ENTRADA: Lista en formato 1 (memoria)
+  DEVUELVE: Lista en FORMATO 2
+  """
+#----------------------------------------------------------------------
+
+  #-- obtener una copia local de la memoria para no borrar la original
+  data = [] + mem
+
+  #-- Obtener la primera tupla
+  address, (d0, d1) = data [0]
+  del data [0]
+  a = address
+
+  #-- Inicializar programa. Un programa es una lista de bloques contiguos
+  #-- de palabras
+  program = []
+  
+  #-- Comenzar el primer bloque. Situar el primer elemento
+  block = [a, (d0 * 0x100 + d1)]
+
+  #-- Repetir para cada palabra del fichero .hex
+  while len (data):
+  
+    #-- Obtener la siguiente palabra y su direccion
+    address, (d0, d1) = data [0]
+    del data [0]
+    
+    #-- Si la palabra esta a continuacion de la anterior
+    if address== a + 1: 
+      #-- Anadir palabra al bloque
+      block.append (d0 * 0x100 + d1)
+      a = address
+    else:  
+      #-- La palabra NO es contigua
+      #-- Hay dos casos:
+      #-- 1) Que este en el mismo subbloque de 8. En ese caso se considera
+      #-- que forman parte del mismo bloque. Los "gaps" se rellenan con ceros
+      #-- 2) Que esten en diferentes subbloques. Eso significa que 
+      #--    pertenecen a bloques separados.
+      if address/8 == (a+1)/8:  #-- Caso 1. Mismo subbloque
+        block.extend ((address - (a + 1)) * [0])
+        block.append (d0 * 0x100 + d1)
+        a = address
+      else:   #-- Caso 2: Distinto Bloque
+        #-- Anadir el bloque actual al programa
+        #-- Pero SOLO si es un bloque de codigo. Es decir, si su direccion
+        #-- de inicio esta por debajo de 0x2000. A partir de esa direccion
+        #-- lo que se tiene es la configuracion
+        program.append (block)
+        
+        #-- Crear el bloque nuevo. Meter el primer elemento
+        a = address
+        block = [a, (d0 * 0x100 + d1)]
+      
+  #-- Falta por añadir al programa el ultimo bloque leido 
+  program.append (block)
+    
+  return program
+
+
+
+def blocksToBlocks16(prog1):
+#--------------------------------------------------------------------------
+  """
+  CONVERSION DEL FORMATO 2  al FORMATO 3: Lista de bloques de
+  datos de tamano maximo de 16 palabras
+  ENTRADA: Lista en formato 2
+  DEVUELVE: Lista de bloques en FORMATO 3
+  """
+#---------------------------------------------------------------------------
+  #-- Programa de salida: lista de bloques de tamano 16 palabras
+  prog2 = []
+  
+  #---- Recorrer todos los bloques y trocearlos en bloques de 16 palabras
+  for block in prog1:
+
+    #-- Si el bloque tiene un tamano menor o igual a 16 no hace
+    #-- falta trocearlo
+    if len(block)<=16:
+      prog2.append(block)
+    else:
+      #-- Bloque tiene tamano mayor a 16. Hay que trocear.
+      
+      #-- Guardar la direccion de inicio
+      addr = block[0]
+      del block[0]
+      
+      #-- Calcular el numero de subbloques de 16 palabras que hay 
+      nblock = len(block)/16;
+     
+      #-- Obtener los subbloques completos
+      for i in range(nblock):
+        nuevo_bloque = [addr] + block[0:16]
+        
+        #-- Anadir subbloque
+        prog2.append(nuevo_bloque)
+        addr+=16;
+        del block[0:16]
+        
+      
+      #--- El ultimo bloque esta formados por los "restos"
+      if (len(block)!=0):
+        nuevo_bloque = [addr] + block
+        prog2.append(nuevo_bloque)   
+
+  return prog2
+
+
+
+def memToBlocks16(mem): 
+#--------------------------------------------------------------------------
+  """
+  CONVERSION DEL FORMATO 1 (memoria) al FORMATO 3: Lista de bloques de
+  datos de tamano maximo de 16 palabras
+  ENTRADA: Lista en formato 2
+  DEVUELVE: Lista de bloques en FORMATO 3
+  """
+#---------------------------------------------------------------------------
+ 
+  #-- Primero agrupar en bloques contiguos
+  prog1 = memToBlocks(mem)
+  
+  #-- "trocear" en bloques de 16
+  return blocksToBlocks16(prog1)
+
+
+
+
+#------------------------------------------------------------------------------#
+#            FUNCIONES DE CONVERSION A CADENAS DE CARACTERES                   #
+#------------------------------------------------------------------------------#
+
+
+def blocksToStrPython(program,name="prog"):
+#-------------------------------------------------------------------
+  """
+  Convertir a una cadena en formato de lista de Python
+  Se crea una cadena con syntaxis python con el codigo maquina
+  El parametro name es el nombre del programa en el codigo python
+  ENTRADAS:
+     -blocks:  LIsta de bloques en FORMATO 2 o 3
+     -name: Cadena a asignar como nombre a la lista de salida
+  DEVUELVE: Una cadena con la lista, en formato PYTHON
+  """
+#-------------------------------------------------------------------
+
+  #-- Comienzo de la cadena
+  prog_str = "%s=[" % (name)
+  
+  #-- Recorrer todos los bloques y pasarlos a un string
+  for block in program:
+    cad=["0x%04X" % (palabra) for palabra in block]
+    prog_str = prog_str + "[" + ", ".join(cad) + "],"
+    
+  #-- Final de la cadena  
+  prog_str+="]"  
+  
+  #-- Devolver la cadena
+  return prog_str
+  
+  #-- Esta es la version compacta. Hace lo mismo que todo lo anterior
+  #-- return '%s = [%s]' % (name, ', '.join (['[%s]' % (', '.join (["0x%04X" %
+  #            palabra for palabra in block])) for block in self.__program]))
+
+ 
+
+def memToStrTable(mem):
+#--------------------------------------------------------------------------
+  """
+  Convertir una memoria (formato 1) en una cadena en forma de tabla. 
+  Cada una de las filas contiene la direccion y su contenido
+  ENTRADAS: mem: Memoria en FORMATO 1
+  """
+#--------------------------------------------------------------------------
+
+  #-- Volcar la memoria
+  tabla=  "Dir: Contenido\n"
+  tabla+= "---- ---------\n"
+  for addres,palabra in mem:
+    tabla+= "%04X: %04X\n" % (addres, palabra[0]*0x100 + palabra[1])
+  return tabla
+  
+
+
+def blocksToStr(data):
+#----------------------------------------------------------------
+  """
+  Convertir a una lista en formato 2 o 3 en una cadena
+  ENTRADAS: data: datos en FORMATO 2 o 3
+  """
+#----------------------------------------------------------------
+  salida=""
+  for block in data:
+    salida+= "Direccion: %04X\n" % (block[0])
+    cad=["%04X" % (palabra) for palabra in block[1:]]
+    salida= salida + " ".join(cad)
+    salida+="\n\n"
+  return salida
+
+  #-- Esta es la version compacta (sustituye al resto)
+  #-- return ''.join (['Direccion: %04X\n%s\n\n' % (block [0], ' '.join  
+  #(["%04X" % (palabra) for palabra in block[1:]])) for block in self.__program])
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/Pic16_Bootloader.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/Pic16_Bootloader.py
new file mode 100644
index 0000000..a7205cd
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/Pic16_Bootloader.py
@@ -0,0 +1,446 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: File downloader library for SkyPIC
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+"""
+  Modulo Cliente para comunicarse con el PIC_BOOTLOADER y descargar       
+  ficheros .hex en la tarejta Skypic
+
+  Ademas se incorporan metodos para que el usuario pueda acceder 
+  a los diferentes servicios del Bootloader por si quiere implementarse
+  su propio programa de descarga o quiere hacer modificaciones a bajo 
+  nivel en el bootloader
+"""
+
+import serial 
+import time
+import IntelHex
+import sys
+
+
+#############
+# CONSTANTS #
+#############
+
+#--------------------------------------
+#- Configuracion del puerto serie 
+#--------------------------------------
+#-- Timeout por defecto para el acceso al puerto serie
+SERIAL_TIMEOUT = 0.2
+
+#--- Velocidad de transmision para la comunicacion con el PIC Bootloader
+BAUDIOS = 38400
+
+#------------------------------------------------------------------
+#-  IDENTIFICACION DE LOS COMANDOS DEL PROTOCOLO DEL BOOTLOADER  
+#------------------------------------------------------------------
+CMD_WRITE    = '\xE3'  #-- Escritura de un bloque
+CMD_DATA_OK  = '\xE7'  #-- Datos enviados correctamente
+CMD_OK       = '\xE4'  #-- Operacion ejecutada
+CMD_IDENT    = '\xEA'  #-- Comando de identificacion del bootloader
+CMD_IDACK    = '\xEB'  #-- Bootloader identificado
+CMD_SEND_DONE= '\xED'  #-- Comando de ejecucion
+
+#------------------------------------------------------------------------
+#-- Constantes usadas con el metodo download para indicar
+#-- lo que va ocurriendo con la descarga 
+#------------------------------------------------------------------------
+WRITING_START=1      #-- Comienzo de la escritura
+WRITING_INC=2        #-- Escritura de una palabra
+WRITING_END=3        #-- Fin de la escritura
+
+IDENT_START=4        #-- Comienzo de la identificacion del bootloader
+IDENT_NACK=5         #-- No se ha recibido respuesta
+
+#-- Timeout por defecto, en segundos, que se espera a detectar el 
+#-- Bootloader
+DEFAULT_TIMEOUT = 10
+
+
+#----------------------------------------
+#- Clase para la gestion de los errores
+#----------------------------------------
+class IrisError (Exception):
+  """
+  Excepciones producidas en el modulo Pic16_Bootloader
+  """
+  pass
+
+
+def default_logCallback(msg):
+  """
+    Funcion de "log" por defecto. 
+    Simplemente se imprimen los mensajes
+  """
+  sys.stdout.write(msg)
+  sys.stdout.flush()
+
+
+#-----------------------------------------------------------------------------
+def default_stateCallback(op,inc,total):
+  """
+  Funcion de estado por defecto
+  Se imprime informacion en la consola
+  La funcion debe devolver TRUE si todo esta OK y se quiere continuar
+  con el proceso. FALSE en caso contrario. La descarga se aborta
+ Los parametros recibidos son:
+   -op: Tipo de operacion. Indica la fase de la descarga que se ha iniciado
+   -inc: 
+      -En el estado IDENT_NACK indica el numero reitentos hasta el momento
+      -En el estado WRITING_INC indica el numero de bloques enviados
+   -total:
+      -En el estado IDENT_NACK indica el tiempo total transcurrido desde
+       el comienzo de la identificacion (en segundos)
+      -En el estado WRITING_INC indica el numero total de bloques del
+       del programa a transmitir
+
+  El usuario puede crear su propia funcion de estado para actualizar el
+  interfaz de su aplicacion como quiera. Esta funcion es un ejemplo para
+  una interfaz de consola
+  """
+
+
+  #--------------------------------------------------
+  #- Comienzo de la identificacion del Bootloader 
+  #--------------------------------------------------
+  if op==IDENT_START:
+    print "Esperando Bootloader"
+    return True
+    
+  #-------------------------------------------------------------------------
+  #-- Timeout en la identificacion. 
+  #-- Cuando el tiempo transcurrido supera el timeout en la identificacion
+  #-- se aborta devolviendose False
+  #-------------------------------------------------------------------------  
+  elif op==IDENT_NACK:
+    sys.stdout.write('.')
+    sys.stdout.flush()
+    if total<=DEFAULT_TIMEOUT:
+      return True
+    else :
+      return False  
+  
+  #-----------------------------------------------------------------------
+  #-- Comienzo de la descarga
+  #-- Se imprime una barra de status en ASCII formada por '.' y se lleva
+  #-- el cursor a la izquierda (imprimiendo el caracter '\b'
+  #----------------------------------------------------------------------
+  elif op==WRITING_START:
+    sys.stdout.write("\nDescargando:\n")
+    cad="".join(["." for i in range(total)])
+    back="".join(["\b" for i in range(total)])
+    
+    #-- Imprimir la "barra de estado" con '.'. Un '.' por cada bloque
+    sys.stdout.write(cad)
+    
+    #-- Llevar el cursos a la izquierda
+    sys.stdout.write(back)
+    sys.stdout.flush()
+    
+    return True
+  
+  #----------------------------------------------------------------------
+  #-- Se ha grabado un bloque. Se actualiza la "barra de estado ascii"  
+  #----------------------------------------------------------------------
+  elif op==WRITING_INC:  
+    sys.stdout.write("*")
+    sys.stdout.flush()
+    return True
+    
+  #----------------------------------------
+  #- Fin de la descarga
+  #----------------------------------------
+  elif op==WRITING_END: 
+    print " OK"
+    return True
+    
+
+#----------------------------------------------------------------------------
+#--                           CLASE  PRINCIPAL    
+#----------------------------------------------------------------------------
+class Iris:
+  """
+  Clase prinipal del modulo Pic16_Bootloader. Se utiliza para comunicarse
+  con el Bootloader y descargar programas en la Skypic
+  """
+
+  #---------------------
+  #- Destructor 
+  #---------------------
+  def __del__(self):
+  
+    #-- Cerrar el pueto serie
+    if self.__serial:
+      #print "Debug: cerrando puerto serie: %s" % (self.__serial.portstr)
+      self.__serial.close()
+
+
+  def __init__ (self, serialName, logCallback = default_logCallback):
+  #-------------------------------------------------------------------------
+    """
+  Constructor
+  ENTRADAS:
+    serialName: Dispositivo serie
+    logCallback: Funcion de retrollamada para el "log"    
+    """
+  #--------------------------------------------------------------------------  
+    
+    self.__serial = None
+    self.__log = logCallback
+    
+    #-- Abrir puerto serie
+    try:
+      self.__serial = serial.Serial(serialName, BAUDIOS)
+    except serial.SerialException:
+      raise IrisError,'Error al abrir puerto serie %s.' % serialName
+
+    if self.__log:
+      self.__log ('Serial port %s opened.\n' % self.__serial.portstr)
+
+    #-- Configurar timeout
+    #-- He detectado que en Linux al configurar el timeout se modifica
+    #-- el estado del DTR. No en todos los casos (depende del driver
+    #-- del conversor USB-serie usado). El problema siempre esta en que
+    #-- los valores del DTR no estan estandarizados y cada driver los 
+    #-- maneja a su propia manera.
+    #-- La solucion que se esta utilizando es la de configurar el 
+    #-- timeout al principio
+    self.__serial.timeout = SERIAL_TIMEOUT
+  
+    #-- Vaciar los buffers del puerto serie
+    self.__serial.flushInput()
+    self.__serial.flushOutput()
+
+  
+  def close(self):
+  #-----------------------------
+    """
+    Cerrar el puerto serie
+    """
+  #-----------------------------
+    if self.__serial!=None:
+      self.__serial.close()
+      
+ 
+  
+  def sendDone (self):
+  #--------------------------------------------------------------------
+    """
+    Enviar comando SENDDONE para que arranque el programa cargado
+    """
+  #--------------------------------------------------------------------  
+  
+    #-- Enviar el comando
+    self.__serial.write (CMD_SEND_DONE)
+    
+    #-- Esperar la respuesta
+    ch = self.__serial.read (1)
+    if ch != CMD_OK:
+      raise IrisError, "Error en Done"
+      
+    if self.__log:
+      self.__log ('Ejecutando programa\n')  
+      
+
+  def skypicReset (self):
+  #----------------------------------------------------------------
+    """
+    Hacer reset de la Skypic. Solo funcionara si el jumper JP4
+    esta colocado en la posicion DTR
+    """
+  #----------------------------------------------------------------
+  
+    #-- Desactivar la senal DTR durante 0.5 segundos
+    self.__serial.setDTR (0)
+    
+    #-- Esto es para depurar
+    #if self.__log:
+    #  self.__log("%s: DTR OFF\n" % self.__serial.portstr)
+    time.sleep (0.5)
+    
+    #-- Volver a activarla. Reset hecho
+    self.__serial.setDTR (1)
+    
+    #-- Esto es para depurar
+    #if self.__log:
+    #  self.__log("%s: DTR ON\n" % self.__serial.portstr)
+    
+    if self.__log:
+      self.__log ('Reset Skypic\n')
+    
+
+  
+  def identBootloader (self, timeoutCallback=default_stateCallback):
+  #-----------------------------------------------------------------------
+    """
+   Identificar el Bootloader
+   Devuelve: 
+      -TRUE si se ha detectado
+      -FALSE si ha transcurrido el timeout y no se ha detectado
+       Esto puede ocurrir bien porque no haya comunicacion con el bootloader
+       o bien porque no se haya pulsado el boton de reset de la skypic
+   ENTRADAS:
+      -timeoutCallback : Funcion de estado. Se invoca al comienzo de la 
+         identificacion y si no se ha podio encontrar el Bootloader
+    """
+  #-----------------------------------------------------------------------
+     
+    #-- Inicializacion de la funcion de callback
+    if timeoutCallback:
+      timeoutCallback(IDENT_START,0,0)    
+
+    # Timeout or bad reply
+    nack=0;
+    while True:
+
+      #-- Enviar comando de identificacion
+      self.__serial.write (CMD_IDENT)
+
+      #-- Esperar la respuesta
+      id = self.__serial.read (1)
+
+      #-- Condicion de deteccion del bootloader
+      if len (id) == 1 and id == CMD_IDACK:
+        if self.__log:
+          self.__log ('Bootloader OK\n')
+        return True
+          
+      nack+=1    
+      #-- Invocar la funcion de callback
+      if timeoutCallback:
+        ret = timeoutCallback(IDENT_NACK,nack,float(nack)*SERIAL_TIMEOUT) 
+        if ret==False:
+          #-- Bootloder NO detectado
+          if self.__log:
+            self.__log ('TIMEOUT\n')
+          
+          raise IrisError,'Bootloader No detectado'
+    
+
+  def writeData(self,block):
+  #--------------------------------------------------
+    """
+    Escribir un bloque a traves del booloader
+    El primer elemento del bloque es la direccion
+    """
+  #--------------------------------------------------
+    
+    #-- Obtener la direccion de comienzo del bloque
+    addr=block[0]
+    
+    #-- Obtener el bloque en bytes
+    #-- Se almacena en data. Primero el byte alto y luego el bajo
+    data=[]
+    for i in block[1:]:
+      data.append(i>>8 & 0xFF)  #-- Andir byte alto
+      data.append(i&0xFF)       #-- Anadir byte bajo
+      
+    #-- Calcular el Checksum  
+    chk = sum(data) & 0xFF
+      
+    #-- Tamano del bloque en bytes
+    tam = len (data)
+
+    #------------------------------------
+    #-- Comenzar la escritura del bloque 
+    #------------------------------------
+    #-- Enviar comando
+    self.__serial.write (CMD_WRITE)
+    
+    #-- Enviar direccion de comienzo del bloque
+    self.__serial.write ('%c%c' % (chr (addr >> 8 & 0xFF),
+                                   chr (addr & 0xFF)))
+                                   
+    #-- Enviar tamano
+    self.__serial.write (chr (tam))
+    
+    #-- Enviar checksum
+    self.__serial.write (chr (chk))
+    
+    #-- Enviar los datos
+    for d in data:
+      self.__serial.write (chr(d))
+    
+    #-----------------------------
+    #-- Comprobar las respuestas 
+    #-----------------------------
+    
+    # --- Datos correctos?
+    ch = self.__serial.read (1)
+    if ch != CMD_DATA_OK:
+      raise IrisError, 'Data error.'
+
+    # --- Escritura ok?
+    ch = self.__serial.read (1)
+    if ch != CMD_OK:
+      raise IrisError, 'Write error.'
+    
+  
+  def download (self, program, stateCallback=default_stateCallback):
+  #---------------------------------------------------------------------------
+    """
+    Descargar un programa a traves del bootloader
+    Para cada fase de la descarga se invoca la funcion de retrollamda
+    stateCallback
+    """
+  #---------------------------------------------------------------------------
+  
+    #-- Hacer un reset
+    self.skypicReset()
+    
+    #-- Identificar el bootloader
+    #-- Se invoca a la funcion de estado
+    self.identBootloader(timeoutCallback=stateCallback)
+    
+    #-- Obtener Tamano del programa en bloques
+    tam = len(program)
+    
+    #-- Invocar la funcion de estado para indicar el comienzo
+    #-- de la descarga
+    if stateCallback:
+      ok=stateCallback(WRITING_START, 0, tam);
+      if not ok:
+        raise IrisError, "Abortado"
+      
+    #-- Escribir los bloques
+    count=1;
+    for block in program:
+      self.writeData(block)
+      
+      #-- Invocar funcion de estado para indicar que se ha descargado
+      #-- un bloque
+      if stateCallback:
+        ok=stateCallback(WRITING_INC,count,tam); 
+        if not ok:
+          raise IrisError, "Abortado"        
+      
+      #-- Incrementar contador de numero de bloques descargados
+      count=count + 1
+      
+    #-- Invocar la funcion de estado para indicar que se ha terminado
+    #-- la descarga, siempre que no haya sido abortada    
+    if stateCallback:
+      ok=stateCallback(WRITING_END,0,tam);  
+      if not ok:
+          raise IrisError, "Abortado" 
+      
+    #-- Ejecutar el programa  
+    self.sendDone ()
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/Pic16_Firmware.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/Pic16_Firmware.py
new file mode 100644
index 0000000..5762006
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/Pic16_Firmware.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: File downloader library for SkyPIC
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+
+#----------------------------------------------------------------------------
+"""
+ Libreria que contiene FIRMWARE para la Skypic 
+ El firmware ha sido obtenido a partir de los ficheros .hex utilizando 
+ la herramienta hex2python, de la siguiente manera:
+
+  $ ./hex2python.py fichero.hex f3 nombre_lista
+
+ Por ejemplo, el clasico programa del led parpdeante se ha obtenido asi:
+
+ ./hex2python.py ledp1.hex f3 ledp1
+"""
+#----------------------------------------------------------------------------
+
+
+#---------------------------------------------------------------------------
+#- LEDON. Encender el led de la Skypic
+#---------------------------------------------------------------------------
+ledon=[[0x0000, 0x0000, 0x118A, 0x120A, 0x280C, 0x0000, 0x1683, 0x1303, 0x1086, 0x1283, 0x1486, 0x280A, 
0x0008, 0x118A, 0x120A, 0x2805],]
+
+#----------------------------------------------------------------------
+#- LEDP1.  Programa del ledp, que hace parpadear el led de la skypic
+#----------------------------------------------------------------------
+ledp1=[[0x0000, 0x0000, 0x118A, 0x120A, 0x2821, 0x0000, 0x30FD, 0x1683, 0x1303, 0x0086, 0x3002, 0x1283, 
0x0686, 0x30FF, 0x00FF, 0x30FF, 0x2012],[0x0010, 0x2809, 0x0008, 0x1283, 0x1303, 0x00A3, 0x087F, 0x00A2, 
0x0822, 0x0423, 0x1903, 0x2820, 0x30FF, 0x07A2, 0x1C03, 0x03A3, 0x2817],[0x0020, 0x0008, 0x118A, 0x120A, 
0x2805],]
+
+#----------------------------------------------------------------------
+#- LEDP2.  Programa del ledp, que hace parpadear el led de la skypic. 
+#- Se diferencia del ledp1 en que el parpadeo es mas rapido
+#----------------------------------------------------------------------
+ledp2=[[0x0000, 0x0000, 0x118A, 0x120A, 0x2821, 0x0000, 0x30FD, 0x1683, 0x1303, 0x0086, 0x3002, 0x1283, 
0x0686, 0x3000, 0x00FF, 0x3080, 0x2012],[0x0010, 0x2809, 0x0008, 0x1283, 0x1303, 0x00A3, 0x087F, 0x00A2, 
0x0822, 0x0423, 0x1903, 0x2820, 0x30FF, 0x07A2, 0x1C03, 0x03A3, 0x2817],[0x0020, 0x0008, 0x118A, 0x120A, 
0x2805],]
+
+#----------------------------------------------------------------------------
+#-          FIRMWARE DEL PROYECTO STARGATE 
+#----------------------------------------------------------------------------
+
+#--- Servidor de Eco. V1. Velocidad 9600 Baudios
+echo=[[0x0000, 0x0183, 0x3000, 0x008A, 0x2804, 0x1683, 0x3081, 0x0099, 0x3024, 0x0098, 0x1283, 0x3090, 
0x0098, 0x1683, 0x0186, 0x1283, 0x30FF],[0x0010, 0x0086, 0x2015, 0x2019, 0x0086, 0x2811, 0x1E8C, 0x2815, 
0x081A, 0x0008, 0x1E0C, 0x2819, 0x0099, 0x0008],]
+
+#--- Servidor GENERICO. V1. Velocidad 9600 baudios
+generic=[[0x0000, 0x0183, 0x3000, 0x008A, 0x2804, 0x1683, 0x3081, 0x0099, 0x3024, 0x0098, 0x1283, 0x3090, 
0x0098, 0x1683, 0x1086, 0x1283, 0x3002],[0x0010, 0x0086, 0x2048, 0x00A0, 0x3050, 0x0220, 0x1903, 0x2824, 
0x3049, 0x0220, 0x1903, 0x2827, 0x304C, 0x0220, 0x1903, 0x2830, 0x3053],[0x0020, 0x0220, 0x1903, 0x2838, 
0x2811, 0x304F, 0x204C, 0x2811, 0x3049, 0x204C, 0x3020, 0x204C, 0x3030, 0x204C, 0x3010, 0x204C, 
0x2811],[0x0030, 0x203E, 0x0800, 0x00A3, 0x304C, 0x204C, 0x0823, 0x204C, 0x2811, 0x203E, 0x2048, 0x0080, 
0x3053, 0x204C, 0x2811, 0x2048, 0x0084],[0x0040, 0x2048, 0x00A1, 0x1821, 0x2846, 0x1383, 0x2847, 0x1783, 
0x0008, 0x1E8C, 0x2848, 0x081A, 0x0008, 0x1E0C, 0x284C, 0x0099, 0x0008],]
+
+#--- Servidor SERVOS8. V1. Velocidad 9600 baudios
+servos8=[[0x0000, 0x0000, 0x118A, 0x120A, 0x2907, 0x00F2, 0x0E03, 0x0183, 0x1283, 0x1303, 0x00F1, 0x080A, 
0x00F0, 0x018A, 0x110B, 0x3000, 0x1283],[0x0010, 0x1303, 0x042B, 0x1D03, 0x2820, 0x0829, 0x052A, 0x1283, 
0x1303, 0x0086, 0x30EA, 0x0081, 0x3001, 0x1283, 0x1303, 0x00AB, 0x2862],[0x0020, 0x082B, 0x3A01, 0x1D03, 
0x2839, 0x0828, 0x3E20, 0x00AF, 0x3000, 0x1803, 0x3E01, 0x00B0, 0x082F, 0x0084, 0x1383, 0x1830, 
0x1783],[0x0030, 0x0800, 0x1283, 0x1303, 0x0081, 0x3002, 0x1283, 0x1303, 0x00AB, 0x2862, 0x082B, 0x3A02, 
0x1D03, 0x2861, 0x1283, 0x1303, 0x0186],[0x0040, 0x1283, 0x1303, 0x0828, 0x3E20, 0x00AF, 0x3000, 0x1803, 
0x3E01, 0x00B0, 0x082F, 0x0084, 0x1383, 0x1830, 0x1783, 0x0800, 0x3C52],[0x0050, 0x1283, 0x1303, 0x0081, 
0x1283, 0x1303, 0x01AB, 0x1003, 0x0DA9, 0x0AA8, 0x3000, 0x0429, 0x1D03, 0x2862, 0x3001, 0x00A9, 
0x01A8],[0x0060, 0x2862, 0x01AB, 0x1283, 0x1303, 0x0870, 0x008A, 0x0183, 0x0E71, 0x0083, 0x0EF2, 0x0E72, 
0x0009, 0x1683, 0x1303, 0x0186, 0x3002],[0x0070, 0x1283, 0x00
 86, 0x1283, 0x1303, 0x01B4, 0x3008, 0x0234, 0x1803, 0x2889, 0x0834, 0x3E20, 0x00B5, 0x3000, 0x1803, 0x3E01, 
0x00B6],[0x0080, 0x0835, 0x0084, 0x1383, 0x1836, 0x1783, 0x30B0, 0x0080, 0x0AB4, 0x2875, 0x01AA, 0x01A8, 
0x01AB, 0x3001, 0x00A9, 0x20FD, 0x20DF],[0x0090, 0x20F7, 0x1283, 0x1303, 0x00B4, 0x3A45, 0x1903, 0x28AA, 
0x0834, 0x3A49, 0x1903, 0x28A6, 0x0834, 0x3A50, 0x1903, 0x28A4, 0x0834],[0x00A0, 0x3A57, 0x1903, 0x28A8, 
0x2890, 0x20DC, 0x2890, 0x20D3, 0x2890, 0x20B2, 0x2890, 0x20AD, 0x2890, 0x0008, 0x20F7, 0x1283, 
0x1303],[0x00B0, 0x00AA, 0x0008, 0x20F7, 0x1283, 0x1303, 0x00AC, 0x20F7, 0x1283, 0x1303, 0x00B1, 0x3099, 
0x0231, 0x1C03, 0x28C0, 0x3099, 0x00B1],[0x00C0, 0x032C, 0x00B2, 0x3E20, 0x00B2, 0x3000, 0x1803, 0x3E01, 
0x00B3, 0x0831, 0x3CFF, 0x00B1, 0x0832, 0x0084, 0x1383, 0x1833, 0x1783],[0x00D0, 0x0831, 0x0080, 0x0008, 
0x3049, 0x20E9, 0x3030, 0x20E9, 0x3030, 0x20E9, 0x3011, 0x20E9, 0x0008, 0x304F, 0x20E9, 0x0008, 
0x3005],[0x00E0, 0x1683, 0x1303, 0x0081, 0x110B, 0x168B, 0x
 178B, 0x1283, 0x0181, 0x0008, 0x1283, 0x1303, 0x00AE, 0x1283, 0x1303, 0x1E0C, 0x28EC],[0x00F0, 0x1283, 
0x1303, 0x082E, 0x1283, 0x1303, 0x0099, 0x0008, 0x1283, 0x1303, 0x1E8C, 0x28F7, 0x081A, 0x0008, 0x3081, 
0x1683, 0x1303],[0x0100, 0x0099, 0x3024, 0x0098, 0x3090, 0x1283, 0x0098, 0x0008, 0x118A, 0x120A, 0x286C],]
+
+
+#--- Servidor PICP. V2. Velocidad 9600 baudios
+picp=[[0x0000, 0x0000, 0x118A, 0x120A, 0x2997, 0x0000, 0x218D, 0x3067, 0x1683, 0x0086, 0x1283, 0x0186, 
0x2174, 0x2187, 0x1283, 0x1303, 0x00B5],[0x0010, 0x3A41, 0x1903, 0x2842, 0x0835, 0x3A42, 0x1903, 0x2840, 
0x0835, 0x3A43, 0x1903, 0x2846, 0x0835, 0x3A44, 0x1903, 0x283E, 0x0835],[0x0020, 0x3A49, 0x1903, 0x283A, 
0x0835, 0x3A4A, 0x1903, 0x284A, 0x0835, 0x3A50, 0x1903, 0x2838, 0x0835, 0x3A52, 0x1903, 0x2844, 
0x0835],[0x0030, 0x3A54, 0x1903, 0x283C, 0x0835, 0x3A57, 0x1903, 0x2848, 0x280C, 0x20E2, 0x280C, 0x20D9, 
0x280C, 0x20CD, 0x280C, 0x20BA, 0x280C],[0x0040, 0x20B5, 0x280C, 0x20B0, 0x280C, 0x20A2, 0x280C, 0x2099, 
0x280C, 0x2084, 0x280C, 0x204D, 0x280C, 0x0008, 0x2187, 0x1283, 0x1303],[0x0050, 0x00B2, 0x2187, 0x1283, 
0x1303, 0x00B3, 0x3000, 0x0433, 0x1903, 0x285C, 0x3001, 0x00B4, 0x285D, 0x01B4, 0x3000, 0x0434, 
0x1903],[0x0060, 0x286F, 0x30FF, 0x00B4, 0x3006, 0x2110, 0x1283, 0x1303, 0x0BB4, 0x2863, 0x3006, 0x2110, 
0x1283, 0x1303, 0x03B3, 0x2855, 0x3000],[0x0070, 0x0432, 0x1903,
  0x2876, 0x3001, 0x00B3, 0x2877, 0x01B3, 0x3000, 0x0433, 0x1903, 0x2881, 0x3006, 0x2110, 0x1283, 0x1303, 
0x03B2],[0x0080, 0x286F, 0x304A, 0x2179, 0x0008, 0x2187, 0x1283, 0x1303, 0x00B0, 0x2187, 0x1283, 0x1303, 
0x00B1, 0x3002, 0x2110, 0x1283, 0x1303],[0x0090, 0x0830, 0x00FF, 0x0831, 0x20FA, 0x3008, 0x2110, 0x3057, 
0x2179, 0x0008, 0x3000, 0x2110, 0x3000, 0x00FF, 0x3000, 0x20FA, 0x3043],[0x00A0, 0x2179, 0x0008, 0x3004, 
0x2110, 0x20E5, 0x3052, 0x2179, 0x1283, 0x1303, 0x0820, 0x2179, 0x1283, 0x1303, 0x0821, 0x2179, 
0x0008],[0x00B0, 0x3006, 0x2110, 0x3041, 0x2179, 0x0008, 0x3008, 0x2110, 0x3042, 0x2179, 0x0008, 0x2187, 
0x1283, 0x1303, 0x00AE, 0x2187, 0x1283],[0x00C0, 0x1303, 0x00AF, 0x3002, 0x2110, 0x1283, 0x1303, 0x082E, 
0x00FF, 0x082F, 0x20FA, 0x3044, 0x2179, 0x0008, 0x3010, 0x1283, 0x1303],[0x00D0, 0x0086, 0x3002, 0x2161, 
0x1283, 0x1303, 0x0186, 0x3054, 0x2179, 0x0008, 0x3049, 0x2179, 0x3040, 0x2179, 0x3030, 0x2179, 
0x3012],[0x00E0, 0x2179, 0x0008, 0x304F, 0x2179, 0x0008, 0x168
 3, 0x1303, 0x1786, 0x3001, 0x2127, 0x3008, 0x2127, 0x00A0, 0x3007, 0x2127, 0x00A1],[0x00F0, 0x1003, 0x0C21, 
0x00AD, 0x303F, 0x052D, 0x00A1, 0x1683, 0x1303, 0x0186, 0x0008, 0x1283, 0x1303, 0x00AB, 0x087F, 0x00AC, 
0x3001],[0x0100, 0x00FF, 0x3000, 0x2144, 0x3008, 0x00FF, 0x1283, 0x1303, 0x082C, 0x2144, 0x3007, 0x00FF, 
0x1283, 0x1303, 0x082B, 0x2144, 0x0008],[0x0110, 0x1283, 0x1303, 0x00AA, 0x30F0, 0x1283, 0x1303, 0x0586, 
0x3006, 0x00FF, 0x1283, 0x1303, 0x082A, 0x2144, 0x1283, 0x1303, 0x1786],[0x0120, 0x30FF, 0x0085, 0x0185, 
0x30FF, 0x0085, 0x0185, 0x0008, 0x1283, 0x1303, 0x00A7, 0x01A8, 0x01A9, 0x0827, 0x0229, 0x1803, 
0x2942],[0x0130, 0x1003, 0x0CA8, 0x1283, 0x1303, 0x1586, 0x30F0, 0x0586, 0x1B86, 0x293D, 0x1283, 0x1303, 
0x13A8, 0x2940, 0x1283, 0x1303, 0x17A8],[0x0140, 0x0AA9, 0x292C, 0x0828, 0x0008, 0x1283, 0x1303, 0x00A4, 
0x087F, 0x00A5, 0x01A6, 0x0825, 0x0226, 0x1803, 0x2960, 0x1824, 0x2954],[0x0150, 0x1283, 0x1303, 0x1386, 
0x2957, 0x1283, 0x1303, 0x1786, 0x1586, 0x30F0, 0x0
 586, 0x1003, 0x1283, 0x1303, 0x0CA4, 0x0AA6, 0x294A],[0x0160, 0x0008, 0x1283, 0x1303, 0x00A3, 0x3000, 
0x0423, 0x1903, 0x2973, 0x303D, 0x1283, 0x1303, 0x0081, 0x110B, 0x1D0B, 0x296D, 0x1283],[0x0170, 0x1303, 
0x03A3, 0x2964, 0x0008, 0x3087, 0x1683, 0x1303, 0x0081, 0x0008, 0x1283, 0x1303, 0x00A2, 0x1283, 0x1303, 
0x1E0C, 0x297C],[0x0180, 0x1283, 0x1303, 0x0822, 0x1283, 0x1303, 0x0099, 0x0008, 0x1283, 0x1303, 0x1E8C, 
0x2987, 0x081A, 0x0008, 0x3081, 0x1683, 0x1303],[0x0190, 0x0099, 0x3024, 0x0098, 0x3090, 0x1283, 0x0098, 
0x0008, 0x118A, 0x120A, 0x2805],]
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/__init__.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/__init__.py
new file mode 100644
index 0000000..922dc5c
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/libIris/__init__.py
@@ -0,0 +1,50 @@
+#! /usr/bin/python
+# -*- coding: iso-8859-15 -*-
+
+#-- Paqute LibIris
+
+
+# Description: File downloader library for SkyPIC
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+""" 
+  Paquete LibIris: Descarga de programas en la tarjeta skypic
+
+Este paquete esta formado por tres modulos:
+
+  * IntelHex        : Lectura de ficheros en formato .hex de Intel
+  * Pic16_Bootloader: Descarga de ficheros a traves del bootloader
+  * Pic16_Firmware  : Programas para el PIC16F876A. Incluye los servidores
+                      del proyecto stargate y programas de prubas, como el 
+                      ledp
+                      
+Incluye ademas las siguientes utilidades:
+
+  * hex-view  :  Visualizacion de ficheros .hex
+  * hex2python:  Convertir un fichero .hex a un script en python que contiene
+                 el codigo maquina en una lista
+  * skypic-test: Prueba de descargas en la skypic. Se graba el programama del
+                 ledp. Permite comprobar si la skypic esta funcionando
+                 correctamente
+
+
+"""
+
+#-- Version de la libIris
+VERSION = 1.2
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/make_man 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/make_man
new file mode 100644
index 0000000..eb9cceb
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/make_man
@@ -0,0 +1,16 @@
+#!/usr/bin/make -f
+
+all: man
+  
+DBK2MAN_XSL=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl
+
+
+man:: debian/libiris.3
+
+debian/libiris.3: debian/libiris.xml
+       xsltproc --nonet $(DBK2MAN_XSL) debian/libiris.xml
+       mv libiris.3 debian
+
+view:: debian/libiris.3
+       nroff -man debian/libiris.3 | less
+
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/setup.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/setup.py
new file mode 100644
index 0000000..13fb3c6
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/setup.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+
+from distutils.core import setup
+
+setup(name         = 'libIris',
+      version      = '1.2',
+      description  = 'Libreria para descarga de Firmware en la skypic',
+      author       = 'Rafael Trevino, Juan Gonzalez',
+      author_email = 'skasi 7 gmail com>',
+      url          = 'http://www.iearobotics.com/wiki/index.php?title=LibIris',
+      packages     = ['libIris'],
+      license      = 'GPL v2 or later',
+      data_files   = [('share/man/man3',['debian/libiris.3'])],
+      scripts      = ['libIris-utils/hex-view.py', \
+                      'libIris-utils/hex2python.py', \
+                      'libIris-utils/skypic-test.py'],
+      )
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/PIC16_bootloader_1.2.hex
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/PIC16_bootloader_1.2.hex
new file mode 100644
index 0000000..f55a6b6
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/PIC16_bootloader_1.2.hex
@@ -0,0 +1,53 @@
+:020000040000FA
+:0800000000008A150A16882E83
+:103D00008A150A16802E8A018A150A16832E00004B
+:103D1000031E832E8316873086008312860190301F
+:103D200098008316181598161F30990083120330D7
+:103D3000FA00313090000C14F126EA3A031DB42E3B
+:103D4000FA01BB2EF126F900E33A0319BD2E7908DA
+:103D5000EA3A0319BB2E7908ED3A031DA22EE4308E
+:103D6000EC260330FA00F1269001980183169801A1
+:103D700083128C01832EEB30EA2EF126F600F12619
+:103D8000F500F126F100FB00F126F300F2012130ED
+:103D90008312031376020319D62E75080339FC002B
+:103DA000FD000310FC0D20307C07D72E203084004E
+:103DB000F1268000F207840AFB0BD82E72087306E6
+:103DC000E830031DEA2EE730EC2603270038E43004
+:103DD0000319E530EC26A22E64000C1EEC2E99008F
+:103DE000080064007A080319FF2E0C1CFF2E101027
+:103DF000FA0BFB2E00340C100B308F0010148C1EAD
+:103E0000F12E1A080800213076020319552F831667
+:103E100003178C17831203137508FC3903178D00E1
+:103E20000313760803178F002030840003137D08E6
+:103E300003192D2F831603170C14000000008312A2
+:103E40000E088000840A0C088000840A8D0A03137F
+:103E5000FD03F503F10AF10A162F7108FC00203E5C
+:103E600084000310FC0C760803178F0003137508F9
+:103E700003178D0003137C0803178D0703198F0A9E
+:103E800003170D0803390319552F83160C1400006E
+:103E9000000083120E088000840A0C088000840A47
+:103EA0008D0A0313F10AF10A402F7508F70076080E
+:103EB000F800FB010230F40071087B0203180134A2
+:103EC0007B08203E840021307802031783160319F3
+:103ED000732F8C1783011E3078028030031977020C
+:103EE0000318BB2F752F8C138301770803178D00E0
+:103EF00003137808031D8A2F0430770203188A2FD2
+:103F0000031783168C1F872F831284308D0783013C
+:103F10001E308B2F780803178F0000088E00840A4C
+:103F200000088C0083160C1555308D00AA308D00CA
+:103F30008C14000000008301831603178C1BC32F11
+:103F40008312031364000D1EA22F0D128316031794
+:103F50000C110C14000000008312840300080E06EC
+:103F6000031DB72F840A00080C060319BB2F830119
+:103F7000F40B5C2F0034831203130230FB07F70AA3
+:103F80000319F80A5A2F831203130D12831603170D
+:103F90000C11831203170D080339033C031DBB2FBB
+:103FA00003308D02831203130430FC0007308402B7
+:103FB0000000831603170C1400000000000000002E
+:103FC000000000000008831203170E06031DED2FEA
+:103FD000840A00080C060319F42F83120313FC3023
+:103FE000F7050630FB02B72F831203178D0A840AE8
+:0A3FF00083120313FC0BD82FBB2F24
+:084000000200010000000000B5
+:02400E00323F3F
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/Picp-pic16f876-skypic-2.hex
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/Picp-pic16f876-skypic-2.hex
new file mode 100644
index 0000000..f6efd3c
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/Picp-pic16f876-skypic-2.hex
@@ -0,0 +1,54 @@
+:0800000000008A110A12972981
+:06000A008D216730831612
+:100010008600831286017421872183120313B500A1
+:10002000413A031942283508423A03194028350855
+:10003000433A031946283508443A03193E2835083F
+:10004000493A03193A2835084A3A03194A28350823
+:10005000503A031938283508523A0319442835080C
+:10006000543A03193C283508573A031948280C28F4
+:10007000E2200C28D9200C28CD200C28BA200C28EE
+:10008000B5200C28B0200C28A2200C2899200C2880
+:1000900084200C284D200C2808008721831203138C
+:1000A000B200872183120313B30000303304031915
+:1000B0005C280130B4005D28B40100303404031919
+:1000C0006F28FF30B4000630102183120313B40BE5
+:1000D00063280630102183120313B3035528003020
+:1000E0003204031976280130B3007728B3010030B9
+:1000F0003304031981280630102183120313B2033D
+:100100006F284A3079210800872183120313B00039
+:10011000872183120313B1000230102183120313CD
+:100120003008FF003108FA200830102157307921BB
+:100130000800003010210030FF000030FA2043306A
+:100140007921080004301021E520523079218312F2
+:100150000313200879218312031321087921080051
+:10016000063010214130792108000830102142303A
+:1001700079210800872183120313AE00872183129F
+:100180000313AF0002301021831203132E08FF0067
+:100190002F08FA204430792108001030831203130D
+:1001A00086000230612183120313860154307921C5
+:1001B00008004930792140307921303079211230DE
+:1001C000792108004F307921080083160313861720
+:1001D0000130272108302721A00007302721A10066
+:1001E0000310210CAD003F302D05A1008316031331
+:1001F0008601080083120313AB007F08AC000130B6
+:10020000FF00003044210830FF00831203132C0844
+:1002100044210730FF00831203132B0844210800F8
+:1002200083120313AA00F0308312031386050630ED
+:10023000FF00831203132A08442183120313861735
+:10024000FF3085008501FF3085008501080083129D
+:100250000313A700A801A9012708290203184229AE
+:100260000310A80C831203138615F0308605861B35
+:100270003D2983120313A813402983120313A817DF
+:10028000A90A2C292808080083120313A4007F0858
+:10029000A500A60125082602031860292418542960
+:1002A00083120313861357298312031386178615A7
+:1002B000F0308605031083120313A40CA60A4A2902
+:1002C000080083120313A3000030230403197329C9
+:1002D0003D308312031381000B110B1D6D29831216
+:1002E0000313A303642908008730831603138100D6
+:1002F000080083120313A200831203130C1E7C292F
+:100300008312031322088312031399000800831237
+:1003100003138C1E87291A080800813083160313E3
+:1003200099002430980090308312980008008A11B8
+:040330000A12052880
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledon.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledon.hex
new file mode 100644
index 0000000..ce027b8
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledon.hex
@@ -0,0 +1,5 @@
+:020000040000FA
+:0800000000008A110A120C280D
+:06000A00831603138610AB
+:0E001000831286140A2808008A110A12052895
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp.hex
new file mode 100644
index 0000000..69ccf7f
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp.hex
@@ -0,0 +1,8 @@
+:020000040000FA
+:0800000000008A110A122128F8
+:06000A00FD308316031314
+:100010008600023083128606FF30FF00FF30122078
+:100020000928080083120313A3007F08A2002208F6
+:10003000230403192028FF30A207031CA303172859
+:0800400008008A110A120528CC
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp1.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp1.hex
new file mode 100644
index 0000000..f62659d
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp1.hex
@@ -0,0 +1,7 @@
+:0800000000008A110A122128F8
+:06000A00FD308316031314
+:100010008600023083128606FF30FF00FF30122078
+:100020000928080083120313A3007F08A2002208F6
+:10003000230403192028FF30A207031CA303172859
+:0800400008008A110A120528CC
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp2.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp2.hex
new file mode 100644
index 0000000..ca8f11a
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/ledp2.hex
@@ -0,0 +1,7 @@
+:0800000000008A110A122128F8
+:06000A00FD308316031314
+:1000100086000230831286060030FF0080301220F6
+:100020000928080083120313A3007F08A2002208F6
+:10003000230403192028FF30A207031CA303172859
+:0800400008008A110A120528CC
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/pruebas.txt 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/pruebas.txt
new file mode 100644
index 0000000..5ea4582
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/pruebas.txt
@@ -0,0 +1,173 @@
+----------------------------
+PRUEBAS DEL MODULO IntelHex
+----------------------------
+
+Se han probado los siguientes ficheros .hex:
+El formato de estos ficheros es correcto
+ledon.hex
+ledp.hex 
+ledp1.hex
+ledp2.hex
+Picp-pic16f876-skypic-2.hex 
+sg-generic-pic16f876a-skypic-0-BOOT.hex
+sg-servos8-pic16f876-skypic.hex
+PIC16_bootloader_1.2.hex 
+
+#-- El formato de estos ficheros es INCORRECTO y debe dar error
+wrong1.hex
+wrong2.hex
+wrong3.hex 
+wrong4.hex --> Tiene un error en el checksum
+       
+------------       
+PRUEBA 1    
+------------
+* Pasrseo correcto de los .hex con formato adecuado.
+
+Ejemplo:
+
+$ ./test-readHex.py ledon.hex
+Fichero: "ledon.hex"
+[(0, (0, 0)), (1, (17, 138)), (2, (18, 10)), (3, (40, 12)), (5, (22, 131)), (6, (19, 3)), (7, (16, 134)), 
(8, (18, 131)), (9, (20, 134)), (10, (40, 10)), (11, (0, 8)), (12, (17, 138)), (13, (18, 10)), (14, (40, 5))]
+
+--------------
+PRUEBA 2
+--------------
+
+* Parseo de los .hex con formatos incorrecto:
+
+$ ./test-readHex.py wrong1.hex
+Fichero: "wrong1.hex"
+Error: Error en formato HEX: Comienzo de linea incorrecto
+
+$ ./test-readHex.py wrong2.hex
+Fichero: "wrong2.hex"
+Error: Error en formato HEX: Final erroneo
+
+$ ./test-readHex.py wrong3.hex
+Fichero: "wrong3.hex"
+Error: Error en formato HEX: Palabra incorrecta
+
+$ ./test-readHex.py wrong4.hex
+Fichero: "wrong4.hex"
+Error: Error en formato HEX: Fallo en checksum
+
+------------------
+PRUEBA 3
+------------------
+
+* Pruebas de conversion a los diferentes formatos
+Probado con todos los ficheros .hex correctos
+
+Ejemplo:
+
+$ ./test-formats.py ledp.hex
+Fichero: "ledp.hex"
+
+---------- FORMATO 1 ---------------------------------
+[(0, (0, 0)), (1, (17, 138)), (2, (18, 10)), (3, (40, 33)), (5, (48, 253)), (6, (22, 131)), (7, (19, 3)), 
(8, (0, 134)), (9, (48, 2)), (10, (18, 131)), (11, (6, 134)), (12, (48, 255)), (13, (0, 255)), (14, (48, 
255)), (15, (32, 18)), (16, (40, 9)), (17, (0, 8)), (18, (18, 131)), (19, (19, 3)), (20, (0, 163)), (21, (8, 
127)), (22, (0, 162)), (23, (8, 34)), (24, (4, 35)), (25, (25, 3)), (26, (40, 32)), (27, (48, 255)), (28, (7, 
162)), (29, (28, 3)), (30, (3, 163)), (31, (40, 23)), (32, (0, 8)), (33, (17, 138)), (34, (18, 10)), (35, 
(40, 5))]
+
+---------- FORMATO 2 ---------------------------------
+[[0, 0, 4490, 4618, 10273, 0, 12541, 5763, 4867, 134, 12290, 4739, 1670, 12543, 255, 12543, 8210, 10249, 8, 
4739, 4867, 163, 2175, 162, 2082, 1059, 6403, 10272, 12543, 1954, 7171, 931, 10263, 8, 4490, 4618, 10245]]
+
+---------- FORMATO 3 ---------------------------------
+[[0, 0, 4490, 4618, 10273, 0, 12541, 5763, 4867, 134, 12290, 4739, 1670, 12543, 255, 12543, 8210], [16, 
10249, 8, 4739, 4867, 163, 2175, 162, 2082, 1059, 6403, 10272, 12543, 1954, 7171, 931, 10263], [32, 8, 4490, 
4618, 10245]]
+
+------------------
+PRUEBA 4
+------------------
+* Pruebas del formato de salida
+Probado con todos los ficheros .hex correctos
+
+Ejemplo:
+
+$ ./test-outputs.py ledon.hex
+Fichero: "ledon.hex"
+---------------------- Vista 1 ---------------------------
+Dir: Contenido
+---- ---------
+0000: 0000
+0001: 118A
+0002: 120A
+0003: 280C
+0005: 1683
+0006: 1303
+0007: 1086
+0008: 1283
+0009: 1486
+000A: 280A
+000B: 0008
+000C: 118A
+000D: 120A
+000E: 2805
+
+---------------------- Vista 2 ---------------------------
+Direccion: 0000
+0000 118A 120A 280C 0000 1683 1303 1086 1283 1486 280A 0008 118A 120A 2805
+
+
+---------------------- Vista 3 ---------------------------
+Direccion: 0000
+0000 118A 120A 280C 0000 1683 1303 1086 1283 1486 280A 0008 118A 120A 2805
+
+
+---------------------- Vista 4 ---------------------------
+prog=[[0x0000, 0x0000, 0x118A, 0x120A, 0x280C, 0x0000, 0x1683, 0x1303, 0x1086, 0x1283, 0x1486, 0x280A, 
0x0008, 0x118A, 0x120A, 0x2805],]
+
+
+---------------------------
+- PRUEBA 5
+---------------------------
+* Prueba de los metodos de obtencion de estadisticas
+
+Ejemplos:
+
+$ ./test-stats ledon.hex
+Fichero: "ledon.hex"
+Tamano    : 14 palabras
+Bloques   : 1
+Bloques 16: 1
+
+$ ./test-stats.py ledp.hex
+Fichero: "ledp.hex"
+Tamano    : 35 palabras
+Bloques   : 1
+Bloques 16: 3
+
+$ ./test-stats.py ledp1.hex
+Fichero: "ledp1.hex"
+Tamano    : 35 palabras
+Bloques   : 1
+Bloques 16: 3
+
+$ ./test-stats.py ledp2.hex
+Fichero: "ledp2.hex"
+Tamano    : 35 palabras
+Bloques   : 1
+Bloques 16: 3
+
+
+$ ./test-stats.py Picp-pic16f876-skypic-2.hex
+Fichero: "Picp-pic16f876-skypic-2.hex"
+Tamano    : 409 palabras
+Bloques   : 1
+Bloques 16: 26
+
+
+$ ./test-stats.py sg-generic-pic16f876a-skypic-0-BOOT.hex
+Fichero: "sg-generic-pic16f876a-skypic-0-BOOT.hex"
+Tamano    : 80 palabras
+Bloques   : 1
+Bloques 16: 5
+
+$ ./test-stats.py sg-servos8-pic16f876-skypic.hex
+Fichero: "sg-servos8-pic16f876-skypic.hex"
+Tamano    : 266 palabras
+Bloques   : 1
+Bloques 16: 17
+
+$ ./test-stats.py PIC16_bootloader_1.2.hex
+Fichero: "PIC16_bootloader_1.2.hex"
+Tamano    : 390 palabras
+Bloques   : 3
+Bloques 16: 26
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-echo-pic16F876A-skypic-0-BOOT.hex
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-echo-pic16F876A-skypic-0-BOOT.hex
new file mode 100644
index 0000000..16e5af7
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-echo-pic16F876A-skypic-0-BOOT.hex
@@ -0,0 +1,5 @@
+:10000000830100308A00042883168130990024304F
+:100010009800831290309800831686018312FF3077
+:10002000860015201920860011288C1E15281A0814
+:0A00300008000C1E192899000800B2
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-generic-pic16f876a-skypic-0-BOOT.hex
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-generic-pic16f876a-skypic-0-BOOT.hex
new file mode 100644
index 0000000..e0c8e80
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-generic-pic16f876a-skypic-0-BOOT.hex
@@ -0,0 +1,11 @@
+:10000000830100308A00042883168130990024304F
+:100010009800831290309800831686108312023065
+:1000200086004820A00050302002031924284930BF
+:100030002002031927284C3020020319302853309E
+:1000400020020319382811284F304C20112849303C
+:100050004C2020304C2030304C2010304C201128C7
+:100060003E200008A3004C304C2023084C201128CF
+:100070003E204820800053304C2011284820840026
+:100080004820A10021184628831347288317080019
+:100090008C1E48281A0808000C1E4C2899000800DD
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-servos8-pic16f876-skypic.hex
 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-servos8-pic16f876-skypic.hex
new file mode 100644
index 0000000..78fe513
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/sg-servos8-pic16f876-skypic.hex
@@ -0,0 +1,35 @@
+:1000000000008A110A120729F200030E83018312ED
+:100010000313F1000A08F0008A010B11003083126B
+:1000200003132B04031D202829082A058312031318
+:100030008600EA308100013083120313AB0062288E
+:100040002B08013A031D39282808203EAF00003054
+:100050000318013EB0002F08840083133018831763
+:100060000008831203138100023083120313AB00D4
+:1000700062282B08023A031D6128831203138601AC
+:10008000831203132808203EAF0000300318013EFE
+:10009000B0002F0884008313301883170008523CE7
+:1000A00083120313810083120313AB010310A90D04
+:1000B000A80A00302904031D62280130A900A80104
+:1000C0006228AB018312031370088A008301710E4A
+:1000D0008300F20E720E09008316031386010230AC
+:1000E0008312860083120313B4010830340203180C
+:1000F00089283408203EB50000300318013EB600C0
+:1001000035088400831336188317B0308000B40A92
+:100110007528AA01A801AB010130A900FD20DF204C
+:10012000F72083120313B400453A0319AA283408B0
+:10013000493A0319A6283408503A0319A428340868
+:10014000573A0319A8289028DC209028D32090281B
+:10015000B2209028AD2090280800F72083120313C6
+:10016000AA000800F72083120313AC00F7208312C3
+:100170000313B10099303102031CC0289930B1003B
+:100180002C03B200203EB20000300318013EB30041
+:100190003108FF3CB1003208840083133318831701
+:1001A0003108800008004930E9203030E920303043
+:1001B000E9201130E92008004F30E920080005301F
+:1001C0008316031381000B118B168B178312810189
+:1001D000080083120313AE00831203130C1EEC28D5
+:1001E000831203132E08831203139900080083124D
+:1001F00003138C1EF7281A08080081308316031396
+:1002000099002430980090308312980008008A11D9
+:040210000A126C283A
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-formats.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-formats.py
new file mode 100644
index 0000000..4a02241
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-formats.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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 sys
+sys.path = ['..'] + sys.path
+import libIris.IntelHex
+
+#------------------------------------------------------------------
+#- Pruebas de los diferentes formatos
+#- Se parsea un fichero y se muestran en los FORMATOS 1, 2 y 3
+#------------------------------------------------------------------
+
+#-- Analizar los parametros pasados
+try:
+  file = sys.argv [1]
+except IndexError:
+  #-- Por defecto se toma el fichero ledp.hex
+  file = "ledp.hex"
+
+#-- Imprimir nombre del fichero 
+print 'Fichero: "%s"\n' % file
+
+
+#-----------------------
+#-- Realizar el parseo
+#-----------------------
+
+try:
+  hr = libIris.IntelHex.HexReader (file)
+except libIris.IntelHex.ReaderError,msg:
+  print "Error: %s" % msg
+  sys.exit(-1)  
+
+
+#-----------------------------
+#- Realizar las conversiones
+#-----------------------------
+
+
+#-- Imprimir las listas
+print "---------- FORMATO 1 ---------------------------------"
+print hr.memory()
+print ""
+
+print "---------- FORMATO 2 ---------------------------------"
+print hr.dataBlocks()
+print ""
+
+print "---------- FORMATO 3 ---------------------------------"
+print hr.dataBlocks16()
+print ""
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-outputs.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-outputs.py
new file mode 100644
index 0000000..126961a
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-outputs.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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 sys
+sys.path = ['..'] + sys.path
+import libIris.IntelHex
+
+#------------------------------------------------------------------
+#- Pruebas para comprobar las funciones que exportan el .hex a 
+#- otros formatos
+#------------------------------------------------------------------
+
+
+#-- Analizar los parametros pasados
+try:
+  file = sys.argv [1]
+except IndexError:
+  #-- Por defecto se toma el fichero ledp.hex
+  file = "ledp.hex"
+
+#-- Imprimir nombre del fichero 
+print 'Fichero: "%s"' % file
+
+
+#--- Abrir fichero. No se manejan los errores
+fd = open (file)
+
+#-----------------------
+#-- Realizar el parseo
+#-----------------------
+
+#-- Crear elemento de la clase hexreader
+try:
+  hr = libIris.IntelHex.HexReader (fd)
+except libIris.IntelHex.ReaderError,msg:
+  print "Error: %s" % msg
+  sys.exit(-1)  
+
+  
+  
+#-----------------------------------------------
+#- MOSTRAR CON DIFERENTES FORMATOS DE SALIDA 
+#-----------------------------------------------
+
+#-- Vista 1: Como una tabla direccion - contenido
+print "---------------------- Vista 1 ---------------------------"
+vista1 = hr.outputTable()
+print vista1
+
+#-- Vista 2: Direccion - bloque
+print "---------------------- Vista 2 ---------------------------"
+vista2 = hr.outputBlocks()
+print vista2
+
+#-- Vista 3: Direccion - bloque, con bloques de tamano 16 palabras
+print "---------------------- Vista 3 ---------------------------"
+vista3 = hr.outputBlocks16()
+print vista3
+
+#-- Vista 4: Programa en python
+print "---------------------- Vista 4 ---------------------------"
+vista4 = hr.outputPython()
+print vista4
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-readHex.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-readHex.py
new file mode 100644
index 0000000..a6786cd
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-readHex.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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 sys
+sys.path = ['..'] + sys.path
+import libIris.IntelHex
+
+#------------------------------------------------------------
+#- Ejemplo "hola mundo" de parseo.
+#------------------------------------------------------------
+
+#-- Analizar los parametros pasados
+try:
+  file = sys.argv [1]
+except IndexError:
+  #-- Por defecto se toma el fichero ledp.hex
+  file = "ledp.hex"
+
+#-- Imprimir nombre del fichero 
+print 'Fichero: "%s"' % file
+
+#-----------------------
+#-- Realizar el parseo
+#-----------------------
+
+try:
+  hr = libIris.IntelHex.HexReader (file)
+except libIris.IntelHex.ReaderError,msg:
+  print "Error: %s" % msg
+  sys.exit(-1)  
+
+
+#-- Imprimir la lista en formato 1 (memoria)
+print hr.memory()
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-stats.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-stats.py
new file mode 100644
index 0000000..aac0b47
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/test-stats.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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 sys
+sys.path = ['..'] + sys.path
+import libIris.IntelHex
+
+#------------------------------------------------------------------
+#- Pruebas de obtencion de estadisticas
+#------------------------------------------------------------------
+
+#-- Analizar los parametros pasados
+try:
+  file = sys.argv [1]
+except IndexError:
+  #-- Por defecto se toma el fichero ledp.hex
+  file = "ledp.hex"
+
+#-- Imprimir nombre del fichero 
+print 'Fichero: "%s"' % file
+
+#--------------------------
+#-- Abrir fichero .hex
+#-------------------------
+try:
+  fd = open(file)
+except IOError,msg:
+  sys.stderr.write("Error al abrir fichero: %s\n" % msg)
+  sys.exit(-1)
+
+#-----------------------
+#-- Realizar el parseo
+#-----------------------
+
+#-- La apertura se hace a traves del descriptor del fichero
+try:
+  hr = libIris.IntelHex.HexReader (fd)
+except libIris.IntelHex.ReaderError,msg:
+  print "Error: %s" % msg
+  sys.exit(-1)  
+
+#-------------------------------
+#-- Imprimir las estadisticas
+#-------------------------------
+print "Tamano    : %d palabras" % hr.size()
+print "Bloques   : %d" % hr.blocks()
+print "Bloques 16: %d" % hr.blocks16()
+print ""
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong1.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong1.hex
new file mode 100644
index 0000000..65d4dee
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong1.hex
@@ -0,0 +1,6 @@
+#-- hola
+:020000040000FA
+:0800000000008A110A120C280D
+:06000A00831603138610AB
+:0E001000831286140A2808008A110A12052895
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong2.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong2.hex
new file mode 100644
index 0000000..9068e6c
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong2.hex
@@ -0,0 +1,4 @@
+:020000040000FA
+:0800000000008A110A120C280D
+:06000A00831603138610AB
+:0E001000831286140A2808008A110A12052895
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong3.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong3.hex
new file mode 100644
index 0000000..6a10d93
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong3.hex
@@ -0,0 +1,5 @@
+:020000040000FA
+:0800000000008AFF0A120C280D
+:06000A00831603138610AB
+:0E001000831286140A2808008A110A12052895
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong4.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong4.hex
new file mode 100644
index 0000000..c04e71a
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-IntelHex/wrong4.hex
@@ -0,0 +1,5 @@
+:020000040000FA
+:0800000000008A110A121C280D
+:06000A00831603138610AB
+:0E001000831286140A2808008A110A12052895
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/ledp1.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/ledp1.hex
new file mode 100644
index 0000000..f62659d
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/ledp1.hex
@@ -0,0 +1,7 @@
+:0800000000008A110A122128F8
+:06000A00FD308316031314
+:100010008600023083128606FF30FF00FF30122078
+:100020000928080083120313A3007F08A2002208F6
+:10003000230403192028FF30A207031CA303172859
+:0800400008008A110A120528CC
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/ledp2.hex 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/ledp2.hex
new file mode 100644
index 0000000..ca8f11a
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/ledp2.hex
@@ -0,0 +1,7 @@
+:0800000000008A110A122128F8
+:06000A00FD308316031314
+:1000100086000230831286060030FF0080301220F6
+:100020000928080083120313A3007F08A2002208F6
+:10003000230403192028FF30A207031CA303172859
+:0800400008008A110A120528CC
+:00000001FF
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/test-download.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/test-download.py
new file mode 100644
index 0000000..45d62aa
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/test-download.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+#---------------------------------------------------------------
+#--  Pruebas de la libreria Pic16_Bootloader para descargar un 
+#--  fichero .hex en la skypic      
+#----------------------------------------------------------------
+
+import sys
+sys.path = ['..'] + sys.path
+import libIris.Pic16_Bootloader
+import libIris.IntelHex
+
+
+#-- Puerto serie a emplear
+DISPOSITIVO_SERIE = "/dev/ttyUSB0"
+
+#-- Fichero a descargar
+FICHERO = "ledp1.hex"
+
+
+#-- Abrir puerto serie
+try:
+  iris = libIris.Pic16_Bootloader.Iris(DISPOSITIVO_SERIE)
+except libIris.Pic16_Bootloader.IrisError,msg:
+  print msg
+  sys.exit(-1)
+
+#-- Abrir y analizar fichero .hex
+try:
+  hr = libIris.IntelHex.HexReader (FICHERO)
+except libIris.IntelHex.ReaderError,msg:
+  print "Error: %s" % msg
+  sys.exit(-1)  
+
+#-- Obtener el programa en el formato adecuado
+program = hr.dataBlocks16()
+
+#-- Realizar la descarga
+try:
+  iris.download(program)
+except libIris.Pic16_Bootloader.IrisError,msg:
+  print "\nError: %s" % msg
+  sys.exit(-1)
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/test-firmware.py 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/test-firmware.py
new file mode 100644
index 0000000..54ca368
--- /dev/null
+++ 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/Libiris/libiris-1.2/test-libIris/test-firmware.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# -*- coding: iso-8859-15 -*-
+
+# Description: Example of use of libIris
+# Copyright (C) 2007 by Rafael Treviño Menéndez
+# Author: Rafael Treviño Menéndez <skasi 7 gmail com>
+#         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.
+
+#---------------------------------------------------------------
+#--  Pruebas de la libreria Pic16_Firmware para descargar un 
+#--  programa en la skypic   
+#----------------------------------------------------------------
+
+import sys
+sys.path = ['..'] + sys.path
+import libIris.Pic16_Bootloader
+import libIris.IntelHex
+import libIris.Pic16_Firmware
+
+#-- Puerto serie a emplear
+DISPOSITIVO_SERIE = "/dev/ttyUSB0"
+
+#-- Abrir puerto serie
+try:
+  iris = libIris.Pic16_Bootloader.Iris(DISPOSITIVO_SERIE)
+except libIris.Pic16_Bootloader.IrisError,msg:
+  print msg
+  sys.exit(-1)
+
+#-- Obtener firmware a descargar. Se puede utilizar cualquier de 
+#-- los que se encuentren en la libreria Pic16_Firmware
+program = libIris.Pic16_Firmware.ledp2
+
+#-- Realizar la descarga
+try:
+  iris.download(program)
+except libIris.Pic16_Bootloader.IrisError,msg:
+  print "\nError: %s" % msg
+  sys.exit(-1)
diff --git a/chronopic-firmware/chronopic-firmwarecord/linux-compile/README.txt 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/README.txt
new file mode 100644
index 0000000..b767dad
--- /dev/null
+++ b/chronopic-firmware/chronopic-firmwarecord/linux-compile/README.txt
@@ -0,0 +1,24 @@
+Guide for Debian (Ubuntu...) systems with python2.7
+---------------------------------------------------
+
+1.- Install python-wx:
+
+sudo apt-get install python-wxgtk2.8
+
+2.- Install libstargate
+
+sudo dpkg -i python-libstargate_1.2-1_i386-ubuntu-10.04.deb
+
+3.- Compile libiris for python2.7
+
+cd LibIris/libiris-1.2
+sudo python setup.py install
+
+
+---- more stuff
+
+- If needed, there's a there's a python-libstargate package, maybe works
+
+- libiris is also here:
+http://www.iearobotics.com/wiki/index.php?title=LibIris
+http://www.iearobotics.com/wiki/images/2/21/Libiris-1.2.zip
diff --git 
a/chronopic-firmware/chronopic-firmwarecord/linux-compile/python-libstargate_1.2-1_i386-ubuntu-10.04.deb 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/python-libstargate_1.2-1_i386-ubuntu-10.04.deb
new file mode 100644
index 0000000..205ec90
Binary files /dev/null and 
b/chronopic-firmware/chronopic-firmwarecord/linux-compile/python-libstargate_1.2-1_i386-ubuntu-10.04.deb 
differ


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