[chronojump] Added libiris to comp cpic-firmwarecord on linux
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] Added libiris to comp cpic-firmwarecord on linux
- Date: Thu, 16 Jan 2014 16:33:10 +0000 (UTC)
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]