<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jorge</id>
		<title>Proyecto Butiá - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jorge"/>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php/Especial:Contribuciones/Jorge"/>
		<updated>2026-04-05T20:14:26Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo_toribio_2013&amp;diff=4479</id>
		<title>Butialo toribio 2013</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo_toribio_2013&amp;diff=4479"/>
				<updated>2013-06-19T05:45:39Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/Butialo] es un entorno de programación para Lua basado en Sugar. Lua es un lenguaje imperativo de alto nivel, muy eficiente y fácil de usar. Butialo permite manipular al robot Butiá ofreciendo un método fácil para acceder al servicio bobot. Ofrece ayuda al programador mostrando las funcionalidades disponibles en el robot, así como snippets de código listos para usar. &lt;br /&gt;
&lt;br /&gt;
Toribio [https://github.com/xopxe/Toribio] es una biblioteca genérica para robótica en sistemas embebidos. Puede funcionar como reemplazo de bobot, pero también provee nuevas funcionalidades: comunicaciones asincrónicas, multitarea cooperativa, programación basada en eventos, etc. Además ofrece herramientas integradas tales como soporte para red, servidor web, consola interactiva, etc.&lt;br /&gt;
&lt;br /&gt;
Se propone reemplazar bobot como infraestructura para Butialo, intentando sacar el máximo provecho de las nuevas funcionalidades.&lt;br /&gt;
&lt;br /&gt;
'''Tutor''': Jorge Visca.&lt;br /&gt;
&lt;br /&gt;
'''Capacidades a desarrollar''': Software.&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo_toribio_2013&amp;diff=4478</id>
		<title>Butialo toribio 2013</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo_toribio_2013&amp;diff=4478"/>
				<updated>2013-06-19T05:44:57Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/Butialo] es un entorno de programación para Lua basado en Sugar. Lua es un lenguaje imperativo de alto nivel, muy eficiente y fácil de usar. Butialo permite manipular al robot Butiá ofreciendo un método fácil para acceder al servicio bobot. Ofrece ayuda al programador mostrando las funcionalidades disponibles en el robot, así como snippets de código listos para usar. &lt;br /&gt;
&lt;br /&gt;
Toribio [https://github.com/xopxe/Toribio] es una biblioteca genérica para robótica en sistemas embebidos. Puede funcionar como reemplazo de bobot, pero también provee nuevas funcionalidades: comunicaciones asincrónicas, multitarea cooperativa, programación basada en eentos, etc. Además ofrece herramientas integradas tales como soporte para red, servidor web, consola interactiva, etc.&lt;br /&gt;
&lt;br /&gt;
Se propone reemplazar bobot como infraestructura para Butialo, intentando sacar el máximo provecho de las nuevas funcionalidades.&lt;br /&gt;
&lt;br /&gt;
'''Tutor''': Jorge Visca.&lt;br /&gt;
&lt;br /&gt;
'''Capacidades a desarrollar''': Software.&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo_toribio_2013&amp;diff=4477</id>
		<title>Butialo toribio 2013</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo_toribio_2013&amp;diff=4477"/>
				<updated>2013-06-19T05:42:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: Página creada con 'Butialo es un entorno de programación para Lua basado en Sugar. Lua es un lenguaje imperativo de alto nivel, muy eficiente y fácil de usar. Butialo permite manipular al robot ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo es un entorno de programación para Lua basado en Sugar. Lua es un lenguaje imperativo de alto nivel, muy eficiente y fácil de usar. Butialo permite manipular al robot Butiá ofreciendo un método fácil para acceder al servicio bobot. Ofrece ayuda al programador mostrando las funcionalidades disponibles en el robot, así como snippets de código listos para usar. &lt;br /&gt;
&lt;br /&gt;
Toribio es una biblioteca genérica para robótica en sistemas embebidos. Puede funcionar como reemplazo de bobot, pero también provee nuevas funcionalidades: comunicaciones asincrónicas, multitarea cooperativa, programación basada en eentos, etc. Además ofrece herramientas integradas tales como soporte para red, servidor web, consola interactiva, etc.&lt;br /&gt;
&lt;br /&gt;
Se propone reemplazar bobot como infraestructura para Butialo, intentando sacar el máximo provecho de las nuevas funcionalidades.&lt;br /&gt;
&lt;br /&gt;
'''Tutor''': Jorge Visca.&lt;br /&gt;
&lt;br /&gt;
'''Capacidades a desarrollar''': Software.&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Proyectos_electiva_butia_2013&amp;diff=4476</id>
		<title>Proyectos electiva butia 2013</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Proyectos_electiva_butia_2013&amp;diff=4476"/>
				<updated>2013-06-19T05:32:47Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[urbi_butia_2013|Butiá Urbi]]&lt;br /&gt;
* [[openRAVE_butia_2013|Butiá OpenRAVE]]&lt;br /&gt;
* [[ros_butia_2013|Integración de ROS a la plataforma Butiá]]&lt;br /&gt;
* [[V-REP_butia_2013|Butiá V-REP]]&lt;br /&gt;
* [[butialo_toribio_2013|Migrar Butialo a plataforma Toribio]]&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=3393</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=3393"/>
				<updated>2012-10-31T17:37:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Toribio[https://github.com/xopxe/Toribio] es un entorno de desarrollo de aplicaciones de robótica para plataformas embebidas. Toribio está construido alrededor de Lumen[https://github.com/xopxe/Lumen], un despachador para programación concurrente cooperativa para Lua.&lt;br /&gt;
&lt;br /&gt;
Es completamente portable, dependiendo únicamente (y opcionalmente) de una instancia de la librería nixio o luasocket para proveer soporte de red y acceso asincrónico a archivos. Se ejecuta sobre Lua 5.1, 5.2 o LuaJIT, sin modificaciones.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lumen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programar en Toribio (y por lo tanto Lumen) consiste en escribir tareas que emiten y reciben señales. Una señal es el mecanismo básico de intercambio de información y sincronización entre tareas. Una señal consiste en un evento y parámetros de tipos arbitrarios. Para esperar una señal se especifica el/los eventos de interes, y opcionalmente una o varias tareas emisoras. Las esperas pueden tener un timeout asociado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de dos tareas, donde una emite una señal periódicamente, y otra lo consume:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
    local sched=require 'sched'&lt;br /&gt;
&lt;br /&gt;
    -- task emits signals&lt;br /&gt;
    local emitter_task = sched.run(function()&lt;br /&gt;
        for i = 1, 10 do&lt;br /&gt;
            sched.signal('an_event', i)&lt;br /&gt;
            sched.sleep(1)&lt;br /&gt;
        end&lt;br /&gt;
    end)&lt;br /&gt;
&lt;br /&gt;
    -- task receives signals&lt;br /&gt;
    sched.run(function()&lt;br /&gt;
        local waitd = {emitter=emitter_task, events={'an_event'}}&lt;br /&gt;
        while true do&lt;br /&gt;
            local _, _, data = sched.wait(waitd)&lt;br /&gt;
            print (data)&lt;br /&gt;
        end&lt;br /&gt;
    end)&lt;br /&gt;
&lt;br /&gt;
    sched.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Además Lumen provee varias utilidades, tales como una tarea que implementa una consola remota, un servidor de sockets y acceso asincrónico a archivos, mecanismos de concurrencia tales como pipes y demarcación de zonas críticas, etc.&lt;br /&gt;
&lt;br /&gt;
La referencia de la API de Lumen está disponible en  linea [http://xopxe.github.com/Lumen/].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toribio provee un entorno que simplifica el desarrollo y despliegue de aplicaciones robóticas. Entre los servicios que provee están:&lt;br /&gt;
&lt;br /&gt;
* Un sistema centralizado de configuración [https://github.com/xopxe/Toribio/blob/master/docs/2-Configuration.md].&lt;br /&gt;
&lt;br /&gt;
* Objetos que abstraen el hardware disponible (&amp;quot;devices&amp;quot;) [https://github.com/xopxe/Toribio/blob/master/docs/4-Devices.md]&lt;br /&gt;
&lt;br /&gt;
* Repositorio central de tareas, devices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hay un tutorial disponible[https://github.com/xopxe/Toribio/blob/master/docs/1-Tutorial.md].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Estructura ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=3392</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=3392"/>
				<updated>2012-10-31T17:25:04Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Toribio[https://github.com/xopxe/Toribio] es un entorno de desarrollo de aplicaciones de robótica para plataformas embebidas. Toribio está construido alrededor de Lumen[https://github.com/xopxe/Lumen], un despachador para programación concurrente cooperativa para Lua.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lumen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Programar en Toribio (y por lo tanto Lumen) consiste en escribir tareas que emiten y reciben señales. Una señal es el mecanismo básico de intercambio de información y sincronización entre tareas. Una señal consiste en un evento y parámetros de tipos arbitrarios. Para esperar una señal se especifica el/los eventos de interes, y opcionalmente una o varias tareas emisoras. Las esperas pueden tener un timeout asociado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de dos tareas, donde una emite una señal periódicamente, y otra lo consume:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
    local sched=require 'sched'&lt;br /&gt;
&lt;br /&gt;
    -- task emits signals&lt;br /&gt;
    local emitter_task = sched.run(function()&lt;br /&gt;
        for i = 1, 10 do&lt;br /&gt;
            sched.signal('an_event', i)&lt;br /&gt;
            sched.sleep(1)&lt;br /&gt;
        end&lt;br /&gt;
    end)&lt;br /&gt;
&lt;br /&gt;
    -- task receives signals&lt;br /&gt;
    sched.run(function()&lt;br /&gt;
        local waitd = {emitter=emitter_task, events={'an_event'}}&lt;br /&gt;
        while true do&lt;br /&gt;
            local _, _, data = sched.wait(waitd)&lt;br /&gt;
            print (data)&lt;br /&gt;
        end&lt;br /&gt;
    end)&lt;br /&gt;
&lt;br /&gt;
    sched.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Wiki_Buti%C3%A1&amp;diff=3391</id>
		<title>Wiki Butiá</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Wiki_Buti%C3%A1&amp;diff=3391"/>
				<updated>2012-10-31T17:02:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Tutoriales */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Proyecto Butiá ==&lt;br /&gt;
Este proyecto plantea como objetivo crear una plataforma simple, la cual ponga al alcance de estudiantes escolares o liceales las herramientas necesarias para permitirles interiorizarse con la programación de  comportamientos para robots.&lt;br /&gt;
El proyecto Butiá trata de ampliar las capacidades sensoriales y de actuación de la computadora XO del proyecto OLPC, transformandola en una plataforma robótica móvil.&lt;br /&gt;
Actualmente la implementación 1.0 del proyecto está siendo utilizado en formato de kit, distribuido a 28 liceos públicos del Uruguay, con un set de sensores y piezas que permiten cambiar la ubicación de los sensores en la plataforma móvil donde se coloca la computadora XO.&amp;lt;br&amp;gt;&lt;br /&gt;
A su vez el proyecto Butiá fue desarrollado teniendo en mente el hecho que agregar nuevos sensores o actuadores a la plataforma sea muy sencillo, esto abre la posibilidad a que usuarios interesados con el hardware puedan implementar fácilmente sus propios sensores y actuadores. Incluso el [http://es.wikipedia.org/wiki/Dise%C3%B1o_industrial diseño industrial] del robot es abierto lo cual permite realizarlo con materiales reciclados o de bajo costo.&lt;br /&gt;
&lt;br /&gt;
== Desafío Butiá para el evento de SUMO Robótico 2012 ==&lt;br /&gt;
Son numerosas las instituciones educativas que a nivel mundial desarrollan exposiciones robóticas.&amp;lt;br&amp;gt; En nuestro país, la Facultad de Ingeniería de la Universidad de la República es pionera.&lt;br /&gt;
Desde 2004, año a año el evento sumo.uy ha cumplido con éxito su misión: hacer que la sociedad sea partícipe, y no mero testigo, de los avances en robótica e inteligencia artificial.&amp;lt;br&amp;gt;&lt;br /&gt;
'''sumo.uy''' ofrece un entorno abierto a todo público, donde universitarios y no universitarios, liceales, adultos y niños, uruguayos y extranjeros pueden interactuar, presentar sus trabajos y plantear sus inquietudes relacionadas con la temática del evento.&amp;lt;br&amp;gt;&lt;br /&gt;
En el marco de la edición 2012 de este evento se pudo participar con el robot butiá en dos desafíos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.fing.edu.uy/inco/proyectos/butia/files/DesafioButiaBasico_2012.pdf Desafío básico butiá]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.fing.edu.uy/inco/proyectos/butia/files/DesafioButiaAvanzado2012.pdf Desafío avanzado butiá]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Desafío Butiá para el evento de SUMO Robótico 2011 ==&lt;br /&gt;
En el marco de la edición 2011 de este evento se pudo participar con el robot butiá en dos desafíos:&lt;br /&gt;
&lt;br /&gt;
[http://www.fing.edu.uy/inco/proyectos/butia/files/desafio_basico_sumo_2011.pdf Desafío básico butiá]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.fing.edu.uy/inco/eventos/sumo.uy/Documentos/reglamentoButiaAvanzado.pdf Desafío avanzado butiá]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ocho liceos participaron en los desafíos butiá, en el siguiente link podrás encotrar un resumen sobre la experiencia: [[resumen sumo 2011 desafío Butiá| español]] [[review|ingles]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Publicaciones científicas ==&lt;br /&gt;
*Artículo presentado en el evento &amp;quot;apropiación y desarrollo: modelos 1 a 1&amp;quot; 2012 organizado por Flor de Ceibo: [http://www.fing.edu.uy/inco/proyectos/butia/files/butia_edu1a1_v1.4_ponencia_completa.pdf Butiá, transformando tu XO en un robot móvil programable]&lt;br /&gt;
&lt;br /&gt;
*Artículo presentado en el evento &amp;quot;apropiación y desarrollo: modelos 1 a 1&amp;quot; 2012 organizado por Flor de Ceibo: [http://www.fing.edu.uy/inco/proyectos/butia/files/De_tortugarte_a_butia_en_la_escuela_primaria.pdf De la tortuga al robot Butiá, experiencias en el uso de Tortugarte en la escuela primaria]&lt;br /&gt;
&lt;br /&gt;
*Artículo presentado en el Encuentro Desarrolladores Uruguay, eduJAM 2012: [http://wiki.sugarlabs.org/images/1/13/Turtle_sensors.pdf How open hardware and software can empower students and communities]&lt;br /&gt;
&lt;br /&gt;
*Artículo presentado en el Simposio Argentino de Sistemas Embebidos, Sase2011, Buenos Aires, Argentina: &lt;br /&gt;
[http://www.sase.com.ar/2011/case/articulos-case/butia-plataforma-robotica-generica-para-la-ensenanza-de-la-informatica/ Butiá: Plataforma robótica genérica para la enseñanza de la informática]&lt;br /&gt;
&lt;br /&gt;
*Poster presentado en el Congreso Argentino de SistemasEmbebidos, Case2012, Buenos Aires, Argentina:&lt;br /&gt;
[http://www.sase.com.ar/2012/files/2011/11/case2012_memorias_pp235-end.pdf FollowMe: seguimiento de objetos mediante el uso de webcam y plataforma Butiá] pag. 281&lt;br /&gt;
&lt;br /&gt;
*Poster presentado en el Congreso Argentino de SistemasEmbebidos, Case2012, Buenos Aires, Argentina:&lt;br /&gt;
[http://www.sase.com.ar/2012/files/2011/11/case2012_memorias_pp235-end.pdf USB4BUTIA: Interfaz Robótica Educativa de simple fabricación y bajo costo] pag. 282&lt;br /&gt;
&lt;br /&gt;
== Lenguajes de programación ==&lt;br /&gt;
El Robot butiá puede controlarse fácilmente desde cualquier [http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n lenguaje de programación] con soporte de conexiones [http://es.wikipedia.org/wiki/TCP/IP TCP/IP]. De todas maneras damos soporte para algunas plataformas concretas mediante [http://es.wikipedia.org/wiki/Plugin plugins], [http://es.wikipedia.org/wiki/Interfaz_de_programaci%C3%B3n_de_aplicaciones API's] o [http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado IDEs]. Algunos ejemplos son:&amp;lt;br&amp;gt;&lt;br /&gt;
[[TortugArteButiá]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Butialo]] (Lua)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Python]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Curso módulo taller Butiá ==&lt;br /&gt;
&lt;br /&gt;
* [[proyectos_abiertos|Proyectos abiertos para realizar en el marco del &amp;quot;Proyecto Butiá&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* [[proyectos_electiva_butia_2012|Proyectos electiva Butiá 2012]]&lt;br /&gt;
&lt;br /&gt;
* [[proyectos_mtbutia_2011|Proyectos módulo taller butiá 2011]]&lt;br /&gt;
&lt;br /&gt;
* [[proyectos_mtbutia_2010|Proyectos módulo taller butiá 2010]]&lt;br /&gt;
&lt;br /&gt;
* [[espacio_para_grupos_2011|Espacio de documentación de los grupos 2011]]&lt;br /&gt;
&lt;br /&gt;
* [[espacio_para_grupos_2012|Espacio de documentación de los grupos 2012]]&lt;br /&gt;
&lt;br /&gt;
== Extensión Universitaria ==&lt;br /&gt;
&lt;br /&gt;
* [[talleres_y_charlas|Talleres y charlas]]&lt;br /&gt;
&lt;br /&gt;
* [[mega_construccion_2010|Construyendo los robots]]&lt;br /&gt;
&lt;br /&gt;
* [[entrega_de_Butiá_V1.0|Entrega de 28 robots Butiá en el evento Sumo.uy 2010]]&lt;br /&gt;
&lt;br /&gt;
* [[espacio_liceos|Experiencias realizadas por los Liceos que participan del proyecto]]&lt;br /&gt;
== Material de Presentaciones Butiá ==&lt;br /&gt;
&lt;br /&gt;
[[Archivo:poster_olpc-sf.jpg|thumb|Poster presentado en OLPC - San Francisco / 2011]]&lt;br /&gt;
[[Archivo:OLPC - SF 2012.png|thumb|Poster presentado en OLPC - San Francisco / 2012]]&lt;br /&gt;
&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/files/proyecto_butia_capacitacion_5_2012.pdf Butiá: Sistema robótico constructivo de bajo costo para uso educativo, Encuentro Nacional de Voluntarios 2012, Squeakfest 2012]&lt;br /&gt;
&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/files/Turtle%20sensors.pdf How open hardware and software can empower students and communities, eduJAM2012]&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/files/de_la_tortuga_al_robot_butia.pdf De la tortuga al robot Butiá, Experiencias en el uso de Tortugarte en la escuela primaria, en el evento apropiación y desarrollo: modelos 1 a 1, organizado por Flor de Ceibo]&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/files/butia-1a1.pdf Butiá: Plataforma robótica genérica para la enseñanza inicial y media, en el evento apropiación y desarrollo: modelos 1 a 1, organizado por Flor de Ceibo]&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/files/butia-seminarioFIERGS_handout.pdf Charla del robot Butiá en el Seminario FIERGS, Porto Alegre, Brasil]&lt;br /&gt;
&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/public/pres_seMINArios_2011_handouts.pdf Charla del robot Butiá el los seMINArios del Instituto de Computación, UdelaR, Montevideo, Uruguay, 2011]&lt;br /&gt;
&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/public/presCASE2011HandsOut.pdf Charla del robot Butiá en el congreso argentino de sistemas embebidos, Buenos Aires, 2011]&lt;br /&gt;
&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/public/butia-jornadasANTel-FIng2011.pdf Charla del robot Butiá en las jornadas de telecomunicaciones realizadas, Rocha, Uruguay, 2011]&lt;br /&gt;
&lt;br /&gt;
* [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/public/presCPBRASIL.pdf Charla del robot Butiá en el campus party, San Pablo, Brasil, 2011]&lt;br /&gt;
&lt;br /&gt;
== Construcción ==&lt;br /&gt;
&lt;br /&gt;
* [[construcción_Butiá_V1.0|Construyendo un Robot Butiáv1.0 paso a paso]]&lt;br /&gt;
* [[construcción_Butiá_V1.8|Construyendo un Robot Butiáv1.8 paso a paso]]&lt;br /&gt;
* [[flashearIdAX12|Como flashear los motores AX12]]&lt;br /&gt;
&lt;br /&gt;
== Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
La plataforma Butiá fue liberada como software libre a la comunidad y puedes contribuir con el proyecto como desarrollador uniendote en [https://sourceforge.net/projects/butia/ proyecto butiá en sourceforge]&lt;br /&gt;
El código fuente esta versionado bajo control de [http://git-scm.com/ Git], para saber más vea [[Git Butia]].&amp;lt;br&amp;gt;&lt;br /&gt;
Actualmente estamos trabajando en una nueva placa ([[usb4butia|USB4butia]]) para el [[Butia2|Butiá 2.0]] que busca bajar costos, ser más robusto al permitir conectar dispositivos y hacer más simple la construcción de la placa de E/S al utilizar la plataforma [[usb4all|USB4all]].&lt;br /&gt;
Este proyecto se realiza con el apoyo de ANTel.&lt;br /&gt;
&lt;br /&gt;
== Tutoriales ==&lt;br /&gt;
&lt;br /&gt;
En esta sección encontrarás información de como programar el comportamiento del robot Butiá.&lt;br /&gt;
&lt;br /&gt;
* [[Ejemplo_recibir_ordenes_con_aplausos| Cómo controlar el robot Butiá mediante aplausos]]&lt;br /&gt;
* [[tortugarte_variables|Como almacenar los valores leídos de los sensores utilizando TortugArte con Butiá]]&lt;br /&gt;
* [[Evitar_obstaculos|Como evitar obstaculos utilizando TortugArte con Butiá]]&lt;br /&gt;
* [[Evitar_caida|Como evitar caer de una mesa]]&lt;br /&gt;
* [[Ejemplo_seguidor_de_líneas_sencillo|Como hacer un seguidor de líneas sencillo]]&lt;br /&gt;
* [[Ejemplo_seguidor_de_líneas|Como hacer un seguidor de líneas avanzado]]&lt;br /&gt;
* [[Ejemplo_sumo|Como hacer un luchador de Sumo]]&lt;br /&gt;
* [[Transformando_a_cms_el_valor_del_sensor_de_distancia|Transformando a centímetros la salida del sensor de distancia]]&lt;br /&gt;
* [[Butiá_que_habla|Butiá que habla]]&lt;br /&gt;
* [[Modularizando|Como modularizar un programa en Tortugarte]]&lt;br /&gt;
* [[video_tutoriales|Video Tutoriales]]&lt;br /&gt;
* [[Preguntas_frecuentes|Preguntas Frecuentes]]&lt;br /&gt;
* [[FollowMe|Utilizar plugin FollowMe]]&lt;br /&gt;
* [[USB4butià| Cómo construir una placa USB4Butià]]&lt;br /&gt;
* [[Ejemplos_de_Aplicaciones_en_Butialo|Ejemplos de Lua en Butialo]]&lt;br /&gt;
&lt;br /&gt;
== El robot Butiá en los medios ==&lt;br /&gt;
[[notas_en_tv|Notas en televisión]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[radio|Notas en radio]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[notas_en_blogs|Notas en Blogs]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[congresos_y_seminarios|Congresos y Seminarios]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[notas_revistas|Notas en revistas]]&lt;br /&gt;
&lt;br /&gt;
== Multimedia ==&lt;br /&gt;
&lt;br /&gt;
[[nuestros_videos|Videos]]&lt;br /&gt;
&lt;br /&gt;
[[pistas butiá|Pistas]]&lt;br /&gt;
&lt;br /&gt;
== Comunicación ==&lt;br /&gt;
* [http://www.facebook.com/group.php?gid=147042805312846 Seguinos en Facebook uniendote al grupo]&amp;lt;br&amp;gt;&lt;br /&gt;
* [https://plus.google.com/u/0/108413393520841902443/posts Seguinos en google+]&amp;lt;br&amp;gt;&lt;br /&gt;
* [https://www.fing.edu.uy/mailman/listinfo/butia-list Lista de correo butia-list]&amp;lt;br&amp;gt;&lt;br /&gt;
* [https://www.fing.edu.uy/mailman/listinfo/butia-devel-l Lista de correo butiá-devel-l para tratar temas relacionados con el desarrollo de la plataforma]&amp;lt;br&amp;gt;&lt;br /&gt;
* [[instructivo_newsgroup|Instructivo para el uso del Newsgroup de fing]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Preguntas Frecuentes (f.a.q) sobre el Butiá ==&lt;br /&gt;
Puede encontrarse una lista de preguntas frecuentes y su respuesta en [[preguntas_frecuentes]]&lt;br /&gt;
&lt;br /&gt;
== ButiArte ==&lt;br /&gt;
A puro arte &amp;lt;br&amp;gt;&lt;br /&gt;
[[remeras|Remeras]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Cuadernolas Butiá y Sumo]]&lt;br /&gt;
&lt;br /&gt;
== Actividades para realizar con el robot relacionadas con otras ciencias ==&lt;br /&gt;
&lt;br /&gt;
[[Biología y Butiá]]&lt;br /&gt;
&lt;br /&gt;
== Empezando a utilizar wiki ==&lt;br /&gt;
&lt;br /&gt;
Consulta la [http://meta.wikimedia.org/wiki/Ayuda:Contenido Guía de usuario] para obtener información sobre el uso del software wiki.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=3368</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=3368"/>
				<updated>2012-10-16T16:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: agregar link a ejemplos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Screenshot.png|thumb|right|300px|alt=Butialo, IDE de Lua para Butia|Butialo, Lua para Butia]]&lt;br /&gt;
Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	util.wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	util.wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Más ejemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También hay disponible una [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/Ejemplos_de_Aplicaciones_en_Butialo colección de ejemplos] de aplicaciones básicas.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma índices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el número de elementos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len()+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len()]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los párametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Útil para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1789</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1789"/>
				<updated>2012-02-10T16:06:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* USB4ALL: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
 serial ----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
 usb--------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
 usb, serial, hid? --------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       :       (C)             (lua+Lumen)       |&lt;br /&gt;
                       :                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar informacion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1788</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1788"/>
				<updated>2012-02-10T16:05:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Bobot: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
 serial ----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
 usb--------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
 usb, serial, hid? --------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       :       (C)             (lua+Lumen)       |&lt;br /&gt;
                       :                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1787</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1787"/>
				<updated>2012-02-10T16:05:07Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Toribio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 serial ----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
 usb--------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
 usb, serial, hid? --------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       :       (C)             (lua+Lumen)       |&lt;br /&gt;
                       :                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 &lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1786</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1786"/>
				<updated>2012-02-10T16:04:50Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Toribio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 serial ----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
 usb--------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
 usb, serial, hid? --------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       :       (C)             (lua+Lumen)       |&lt;br /&gt;
                       :                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
 &lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1785</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1785"/>
				<updated>2012-02-10T16:04:15Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Toribio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 serial ----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
 usb--------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
 usb, serial, hid? --------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       :       (C)             (lua+Lumen)       |&lt;br /&gt;
                       :                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1784</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1784"/>
				<updated>2012-02-10T16:03:46Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Bobot: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 serial ----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
 usb--------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1783</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1783"/>
				<updated>2012-02-10T16:03:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Bobot: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            I        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            I                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1782</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1782"/>
				<updated>2012-02-10T16:02:42Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Bobot: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1781</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1781"/>
				<updated>2012-02-10T16:02:12Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Bobot: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1780</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1780"/>
				<updated>2012-02-10T16:01:54Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Bobot: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            :        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            :                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Bobot&amp;diff=1650</id>
		<title>Bobot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Bobot&amp;diff=1650"/>
				<updated>2012-02-02T17:26:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot ==&lt;br /&gt;
[[Archivo:bobot.png|thumb|Fig. 9.1 bobot logo]][[Archivo:componentes.png|thumb|Fig. 9.2 Arquitectura del bobot]][[Archivo:web_bobot.png|thumb|Fig. 9.3 Interacción con dispositivo USB4all de forma web]]&lt;br /&gt;
bobot-server (version 2) es un servicio que permite acceder a aplicaciones y usuarios interactuar con dispositivos USB4all.&lt;br /&gt;
Consiste en un agente altamente portable y liviano, que exporta la funcionalidad de los dispositivos USB4all presentes de una forma fácil de usar. Ofrece dos métodos de acceso,&lt;br /&gt;
uno optimizado para aplicaciones, basado en un socket y un protocolo fácilmente parseable, y otro optimizado para ser usado por humanos, mediante un sitio web&lt;br /&gt;
hosteado en el propio agente, el cual atiende en el puerto 2010.&amp;lt;br&amp;gt; &lt;br /&gt;
Bobot introduce el concepto de driver, en el cual se codifica el protocolo que utilizan los ''usermodules'', de esta forma se exponen al usuario del sistema bobot los servicios que implementan los ''usermodules'' ocultando los detalles relacionados con el protocolo de intercambio de mensajes.&lt;br /&gt;
Para desarrollar compatibilidad con un nuevo dispositivo electronico en la plataforma USB4all utilizando bobot para su control, primero se debe desarrollar el ''usermodule'' necesario como fue descripto en la sección: Escribiendo un ''usermodule'' luego se debe escribir el driver correspondiente a ese ''usermodule''. &lt;br /&gt;
&lt;br /&gt;
El driver se escribe en Lua, debe seguir un formato preestablecido y es implementado mediante el recurso de tablas que brinda Lua. Una característica de Lua es que las funciones son miembros de primer orden, esto permite (entre otras cosas) que una función pueda ser un tipo de datos válido, pasar funciones como argumento de funciones o como retorno de las mismas y almacenarla en una tabla. &lt;br /&gt;
Esta capacidad permite que dentro de la tabla que representa un driver se puedan almacenar funciones asociadas para cada servicio expuesto por un módulo. Estas funciones son invocadas al solicitarse servicios desde la aplicación que utiliza la biblioteca.&lt;br /&gt;
&lt;br /&gt;
Asociado a cada función se almacenan metadatos que describen los parámetros que la función recibe, su tipo, valor de retorno y valores aceptados.&lt;br /&gt;
Mucha de ésta información es utilizada por el bobot para generar el sitio web mencionado anteriormente, como se muestra en la figura 9.3. Este sitio describe al módulo de usuario y se puede usar como documentación y mecanismo de prueba del mismo. &lt;br /&gt;
A continuación se muestra un ejemplo de driver para el módulo de usuario presentado en la sección: Escribiendo un ''usermodule''. En este driver podemos ver que se exportan los siguientes servicios:&lt;br /&gt;
* read_version&lt;br /&gt;
* prender&lt;br /&gt;
* apagar&lt;br /&gt;
* buzzer_corto&lt;br /&gt;
* buzzer_triple&lt;br /&gt;
&lt;br /&gt;
El siguiente código corresponde con la implementación de estos servicios en un driver bobot:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt; &lt;br /&gt;
local device = _G&lt;br /&gt;
local RD_VERSION = string.char(0x00)&lt;br /&gt;
local PRENDER = string.char(0x01)&lt;br /&gt;
local APAGAR = string.char(0x02)&lt;br /&gt;
local BUZZER_CORTO = string.char(0x03)&lt;br /&gt;
local BUZZER_TRIPLE = string.char(0x04)&lt;br /&gt;
&lt;br /&gt;
api={}&lt;br /&gt;
api.read_version = {}&lt;br /&gt;
api.read_version.parameters = {} --no parameters&lt;br /&gt;
api.read_version.returns = {[1]={rname=&amp;quot;version&amp;quot;, rtype=&amp;quot;number&amp;quot;}} --one return&lt;br /&gt;
api.read_version.call = function ()&lt;br /&gt;
        local get_read_version = RD_VERSION &lt;br /&gt;
        device:send(get_read_version)&lt;br /&gt;
        local version_response = device:read(2) &lt;br /&gt;
        local raw_val = string.byte(version_response, 2) &lt;br /&gt;
        --print(&amp;quot;rawval, deg_temp: &amp;quot;, raw_val, deg_temp)&lt;br /&gt;
        return raw_val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
api.prender = {}&lt;br /&gt;
api.prender.parameters = {} --no parameters&lt;br /&gt;
api.prender.returns = {} --no return&lt;br /&gt;
api.prender.call = function ()&lt;br /&gt;
    local write_res, err = device:send(PRENDER)&lt;br /&gt;
    if write_res then return true else return false end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
api.apagar = {}&lt;br /&gt;
api.apagar.parameters = {} --no parameters&lt;br /&gt;
api.apagar.returns = {} --no return&lt;br /&gt;
api.apagar.call = function ()&lt;br /&gt;
    local write_res, err = device:send(APAGAR)&lt;br /&gt;
    if write_res then return true else return false end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
api.buzzer_corto = {}&lt;br /&gt;
api.buzzer_corto.parameters = {[1]={rname=&amp;quot;num&amp;quot;, rtype=&amp;quot;number&amp;quot;}} &lt;br /&gt;
api.buzzer_corto.returns = {} --no return&lt;br /&gt;
api.buzzer_corto.call = function (num)&lt;br /&gt;
    local write_res, err = device:send(BUZZER_CORTO .. string.char(num))&lt;br /&gt;
    if write_res then return true else return false end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
api.buzzer_triple = {}&lt;br /&gt;
api.buzzer_triple.parameters = {[1]={rname=&amp;quot;tiempo1&amp;quot;, rtype=&amp;quot;number&amp;quot;}, [2]={rname=&amp;quot;tiempo2&amp;quot;, rtype=&amp;quot;number&amp;quot;}, [3]={rname=&amp;quot;tiempo3&amp;quot;, rtype=&amp;quot;number&amp;quot;}} &lt;br /&gt;
api.buzzer_triple.returns = {} --no return&lt;br /&gt;
api.buzzer_triple.call = function (tiempo1, tiempo2, tiempo3)&lt;br /&gt;
    local write_res, err = device:send(BUZZER_TRIPLE .. string.char(tiempo1) .. string.char(tiempo2) .. string.char(tiempo3))&lt;br /&gt;
    if write_res then return true else return false end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el ejemplo puede notarse al comparar con el ''usermodule'' presentado de ejemplo, como se realiza el pasaje de parámetros entre el driver y el ''usermodule'', esto corresponde con el protocolo definido por el usuario para codificar los comandos del ''usermodule'' y el orden de los parámetros, este protocolo es llamado en la arquitectura USB4all como ''user protocol'' y responde al formato de &amp;lt; COMANDO [argumento1] [argumento2]...[argumentoN] &amp;gt; para el pedido y mensajes del tipo &amp;lt; COMANDO [resultado1] [resultado2]..[resultadoN] &amp;gt; para la respuesta. &lt;br /&gt;
&lt;br /&gt;
Entre las características del bobot se encuentra la capacidad de abstraer al usuario del tipo de hardware de placa de E/S está conectada pudiendo ser placas que utilizan comunicación serial rs232c o USB u otra tecnología como también la cantidad de las mismas. En la figura 8.2 puede verse un caso posible, donde se encuentran diferentes ''usermodules'' cargados en una ''baseboard'' y ciertos drivers cargados en el bobot que van a permitir consumir los servicios expuestos por los ''usermodules''.&lt;br /&gt;
&lt;br /&gt;
Como se mencionó al comienzo de la sección, bobot expone un protocolo que puede utilizarse mediante conexiones TCP/IP mediante la interacción con el bobot server, este protocolo se describe de esta forma:&lt;br /&gt;
&lt;br /&gt;
    LIST&lt;br /&gt;
    DESCRIBE moduleName&lt;br /&gt;
    CALL moduleName operation param1, param2, ...,paramN&lt;br /&gt;
    OPEN moduleName&lt;br /&gt;
    CLOSEALL&lt;br /&gt;
&lt;br /&gt;
Donde el comando:&lt;br /&gt;
* LIST despliega la lista de módulos disponibles en la placa por su nombre.&lt;br /&gt;
* DESCRIBE muestra la información de que servicios expone el módulo de nombre moduleName e información sobre los parámetros.&lt;br /&gt;
* CALL es utilizado para invocar los servicios expuestos por un módulo.&lt;br /&gt;
* OPEN se utiliza para abirir un módulo, a partir de ese momento el baseboard le asigna tiempo de CPU y recursos al ''usermodule'', actualmente esta deprecado su uso ya que bobot se encarga de abrirlos de forma automática ante la primer invocación.&lt;br /&gt;
* CLOSEALL cierra todos los módulos abiertos en la placa, llevandola a un estado conocido.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puede descargarse bobot desde el git del proyecto butiá en sourceforge.&lt;br /&gt;
&lt;br /&gt;
La futura versión de Bobot se llama [[Toribio]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1648</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1648"/>
				<updated>2012-02-02T17:25:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: Aquí trasladada a Toribio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Aqu%C3%AD&amp;diff=1649</id>
		<title>Aquí</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Aqu%C3%AD&amp;diff=1649"/>
				<updated>2012-02-02T17:25:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: Aquí trasladada a Toribio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECCIÓN [[Toribio]]&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1647</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1647"/>
				<updated>2012-02-02T14:10:42Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* USB4ALL: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en ''stateless'', hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
* Esto abre las puertas a comunicaciones asincrónicas desde la placa al host. &lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1646</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1646"/>
				<updated>2012-02-02T14:07:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* USB4ALL: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en estateless, hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1645</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1645"/>
				<updated>2012-02-02T14:07:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* USB4ALL: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en estateless, hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1644</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1644"/>
				<updated>2012-02-02T14:06:46Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* USB4ALL: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en estateless, hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de open'''&lt;br /&gt;
Agregar nombre de modulo, etc.&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
'''Paquete de respuesta de close'''&lt;br /&gt;
Agregar handler.&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
'''Respuesta de consulta de un modulo'''&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1643</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1643"/>
				<updated>2012-02-02T14:05:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* USB4ALL: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en estateless, hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
* Paquete de respuesta de open: agregar nombre de modulo, etc.&lt;br /&gt;
OPEN(8bits) | INEP(8bits)  | OUTEP(8bits)  | MODULE(8bytes) | HANDLER(8bits)&lt;br /&gt;
&lt;br /&gt;
* Paquete de respuesta de close: agregar handler.&lt;br /&gt;
&lt;br /&gt;
CLOSE(8bits) | HANDLER(8bits) | STATUS(8bits)&lt;br /&gt;
&lt;br /&gt;
* Respuesta de consulta de un modulo&lt;br /&gt;
&lt;br /&gt;
GET_USER_MODULES_LINE (8bits)  |  LINE(8bits)  |  MODULE(8bytes)&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1642</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1642"/>
				<updated>2012-02-02T13:57:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USB4ALL: ==&lt;br /&gt;
&lt;br /&gt;
Se proponen algunos cambios a la plataforma usb4all. Las ideas principales detras de estos cambios son;&lt;br /&gt;
&lt;br /&gt;
* convertir a usb4all en un protocolo ''stateless''. Actualmente, las comunicaciones son de la forma solicitud/respuesta. La respuesta solo se puede interpretar manteniendo el estado de la solicitud originante. Para convertirlo en estateless, hay que agregar información a las respuestas de forma de poder interpretarlo completamente sin tener que recordar las comunicaciones anteriores.&lt;br /&gt;
&lt;br /&gt;
* Fácil de portar impementaciones de usb4all clásico. Las implementaciones alternativas deben seguir funcionando con solo agregar infomracion extra a los paquetes. La lógica original debe seguir siendo valida.&lt;br /&gt;
&lt;br /&gt;
Puntualmente, los cambios son:&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1641</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1641"/>
				<updated>2012-02-02T13:50:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Toribio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                   POSIX            lua library          Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1640</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1640"/>
				<updated>2012-02-02T13:49:51Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Propuesta actual...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd                 Lumen tasks&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                               (C)             (lua+Lumen)       |&lt;br /&gt;
                                                    |            |---- drivers (lua)&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                           Lumen task                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1600</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1600"/>
				<updated>2012-01-20T18:27:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            #        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            #                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       #       (C)             (lua+Lumen)       |&lt;br /&gt;
                       #                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1599</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1599"/>
				<updated>2012-01-20T18:26:06Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         OS               .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
            |        (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
          libusb0.1                                 |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
          stdio                                     |            (lua)        |&lt;br /&gt;
            |                                       |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                     OS                fd (PIPE)            lua+Lumen&lt;br /&gt;
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
                                                                 |---- drivers (lua)&lt;br /&gt;
                                                                 |&lt;br /&gt;
usb, serial, hid? ---------- bridge ------------ toribio ------------- drivers (lua)&lt;br /&gt;
                       |       (C)             (lua+Lumen)       |&lt;br /&gt;
                       |                            |            |---- drivers (lua)&lt;br /&gt;
               (stdio, libusb1, ...?)               |&lt;br /&gt;
                                                    |&lt;br /&gt;
                                                    |---------------butialo, other apps.&lt;br /&gt;
                                                    |                                                    &lt;br /&gt;
                                                    |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                       (lua)&lt;br /&gt;
&lt;br /&gt;
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                             lua Lumen                socket&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1598</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1598"/>
				<updated>2012-01-20T18:13:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      OS                   .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
                     (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
                                                    |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
                                                    |            (lua)        |&lt;br /&gt;
                                                    |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                                     xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&lt;br /&gt;
serial--------------&lt;br /&gt;
&lt;br /&gt;
usb-----------------&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1597</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1597"/>
				<updated>2012-01-20T18:12:27Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Bobot: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      OS                   .so library              lua modules                lua module&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|&lt;br /&gt;
                     (C)                 (lua)      |                         |---- drivers (lua)&lt;br /&gt;
                                                    |                         |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
                                                    |            (lua)        |&lt;br /&gt;
                                                    |              |          |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|              |&lt;br /&gt;
               (C+liblua.h)               (lua)                    |&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------butialo, other apps.&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |---------------bobot-server-----------------userapps&lt;br /&gt;
                                                                                        (lua)&lt;br /&gt;
&lt;br /&gt;
                                                                     *******************      ********************&lt;br /&gt;
                                                                           lua module                socket&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toribio ==&lt;br /&gt;
&lt;br /&gt;
serial--------------&lt;br /&gt;
&lt;br /&gt;
usb-----------------&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1596</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1596"/>
				<updated>2012-01-20T18:05:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y formas de comuniaciones&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
                                                              bobot-server===socket&lt;br /&gt;
                                                                 (lua)&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|              |&lt;br /&gt;
                     (C)                 (lua)      |              |          |---- drivers (lua)&lt;br /&gt;
                                                    |              |          |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
                                                    |            (lua)        |&lt;br /&gt;
                                                    |                         |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|&lt;br /&gt;
               (C+liblua.h)               (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
      OS                   .so library                        lua modules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toribio&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1595</id>
		<title>Toribio</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Toribio&amp;diff=1595"/>
				<updated>2012-01-20T17:55:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: Página creada con ' == Bobot: ==  Resumen de componentes en bobot, y forma de comunicarse                                                                 bobot-server===socket                     ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Bobot: ==&lt;br /&gt;
&lt;br /&gt;
Resumen de componentes en bobot, y forma de comunicarse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                                              bobot-server===socket&lt;br /&gt;
                                                                 (lua)&lt;br /&gt;
                                                                   |&lt;br /&gt;
                                                                   |&lt;br /&gt;
serial -----------serialcomm---------comms_serial---|              |&lt;br /&gt;
                     (C)                 (lua)      |              |          |---- drivers (lua)&lt;br /&gt;
                                                    |              |          |&lt;br /&gt;
                                                    |------------bobot------------- drivers (lua)&lt;br /&gt;
                                                    |            (lua)        |&lt;br /&gt;
                                                    |                         |---- drivers (lua)&lt;br /&gt;
usb---------------libusb--------------comms_usb-----|&lt;br /&gt;
               (C+liblua.h)               (lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  xxxxxxxxxxxxxxxxx      xxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
      OS                   .so library                        lua modules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toribio&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Bobot&amp;diff=1594</id>
		<title>Bobot</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Bobot&amp;diff=1594"/>
				<updated>2012-01-20T17:44:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Toribio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bobot ==&lt;br /&gt;
[[Archivo:bobot.png|thumb|Fig. 9.1 bobot logo]][[Archivo:componentes.png|thumb|Fig. 9.2 Arquitectura del bobot]][[Archivo:web_bobot.png|thumb|Fig. 9.3 Interacción con dispositivo USB4all de forma web]]&lt;br /&gt;
bobot-server (version 2) es un servicio que permite acceder a aplicaciones y usuarios interactuar con dispositivos USB4all.&lt;br /&gt;
Consiste en un agente altamente portable y liviano, que exporta la funcionalidad de los dispositivos USB4all presentes de una forma fácil de usar. Ofrece dos métodos de acceso,&lt;br /&gt;
uno optimizado para aplicaciones, basado en un socket y un protocolo fácilmente parseable, y otro optimizado para ser usado por humanos, mediante un sitio web&lt;br /&gt;
hosteado en el propio agente, el cual atiende en el puerto 2010.&amp;lt;br&amp;gt; &lt;br /&gt;
Bobot introduce el concepto de driver, en el cual se codifica el protocolo que utilizan los ''usermodules'', de esta forma se exponen al usuario del sistema bobot los servicios que implementan los ''usermodules'' ocultando los detalles relacionados con el protocolo de intercambio de mensajes.&lt;br /&gt;
Para desarrollar compatibilidad con un nuevo dispositivo electronico en la plataforma USB4all utilizando bobot para su control, primero se debe desarrollar el ''usermodule'' necesario como fue descripto en la sección: Escribiendo un ''usermodule'' luego se debe escribir el driver correspondiente a ese ''usermodule''. &lt;br /&gt;
&lt;br /&gt;
El driver se escribe en Lua, debe seguir un formato preestablecido y es implementado mediante el recurso de tablas que brinda Lua. Una característica de Lua es que las funciones son miembros de primer orden, esto permite (entre otras cosas) que una función pueda ser un tipo de datos válido, pasar funciones como argumento de funciones o como retorno de las mismas y almacenarla en una tabla. &lt;br /&gt;
Esta capacidad permite que dentro de la tabla que representa un driver se puedan almacenar funciones asociadas para cada servicio expuesto por un módulo. Estas funciones son invocadas al solicitarse servicios desde la aplicación que utiliza la biblioteca.&lt;br /&gt;
&lt;br /&gt;
Asociado a cada función se almacenan metadatos que describen los parámetros que la función recibe, su tipo, valor de retorno y valores aceptados.&lt;br /&gt;
Mucha de ésta información es utilizada por el bobot para generar el sitio web mencionado anteriormente, como se muestra en la figura 9.3. Este sitio describe al módulo de usuario y se puede usar como documentación y mecanismo de prueba del mismo. &lt;br /&gt;
A continuación se muestra un ejemplo de driver para el módulo de usuario presentado en la sección: Escribiendo un ''usermodule''. En este driver podemos ver que se exportan los siguientes servicios:&lt;br /&gt;
* read_version&lt;br /&gt;
* prender&lt;br /&gt;
* apagar&lt;br /&gt;
* buzzer_corto&lt;br /&gt;
* buzzer_triple&lt;br /&gt;
&lt;br /&gt;
El siguiente código corresponde con la implementación de estos servicios en un driver bobot:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt; &lt;br /&gt;
local device = _G&lt;br /&gt;
local RD_VERSION = string.char(0x00)&lt;br /&gt;
local PRENDER = string.char(0x01)&lt;br /&gt;
local APAGAR = string.char(0x02)&lt;br /&gt;
local BUZZER_CORTO = string.char(0x03)&lt;br /&gt;
local BUZZER_TRIPLE = string.char(0x04)&lt;br /&gt;
&lt;br /&gt;
api={}&lt;br /&gt;
api.read_version = {}&lt;br /&gt;
api.read_version.parameters = {} --no parameters&lt;br /&gt;
api.read_version.returns = {[1]={rname=&amp;quot;version&amp;quot;, rtype=&amp;quot;number&amp;quot;}} --one return&lt;br /&gt;
api.read_version.call = function ()&lt;br /&gt;
        local get_read_version = RD_VERSION &lt;br /&gt;
        device:send(get_read_version)&lt;br /&gt;
        local version_response = device:read(2) &lt;br /&gt;
        local raw_val = string.byte(version_response, 2) &lt;br /&gt;
        --print(&amp;quot;rawval, deg_temp: &amp;quot;, raw_val, deg_temp)&lt;br /&gt;
        return raw_val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
api.prender = {}&lt;br /&gt;
api.prender.parameters = {} --no parameters&lt;br /&gt;
api.prender.returns = {} --no return&lt;br /&gt;
api.prender.call = function ()&lt;br /&gt;
    local write_res, err = device:send(PRENDER)&lt;br /&gt;
    if write_res then return true else return false end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
api.apagar = {}&lt;br /&gt;
api.apagar.parameters = {} --no parameters&lt;br /&gt;
api.apagar.returns = {} --no return&lt;br /&gt;
api.apagar.call = function ()&lt;br /&gt;
    local write_res, err = device:send(APAGAR)&lt;br /&gt;
    if write_res then return true else return false end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
api.buzzer_corto = {}&lt;br /&gt;
api.buzzer_corto.parameters = {[1]={rname=&amp;quot;num&amp;quot;, rtype=&amp;quot;number&amp;quot;}} &lt;br /&gt;
api.buzzer_corto.returns = {} --no return&lt;br /&gt;
api.buzzer_corto.call = function (num)&lt;br /&gt;
    local write_res, err = device:send(BUZZER_CORTO .. string.char(num))&lt;br /&gt;
    if write_res then return true else return false end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
api.buzzer_triple = {}&lt;br /&gt;
api.buzzer_triple.parameters = {[1]={rname=&amp;quot;tiempo1&amp;quot;, rtype=&amp;quot;number&amp;quot;}, [2]={rname=&amp;quot;tiempo2&amp;quot;, rtype=&amp;quot;number&amp;quot;}, [3]={rname=&amp;quot;tiempo3&amp;quot;, rtype=&amp;quot;number&amp;quot;}} &lt;br /&gt;
api.buzzer_triple.returns = {} --no return&lt;br /&gt;
api.buzzer_triple.call = function (tiempo1, tiempo2, tiempo3)&lt;br /&gt;
    local write_res, err = device:send(BUZZER_TRIPLE .. string.char(tiempo1) .. string.char(tiempo2) .. string.char(tiempo3))&lt;br /&gt;
    if write_res then return true else return false end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el ejemplo puede notarse al comparar con el ''usermodule'' presentado de ejemplo, como se realiza el pasaje de parámetros entre el driver y el ''usermodule'', esto corresponde con el protocolo definido por el usuario para codificar los comandos del ''usermodule'' y el orden de los parámetros, este protocolo es llamado en la arquitectura USB4all como ''user protocol'' y responde al formato de &amp;lt; COMANDO [argumento1] [argumento2]...[argumentoN] &amp;gt; para el pedido y mensajes del tipo &amp;lt; COMANDO [resultado1] [resultado2]..[resultadoN] &amp;gt; para la respuesta. &lt;br /&gt;
&lt;br /&gt;
Entre las características del bobot se encuentra la capacidad de abstraer al usuario del tipo de hardware de placa de E/S está conectada pudiendo ser placas que utilizan comunicación serial rs232c o USB u otra tecnología como también la cantidad de las mismas. En la figura 8.2 puede verse un caso posible, donde se encuentran diferentes ''usermodules'' cargados en una ''baseboard'' y ciertos drivers cargados en el bobot que van a permitir consumir los servicios expuestos por los ''usermodules''.&lt;br /&gt;
&lt;br /&gt;
Como se mencionó al comienzo de la sección, bobot expone un protocolo que puede utilizarse mediante conexiones TCP/IP mediante la interacción con el bobot server, este protocolo se describe de esta forma:&lt;br /&gt;
&lt;br /&gt;
    LIST&lt;br /&gt;
    DESCRIBE moduleName&lt;br /&gt;
    CALL moduleName operation param1, param2, ...,paramN&lt;br /&gt;
    OPEN moduleName&lt;br /&gt;
    CLOSEALL&lt;br /&gt;
&lt;br /&gt;
Donde el comando:&lt;br /&gt;
* LIST despliega la lista de módulos disponibles en la placa por su nombre.&lt;br /&gt;
* DESCRIBE muestra la información de que servicios expone el módulo de nombre moduleName e información sobre los parámetros.&lt;br /&gt;
* CALL es utilizado para invocar los servicios expuestos por un módulo.&lt;br /&gt;
* OPEN se utiliza para abirir un módulo, a partir de ese momento el baseboard le asigna tiempo de CPU y recursos al ''usermodule'', actualmente esta deprecado su uso ya que bobot se encarga de abrirlos de forma automática ante la primer invocación.&lt;br /&gt;
* CLOSEALL cierra todos los módulos abiertos en la placa, llevandola a un estado conocido.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Puede descargarse bobot desde el git del proyecto butiá en sourceforge.&lt;br /&gt;
&lt;br /&gt;
La discusión para la futura versión de Bobot, llamada Toribio, se encuentra [[aquí]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=1147</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=1147"/>
				<updated>2011-10-13T17:27:06Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Util */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Screenshot.png|thumb|right|300px|alt=Butialo, IDE de Lua para Butia|Butialo, Lua para Butia]]&lt;br /&gt;
Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len()+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len()]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Sumo.uy_2011_Summary_Buti%C3%A1_challenge&amp;diff=954</id>
		<title>Sumo.uy 2011 Summary Butiá challenge</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Sumo.uy_2011_Summary_Buti%C3%A1_challenge&amp;diff=954"/>
				<updated>2011-09-22T16:59:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: retoques&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Butiá activities in the sumo.uy 2011 robotic event ==&lt;br /&gt;
[[Archivo:basico1.jpg|thumb|Basic Butiá challenge]] [[Archivo:basico2.jpg|thumb|Basic Butiá challenge]] [[Archivo:basico3.jpg|thumb|Basic Butiá challenge]] [[Archivo:basico4.jpg|thumb|Basic Butiá challenge]] [[Archivo:basico5.jpg|thumb|25 de agosto team]]  [[Archivo:taller_gabriel.jpg|thumb|workshop with gabriel]]  [[Archivo:taller2.jpg|thumb|workshop]]&lt;br /&gt;
&lt;br /&gt;
The last 16 and 17 of September was the robotic event called sumo.uy [http://www.fing.edu.uy/inco/eventos/sumo.uy/] organized by the public Uruguayan faculty of engineering. In this event there were two challenges for the butiá robot [http://www.fing.edu.uy/inco/proyectos/butia], were schools from Uruguay come to participate with the robots we gave them last year, showing the great work that they were doing.&amp;lt;br&amp;gt;&lt;br /&gt;
One of this challenges was the &amp;quot;basic butia&amp;quot; [http://www.fing.edu.uy/inco/eventos/sumo.uy/Documentos/reglamentoButiaBasico.pdf] wich consist in the implementation of a line follower robot wich must be able to evade obstacles. The arena was of 3.20 x 3 meters size.&amp;lt;br&amp;gt;[[Archivo:Arena_butia.jpg|400px]] [[Archivo:Liceo1_colonia.JPG|400px]]&amp;lt;br&amp;gt; Most of the participating schools used the butiá plugin for turtleArt [http://activities.sugarlabs.org/es-ES/sugar/addon/4434]. All of them participated with XO 1.0 and 1.5, showing how to transform an XO into a mobile robot.&amp;lt;br&amp;gt;&lt;br /&gt;
There also was an advanced challenge wich consisted in classificating &amp;quot;products&amp;quot;. This problem was modeled with a sumo dojho wich was the &amp;quot;clasification area&amp;quot; from where the robot must not fall, and small colored cubes. The green cubes represent good product and the red cubes the one with failures, so the robot must try to carry outside de clasification area the bad products and keep inside the good ones.&lt;br /&gt;
This challenge was resolved by the students using the followMe plugin [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/TortugArteButi%C3%A1] showing that the XO computer has usefull sensors for robotics like the webcam.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;youtube&amp;gt;Q6gQo6sstCk&amp;lt;/youtube&amp;gt;&amp;lt;youtube&amp;gt;tZm_V060tTU&amp;lt;/youtube&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The time was counted by a stopWatch that was also made using TurtleArt [http://www.fing.edu.uy/inco/proyectos/butia/files/ejemplos/sumo_crono.tar.gz] ;)&lt;br /&gt;
The day after we give some workshops for children who wanted to learn robot programming using turtleArt. They came with their own XO computers to work and transform it in a mobile robot.&amp;lt;br&amp;gt;&lt;br /&gt;
The butiá project is opensource and can be downloaded from our git in sourceforge [http://sourceforge.net/projects/butia/]&lt;br /&gt;
Also don't forget to join our facebook site [http://www.facebook.com/group.php?gid=147042805312846] and mailing list [https://www.fing.edu.uy/mailman/listinfo/butia-list] we are looking forward to find software and hardware developers that want to participate in this project.&lt;br /&gt;
&amp;lt;youtube&amp;gt;ef90VJddwqY&amp;lt;/youtube&amp;gt;&amp;lt;youtube&amp;gt;8yGOvoiNxF4&amp;lt;/youtube&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Sumo.uy_2011_Summary_Buti%C3%A1_challenge&amp;diff=953</id>
		<title>Sumo.uy 2011 Summary Butiá challenge</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Sumo.uy_2011_Summary_Buti%C3%A1_challenge&amp;diff=953"/>
				<updated>2011-09-22T16:55:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: /* Butiá activities in the sumo.uy 2011 robotic event */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Butiá activities in the sumo.uy 2011 robotic event ==&lt;br /&gt;
[[Archivo:basico1.jpg|thumb|Basic Butiá challenge]] [[Archivo:basico2.jpg|thumb|Basic Butiá challenge]] [[Archivo:basico3.jpg|thumb|Basic Butiá challenge]] [[Archivo:basico4.jpg|thumb|Basic Butiá challenge]] [[Archivo:basico5.jpg|thumb|25 de agosto team]]  [[Archivo:taller_gabriel.jpg|thumb|workshop with gabriel]]  [[Archivo:taller2.jpg|thumb|workshop]]&lt;br /&gt;
&lt;br /&gt;
The last 16 and 17 of September was the robotic event called sumo.uy [http://www.fing.edu.uy/inco/eventos/sumo.uy/] organized by the public Uruguayan faculty of engineering. In this event there were two challenges for the butiá robot [http://www.fing.edu.uy/inco/proyectos/butia], were schools from Uruguay come to participate with the robots we gave them last year, showing the great work that they were doing.&amp;lt;br&amp;gt;&lt;br /&gt;
One of this challenges was the &amp;quot;basic butia&amp;quot; [http://www.fing.edu.uy/inco/eventos/sumo.uy/Documentos/reglamentoButiaBasico.pdf] wich consist in the implementation of a line follower robot wich must be able to evade obstacles. The arena was of 3.20 x 3 meters size.&amp;lt;br&amp;gt;[[Archivo:Arena_butia.jpg|400px]] [[Archivo:Liceo1_colonia.JPG|400px]]&amp;lt;br&amp;gt; Most of the participating schools used the butiá plugin for turtleArt [http://activities.sugarlabs.org/es-ES/sugar/addon/4434] they participate with XO 1.0 and 1.5, showing how to transform an XO into a mobile robot.&amp;lt;br&amp;gt;&lt;br /&gt;
It also was an advance challenge wich it consist in classification of products, this problem was modeled with a sumo dojho wich was the &amp;quot;clasification area&amp;quot; in wich the robot must not fall and small cubes of colors, the green cubes represent good product and the red cubes the one with failures, so the robot must try to carry outside de clasification area the bad products and keep inside the good ones.&lt;br /&gt;
This challenge was resolved by the students using the followMe plugin [http://www.fing.edu.uy/inco/proyectos/butia/mediawiki/index.php/TortugArteButi%C3%A1] showing that the XO computer has usefull sensors for robotics like the webcam.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;youtube&amp;gt;Q6gQo6sstCk&amp;lt;/youtube&amp;gt;&amp;lt;youtube&amp;gt;tZm_V060tTU&amp;lt;/youtube&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The time was counted by a stopWatch that it was made using TurtleArt also [http://www.fing.edu.uy/inco/proyectos/butia/files/ejemplos/sumo_crono.tar.gz] ;)&lt;br /&gt;
The day after we give some workshops for children's who want to learn robot programming using turtleArt, they came with their XO computers to work and transform it in a mobile robot.&amp;lt;br&amp;gt;&lt;br /&gt;
The butiá project is opensource and it could be downloaded from our git in sourceforge [http://sourceforge.net/projects/butia/]&lt;br /&gt;
Also don't forget to join our facebook site [http://www.facebook.com/group.php?gid=147042805312846] and mailing list [https://www.fing.edu.uy/mailman/listinfo/butia-list] we are looking forward to find software and hardware developers that want to participate in this project.&lt;br /&gt;
&amp;lt;youtube&amp;gt;ef90VJddwqY&amp;lt;/youtube&amp;gt;&amp;lt;youtube&amp;gt;8yGOvoiNxF4&amp;lt;/youtube&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=693</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=693"/>
				<updated>2011-08-10T00:18:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Screenshot.png|thumb|right|300px|alt=Butialo, IDE de Lua para Butia|Butialo, Lua para Butia]]&lt;br /&gt;
Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=692</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=692"/>
				<updated>2011-08-10T00:18:35Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Screenshot.png|thumb|right|300px|alt=Butialo, IDE de Lua para Butia|Butialo, Lua para Butia]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=691</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=691"/>
				<updated>2011-08-10T00:18:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Screenshot.png|thumb|center|300px|alt=Butialo, IDE de Lua para Butia|Butialo, Lua para Butia]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=690</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=690"/>
				<updated>2011-08-10T00:17:28Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Screenshot.png|thumb|left|300px|alt=Butialo, IDE de Lua para Butia|Butialo, Lua para Butia]]&lt;br /&gt;
Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=689</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=689"/>
				<updated>2011-08-10T00:16:57Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Screenshot.png|thumb|left|400px|alt=Butialo, IDE de Lua para Butia|Butialo, Lua para Butia]]&lt;br /&gt;
Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=688</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=688"/>
				<updated>2011-08-10T00:14:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Archivo:Screenshot.png|thumb|left]]&lt;br /&gt;
Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=687</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=687"/>
				<updated>2011-08-10T00:14:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Screenshot.png|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=686</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=686"/>
				<updated>2011-08-10T00:11:18Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=685</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=685"/>
				<updated>2011-08-10T00:11:04Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Screenshot.png&amp;diff=684</id>
		<title>Archivo:Screenshot.png</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Archivo:Screenshot.png&amp;diff=684"/>
				<updated>2011-08-10T00:09:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: subió una nueva versión de «Archivo:Screenshot.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Captura de pantalla de Butialo&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	<entry>
		<id>http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=665</id>
		<title>Butialo</title>
		<link rel="alternate" type="text/html" href="http://164.73.124.35/inco/proyectos/butia/mediawiki/index.php?title=Butialo&amp;diff=665"/>
				<updated>2011-08-01T21:47:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jorge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Butialo es un entorno fácil de usar que permite programar a Butiá en el lenguaje Lua.&lt;br /&gt;
Lua es un lenguaje de scripting imperativo simple pero que a la vez permite crear programas sofisticados. Es un lenguaje dinámico, con manejo de memoria automático y es extremadamente rápido.&lt;br /&gt;
Butialo es un IDE derivado de Pippy (el entorno para Python provisto con las XO), que simplifica la creación de programas para Butiá autodetectando la presencia de componentes Butiá conectados y ofreciendo snippets de código para accederlos.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Screenshot.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
La actividad puede descargarse desde [http://activities.sugarlabs.org/sugar/addon/4457 el repositorio de actividades de Sugar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple ==&lt;br /&gt;
&lt;br /&gt;
Avanzar mientras no haya un obstaculo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
while true do&lt;br /&gt;
   local dist = Dist.getDistancia()&lt;br /&gt;
   if dist&amp;lt;700 then&lt;br /&gt;
      Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
      repeat&lt;br /&gt;
         wait(1)&lt;br /&gt;
         dist = Dist.getDistancia()&lt;br /&gt;
      until dist &amp;gt; 700&lt;br /&gt;
      Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También se puede programar con eventos. Un programa equivalente al anterior puede ser el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local function adelante()&lt;br /&gt;
  Motores.setvel2mtr( 1, 500, 1, 500 )&lt;br /&gt;
end&lt;br /&gt;
local function esperar()&lt;br /&gt;
  Motores.setvel2mtr( 1, 0, 1, 0 )&lt;br /&gt;
  wait( 1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;lt;', 700, esperar )&lt;br /&gt;
events.add( Dist.getDistancia, '&amp;gt;', 700, adelante )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo simple (otro) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butiá con estabilidad dinámica. Se toma un Butiá, se le retiran las ruedas locas y se coloca un sensor de distancia IR apuntando al piso. Con el botón se activa y desactiva el comportamiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local d		--lecturas de distancia&lt;br /&gt;
local eq	--posicion de equilibrio de d&lt;br /&gt;
local v		--velocidad calculada&lt;br /&gt;
&lt;br /&gt;
while true do&lt;br /&gt;
	print (&amp;quot;Presione el botón para comenzar&amp;quot;)&lt;br /&gt;
	repeat until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	eq = Dist.getDistancia() &lt;br /&gt;
	&lt;br /&gt;
	print(&amp;quot;Arrancando&amp;quot;, eq)&lt;br /&gt;
	wait(1)&lt;br /&gt;
&lt;br /&gt;
	repeat&lt;br /&gt;
		d = Dist.getDistancia()&lt;br /&gt;
		v = 100+5*math.abs(d-eq)&lt;br /&gt;
		if v &amp;gt; 1024 then v = 1024 end&lt;br /&gt;
		if d &amp;lt; eq then&lt;br /&gt;
			Motores.setvel2mtr(1, v, 1, v)&lt;br /&gt;
		else&lt;br /&gt;
			Motores.setvel2mtr(0, v, 0, v)&lt;br /&gt;
		end&lt;br /&gt;
	until Boton.getBoton()==1&lt;br /&gt;
&lt;br /&gt;
	print(&amp;quot;Fin&amp;quot;)&lt;br /&gt;
	Motores.setvel2mtr(1, 0, 1, 0)&lt;br /&gt;
	wait(1)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;3A0-Jmpk3c0&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Util ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo provee varias funciones auxiliares.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.wait( t )'''&lt;br /&gt;
&lt;br /&gt;
Pausa la ejecución del programa por t segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.get_time()'''&lt;br /&gt;
&lt;br /&gt;
Devuelve el tiempo del sistema, en segundos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''util.new_array()'''&lt;br /&gt;
&lt;br /&gt;
Lua provee una única estructura de datos, la tabla (array asociativo). Para facilitar la introducción a los conceptos de programación butialo provee el método util.new_array() que devuelve un array convencional. El array obtenido toma indices numéricos empezando en 1, y solo almacenará variables de un único tipo (determinado por la primer asignación que se haga). El array obtenido es dinámico y será expandido automáticamente cuando se agreguen elementos al final, y se contraerá cuando el último elemento se elimine. No se aceptan valores nil en el medio del array (&amp;quot;agujeros&amp;quot;). Las funciones estándar de Lua para tablas no funcionan con estos arrays. Los métodos disponible para manipular un array son&lt;br /&gt;
&lt;br /&gt;
a.len() :  Devuelve el numero de elamentos contenidos en el array.&lt;br /&gt;
&lt;br /&gt;
a.add( v ) : Agrega un elemento al final del array, aumentando su tamaño. Es lo mismo que escribir a[a.len+1]=v&lt;br /&gt;
&lt;br /&gt;
a.remove_last() : Retira y devuelve el último elemento del array, acortándo el array. Es lo mismo que escribir a[a.len]=nil&lt;br /&gt;
&lt;br /&gt;
a.containing() : Devuelve el tipo de elemento que está siendo almacenado en el array&lt;br /&gt;
&lt;br /&gt;
Ejemplo de manipulación de arays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local a = new_array()&lt;br /&gt;
for i=1, 5 do&lt;br /&gt;
  a[i]=&amp;quot;entrada&amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
a.add(&amp;quot;borrar esto&amp;quot;)&lt;br /&gt;
a.remove_last()&lt;br /&gt;
a[2]=&amp;quot;entrada cambiada&amp;quot;&lt;br /&gt;
print(&amp;quot;Array conteniendo&amp;quot;, a.containing())&lt;br /&gt;
for i=1, a.len() do&lt;br /&gt;
	print(i, &amp;quot;:&amp;quot;, a[i])&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eventos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Butialo puede ser programado usando eventos. Un evento permite asociar una función a una condición: si la condición se cumple, la función se ejecuta. Se pueden registrar varios eventos, y estos se pueden agregar y eliminar en cualquier momento. Los eventos se ejecutan de forma bloqueante: cuando un evento se dispara, la función asociada se ejecuta hasta terminar y no puede ser interrumpida por otro evento. Es más, mientras un evento se está ejecutando, no se evalúan las condiciones de los otros eventos. El evento se dispara cuando la condición empieza a cumplirse, pero no continuará haciéndolo hasta que la condición deje de cumplirse.&lt;br /&gt;
&lt;br /&gt;
Para registrar un evento, se usa la función events.add&lt;br /&gt;
&lt;br /&gt;
'''events.add( func, op, reference, callback [, hysteresis [, name]] )'''&lt;br /&gt;
&lt;br /&gt;
Los parametros func, op y referencia especifican la condición que dispara el evento.&lt;br /&gt;
&lt;br /&gt;
func: la función que al ser evaluada devuelve el valor que queremos vigilar.&lt;br /&gt;
&lt;br /&gt;
op:   operador de comparación, puede ser '&amp;gt;', '&amp;lt;', '&amp;lt;=', '&amp;gt;=', '==' o '~='.&lt;br /&gt;
&lt;br /&gt;
referencia: valor de refencia con el que se comparará func()&lt;br /&gt;
&lt;br /&gt;
callback: la función que se va a invocar cuando se dispara el evento, o sea cuando se cumple que &amp;quot;func() op referencia&amp;quot;. Cuando se invoca callback(), se le pasa como parámetro el valor de func() que disparó el evento. O sea, se invocará &amp;quot;callback( func() )&amp;quot;&lt;br /&gt;
&lt;br /&gt;
hysteresis: un parámetro opcional, útil cuando se usan operadores de desigualdad.&lt;br /&gt;
&lt;br /&gt;
name: parametro opcional, el nombre del evento. Util para identificar el evento si en otro momento se lo quiere desactivar.&lt;br /&gt;
&lt;br /&gt;
La función events.add devuelve el nombre asignado al evento (coincide con el parámetro name si fue provisto, sino se genera un nombre automáticamente). Esta función puede invocarse tanto desde el programa principal como desde una función callback.&lt;br /&gt;
&lt;br /&gt;
Un evento puede desactivarse usando la función events.remove. Tal como events.add, se puede invocar en cualquier momento. &lt;br /&gt;
&lt;br /&gt;
'''events.remove( name )'''&lt;br /&gt;
&lt;br /&gt;
name: el nombre del evento que se quiere desactivar&lt;br /&gt;
&lt;br /&gt;
Para empezar a procesar eventos se usa la llamada events.go&lt;br /&gt;
&lt;br /&gt;
'''events.go()'''&lt;br /&gt;
&lt;br /&gt;
Luego de invocada, el sistema queda bloqueado procesando eventos, invocando los callback según corresponda. Esto seguirá así hasta que se invoque la función events.stop&lt;br /&gt;
&lt;br /&gt;
'''events.stop()'''&lt;br /&gt;
&lt;br /&gt;
Esta función solo puede ser invocada en una función de callback para detener el procesamiento de eventos. Luego de invocada y terminada la función de callback responsable, el programa continuará ejecutándose en la línea siguiente al events.go.&lt;br /&gt;
&lt;br /&gt;
Como ejemplo, el siguiente programa imprime &amp;quot;tick&amp;quot; cada 2 segundos, hasta que se presiona un botón y el programa finaliza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local last = 0 --hora de la ultima vez que se imprimio tick&lt;br /&gt;
&lt;br /&gt;
local function get_elapsed()&lt;br /&gt;
  return util.get_time() - last&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tick_callback ( v )&lt;br /&gt;
  last = util.get_time()&lt;br /&gt;
  print(&amp;quot;tick&amp;quot;, v)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stop_callback()&lt;br /&gt;
  events.stop()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
events.add( get_elapsed, &amp;quot;&amp;gt;=&amp;quot;, 2, tick_callback)&lt;br /&gt;
events.add( Boton.get_boton, &amp;quot;==&amp;quot;, 1, stop_callback )&lt;br /&gt;
events.go()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Temas avanzados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se provee una librería que implementa un [[controlador PID]].&lt;/div&gt;</summary>
		<author><name>Jorge</name></author>	</entry>

	</feed>