Manual de Referencia del Dispositivo...

55
UCLM Grupo de Arquitectura y Redes de Computadores Manual de Referencia del Dispositivo DOMOBOX Félix Villanueva <[email protected]> Francisco Moya <[email protected]> Juan Carlos López <[email protected]> 10 de mayo de 2001 Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp

Transcript of Manual de Referencia del Dispositivo...

Page 1: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Manual de Referencia del DispositivoDOMOBOX

Félix Villanueva<[email protected]>

Francisco Moya<[email protected]>

Juan Carlos López<[email protected]>

10 de mayo de 2001

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp

Page 2: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

Índice General

1 Introducción 3

2 El dispositivo DOMOBOX 4

2.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4

2.2 Interfaz de Usuario de Salida (OSD) . . . . . . . . . . . . . . . . . . . . . . . . . . . .4

2.3 Interfaz con la red domótica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5

2.4 Interfaz de usuario de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6

2.5 Microcontrolador principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7

3 Funcionalidad del dispositivo DOMOBOX 9

4 Carga del firmware del dispositivo DOMOBOX 11

5 Estructuras de datos 13

6 Interacción por el puerto serie 17

6.1 comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17

6.2 Una sesión con el DOMOBOX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20

7 Documentacion firmware 22

7.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22

7.2 Estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23

7.3 Descripción de los módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26

7.4 Módulo domo.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28

7.5 Módulo rc5.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29

7.6 Módulo serial.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30

7.7 Módulo lonworks.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35

7.8 Módulo screen.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36

7.9 Modulo memory.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41

7.10 Módulo osd.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43

7.11 Modulo spi.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46

7.12 Módulo debug.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48

1

Page 3: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.13 Modulo logo.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49

7.14 Escenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50

7.14.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50

7.14.2 EL usuario pulsa una tecla del mando a distancia. . . . . . . . . . . . . . . . . .50

7.14.3 Se establece una conexión a traves del puerto serie . . . . . . . . . . . . . . . .51

7.14.4 La red domótica informa de una variable lonworks . . . . . . . . . . . . . . . .52

7.14.5 Proceso para cargar una pantalla en el monitor de TV . . . . . . . . . . . . . . .53

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 2

Page 4: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Capítulo 1

Introducción

El objetivo de este documento es describir detalladamente el dispositivo DOMOBOX respecto a sumodo de funcionamiento, interacción con el exterior y en general todos los aspectos relacionados conel DOMOBOX que sean necesarios para su posterior mantenimiento, ampliación o modificación de lafuncionalidad asignada a dicho dispositivo.

El dispositivo DOMOBOX es un equipo electrónico que tiene por finalidad proporcionar una interfazde usuario simple y de fácil manejo para una red domótica. Con objeto de mantener la simplicidad yla facilidad de uso, utiliza un receptor de televisión convencional como interfaz de salida de datos, y elpropio mando a distancia del televisor como interfaz de entrada. La interactividad con la red se consiguepor medio de la navegación a través de pantallas con opciones e información domótica. La presentaciónde información y navegación son parecidos al manejo del teletexto convencional. Una vez fijada la elec-trónica del dispositivo DOMOBOX (consultar el documento de arquitectura), se reconocen dos tareas dedesarrollo de software, relacionadas con distintas vertientes del diseño.

En primer lugar, y una vez fijado el dispositivo OSD (On Screen Display) que se va a utilizar, se hadesarrollado una herramienta que permite, de una forma lo más sencilla y automática posible, el diseñode pantallas de información que son mostradas a través de dicho dispositivo. En el diseño se ha incluidotambién el método de navegación (la información de navegación va incluida en las propias pantallas) yla comunicación con la red LonWorks.

En segundo lugar, se ha desarrollado el programa de usuario que se va a ejecutar en el micropro-cesador principal del DOMOBOX, que se encarga básicamente de recibir los comandos del mando adistancia del receptor de televisión y leer las pantallas que correspondan de la memoria de pantallas quetiene conectada, además de las funciones de mantenimiento básicas como son la telecarga de pantallas,programas de inicialización y funcionamiento (sistema operativo). Es evidente que ambas tareas estáníntimamente relacionadas, puesto que la interacción entre ambas es grande . La descripción del firmwareque se ejecuta en el microporcesador principal es uno de los objetivos de este documento para lo cual enel último capítulo se describe detalladamente el firmware insertado en el elemento DOMOBOX.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 3

Page 5: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Capítulo 2

El dispositivo DOMOBOX

2.1 Introduccion

El objetivo de este capítulo es mostrar la arquitectura del dispositivo DOMOBOX haciendo especialhincapié en aquellos aspectos que se han de tener encuenta a la hora de la implementación del firmware.

El DOMOBOX es un equipo de interfaz de control sencillo para la red TELEDOMO. Desde el puntode vista externo el sistema utiliza tres interfaces distintas:

• Interfaz con la red domótica:la transmisión de datos de la red domótica se realiza a través de unainterfaz LonWorks.

• Interfaz de usuario, que a su vez consta de dos subinterfaces:

– Interfaz de usuario de entrada, para el que se utiliza un control remoto por infrarrojos similar(o incluso el mismo) al utilizado en un receptor de televisión convencional.

– Interfaz de usuario de salida, para el que se utiliza un receptor de televisión convencional enel que se muestran mensajes en forma de caracteres alfanuméricos y gráficos.

Se ha construido un equipo en el cual se pueden distinguir cuatro módulos bien definidos.

2.2 Interfaz de Usuario de Salida (OSD)

La presentación de información al usuario se realiza a través de un receptor de TV estándar en el quese muestran caracteres mediante un circuito OSD (On Screen Display).Para llevar a cabo la inserciónde caracteres, se toma la señal del receptor a través de la salida de imagen en base del Euroconector, yse superpone sobre ella una señal RGB que genera el circuito OSD con el menu que se desea presentar.El control del OSD se lleva a cabo mediante una interfaz tipo SPI que conecta dicho circuito al micro-controlador principal. En el equipo que nos ocupa se ha optado por el circuito OSD STV90410. Lascaracterísticas principales de este dispositivo son:

• Permite la inserción de hasta 26 lineas de 40 caracteres cada una. Cada carácter puede ser insertadoen 8 colores diferentes tanto para el fondo como para la tinta. Todos los caracteres se pueden

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 4

Page 6: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

insertar con doble anchura y altura, subrayados, destelleantes y se pueden superponer sobre laimagen o sobre un fondo de color uniforme.

• Incorpora un juego de caracteres estándar así como un juego de gráficos estándar. Ademas se pue-den definir en RAM tanto caracteres como gráficos en una rejilla de 8x10 pixels. Tiene definidosademás una serie de caracteres de control que resultan útiles para la confección de pantallas deinformación (retorno de carro).

• El circuito contiene una memoria RAM interna de 6144 bytes, donde se almacenan pantallas decaracteres y caracteres especiales (gráficos o alfanuméricos) creados por el usuario.

La conexión con el microprocesador consta de tres señales conectadas al puerto dos y una señal(SWITCH) que va desde el puerto 1 directamente al Euroconector. Las señales involucradas son:

• NCS: conectada al puerto P24 (puerto 2 bit 4) es la señal de selección de dispositivo en lógicanegativa, Esta señal debe bajar a ’0’ y continuar a ese valor a lo largo de toda la transferencia dedatos enter el microprocesador y el OSD. Esta señal esta gobernada por el microprocesador, queejerce de maestro del bus.

• SCK:. Reloj de transmisión conectada al P25. Durante las transmisiones de datos entre el OSD yel microcontrolador, este reloj gobierna el momento de cambio de la señal de datos. Mientras NCSes ’1’ esta señal permanece inactiva a ’1’. Al igual que la anterior, esta señal depende del maestrodel bus, que es el microprocesador.

• SDA: Señal de datos bidireccional. Con los flancos del reloj SCK los datos o bien se escriben enel OSD, y por tanto la señal es excitada por el microprocesador, o bien se lee un dato, y entonceses el OSD el que excita la línea (las operaciones de lectura se realizarán en contadas ocasiones).La dirección de este puerto es 0xA6.

• SWITCH. Señal, hacia el Euroconector (no conectada directamente al OSD) que gobierna la in-serción de la imagen OSD. A ’1’ se activa con 12 Voltios el pin 8 del Euroconector, que inserta lasseñales R, G y B que provienen del OSD.

Señal Dirección

NCS 0xA4SCK 0xA5SDA 0xA6SWITCH 0x94

2.3 Interfaz con la red domótica

La interfaz de red domótica consiste en una tarjeta desarrollada por ISDE Ing. que se monta dentro de laplaca del dispositivo DOMOBOX, esta tarjeta contiene un circuito de control de interfaz de red domóticaNeuron Chip, la conexión entre este circuito de control y el microprocesador principal se hace a travésde una interfaz serie tipo SPI que se encuentra conectada al puerto P2 de dicho micro.El manejo de las comunicaciones en el bus SPI que se establece entre el micro de control del DOMOBOXy la tarjeta que hace la adaptación a la red domótica tiene una configuración maestro-esclavo, lo cual

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 5

Page 7: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

implica que las comunicaciones, aunque de naturaleza bidireccional, son asimétricas.El maestro del buses el que gobierna las señales de control del mismo CS (señal que se activa cuando el maestro del businicia una transmisión) y CLK (Marca la temporización de las operaciones en el bus:los datos cambiancon el flanco de bajada de esta señal, y están por tanto estables para ser capturados con el flanco de subidasiempre y cuando la señal CS este activa). Para solventar el problema de que solamente el maestro tienecapacidad de comenzar una transmisión , se ha incluido una señal más (REQUEST) para permitir alesclavo (el micro de control) la petición de transmisión cuando sea necesario. por último las otras dosseñales D_ENT y D_SAL son los datos de entrada y salida del bus SPI.

Señal Dirección

CS 0xB2CLK 0xA0D_ENT 0xA1D_SAL 0xA2REQUEST 0xA3

2.4 Interfaz de usuario de entrada

Otro de los módulos es el interfaz de entrada del usuario que capta los comandos provenientes delmando a distancia (un mando a distancia convencional con teclas de teletexto) y los decodifica paraproporcionarselo al microprocesador principal..

El bus proveniente del decodificador de mando a distancia consta de las siguientes señales.

• COMMAND(5:0), esta señal de 6 bits sirve para identificar la orden del mando a distancia. Seconecta a los bits menos significativos del puerto P0: COMMAND(0)-> P00 ... COMMAND(5)-> P05; A este puerto se puede acceder en modo octeto, a la dirección 0x80, o bien bit por bit, alas direcciones que van de 0x80 a 0x85. "

• SYSTEM(4:0), esta señal de 5 bits, junto con COMMAND, identifica la orden del mando a dis-tancia (más adelante se presenta una tabla para un mando a distancia en particular). Se conecta alos bits más significativos del puerto P0 y a los menos significativos del puerto P1: SYSTEM(0)->P06, SYSTEM(1)->P07, SYSTEM(2)->P10,SYSTEM(3)->P11, SYSTEM(4)->P12. Al puertoP0 se puede acceder en modo octeto en la dirección 0x80, y al puerto P1 en la dirección 0x90;también se puede acceder bit por bit, concatenando las direcciones 0x86, 0x87, 0x90, 0x91, y0x92.

• TOGGLE. Esta señal indica si el número de veces que se ha pulsado la misma tecla es par o impar(para poder llevar a cabo acciones distintas con una sola tecla, como abrir y cerrar un menú). Seconecta al puerto P13, y se accede a ella a través de la dirección 0x93. "RC5IRQ, señal de inte-rrupción de orden de mando a distancia. El microprocesador decodificador se va a programar paraque cada vez que detecte una orden correcta del mando a distancia, coloque los valores corres-pondientes en las señales COMMAND, SYSTEM y TOGGLE; una vez que los valores de dichasseñales están estables, se activa la interrupción (RC5IRQ, activa a nivel bajo), que se conecta opor-tunamente al puerto P33, de dirección 0xB3, que es a su vez la entrada de interrupción INT1 delmicrocontrolador principal.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 6

Page 8: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Resumiendo;Señal Dirección

COMMAND(0) 0x80COMMAND(1) 0x81COMMAND(2) 0x82COMMAND(3) 0x83COMMAND(4) 0x84COMMAND(5) 0x85SYSTEM(0) 0x86SYSTEM(1) 0x87SYSTEM(2) 0x90SYSTEM(3) 0x91SYSTEM(4) 0x92TOGGLE 0x93RC5IRQ 0xB3

2.5 Microcontrolador principal

El bloque microcontrolador principal del elemento DOMOBOX esta basado en un microcontrolador deltipo 51 de con memoria flashEPRON interna de Philips denominado 89C51RC+, que permite la pro-gramación de la memoria flash directamente en el sistema (ISP,In System Programming).Además delmicroprocesador este bloque contiene:

• Un circuito de reinicio, MAX812, que genera una señal de reset correcta al conectar la alimenta-ción al sistema, y permite la generación de un reset manual.

• Un circuito de interfaz RS232, ST232BD, para la descarga remota del software y su escritura flashinterna.

• Una memoria flash de 1Mbit, AT45D011; esta memoria presenta una interfaz SPI serie, ya quede este modo se pueden liberar puertos en el microcontrolador para una aplicación en la que lavelocidad de acceso a la memoria no es una restricción. Esta memoria se utiliza para almacenarlas pantallas de información que se muestran utilizando el OSD. Puesto que cada pantalla ocupaun máximo de 2050 bytes, esta memoria permite almacenar hasta 64 distintas.

• Ademas se reserva un conjunto de puertos para conectar un teclado externo .

Como ya se ha comentado en cada una de las secciones de este documento el módulo microprocesa-dor se conecta a través de las siguientes interfaces al resto de los módulos del sistema:

• Con el módulo de interfaz de red domótica se comunica por una interfaz SPI.

• Con el módulo de recepción de mensajes por control remoto, se comunica mediante una señal deinterrupción y un bus paralelo.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 7

Page 9: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• Con el módulo de inserción de caracteres en el receptor de TV se comunica mediante una interfazSPI.

La memoria flashEPRON serie conectada al microcontrolador principal se usa principalmente parael almacenamiento de pantallas de información que se muestran al usuario durante la navegación. Lamemoria se conecta al puerto 3 del microcontrolador. Las señales que conforman la interfaz entre lamemoria y el micro son:

• CS, Chip Select. Señal de selección del dispositivo. Se conecta al puerto P37, cuya dirección es0xB7. Es una señal de entrada a la memoria, y por lo tanto de salida del micro, que se mantieneactiva (a nivel bajo) durante las operaciones en memoria.

• SCK, Serial Clock. Señal de reloj de temporización de las demás señales del bus, conectada alpuerto P36, cuya dirección es 0xB6. Es una señal de entrada a la memoria, y es por lo tantogobernada por el micro. Los flancos de variación de esta señal establecen los instantes de cambiode las señales del bus.

• SI,Serial Input. Señal de datos de entrada a la memoria, y por tanto de salida del micro, que seconecta al puerto P27, de dirección 0xA7.

• SO, Serial Output. Señal de datos de salida de la memoria, y entrada al micro, que se conecta alpuerto P35, cuya dirección es 0xB5.

Señal Dirección

CS 0xB7SCK 0xB6SO 0xB5SI 0xA7

Este dispositivo de almacenamiento de datos esta organizado en 512 páginas de memoria con 264bytes/página de memoria principal ademas de un buffer de SRAM de 264 bytes (se puede leer de memo-ria principal o del buffer directamente). Se debe tener encuenta que tanto las instrucciones, direccionesy datos deben ser transferidos mandando primero el bit mas significativo. Es necesario recalcar que estecircuito utiliza 9 bits para direccionar la página y otros 9 para direccionar el byte concreto dentro de lapágina, con lo cual las direcciones no estan consecutivas a partir de la 263 la dirección no es correcta(con los 9 bits de direccionamiento dentro de una página se pueden direccionar 512 bytes y las páginassolo contienen 264 bytes).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 8

Page 10: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Capítulo 3

Funcionalidad del dispositivo DOMOBOX

A partir de la carga del firmware en el dispositivo DOMOBOX y la carga de pantallas (estos dos aspectosse detallan en capítulos posteriores) el dispositivo DOMOBOX queda listo para su funcionamiento.

Cuando el usuario desea consultar la información domótica pulsa la tecla correspondiente (definiblecon el programa de edición de pantallas) para iniciar la navegación, en ese momento el usuario navegapor las distintas pantallas mediante la pulsación de las teclas del mando a distancia visualizando diversostipos de pantallas;

Pantalla simple. Es el modelo básico de pantalla. Consta de un contenido gráfico y unos datos denavegación muy simples. Para cada tecla disponible del mando a distancia se asocia un identificador depágina de salto destino.

Pantalla de iconos. Una pantalla de iconos consta de una imagen gráfica de fondo (por ejemplo,el plano de la casa) y un conjunto de iconos seleccionables. Cada icono seleccionable necesita comoinformación de navegación la posición en la que se encuentra, el identificador del icono, y la páginadestino en caso de ser seleccionado.

Pantalla de áreas seleccionables. Muchas de las pantallas en la base de datos del prototipo con-sisten en un menu de opciones seleccionables. Este caso podría considerarse como un caso particularde la pantalla de iconos pero, dadas las características especiales de los caracteres alfanuméricos en elOSD, se tratan de una forma mucho más compacta. Las pantallas de áreas seleccionables constan deuna imagen gráfica de fondo con un conjunto de textos seleccionables. Para cada texto seleccionablehay que guardar como información de navegación la posición en la que se encuentra, los atributos deltexto cuando está seleccionado y cuando no lo está, y el identificador de la pantalla de salto destino (encaso de ser seleccionado). Este tipo de pantalla supone un ahorro de memoria muy importante frente aldiseño original a cambio de una mínima complejidad adicional.

Pantalla de variable domótica. Constituyen el interfaz de interacción con la red domótica. Aligual que en las pantallas de áreas seleccionables, en éstas también existe un conjunto de textos seleccio-nables, pero cada texto no está asociado a una pantalla destino, sino a un valor de una variable domótica.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 9

Page 11: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

La implementación y los datos asociados a este tipo de pantallas son muy similares a las de áreas selec-cionables. Es preciso almacenar el identificador de la variable domótica que se modifica en la pantalla y,en lugar de una página destino, por cada área se almacenará un valor de dicha variable domótica.

Para cada pantalla simple el usuario mediante la pulsación de las teclas del mando distancia ira na-vegando a través de las distintas pantallas cargadas en el DOMOBOX , una vez que esta en una pantallade iconos o areas se moverá a través de las areas o iconos mediante la pulsación de las teclas siguiente yanterior, una vez seleccionada un area o icono y mediante la pulsación de la tecla de OK se visualizaráen el monitor de TV la pantalla asociada a dicha area o icono, por último si la pantalla es de variabledomótica interactuará con la variable correspondiente de dicha pantalla modificando su estado o valor,por tanto, el usuario en su navegación podrá ver el valor o estado (dependiendo del tipo de variable) delas variables domóticas y modificar dicho valor o estado.

El dispositivo DOMOBOX implementa también un mecanismo denominado alarmas los cuales sonproducidos por dispositivos domóticos y que originan que automaticamente se visualize en el receptor deTV una pantalla de información del evento producido sin que el usuario pulse ninguna tecla del mando .Estos eventos se asocian a condiciones anormales tales como detección de humo,gas etc ...

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 10

Page 12: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Capítulo 4

Carga del firmware del dispositivo DOMO-BOX

El control de la programación del elemento DOMOBOX se realiza a través de un puerto serie RS232 quepuede ser conectado a un PC con el programa de telecarga adecuado. la conexión se realiza físicamentea través de un cable RJ11. La adaptación a la capa física correspondiente se realiza utilizando un circuitodiseñado a tal efecto, el ST232, y una vez adecuados los niveles a los valores lógicos que puede manejarel microprocesador, las señales se introducen por los pines del micro que han sido preparados a tal efecto(P30/RXD y P31/TXD). Este puerto serie se va a utilizar para llevar a cabo dos acciones:

• En primer lugar se utiliza como puerto de telecarga del programa principal del microcontrolador,utilizando para ellos la utilidad ISP (In-System Programming), que incorpora este micro.

• En segundo lugar se va a utilizar como puerto de comunicaciones para la teledescarga de laspantallas de información que se almacenan en memoria interna.

El microcontrolador principal del elemento DOMOBOX, 89C51RX+, incluye una memoria internapara almacenamiento del programa FlashEPROM de 32Kbytes o 64Kbytes (dependiendo del modelo),que puede ser programada externamente en la propia tarjeta de circuito impreso del sistema final, utili-zando un procedimiento definido por Philips como In-System Programming (ISP). Este protocolo utilizauna señal externa de programación denominada Vpp, que cuando se conecta a 12 Voltios pone al dispo-sitivo en modo programación de la memoria interna.En la tarjeta de circuito impreso del DOMOBOX se ha tenido en cuenta esta posibilidad, y se ha incluidoun generador de la señal Vpp, así como la conexión adecuada de los pines de transmisión y recepción dedatos, de modo que se puede utilizar ISP. Para más detalles acerca del protocolo de transmisión para laprogramación de la memoria interna se puede consultar la hoja de datos del dispositivo, si bien existe unprograma proporcionado por Philips (Win!SP) que permite llevar a cabo esta programación utilizandoun PC. El método de descarga del programa en la memoria no afecta al programador, que no tiene quetomar más precaución que no exceder el tamaño de código que se puede almacenar en la memoria interna.

Por tanto para la telecarga del firmware en el dispositivo DOMOBOX se debe realizar el siguienteproceso: mediante la compilación (el firmware que aquí se describe se ha desarrollado con el compiladorsdcc versión 2.2.0 bajo entorno Linux) de los fuentes se obtiene el archivo*.hex que contiene todas las

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 11

Page 13: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

tramas que le serán enviadas al microcontrolador mediante el sistema ISP (In System Programming) acontinuación y con el programa ya mencionado (Win!SP) y con el DOMOBOX conectado al PC viapuerto serie ser produce la transferencia propiamente dicha quedando el DOMOBOX listo para su fun-cionamiento (a falta claro esta de cargar las pantallas).

A la hora de modificar el firmware y volver a recompilar se debe poner especial cuidado en que nose solapen la pila y los segmentos de memoria, esto se puede controlar mediante la observación de losarchivos *.map que se generan en el proceso de compilación.

Es necesario resaltar que la programación del dispositivo DOMOBOX no tiene por que hacersemediante el citado programa Win!SP ya que se puede hacer mediante la transmisión de las tramas deprogramación del dispositivo directamente a través del puerto serie.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 12

Page 14: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Capítulo 5

Estructuras de datos

Antes de continuar en el desarrollo de este documento es preciso detallar las distintas estructuras dedatos que se manejan en el firmware del dispositivo DOMOBOX para que se pueda entender el resto deldocumento.

Comenzando por las estructuras asociadas a las pantallas de información que el usuario visualiza enel receptor de TV, dichas pantallas estan divididas en lineas que se componen a su vez de caracteres, elOSD tiene definidos un conjunto de caracteres numéricos y caracteres gráficos almacenados en memo-ria ROM, el usuario posteriormente tiene la posibilidad de definir su propio juego de caracteres tantoalfanuméricos como gráficos que serán almacenados en la RAM del dispositivo.

Una pantalla del monitor de TV generado por el OSD consta de 25 filas de hasta 40 caracteres cadauno, para representar una linea de la pantalla se tiene un descriptor de linea de 16 bits que tiene asociados40 bytes que representan el desplazamiento dentro de la memoria ROM que especifica el carácter que seva a visualizar en la pantalla de TV.

La representación de una pantalla en el receptor de TV viene definida por los datos almacenados en lamemoria del OSD, ahora bien, una pantalla es una unidad lógica que se compone de 1968 bytes divididosen información de descriptores de linea (48 bytes) + información de datos (1920).Cada descriptor delinea es de 2 bytes y puede tener asociada una ristra de hasta 40 descriptores de carácter, de un byte cadauno. Cada uno de los descriptores de linea , puede ser de dos tipos distintos, descriptor de linea uniformey descriptor de cadena de caracteres.

Todo esto en cuanto a la información gráfica de representación de la pantalla en cuestión, ademas deuna información gráfica dentro de una pantalla se deben almacenar una serie de datos que proporcionainformación sobre la pantalla, como son, por ejemplo, los datos de navegación que nos informan de lasiguiente pantalla a cargar si se pulsa una determinada tecla del mando a distancia o la siguiente area aseleccionar etc ... Para la representación de toda esta información se ha creado una estructura de datosque nos almacena toda la información necesaria para la representación de una pantalla es lo que sedenomina unDescriptor de Pantallacuyo contenido es el siguiente;

Un descriptor de pantalla consta de 33 bytes contiguos de la memoria. Esto proporciona exactamente8 pantallas por cada página de la memoria FLASH (264 bytes). Se decidió emplear este tamaño porquedivide exactamente a cada página, de manera que la lectura es más simple (un descriptor nunca puedeocupar dos páginas).

Los siguientes bytes tienen el mismo significado en todos los tipos de pantalla:

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 13

Page 15: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Bytes Significado

0 Modo (0:Simple, 1:Areas, 2:Iconos, 3:LonVar)1,2 Dirección contenido en FLASH3,4 Dirección de datos de navegación en FLASH5,6 Dirección datos plantilla en FLASH7,8 Dirección bloque variables de salida9-12 Salto para 4 teclas13-20 Salto para 8 áreas

Los bytes 9-20 contienen información que realmente depende del tipo de pantalla (9-12 son utilizadosen las pantallas simples, mientras que 13-20 se utilizan en las de áreas y en las de variables domóticas).Sin embargo se reserva espacio en el descriptor para eliminar comprobaciones y agilizar las operaciones.La primera pantalla es especial, se trata de una pantalla simple (es el único modo permitido) que escargada automáticamente al provocar un reset en el DOMOBOX, y contiene información adicional,como son los caracteres alfanuméricos y gráficos definibles por el usuario en el OSD. Esa informaciónse almacena al final:

Bytes Significado (1a pantalla)

24 Key Off29,30 Dirección alfanuméricos en FLASH31,32 Dirección gráficos en FLASH

Todos los modos avanzados de interacción (pantallas de iconos, pantallas de áreas seleccionables ypantallas de variable domótica) necesitan información adicional de navegación que no puede ser incluidaen el descriptor. Esta información se almacena en un bloque independiente de navegación de hasta 64bytes el cual se direcciona en los bytes 3 y 4 de del descriptor de pantalla.

Las pantallas de iconos seleccionables almacenan el bloque de memoria donde se almacena la in-formación de los iconos. Los iconos son bloques fijos de 6 caracteres gráficos (3x2). Cuando se indicaun número de icono se está indexando este bloque. En realidad existen dos bloques de iconos: el iconoactivo (cuando está seleccionado) y los no activos (cuando no están seleccionados). Típicamente sólo sediferencian en un atributo, pero la implementación permite incluso dibujos diferentes:

Bytes Significado (tipo iconos)

28,29 Dirección iconos activos en FLASH30,31 Dirección iconos no activos en FLASH

Las pantallas de control de una variable domótica deben almacenar el identificador de variable do-mótica con la que están relacionadas. Este identificador ocupa un byte en el área del final (de forma quesea compatible con los bytes de las pantallas de áreas seleccionables):

Bytes Significado (tipo LonVar)

29 Identificador variable Lonworks asociado

Ya se ha comentado que existen distintos tipos de pantallas (simples, iconos, areas , domóticas) entodos los casos el OSD representa en el monitor de TV la pantalla almacenada en su memoria. Cuandotenemos que representar una pantalla simple se transfiere desde la memoria FLASH que se utiliza pa-ra almacenar todo el juego de pantallas la pantalla que se desee visualizar a la memoria del OSD y sevisualiza. En el caso de la pantalla de areas e iconos y para flexibilizar la creación de pantallas, se ha de-finido una estructuratemplate o plantilla que a su vez esta compuestas de “parches” que se superponen

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 14

Page 16: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

a la pantalla de color de fondo y que se corresponde con un area o icono, por tanto, en estas pantallas,primero se transfiere la pantalla de color de fondo, se comprueba si tiene un template asociado y si es asise transfiere desde la memoria cada uno de los patchesy se superponesobre la pantalla ya transferida,dentro de cada uno de los patches bienen definidos los datos necesarios para su correcta ubicación dentrode la pantalla.

FON

DO

PLA

NT

ILL

A

CO

MPO

SICIO

N FIN

AL

Patch 1

Patch 2

Patch 3Patch 1

Patch 2

Patch 3

Figura 5.1: Composición de una pantalla de areas seleccionables

La cabecera de un patch es como sigue:Bytes Significado

0-1 desplazamiento en OSD2 0=normal, 1=mostrar valor lon3 1=último patch4-5 dirección en memoria datos6-7 longitud en bytes

En el caso de las pantallas de iconos (el tipo de pantalla es el byte 0 del descriptor) se debe superponertodos y cada uno de los iconos presentes en la pantalla y que estan direccionados por los bytes 30 y 31del descriptor de la pantalla de iconos.

En el caso de que se represente información domótica ,se define ademas, asociado a cada pantallaun conjunto de identificadores de acción que indican para cada variable domótica representada y paracada valor de dicha variable la acción a tomar. La dirección de esta lista de identificadores de acción vie-nen en los bytes 7 y 8 del descriptor de pantalla, la estructura de un identificador de acción es como sigue:

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 15

Page 17: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Bytes Significado

0 identificador de variable1 valor2 1 = último identificador de acción3 0 = goto page, 1 = match template, 2 = value template4-5 dirección de template o página de salto6-7 no usados

Cuando en la navegación el usuario entra en una pantalla de variable domótica el firmware realizauna petición de estado a la red lonworks, cuando llega la respuesta por parte de dicha red, se compruebasi para esa tupla variable-valor existe alguna plantilla a cargar,si es asi, se visualiza la plantilla definida.Esta plantilla se debe especificar en el editor de pantallas.

En cuanto a la interfaz con lonworks las notificaciones provenientes de este interfaz y las peticionesa dicha interfaz tienen la siguiente estructura;

Bytes Significado

0 Comando lonworks1 Identificador Variable2 Longitud de los bytes de datos3.. Bytes de datos con el valor de la variable

Los comandos que se especifican en el primer byte pueden ser:

• ST_TR: El DOMOBOX consulta estado de TR.

• ST_BOX: El TR consulta el estado del DOMOBOX.

• WR_TR: El DOMOBOX envía al TR un nuevo valor de una variable de red.

• RD_TR: El DOMOBOX solicita al TR el valor de una variable de red.

• WR_BOX: El TR comunica al BOX un nuevo estado de una variable de red.

• RD_BOX: El TR comunica al BOX el valor de una variable de red, solicitado mediante el comandoRD_TR.

• ERR_BOX: El TR indica al BOX que ha habido un error de comunicaciones al intentar realizar laoperación.

Los identificadores de variable de red se especifican con el programa de edición de pantallas [San00]a la hora de la realización de dichas pantallas asi como las teclas de navegación del mando a distancia.

Del decodificador del mando a distancia a el microcontrolador vienen dos buses denominados SYS-TEM y COMMAND y una señal TOGGLE que se deben leer cada vez que se origina una interrupciónproveniente de este dispositivo del DOMOBOX y que identifican la tecla pulsada (SYSTEM Y COM-MAND) y si el número de veces que se ha pulsado dicha tecla es par o impar (TOGGLE).

Dentro de las notificaciónes que provienen de la red Lonworks existen ciertas variables de red (nor-malmente sensores de agua, gas ...) que se asocian a eventos denominadosalarmas y que originan queinmediatamente se visualize por el monitor de TV la pantalla asociada a dicha alarma. La pantalla quecorresponde a cada alarma se fija con la herramienta de edición de pantallas.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 16

Page 18: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Capítulo 6

Interacción por el puerto serie

El objetivo de este cápitulo es describir la manera de controlar el dispositivo DOMOBOX a traves delpuerto serie. Para labores de mantenimiento,depuración y de control a traves de un PC en el firmware delDOMOBOX se han implementado una serie de comandos que nos permiten un completo control sobreel dispositivo que nos ocupa proporcionandonos una completa gama de utilidades las cuales las podemosutilizar tanto para ver el estado del dispositivo DOMOBOX como para emular todos los tipos de eventosque se pueden generar y ver el comportamiento del dispositivo.

Estos comandos por los cuales haremos un extenso recorrido son caracteres que se le mandan alDOMOBOX via puerto serie a traves del ya comentado conector RJ11, en muchos de los casos dichoscaracteres van acompañados de argumentos que especifican, según el comando, distintos parametrosnecesarios para la correcta ejecución del comando.

La manera de interactuar con el dispositivo DOMOBOX es la siguiente , una vez el DOMOBOX seha programado y en funcionamiento, , se conecta mediante el puerto serie desde el PC al conector RJ11que contiene la placa del dispositivo , una vez conectado debemos mandar a traves del puerto serie loscomandos y argumentos que queramos ejecutar.

La manera de ejecutar un comando es enviar primero el buffer de argumentos , este buffer se quedaalmacenado en el dispositivo hasta que le llega un caracter el cual le indica que tiene que hacer conlos argumentos que le han llegado, es obvio que la trama de argumentos tiene que estar acorde con elcomando a realizar, dichas tramas se especifican en este mismo capítulo. La trama de datos con losargumentos irá finalizada por el caracter EOT (End Of Transmission)indicando el fin de la trama y elchecksum de la trama. Es necesario resaltar que los argumentos deben ir en notación hexadecimal.

6.1 comandos

• ’b’ : Recibir trama. Prepara al DOMOBOX para recibir una trama,los datos transmitidos despuesde este comando se irán almacenando en el buffer de recepción del dispositivo DOMOBOX hastaque reciba un EOT (En Of Transmission).No tiene argumentos.

• ’B’ : Transmitir trama.Indica al DOMOBOX que transmita la trama almacenada en su buffer atraves del puerto serie, normalmente se utiliza para recoger resultados originados por un comandoanterior. No tiene argumentos.

• ’d’ : debug off. Establece el DOMOBOX en modo normal.No tiene argumentos.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 17

Page 19: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• ’D’ : debug on . Establece el DOMOBOX en modo depuración.No tiene argumentos.

• ’?’ : transmitir descriptor. Indica al DOMOBOX que transmita el descriptor de pantalla con el queactualmente esta trabajando.No tiene argumentos.

• ’!’ : transmitir navegación. Indica al DOMOBOX que transmita la información de navegación conla que actualmente esta trabajando.

• ’r’ : leer RAM 8051.Previamente a este comando se ha debido mandar al dispositivo DOMOBOXuna trama con los argumentos siguientes:

Bytes Significado

0 Dirección de memoria low origen1 Dirección de memoria high origen2 Zona de memoria. 0=data, 1=xdata, 2=code.3 Longitud de datos de lectura

• ’R’ : Escribir RAM 8051.La trama de argumentos correspondiente a este comando tiene el siguien-te formato:

Bytes Significado

0 Dirección de memoria low destino1 Dirección de memoria high destino2 Zona de memoria.0=data, 1=xdata,2=code3 Longitud de datos de escritura4.. Datos de escritura

• ’o’ : leer RAM OSD.Con el formato siguiente en sus argumentos:

Bytes Significado

0 Dirección de memoria high origen1 Dirección de memoria low origen2 Longitud de datos de lectura

• ’A’: Este comando simula un evento proveniente de la red Lonworks, los argumentos asociados aeste comando se corresponden con las tramas provenientes de la red.

Bytes Significado

0 Comando Lonworks1 Identificador variable2 Longitud de datos3.. Datos

• ’O’ : escribir RAM OSD.Indicándole en los argumentos;

Bytes Significado

0 Dirección de memoria high destino1 Dirección de memoria low destino2 Longitud de datos de escritura3.. Datos de escritura

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 18

Page 20: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• ’m’ : leer memoria serie (AT45DB011).Con la trama de argumentos siguiente.

Bytes Significado

0 Dirección de memoria high origen1 Dirección de memoria low origen2 Longitud de datos de lectura

• ’M’ : escribir memoria serie.Tiene como argumentos:

Bytes Significado

0 Dirección de memoria high destino1 Dirección de memoria low destino2 Longitud de datos de escritura3.. Datos de escritura

• ’l’ : leer variable lonworks.Almacena en el buffer del dispositivo DOMOBOX la última peticióny posterior respuesta realizada por el dispositivo DOMOBOX. con lo que la trama formada estaracompuesta por 8 bytes, cuando se obtenga la trama desde el dispositivo DOMOBOX los bytesrecividos tendrán el siguiente significado.

Bytes Significado

0 Comando trama de respuesta1 id variable2 longitud datos respuesta (1)3 estado o valor de la variable4 Comando trama de petición5 id variable6 longitud datos petición(1)7 datos de la petición

• ’L’ : escribir variable lonworks. Los argumentos son los siguientes:

Bytes Significado

0 Comando trama de respuesta1 id variable2 longitud datos respuesta (1)3 estado o valor de la variable4 05 06 07 0

Los últimos bytes a cero se utilizan para limpiar el buffer de recepción de tramas desde el interfazlonworks.(no necesariamente tienen que ser cero, es valido cualquier caracter de inicialización).

• ’t’ : transferir de memoria a OSD. 6 argumentos;

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 19

Page 21: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Bytes Significado

0 Dirección de memoria high origen(MEMORIA)1 Dirección de memoria low origen(MEMORIA)2 Longitud de datos de escritura high3 Longitud de datos de escritura low4 Dirección de memoria high destino (OSD)5 Dirección de memoria low destino(OSD)

• ’+’ : Emula tecla del mando a distancia

• ’-’ : Emula tecla del mando a distancia

• ’>’ : Emula tecla del mando a distancia

• ’<’ : Emula tecla del mando a distancia

• ’0’ : carga la configuracion por defecto, no tiene argumentos.

• ’g’ : leer descriptor.Este comando carga desde la memoria el descriptor de pantalla correspondienteal numero que se le facilita como argumento para que el DOMOBOX trabaje con el.

• ’@’ : Manda el vector logo0 por el puerto serie.

• ’ ’ : solo devuelve el ’.’ que es el carácter que indica que el DOMOBOX esta listo. no tieneargumentos.

Como el lector ha podido comprobar la funcionalidad de estos comandos permite realizar cualquieracción sobre el dispositivo DOMOBOX mediante el envío de datos y comandos.

La utilización de estos comandos esta destinado en principio a apoyar la depuración y mantenimientodel dispositivo ya que mediante la utilización de la herramienta de gestión de pantallas y una vez car-gadas en el DOMOBOX este se queda totalmente operativo a traves de la interfaz de entrada (mando adistancia) y la interfaz de salida (Receptor de TV)

6.2 Una sesión con el DOMOBOX

Esta sección describe una sesión tipica de depuración a modo de ejemplo a través del puerto serie,suponemos que tenemos un programa de comunicaciones a traves del puerto serie y que tenemos eldispositivo DOMOBOX conectado al puerto serie. Los comandos se colocan entre comillas para aportarclaridad, en una interacción real no llevan dichas comillas.

Vemos si el dispositivo DOMOBOX esta listo.PC->DOMO “ “ ; Mandamos espacio en blanco para ver si el DOMOBOX esta disponible.DOMO->PC “.” ; Si esta listo el DOMOBOX responde con un punto.

Si queremos que emular al mando a distancia;

PC->DOMO “>” ; Igualmente podemos mandar los caracteres +,< o -.DOMO->PC “.” ; responde con un . si ha entendido el comando.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 20

Page 22: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Si queremos obtener el descriptor de la pantalla actual;

PC->DOMO “?” ; ComandoDOMO->PC “byte1 byte2 byte3.....byte33” ;El descriptor (en este caso no hace falta el comando Bpara que mande la trama ya que la manda directamente.A partir de los datos anteriores podemos obtener cualquier información asociada a dicho descriptor porejemplo:

Si queremos tener los datos de navegación tenemos dos posibilidades:

Pedirle los datos almacenados en el vector de navegación directamente:

PC->DOMO “!”;DOMO->PC “byte0 byte1 byte2 .... byte63”

o bien leer los datos desde memoria mandándole previamente la dirección de memoria almacenada en eldescriptor:PC->DOMO “b” ; Preparamos al DOMOBOX para mandarle la trama de argumentos.DOMO->PC “.” ; Responde con un . si ha entendido el comandoPC->DOMO “ADDRHIGH ADDRLOW NUMBERBYTES” ; Dirección alta, dirección baja, Nume-ro de bytes(64 en este caso).PC->DOMO “m” ; Leer de la memoria serie y almacenarlo en el buffer de transmisión.DOMO->PC “.” ; Reconocimiento del comando.PC->DOMO “B”; Se le indica que envie el buffer de transmisión.DOMO->PC “byte0 byte1 byte2 .... byte63”

Si queremos cargar la pantalla inicial el dispositivo DOMOBOX

PC->DOMO “0”; comando de inicializacion.DOMO->PC “.”; Reconocimiento del comando . El dispositivo DOMOBOX muestra la pantalla inicial.

Se debe recordar que las tramas enviadas deben tener al final el código hexadecimal EOT (End OfTransmission) que es el 0x04.

Asi también es importante resaltar que el dispositivo DOMOBOX implementa recepción/transmisióntransparente similar al HDLC, por lo que tanto en la transmisión de tramas y recepción de estas se debetener encuenta asi como el checksum de validación.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 21

Page 23: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Capítulo 7

Documentacion firmware

7.1 Introducción

El objetivo de este capítulo es dar una descripción detallada del firmware desarrollado para el dispositivoDOMOBOX describiendo todos los módulos que componen este firmware asi como la funcionalidad detodas y cada una de las funciones y macros que estos módulos contienen. Este documento por tantofacilitará la comprensión de este software tanto para labores de mantenimiento como para la posible am-pliación o modificación de la funcionalidad de dicho dispositivo. Es necesario recordar que el dispositivoDOMOBOX tiene tres interfaces bien definidos;

• Interfaz con la red domótica LonWorks

• Interfaz de usuario de entrada para lo cual se utiliza un control remoto por infrarrojos similar alutilizado en un receptor de televisión convencional mediante un microcontrolador decodificadorRC5 (AT89C1051) conectado al microcontrolador principal (89C51RX+).

• Interfaz de usuario de salida, para el que se utiliza un receptor de televisiÓn convencional en el quese muestran mensajes en forma de caracteres alfanuméricos y gráficos. Esta función es realizadapor el circuito OSD conectado al puerto 2 del microcontrolador principal y que se encarga de lacarga en el receptor de TV de los anteriormente mencionados gráficos y caracteres a traves de uneuroconector.

Antes de continuar recordar algunos aspectos de los distintos dispositivos que conforman la arquitec-tura del elemento DOMOBOX y que nos condicionan nuestra manera de programar dichos dispositivos:

• Memoria AT45DB011: Este dispositivo de almacenamiento de datos esta organizado en 512 pá-ginas de memoria con 264 bytes/página de memoria principal ademas de un buffer de SRAM de264 bytes (se puede leer de memoria principal o del buffer directamente). La comunicación conesta memoria se hace a traves de una entrada y salida serie (SI y SO) además de con las señales decontrol (SCK , CS y RDY/BUSY). Se debe tener encuenta que tanto las instrucciones, direccionesy datos deben ser transferidos mandando primero el bit mas significativo. Es necesario recalcarque este circuito utiliza 9 bits para direccionar la página y otros 9 para direccionar el byte concreto

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 22

Page 24: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

dentro de la página, con lo cual las direcciones no estan consecutivas a partir de la 263 la direcciónno es correcta (con los 9 bits de direccionamiento dentro de una página se pueden direccionar 512bytes y las páginas sólo contienen 264 bytes)

Se van a utilizar direcciones de 16 bits, la manera de resolver esto será tomando estos 16 bitscomo más significativos (dentro de los 18 bits de una dirección completa) con lo cual podremosdireccionar los bytes de 4 en 4 o como los menos significativos con lo que podremos direccionartoda la memoria.

• OSD STV9410 : Este dispositivo se encarga de controlar la pantalla de televisión que hace de in-terfaz con el usuario del elemento DOMOBOX. Contiene tres señales para controlar el dispositivoa traves de un interfaz serie y es totalmente programable mediante la lectura/escritura de los sieteregistros internos que posee. Contiene 6 Kbytes en un chip RAM para datos ya sean pantallasque mostrará por el receptor de TV o juegos de caracteres definidos por el usuario. También po-see almacenados en memoria ROM un conjunto de 128 caracteres alfanuméricos y 128 caracteresgráficos.

Para una visión detallada de la arquitectura del elemento DOMOBOX remitase a [Gar99a].

Esta documentación corresponde al firmware que contiene el citado dispositivo y que ha sido desa-rrollado para proporcionar la funcionalidad especificada en [Gar99b].

Todo el software ha sido desarrollado bajo plataforma linux y utilizando el compilador sdcc [hel] , elcual genera los archivos necesarios para la arquitectura del microcontrolador que contiene el dispositivoDOMOBOX (89C51RX+) , asi mismo, el lenguaje utilizado es C con las extensiones apropiadas quepermite utilizar el compilador sdcc.

La compilación del programa se hace de manera sencilla mediante el archivo Makefile adjunto alfirmware que ejecuta todas las ordenes apropiadas para la compilación y creación del archivo final (do-mo.hex) el cual sera el que se deberá cargar en el elemento DOMOBOX.

Por último y para una correcta comprensión tanto de este documento como del firmware se recomien-da tener presente las hojas técnicas de los distintos elementos que forman parte del elemento DOMOBOXespecialmente [PHI98] (MICROCONTROLADOR) [ATM98](MEMORIA) y [SGS96] (OSD) .

En dichos documentos se pueden ver los cronogramas de temporización de las señales necesariospara la transmisión de datos para cada uno de los módulos y que también vienen descritas en [Gar99c]

7.2 Estructuras de datos

Es necesario antes de pasar a la descripción de los distintos módulos en que se divide este firmwaredescribir las distintas estructuras de datos que se emplean en dicho firmware y que ya se han comentadoen capítulos anteriores.

Una pantalla de información es una unidad lógica capaz de presentarse en el receptor de TV en únicapantalla, se han distingido tres tipos de pantallas atendiendo a su contenido tal y como se describe en[Moy00]:

Pantalla simple. Es el modelo básico de pantalla. Consta de un contenido gráfico y unos datos denavegación muy simples. Para cada tecla disponible del mando a distancia se asocia un identificador depágina de salto destino.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 23

Page 25: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Receptor

TV

Infrarrojos (RC5)

Interfaz deUsuario deSalida (OSD)

Interfaz deUsuario de Entrada

MicroControlador

Interfaz deRed

DomoticaLonWorks

Figura 7.1: Arquitectura del dispositivo DOMOBOX

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 24

Page 26: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Pantalla de iconos. Una pantalla de iconos consta de una imagen gráfica de fondo (por ejemplo,el plano de la casa) y un conjunto de iconos seleccionables. Cada icono seleccionable necesita comoinformación de navegación la posición en la que se encuentra, el identificador del icono, y la páginadestino en caso de ser seleccionado.

Pantalla de áreas seleccionables. Muchas de las pantallas en la base de datos del prototipo con-sisten en un menu de opciones seleccionables. Este caso podría considerarse como un caso particularde la pantalla de iconos pero, dadas las características especiales de los caracteres alfanuméricos en elOSD, se tratarán de una forma mucho más compacta. Las pantallas de áreas seleccionables constan deuna imagen gráfica de fondo con un conjunto de textos seleccionables. Para cada texto seleccionablehay que guardar como información de navegación la posición en la que se encuentra, los atributos deltexto cuando está seleccionado y cuando no lo está, y el identificador de la pantalla de salto destino (encaso de ser seleccionado). Este tipo de pantalla supone un ahorro de memoria muy importante frente aldiseño original a cambio de una mínima complejidad adicional.

Pantalla de variable domótica. Constituyen el interfaz de interacción con la red domótica. Aligual que en las pantallas de áreas seleccionables, en éstas también existe un conjunto de textos seleccio-nables, pero cada texto no está asociado a una pantalla destino, sino a un valor de una variable domótica.La implementación y los datos asociados a este tipo de pantallas son muy similares a las de áreas selec-cionables. Es preciso almacenar el identificador de la variable domótica que se modifica en la pantalla y,en lugar de una página destino, por cada área se almacenará un valor de dicha variable domótica.

Cada pantalla viene descrita, como ya se ha citado en capítulos anteriores, por un vector de 33bytes que contiene toda la información de la pantalla y los datos necesarios para su representación yfuncionamiento.

En todo el firmware, el descriptor de pantalla que contiene la pantalla que se esta visualizando enel receptor de TV se almacena en el vectordescdefiniéndose todas las direcciones de pantalla y datosconforme a los valores almacenados en dicho vector (screen.h). La pantalla inicial que se carga al resetearel DOMOBOX contiene como bien se ha citado anteriormente información especial, esta página estadefinida en el vectorldesc0(logo.c).

El dispositivo DOMOBOX contiene almacenadas 64 pantallas cuyos descriptores se almacenan des-de la posición 0000 a la posición 0400 de la memoria FLASH del microcontrolador a continuaciónde dichos descriptores se situan los caracteres alfanuméricos (850 bytes) y los caracteres gráficos (960bytes) definidos por el usuario por último se situan los datos correspondientes a cada pantalla.

Otros vectores importantes son los vectores:

• nav: Este vector contiene todos los datos de navegación asociados a una pantalla, se carga a partirde la dirección almacenada en los bytes 3 y 4 (byte alto y bajo de la dirección respectivamente)del descriptor de pantalla.Su longitud es de 64 bytes.

• lon:Este vector contiene las tramas de datos provenientes de la interfaz lonworks y que se cargacuando se origina la interrupción asociada a dicha interfaz.

• lonreq:Las peticiones por parte del dispositivo DOMOBOX a la red lonworks se almacena previa-mente en este vector, a continuación se origina la interrupción asociada a dicha interfaz para quesea enviada a dicha red.(la respuesta en caso de haberla por parte de dicha red será almacenada enel vectorlon).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 25

Page 27: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• buf: Este buffer se utiliza para recibir y transmitir tramas de datos a través del puerto serie.

Existen otras variables globales importantes cuyo significado se describe a continuación.

• evLon, evRC5, evScr,evRcv : estas variables identifican si se ha originado un evento de LON-WORKS, RC5, pantalla o puerto serie respectivamente. Su valor a 1 originará la llamada al ma-nejador de dicho evento.

• RC5_system y RC5_command : almacenan el código de la tecla pulsada por el usuario en elmando a distancia.

• lon_alarm : Contiene la dirección de alarmas de lonworks.

• lon_vars : Contiene la dirección de salida de las variables lonworks.

Por problemas de solapamiento de la pila con los demás segmentos de datos en ocasiones se utilizanestas variables globales para almacenar datos temporales dentro de las funciones ya que de otra manerase tendrían que declarar variables locales para su almacenamiento con el consiguiente aumento de lazona de pila.

7.3 Descripción de los módulos

En el desarrollo del firmware se ha optado por una descomposición en módulos que se corresponde con laarquitectura del dispositivo DOMOBOX y que a continuación se pasa a describir a modo de introducciónpara a continuación, en apartados posteriores, describir de forma detallada cada uno de los módulos.

Cada uno de los módulos se corresponde con un archivo .c y en la mayoria de los casos con sucabecera .h;

• domo.c: Contiene el programa principal, la función de inicialización hardware y la declaración delas interrupciones que se van a utilizar.

• rc5.c : Contiene la interrupción que se activará cuando el usuario pulse las teclas del mando adistancia para cualquiera de las operaciones que puede realizar mediante estas ademas del mane-jador de dicho dispositivo (decodificación del código RC5). En el archivo rc5.h se especifican lascabeceras de las funciones que serán utilizadas por otros módulos y la macro que establece losvalores iniciales para la correcta configuración del dispositivo.

• serial.c : Ademas de contener las funciones necesarias para transmitir y recibir bytes por el puertoserie del microcontrolador contiene la función que interpreta dichos bytes y que, dependiendode los comandos recividos por dicho puerto , realiza las llamadas oportunas a los otros módulospara realizar las acciones adecuadas a dichos comandos. En serial.h ser definen las constantes deconfiguración del puerto del microcontrolador además de la macro para inicializar dicho puerto.

• lonworks.c: En este archivo se adjunta la interrupción correspondiente a la interfaz con la redLonworks y el manejador de eventos de dicha interfaz.

• memory.c : Las funciones correspondientes a la lectura y escritura de la memoria externa (AT45D011)que forma parte de la arquitectura del DOMOBOX estan implementadas en este archivo, a su vez,en el archivo memory.h las correspondientes cabeceras de dichas funciones.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 26

Page 28: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• osd.c : Este módulo contiene las funciones relacionadas con la lectura y escritura de la memoria deldispositivo OSD que contiene el dispositivo DOMOBOX. En el archivo osd.h estan las cabecerasde las funciones de lectura y escritura asi como la macro de inicializaciÓn del dispositivo OSD.

• screen.c: Este módulo implementa la navegación e insercción de pantallas , tambien implementalas peticiones a la interfaz de lonworks de valores de variables y de la modificación de estasvariables atendiendo a comandos del mando a distancia (o del puerto serie). Forman parte deeste módulo funciones cuya labor es transmitir información entre los distintos dispositivos queforman parte de la arquitectura del DOMOBOX. En el archivo screen.h tenemos las cabecerasde las funciones además de las definiciones de macros correspondientes a las actualizaciones departes de pantallas etc ..

• p89c51rc.h : En este archivo se definen las direcciones de los registros del microcontrolador prin-cipal 89C51RC.

• spi.h : Este módulo contiene la definición de macros para el acceso a la interfaz SPI.

• interface.h : Se definen las señales involucradas en las transferencias de datos entre los distintosmódulos del dispositivo DOMOBOX y el microcontrolador principal.

• debug.c : Implementa funciones de salida por el puerto serie utilizando polling.

• Makefile : Este archivo no corresponde al firmware propiamente dicho, corresponde al archivo quecontiene las órdenes oportunas para la compilación del software anteriormente descrito mediantela utilidad make del sistema operativo linux.

• logo.c : Este módulo almacena las pantallas por defecto del DOMOBOX.

Una vez descritos los diferentes archivos que forman parte del firmware del dispositivo DOMOBOXpasamos a describir en detalle cada uno de los módulos junto con su archivo de cabecera si lo hubiera.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 27

Page 29: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.4 Módulo domo.c

Contiene la inicialización y el bucle principal de ejecución del firmware.

Dos funciones componen este módulo ;

• void initialize_hardware() critical : Se encarga de llamar a las distintas macros de inicializaciónpara cada uno de los elementos que componen la arquitectura del dispositivo DOMOBOX asicomo de eliminar todas las interrupciones.

• void main () : funcion principal del firmware, es un bucle infinito que tiene la siguiente estructura:

REPETIR SIEMPRESI evento_lonworks ATENDER A EVENTO LONWORKSSI evento_puerto_serie ATENDER A EVENTO PUERTO SERIESI evento_rc5 ATENDER A EVENTO RC5

FIN REPETIR SIEMPRE

Aparte de estas funciones también se definen en este archivo las interrupciones que se van a utilizary que se explicarán detalladamente en su correspondiente módulo.

Las ISR deben ser critical (prohiben interrupciones) para no desbordar la pila. Hay que declarartodas las ISR en el archivo principal para que el microcontrolador las ponga en la tabla de interrupciones

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 28

Page 30: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.5 Módulo rc5.c

Implementa la recepción de los datos provenientes del mando a distancia.

Este módulo implementa las siguientes funciones:

• void isr_rc5() interrupt INT_X1 critical using 2: Implementa la interrupción que se origina cuandoun botón del mando a distancia es pulsado y el detector del dispositivo DOMOBOX lo capta, larutina de interrupción guarda el código RC5 que corresponde a la tecla pulsada y que se divide endos partes COMMAND y SYSTEM.Además mediante la señal TOGGLE sabemos si el númerode veces que se ha pulsado la tecla del mando a distancia es par o impar.Se leen los tres valores delos correspondientes registros y se almacenan en las variables globales al módulo RC5_command,RC5_system y RC5_toggle. En esta interrupción se pone a verdadero la variable global evRC5para que en el bucle principal (main.c)se llame al manejador correspondiente a RC5.

• void rc5_handler(): Esta función es la invocada en el bucle principal (main.c) para atender los even-tos originados por la interrupción de RC5,en esta función, comprobamos que el comando de la te-cla pulsada sea uno de los válidos y tras esta comprobación llamamos a la función screen_event(1)que realizará las operaciones oportunas dependiendo del comando que hemos almacenado en lavariable RC5_command.(en la variable RC5_command almacenamos un número entre 10 y 13dependiendo del cÓdigo completo almacenado en la interrupciÓn).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 29

Page 31: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.6 Módulo serial.c

Este módulo se encarga de la interfaz RS232 que puede ser conectado a un PC con el programa de te-lecarga adecuado, la conexión se realiza fisicamente a través de un cable RJ11. Por este puerto serie sevan a llevar a cabo dos acciones principales: en primer lugar se utiliza como puerto de telecarga del pro-grama principal del microcontrolador, utilizando para ello la utilidad ISP (In-System Programming), queincorpora este micro; en segundo lugar se va utilizar como puerto de comunicaciones para teledescargarlas pantallas de información que se almacenan en memoria interna.

Para la realización de estas funciones ademas de todas las referentes a las operaciones requeridaspor las domoutils se implementan en este módulo una serie de funciones que a continuación se pasan adescribir:

• SERIAL_XMIT_BYTE : Esta macro implementa una transmisión transparente similar a HDLCy lo que hace es mandar a traves del puerto conectado al conector RJ11 y que en el programase identifica con SBUF el carácter apuntado por la variable tx_bufptr que pertenece al buffer detransmisión.También se encarga de ir calculando el checksum de los bytes transmitidos.

• SERIAL_RCV_BYTE : En esta macro se implementa la recepción transparente similar a HDLC,al contrario que la anterior , se encarga de coger los datos del puerto serie y almacenarlos en elbuffer de recepciÓn (rx_bufptr).

• void isr_serial() interrupt INT_SP critical using 1: La interrupción correspondiente al puerto seriey que ocurre cuando un byte ha sido transmitido o recibido, esta interrupción , valiéndose de lasmacros arriba descritas, se encarga de transmitir y recibir los buffer de transmisión y recepciónañadiendole el EOT(fin de transmisión) además del correspondiente checksum en el caso de latransmisión.

• void serial_xmit_buf (xdata unsigned char* abuf, unsigned char alen): Esta función se encarga detransmitir el bufferabuf de longitudalen , tiene implementadas dos maneras de transmisión, porinterrupcion o por polling , segun este o no definida la constante USE_INT_FOR_TX, en el casode transmisión por interrupción , manda el primer caracter solamente y despues los sucesivos saltosde la interrrupción de TX mandarán el resto. En el caso de por polling se hace un bucle iterativoaplicando la transparencia y añadiendo el carácter EOT asi como el checksum correspondientecalculado.

A continuación se definen una serie de funciones que se encargan de implementar toda la funciona-lidad de las órdenes que podemos recibir a través del puerto serie.

Las tramas recividas a través del puerto serie pueden ser de dos tipos:

• Indicadoras de comando: Un solo byte que especifica el comando.

• Datos: Que a su vez pueden ser :

– Argumentos:Contiene los argumentos necesarios para un determinado comando.

– Tramas de datos: Cuando sea necesario la transmisión de varias tramas (habitualmente parala escritura de datos en algúno de los dispositivos del DOMOBOX).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 30

Page 32: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Las distintas órdenes junto con su trama de argumentos (en el caso de que la lleven y de ser así sedebe enviar justo antes de mandar el comando) son:

• ’b’ : Recibir trama. Prepara al DOMOBOX para recibir una trama,activa el modo recepción dedatos (data_mode=1) e inicializa el puntero de recepción, la suma de checksum y el número debytes recibidos.

• ’B’ : Transmitir trama.Indica al DOMOBOX que transmita la trama almacenada enbuf. Mediantela llamada a la función serial_xmit_buf se transmite dicho vector.

• ’d’ : debug off, desactiva el modo depuración.

• ’D’ : debug on, activa el modo depuración.

• ’?’ : transmitir descriptor, mediante la llamada a la función serial_xmit_buf transmite el vectordesca través del puerto serie y que contiene el descriptor de pantalla con la que se trabaja en elmomento de la petición del comando.

• ’!’ : transmitir navegación. mediante la llamada a la función serial_xmit_buf transmite el vectornav a través del puerto serie y que contiene los datos de navegación asociados a la pantalla con laque se trabaja en el momento de la petición del comando.

• ’r’ : leer RAM 8051.Tiene como argumento la dirección de memoria (2 bytes buf[0] el menossignificativo mientras que buf[1] tiene el byte mas significativo) y la longitud buf[3] de los datosque se quieren leer. Los datos leídos los almacenara en buf. Invoca a la función comm_ram_readpara realizar esta operación.

• ’R’ : Escribir RAM 8051. Tiene como argumento la dirección de memoria (2 bytes buf[0] el menossignificativo mientras que buf[1] tiene el byte mas significativo) y la longitud buf[3] de los datosque se quieren escribir seguido de los datos propiamente dichos en el mismo buffer. Invoca a lafunción comm_ram_write que es la que realiza esta operación.

• ’o’ : leer RAM OSD.Tiene como argumento la dirección de memoria (2 bytes buf[0] el massignificativo mientras que buf[1] tiene el byte menos significativo) y la longitud buf[3] de losdatos que se quieren leer

• ’O’ : escribir RAM OSD.Tiene como argumento la dirección de memoria (2 bytes buf[0] el mássignificativo mientras que buf[1] tiene el byte menos significativo) y la longitud buf[3] de los datosque se quieren escribir seguido de los datos propiamente dichos en el mismo buffer

• ’m’ : leer memoria serie.Tiene como argumento la dirección de memoria (2 bytes buf[0] el massignificativo mientras que buf[1] tiene el byte menos significativo) y la longitud buf[3] de los datosque se quieren leer.

• ’M’ : Escribir memoria serie.Tiene como argumento la dirección de memoria (2 bytes buf[0] elmás significativo mientras que buf[1] tiene el byte menos significativo) y la longitud buf[3] de losdatos que se quieren escribir seguido de los datos propiamente dichos en el mismo buffer.

• ’l’ : leer variable lonworks.Se almacena el contenido del vectorlon en el vectorbuf para suposterior transmisión por el puerto serie. También almacena el valor del vectorlonreq.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 31

Page 33: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• ’L’ : Escribir variable lonworks. A partir de la trama de argumentos asociada a este comando sealmacena desde el vectorbuf al vectorlonreq para solicitar la ejecución de un comando LON-WORKS.

• ’t’ : Transferir de memoria a OSD. 6 argumentos; dirección fuente de memoria (buf[0] el mássignificativo buf[1] el byte menos significativo ) la longitud de datos (buf[2] byte más significativoy buf[3] byte menos significativo) y por último la dirección destino del OSD ( buf[4] byte mássignificativo y buf[5] el byte menos significativo).

• ’A’ : Almacena en el vector lon una trama acorde con el formato de bytes que provienen de la redLonworks para, a continuación, poner la variable evLon a 1 de manera que se simula un eventoLonworks.

• ’+’ : Emula tecla del mando a distancia

• ’-’ : Emula tecla del mando a distancia

• ’>’ : Emula tecla del mando a distancia

• ’<’ : Emula tecla del mando a distancia

• ’0’ : carga la configuración por defecto

• ’g’ : leer descriptor.Almacena en el vectorbuf el descriptor de la pantalla actual.

• ’@’ : Manda el vector logo0 por el puerto serie

• ’ ’ : solo devuelve el ’.’ que es el carácter que indica que el DOMOBOX esta listo

Cualquier comando distinto de los anteriores no será reconocido por el DOMOBOX y originará queeste mande un signo de interrogación (’?’), los comandos anteriores provocarán las acciones indicadas ypara la validación se utiliza el signo ’.’.

Los punteros que direccionan la memoria se asumen guardados en tres bytes:

dpl, dph, bdpl: byte bajo de la direccióndph: byte alto de la direcciónb: area de memoria (0=data, 1=external, 2=code, 3=external stack)

Teniendo encuenta esta organización las funciones siguientes estan implementadas en este módulo;

• void comm_ram_read(): Se encarga de copiar la memoria RAM del 8051 al buffer rx_bufptr, tantola dirección de comienzo como la longitud de la copia están almacenadas en el vector buf y dichosparámetros acompañan en la recepción del comando de lectura del 8051.rx_bufptr es un punteroque apunta abuf.

• void comm_ram_write():Se encarga de copiar el buffer rx_bufptr a la memoria RAM del 8051, deigual modo que la anterior la dirección de comienzo y la longitud son parámetros que acompañanal comando y están almacenados en el vectorbuf.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 32

Page 34: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• void comm_osd_read():Captura la dirección (buf[0] byte más significativo y buf[1] menos signi-ficativo) y longitud de la lectura (buf[2]) de la memoria del OSD y llama a la función osd_read(osd.c) para que se proceda a la lectura de la memoria de este dispositivo.

• void comm_osd_write(): Esta función escribe en la memoria del dispositivo OSD para ello, cap-tura la dirección almacenada en el vector buf (buf[0] byte mas significativo y buf[1] menos signi-ficativo) y llama a la función osd_write (osd.c) con los parámetros apropiados,es decir, direccióndestino, puntero a datos y longitud de estos(almacenado en buf[2]).

• void comm_mem_read(): Al igual que las anteriores esta función carga los parametros de direccióny longitud de datos que se quieren leer desde la memoria (AT45D011) y se los pasa a la funciónmemory_read (memory.c).

• void comm_mem_write(): Esta función captura la dirección destino y la longitud de los datos aescribir en la memoria AT5D011 y llama a la función memory_write (memory.c) que se encargade escribir los datos definidos en la memoria.

• void comm_mem2osd(): Implementa una transferencia desde la memoria externa del DOMOBOX(AT45D011) a la memoria del OSD , capta del buffer buf las direcciones origen y destino así comola longitud de los datos a transmitir y llama a la función screen_mem2osd (screen.c) que se encargade la transmisión de datos propiamente dicha.

• void serial_rcv_handler():Es la función principal de este módulo que es invocada desde el bucleprincipal (domo.c) cuando se produce un evento referente al puerto serie. Esta función estableceen función del comando recibido y almacenado en la variable action las acciones a realizar queserán:

– ’b’ : Recibir trama.Inicializa los parámetros para guardar en buf la trama que se va a recibir.checksum ,el puntero rx_buftpr etc..

– ’B’ : Transmitir trama.Llama a la función del mismo módulo serial_xmit_buf con el bufferbuf que será el transmitido y su longitud.

– ’d’ : Debug off.Establece la variable de depuración debug a 0.

– ’D’ : Debug on.Establece la variable de depuración debug a 1.

– ’?’ : Transmitir descriptor.Transmite un descriptor, para ello transmite el vector desc me-diante la función serial_xmit_buf.

– ’!’ : Transmitir navegación. Transmite navegación , para ello transmite el vector nav me-diante la función serial_xmit_buf.

– ’r’ : Leer RAM 8051. Llama a la función comm_ram_read().

– ’R’ : Escribir RAM 8051. Llama a la función comm_ram_write().

– ’o’ : Leer RAM OSD. Llama a la función comm_osd_read().

– ’O’ : Escribir RAM OSD.Llama a la función comm_osd_write().

– ’m’ : Leer memoria serie.Llama a la función comm_mem_read().

– ’M’ : Escribir memoria serie.Llama a la función comm_mem_write().

– ’l’ : Leer variable lonworks. Carga desde el vector lon al vector buf(en lon esta la variablelonworks).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 33

Page 35: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

– ’L’ : Escribir variable lonworks.Carga desde el vector buf al vector lonreq.

– ’k’ : Key of the lock on. Pone la variable lock_buf a 1.

– ’K’ : Key of the lock off. Pone la variable lock_buf a 0.

– ’t’ : Transferir de memoria a OSD. llama a la función comm_mem2osd() arriba descrita.

– ’A’: Carga en el vectorlon de los argumentos y puesta a 1 de la variableevLon.

– ’+’ : Emula tecla del mando a distancia.pone en RC5_system y RC5_command al valor ade-cuado para emular esta tecla.por último llama a la función screen_event para desencadenarlas acciones que se originan cuando el usuario pulsa esta tecla en el mando a distancia.

– ’-’ : Emula tecla del mando a distancia.idem.

– ’>’ : Emula tecla del mando a distancia.idem

– ’<’ : Emula tecla del mando a distancia.idem.

– ’0’ : carga la configuración por defecto.Llama a screem_setup_default() (screen.c)

– ’g’ : leer descriptor.lee llamando a la función screen_read_desc (screen.c) un descriptor(que se le ha mandado anteriormente y que se encuentra en buf[0]) y llama al manejadorscreen_handler colacando la variable evScr a uno para que el bucle principal la invoque.

– ’@’ : Mediante la función putbuf manda por el puerto serie el vector logo0 (logo.c) (lo hacepor polling).

– ’ ’ : Solo devuelve el ’.’ que es el carácter que indica que el DOMOBOX esta listo

Por defecto si no es reconocido el comando se manda un carácter ? . Despues de realizar lasacciones adecuadas ponemos la variable evRcv a cero para que no se vuelva a invocar y se mandaun carácter de validación que es un punto ’.’. Si en vez de recibir comandos estamos mandandocaracteres esta función comprueba si lo que se manda es el carácter EOT y si es asi manda tambiénel checksum.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 34

Page 36: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.7 Módulo lonworks.c

Este módulo contiene la codificación en ensamblador (para máxima eficiencia) de la interrupción de lainterfaz Lonworks ademas de la función void lonworks_handler que lo único que hace es llamar a lafunción screen_event (screen.c) y poner la variable evLon a cero para que el bucle principal no vuelva allamar a la función.

Dentro del archivo de cabecera del módulo lonworks.c se definen los comandos que el microcontro-lador principal puede realizar sobre la interfaz de red lonworks . Estos comandos se realizan entre elmicroprocesador principal y el Neuron Chip conectado a este último mediante una interfaz SPI.

• LONCMD_ST_TR: El DOMOBOX consulta el estado de la red domótica

• LONCMD_ST_BOX: Consulta del estado del DOMOBOX por parte de la red domótica

• LONCMD_WR_TR: Operación de escritura, micro modifica una variable red domótica

• LONCMD_RD_TR: Operación de lectura,micro lee una variable red domótica

• LONCMD_WR_BOX: Operación de escritura,red domótica informa del cambio de variable

• LONCMD_RD_BOX: Red domótica comunica al DOMOBOX el valor de una variable de redsolicitado mediante un comando LONCMD_RD_TR .

• LONCMD_ERR_BOX: Se le indica al DOMOBOX que ha habido un error de comunicaciones alintentar realizar la operación.

Se definen también una serie de macros en este archivo de cabecera:

• LONWORKS_LOCK: Desabilita la interrupción de lonworks

• LONWORKS_UNLOCK: Habilita la interrupción de lonworks

• LONWORKS_REQUEST: Se le indica a la tarjeta de red lonworks que se desea hacer una opera-ción

• LONWORKS_RELEASE Indica la finalización de una operación con la tarjeta de red lonworks

• LONWORKS_SETUP Inicialización de la tarjeta de red lonworks.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 35

Page 37: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.8 Módulo screen.c

Este módulo implementa la navegación e insercción de pantallas, es necesario comentar que existentres tipos de pantallas que se pueden visualizar a través del monitor de TV cuando el DOMOBOX estaoperando mostrando información;

• pantalla simple: Contiene unos datos gráficos y de navegación muy simples.

• pantalla de iconos: Contiene una imagen gráfica de fondo y una serie de iconos (que habitualmen-te representan las variables domóticas), cada icono seleccionable necesita como información denavegación la posición en la que se encuentra, el identificador del icono, y la página destino encaso de ser seleccionado.

• Muchas de las pantallas en la base de datos del prototipo consisten en un menú de opciones se-leccionables. Este caso podría considerarse como un caso particular de la pantalla de iconos pero,dadas las características especiales de los caracteres alfanuméricos en el OSD, se tratarán de unaforma mucho más compacta. Las pantallas de áreas seleccionables constan de una imagen gráficade fondo con un conjunto de textos seleccionables. Para cada texto seleccionable hay que guardarcomo información de navegación la posición en la que se encuentra, los atributos del texto cuandoestá seleccionado y cuando no lo está, y el identificador de la pantalla de salto destino (en caso deser seleccionado).

También implementa las peticiones a la interfaz de lonworks de valores de variables y de la modifica-ción de estas variables atendiendo a comandos del mando a distancia (o del puerto serie). Forman partede este módulo funciones cuya labor es transmitir información entre los distintos dispositivos que formanparte de la arquitectura del DOMOBOX. En el archivo screen.h tenemos las cabeceras de las funcionesademás de las definiciones de macros correspondientes a las actualizaciones de partes de pantallas etc ..

Si miramos el archivo screen.c podemos ver en primer lugar la definición del mapa de memoria delOSD que sera utilizado en las funciones posteriores, para ver este mapa de memoria remítase a 7.4.

A continuación vienen las definiciones de las macros necesarias para la navegación (ya sea medianteareas o mediante iconos) para a continuación y tras las definiciones de variables globales al módulo laimplementación de las funciones cuya funcionalidad se describe a continuación.

• void screen_mem2osd_callback (void) : Esta función hace una transferencia directa entre memoriay el osd mediante las macros MEMORY_SPI_IN (spi.h) y OSD_SPI_OUT (osd.h) (1 solo byte).

• void screen_mem2osd (unsigned int maddr, unsigned int len, unsigned int oaddr): Esta funcióntransfiere desde la posición maddr de la memoria AT45D011 a la posición oaddr del OSD elnúmero de bytes indicados por la variable len.

• void screen_icon2osd_callback() : Idem que la función void screen_mem2osd_callback (void)pero adecuando la transferencia a la navegación en pantalla de iconos (esto es saltando los dosprimeros bytes para la transferencia).

• void screen_icon2osd(unsigned int maddr, unsigned char idx) : Se transfiere desde la posiciónmaddr al osd un icono (cuyo desplazamiento es idx), esta función calcula a partir de este despla-zamiento la posicion destino (oaddr) dentro de la memoria del OSD para a continuación hacer latransferencia de memoria.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 36

Page 38: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Descriptor de linea 1

Descriptor de linea 2

Ristra de caracteres linea 1 (40)

Ristra de caracteres linea 1 (40)

Ristra de caracteres linea 2 (40)

Ristra de caracteres linea 24 (40)

Ristra de caracteres linea 25 (40)

Descriptor de linea 2580 bytes

2 bytes

78 bytes

Caracteres linea 1 <CR>

Caracteres linea 2 <CR>

Caracteres linea 24 <CR>

Figura 7.2: Estructura de datos de pantalla

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 37

Page 39: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• char screen_template2osd(unsigned int maddr) :Transfiere el valor de una plantilla a la memo-ria del OSD para su visualización en la pantalla del receptor de televisión , para ello lee de lamemoria el template correspondiente a la plantilla direccionada por maddr mediante la funciónmemory_read;

La cabecera de una template es como sigue:bytes 0-1: desplazamiento en OSDbyte 2: longitud en bytesbyte 3: 0=normal, 1=mostrar valor lon

A continuación se calcula la posición en la memoria del OSD con el desplazamiento obtenido ypor último mediante la función screen_mem2osd se traspasa el template.

• void screen_page2osd(unsigned int maddr) : Esta función implementa la insercción de una pantallacompleta desde la memoria en el dispositivo OSD , la pantalla viene direccionada por la direcciónmaddr, mediante la función screen_mem2osd pasamos la pantalla de la memoria al OSD para acontinuación transferir los valores de las variables mediante la función screen_template2osd y porúltimo los iconos correspondientes a los iconos.

• void screen_lonworks_request(): Petición del valor de una variable lonworks para mostrarla enpantalla, Se obtiene de la memoria la dirección de la variable cuyo valor deseamos conocer yuna vez obtenida se almacena en el vector lonreq con el comando de petición del valor de unavariable de red. Esta función construye pues en lonreq una trama según el formato de mensajes dela interfaz SPI. El comando en este caso es LONCMD_RD_TR.

• void screen_update_current_page(void) : Actualización de una pantalla del DOMOBOX , con estafunción se lee desde memoria la pantalla actual, los datos de navegación asi como los datos de lasvariables lonworks. Es decir se actualiza una página previamente cargada en el dispositivo OSD.

• void screen_setup_default (void) : Carga en el dispositivo OSD la pantalla por defecto de iniciali-zación y la muestra por el receptor de TV.

• void screen_update_icon (unsigned char idx): Actualiza el icono direccionado por idx . A partir deeste desplazamiento se calcula la posición del icono y se pasa mediante la función screen_icon2osda la memoria del dispositivo OSD.

• void screen_select_area (void) : Esta función implementa el código necesario para mostrar por lapantalla del TV cuando un area esta seleccionada atendiendo a los comandos de navegación.

• void screen_update_area (unsigned char idx) : Se implementa la actualización de un area concretaen la memoria del OSD di- reccionada por el desplazamiento idx.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 38

Page 40: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• void screen_button_event () : Esta función transmite a la pantalla los comandos capturados atraves del interfaz RC5 , atendiendo al comando almacenado en RC5_command lo que realizaes la funcionalidad asociada a dicho comando , ya sea navegación (areas, iconos, pantallas) opeticiones de variables lonworks. Si la tecla es la definida como Key_off comenzara o finalizara lanavegación dependiendo de su estado actual. Si la pantalla es del modo simple y la tecla pulsada esla codificada como siguiente o anterior visualizará dicha pantalla, de lo contrario leerá el descriptorde la pantalla asociada a dicha tecla desde memoria y la cargará en el OSD. Por contra si estamos enpantallas de areas o iconos con las teclas codificadas como siguiente o anterior ira seleccionando lasiguiente o anterior area o icono, si en una pantalla de estos tipos la tecla pulsada es la codificadacomo OK se cargará la pantalla asociada al área o icono seleccionado en ese momento y cuyoidentificador de descriptor esta en los datos almacenados en el vector de navegaciónnav.

• void screen_update_var() :Implementa la actualización de una variable Lonworks en la pantalladel monitor de TV , a partir del vector lon que contiene el formato de un identificador de acciónitera sobre la memoria para encontrar la dirección del template a actualizar, y una vez encontradotranspasa mediante la función screen_template2osd el template a la memoria osd . Esta funcióntambien tiene en cuenta si lo que ha originado la llamada no es una acción específica y si es asimira las alarmas.

• void screen_match_alarm (unsigned int addr): Esta función se llama desde la función screen_update_var()y comprueba si el evento Lonworks producido se corresponde con alguno de los eventos definidoscomo alarmas, para ello lee la memoria direccionada por la variable lon_alarms (que tiene la di-rección de las alarmas) comparando con el evento originado y almacenado en el vecto lon, de seruna alarma origina que el monitor de TV visualize la pantalla asociada a dicha alarma.

Las alarmas se guardan en memoria en vectores de 8 bytes con el formato definido de acción,estando por tanto en el byte 4 el identificador de la pantalla a la cual se salta en el caso de que seorigine la alarma.

Para que se origine una alarma debe coincidir el identificador de variable con el recibido y el valorespecificado como situación anómala.

Una vez comprobado que no se corresponde con una alarma, comprueba para la pantalla en la cualse encuentra visualizando en ese instante a través de la interfaz de TV, si existe alguna plantillaasociada a la tupla variable-valor especificada en el vectorlon, para ello lee de la memoria losbloques de 8 bytes direccionados por los bytes 7 y 8 del descriptor de pantalla actual y compruebaestos valores, de encontrarse alguno con la tupla especificada en el vectorlon carga mediante lallamada a la función screen_template2osd la plantilla direccionada por el bloque correspondiente.

• void screen_event(unsigned char ev) : Esta función es invocada por dos tipos de eventos , cuandoocurre una notificación de la interfaz de red Lonworks o bien cuando se pulsa una tecla del mandoa distancia, atendiendo al valor de la variable ev, 1 botón del mando , 2 notificación lonworks lafunción en el primero de los casos llama a la función screen_button_event y en el segundo de loscasos , comprueba el tipo de notificación, comunica por el puerto serie el cambio de variable , yactualiza dicha variable.

• void screen_handler() : Es el manejador de eventos de la pantalla y es invocada por el bucleprincipal cuando ocurre un evento que afecta a la pantalla.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 39

Page 41: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Descriptor de pantalla

Variable Valor DireccionPlantilla

UltimoBloqueTipo 0 0

1

0 1 2 3 6 74 y 5

7 80 33

Figura 7.3: Bloques variable-valor

En el archivo de cabecera de este módulo nos encontramos en primer lugar el desglose de bytesen descriptor de página almacenados en el vector desc. se definen a continuación los cuatro modos depantalla:

• SCREEN_MODE_SIMPLE Sin template data

• SCREEN_MODE_AREAS

• SCREEN_MODE_ICONS

• SCREEN_MODE_LONVAR

Seguidamente tenemos las variables y las cabeceras de las funciones para pasar por último a ladefinición de las siguientes macros.

• screen_update_selected(idx) : atendiendo al modo pantalla actualiza la pantalla.

• screen_read_desc(page) : lee el descriptor de página.

• SCREEN_SETUP : Carga la pantalla de inicio del DOMOBOX y e inicializa la variable evScr queindica envento de pantalla para el bucle principal.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 40

Page 42: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.9 Modulo memory.c

Este módulo implementa las acciones de lectura y escritura sobre la memoria AT45D011 existen 4 fun-ciones principales de lectura y escritura;

• void memory_foreach(unsigned int addr, unsigned char cmd, unsigned int sz,void (*proc)(void)):Esta función lee o escribe segun el comando cmd desde la posición de memoria addr el numero debytes definidos en sz en el dispositivo del DOMOBOX que defina el puntero a funcion proc.

• void memory_read(unsigned int addr, unsigned char* p, unsigned int sz); Se sirve de la funciónanterior para leer desde la posición addr sz bytes y almacenarlos en el vector p. El comando quese le pasa a la función memory_foreach es MEMORY_CMD_READ.

• void memory_write(unsigned int addr, unsigned char* p, unsigned int sz): Se sirve de la funciónmemory_foreach para escribir en la posición addr sz bytes almacenados en el vector p.El comandoque se le pasa a la función memory_foreach es MEMORY_CMD_WRITE.

• void memory_read_desc(unsigned char desc, unsigned char* p): Lee el descriptor de página apun-tado por desc y lo almacena en el vector p.

Estas funciones principales se sirven de otras funciones auxiliares para realizar su cometido ademasde una serie de macros que se describen a continuación.

• void memory_read_callback (void): Lee un byte de la memoria mediante la macro MEMORY_SPI_INy actualiza los punteros para direccionar al siguiente byte.

• void memory_write_callback (void): Idem con la escritura.

• void memory_spi_command_byte(unsigned char cmd, unsigned int addr): Prepara la memoriapara una operación de lectura o escritura (dependiendo del comando que se le pase en la variablecmd ) mediante la comprobación del registro status de la memoria y fija la posición de la memoriadonde se va a realizar la operación.Como con 16 bits no podemos direccionar toda la memoria estafunción tomando los 16 bits como los menos significativos y de esta manera podemos direccionartodos los bytes. Antes de escribir la dirección destino de la operación que queremos realizarse comprueba que el dispositivo esta listo y cuando lo este se introduce el comando (cmd) paraa continuación pasarle el byte menos significativo de la memoria y seguidamente el byte mássignificativo mediante la macro MEM_SPI_OUT.

• void memory_spi_command(unsigned char cmd, unsigned int addr): Idem que la anterior pero eneste caso los 16 bits de dirección los tomamos como los más significativos. (de esta forma losbytes se direccionan de cuatro en cuatro).

Se definen ademas de las funciones anteriores en el archivo memory.h las siguientes macros:

• MEMORY_SPI_SKIP_CYCLE : origina un flanco de subida para la memoria. (iMem_clk relojde la memoria).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 41

Page 43: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• MEMORY_SPI_SKIP_CYCLES(n) : origina n flancos de subida para la memoria.

• MEMORY_ADDR_ADJUST(addr): Ajuste de página de la FLASH después de una suma.

• MEMORY_SETUP : Inicializa la memoria para comenzar a operar.

• MEMORY_SPI_IN(vi): se define como SPI_MASTER_MSB_RE_IN (vi,iMEM_clk,iMEM_sdi)perteneciente al módulo spi.h.

• MEMORY_SPI_OUT(vo): se define como SPI_MASTER_MSB_RE_OUT (vo,iMEM_clk,iMEM_sdo)perteneciente al módulo spi.h.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 42

Page 44: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.10 Módulo osd.c

Este módulo contiene las funciones de acceso al dispositivo OSD que determina lo que el usuario ve porla pantalla del receptor de TV. Los distintos registros que forman parte del dispositivo osd vienen defini-dos (sus direcciones) en el archivo osd.h (para ver una visión detallada de los registros y el significadode cada uno de sus bits remitase a [Gar99c] ;

• OSD_VERT registro VERT

• OSD_HORI registro que gobierna la base de tiempos de sincronismo horizontal.

• OSD_HSYN contiene variables que indican la posición de la señal de sincronismo horizontal

• OSD_POR Interesa por su bit VOE si es 0.- se utiliza la TV de modo normal 1.- pantalla delDOMOBOX.

• OSD_ADDR Contiene 3 variables interesantes , la dirección de la pantalla que el OSD muestra, ladirección de comienzo del juego de caracteres gráficos definibles por el usuario y la dirección decomienzo del juego de caracteres alfanuméricos definibles por el usuario.

• OSD_DISP Sirve para modificar aspectos visuales de la pantalla de TV que son generales a todaslas pantallas que se muestran.

• OSD_CURS Define características del cursor.

El dispositvo OSD tiene 6K de memoria RAM que se utiliza para almacenar dos pantallas completas(2 k cada una) y el resto se utiliza para caracteres especiales. De las dos pantallas la que no se muestrapuede ser modificada por el microcontrolador principal , y el cambio de pantalla de una a otra (lasdos almacenadas en memoria del OSD) se hace mediante la modificación de la variable en el registroOSD_ADDR.

Las funciones principales que componen este módulo son las siguientes.

• void osd_spi_write_addr(unsigned int w) : Escribe la dirección almacenada en w en el interfazSPI mediante la utilización de la macro OSD_SPI_OUT (osd.h) colocando primero el byte menossignificativo para a continuación introducir el byte más significativo.

• void osd_read(unsigned int addr, unsigned char* p, unsigned char sz): Lee a partir de la posiciónaddr un número de bytes definidos en el argumento sz y los almacena en el vector p.

• void osd_write(unsigned int addr, unsigned char* p, unsigned char sz): Escribe a partir de laposición addr un número de bytes definidos en el argumento sz y que están contenidos en el vectorp.

• void osd_spi_read_word(unsigned int* w): Esta función lee una palabra completa del interfaz SPImediante la macro OSD_SPI_IN y la almacena en w. dicha macro es una definición de la macroSPI_MASTER_LSB_RE_IN(c,iOSD_clk,iOSD_sdi) que se define en el módulo spi.h y que leeun solo byte cada vez.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 43

Page 45: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

0000h

17FFh

1800h

1FFFh2000h

24FFh

2CFFh

2800h27FFh

2500h

2D00h

2FEFh2FF0h

2FFFh

6144 RAMbytes

Zona vacia

1280 slices ROM G0

Zona Vacia

1280 slices ROM G1

Zona Vacia

Internal Register

en ROMJuego de Caracteres

Memoria RAM: Descriptores Caracteres definidos Memoria General

Registros internos de programacion

Figura 7.4: Mapa de memoria del dispositivo OSD

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 44

Page 46: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

En el archivo osd.h además de las cabeceras de las anteriormente descritas funciones nos podemosencontrar las siguientes macros.

• osd_write_byte(addr, c): Escribe en la posición addr el byte c

• osd_write_word(addr, w): Escribe en la posición addr la palabra (2 bytes) w.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 45

Page 47: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.11 Modulo spi.h

Este archivo cabecera contiene la definición de una serie de macros que nos realizan el trabajo de con-trolar y transpasar a través de la interfaz SPI bytes haciendo la correspondiente alternancia entre lasdistintas señales involucradas en la transferencia de bytes. La leyenda utilizada en la definición de lasmacros es la siguiente;

Leyenda para todas las funciones de este modulo:vi: variable destino (byte)vo: variable fuente (byte)clk: relojcs: chip select (0=activo, 1=inactivo)in: entrada de datos serieout: salida de datos serieedge: flanco activo del reloj (1=raising, 0=falling)SPI_MASTER_*: SPI modo maestro, flanco seleccionableSPI_SLAVE_*: SPI modo esclavo, flanco seleccionable*_IN: Lectura de un byte*_OUT: Escritura de un byte*_IO: Lectura y escritura simultanea de un byte*_LSB_*: Least significant bit first*_MSB_*: Most significant bit first*_FE_*: Operacion SPI con flanco de bajada (falling edge)*_RE_*: Operacion SPI con flanco de subida (raising edge)

En principio todos los SPI_MASTER_ asumen SPI Mode 3 (clk high en reposo). Para usar SPI Mode0 habría que poner clk = 0 despues de cada IN o OUT. Las macros que se utilizan son las siguientes:

• SPI_MASTER_MSB_IN(vi,clk,in,edge)

• SPI_MASTER_MSB_OUT(vo,clk,out,edge)

• SPI_MASTER_LSB_IN(vi,clk,in,edge)

• SPI_MASTER_MSB_IO(vi,vo,clk,in,out,edge)

• SPI_MASTER_LSB_OUT(vo,clk,out,edge)

• SPI_MASTER_LSB_IO(vi,vo,clk,in,out,edge)

• SPI_SLAVE_MSB_IN(vi,cs,clk,in)

• SPI_SLAVE_MSB_OUT(vo,cs,clk,out)

• SPI_SLAVE_MSB_IO(vi,vo,cs,clk,in,out)

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 46

Page 48: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

• SPI_SLAVE_LSB_OUT(vo,cs,clk,out)

• SPI_SLAVE_LSB_IN(vi,cs,clk,in)

• SPI_SLAVE_LSB_IO(vi,vo,cs,clk,in,out)

Cuando las macros anteriores utilizan el flanco de subida incorporan a su nombre el prefijo *_RE_*definiendo la variable edge a 1 , en el caso contrario (flanco de bajada) incorporan en su nombre el prefijo*_FE_* definiendo la variable edge a 0.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 47

Page 49: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.12 Módulo debug.c

Este módulo contiene una serie de funciones de escritura por polling en el puerto serie del microcontro-lador principal del equipo DOMOBOX. Las funciones son las siguientes:

• void puts(unsigned char* str) : Manda por el puerto serie el vector str.

• void putw(unsigned int w) : Manda por el puerto serie la palabra w (2bytes).

• void putc(unsigned char c) : Manda por el puerto serie el byte almacenado en la variable c.

• void putbuf(unsigned char* str, int len) : Pone en el puerto serie el vector str de longitud len.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 48

Page 50: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.13 Modulo logo.c

Define una serie de vectores que describen las pantallas que se cargan en el DOMOBOX cuando seinicializa, estas pantallas se cargan mediante la macro definida en logo.h LOGO_INIT_MEMORY quelo que hace es escribir en la memoria los vectores que describen las citadas pantallas. Concretamenteson dos las pantallas que se cargan por defecto, visualizándose la primera de ellasdesc0además estosvectores contienen los caracteres gráficos y alfanuméricos que se cargan inicialmente.

• ldesc0[]; Descriptor de pantalla inicial.

• alpha0[]; Caracteres alfanuméricos

• graph0[]; Caracteres gráficos

• desc0[];

• desc1[];

• logo0[]; Contenido de datos de la primera pantalla (1920 bytes).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 49

Page 51: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.14 Escenarios

7.14.1 Introducción

El objetivo de este apartado es proporcionar una visión global de las funciones y datos que se manejancuando se produce un determinado escenario en el funcionamiento normal del dispositivo DOMOBOXesto proporcionara al lector una visión global de como el firmware del DOMOBOX actua para determi-nados eventos y que la descripción de las funciones individuales no proporciona.

Asumimos para la descripción de estos escenarios que el DOMOBOX se ha inicializado correctamen-te y que esta ejecutando el bucle principal (función main dentro de domo.c) a la espera de eventos, dentrode la memoria del OSD estan las dos páginas que se cargan por defecto y en la memoria (AT45D011)tenemos cargadas un juego completo de pantallas. Es necesario señalar que no estan reflejados en estedocumento todas las posibles situaciónes que se pueden dar en el funcionamiento del DOMOBOX perocon las descritas y con las definiciones de las funciones ya descritas es fácilmente comprensible como secomporta dicho dispositivo para cada situación concreta.

7.14.2 EL usuario pulsa una tecla del mando a distancia.

El receptor del DOMOBOX capta la tecla que ha sido pulsada y produce la interrupción (void isr_rc5()interrupt INT_X1 critical using 2 (rc5.c) la cual capta el comando completo de la tecla pulsada y pone lavariable evRC5 a 1 ( se ha recibido un evento del mando a distancia), a continuación se sigue ejecutandoel bucle principal y se detecta la variable evRC5 a uno (se ha producido un evento RC5) llama a la funciónrc5_handler() (rc5.c) la cual tras comprobar que es una tecla válida (es decir afecta al DOMOBOX y noes un simple cambio de canal que el usuario podría realizar mientras ve la TV) asigna a la variableRC5_command un código que identifica la tecla pulsada (en este caso la de inicio), por último se llama ala función screen_event(1) (screen.c) con el argumento ’1’ para indicarle evento del RC5. En la funciónscreen_event se identifica el evento y se llama a screen_button_event() (screen.c) la cual dependiendodel comando almacenado en RC5_command y dependiendo del estado actual realizará una acción u otra.Es necesario señalar que independientemente de la tecla pulsada (pero válida para el DOMOBOX) lasacciones a realizar son exactamente las mismas hasta que se llama a la función screen_button_event()(screen.c), en dicha función es donde se determina, en función del estado actual, a que funciones de otrosmódulos llamar.

La tecla pulsada es la de inicio de navegación.

El receptor de TV está trabajando como un receptor normal de televisión cuando el usuario pulsa latecla de comienzo de navegación. Una vez que se pasa por el proceso descrito anteriormente se llegaa la función screen_button_event() (screen.c) donde en este caso simplemente y mediante la llamadaosd_write_word (OSD_POR, 0x8000) escribe en el registro del osd (POR) la variable VOE un 1 lo queactiva el modo video y muestra por pantalla de TV la pantalla almacenada y direccionada por el registroADDR de dicho dispositivo.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 50

Page 52: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

La tecla pulsada es de navegación

Ya se estaba en modo navegación por pantallas del DOMOBOX y lo que se ha pulsado es una teclade navegacion. En la función screen_button_event () (screen.c) se determina en función del modo denavegación implicada, a la función que actualiza la navegación, dependiendo si esta es hacia adelante,hacia atrás, de iconos, areas.. etc.

Si es la tecla de siguiente selección (o anterior seleccion) se determina a partir de la variable screen_selected_indexla selecció deseada y se llama a la macro screen_update_selected(); la cual determina en función deltipo de navegación (areas o iconos) si debemos llamar a la función screen_update_area() o bien ascreen_update_icons() las cuales realizan el cambio apropiado. Por ejemplo, en el caso screen_update_area()los pasos realizados son ; Deseleccionar el area actual, actualizar la variable screen_selected_index y se-leccionar la nueva área mediante la llamada a screen_selected_area().

En el caso de que lo que se origine sea un cambio de página se llama a la macro screen_read_desccon la página deseada la cual llamara a la función memory_read_desc para que la almacene en el vectorvec desde memoria y actualizará la página actual.

Por último si lo que se desea mediante la tecla pulsada es modificar una variable domótica lo quese hace es construir conforme al formato definido para dicha interfaz (lonworks.c) un mensaje con lavariable solicitada y la orden de escritura para dicho interfaz y almacenarlo en el vector lonreq[].

La tecla pulsada es la de fin de navegación.

El receptor de TV está trabajando mostrando la información del DOMOBOX cuando el usuario pulsa latecla de fin de navegación (que es la misma que de inicio). Mediante la llamada osd_write_word(OSD_POR,0x0000) escribe en el registro del osd (POR) la variable VOE un 0 lo que desactiva el modo video y semuestra por pantalla de TV la señal de televisión normal.

7.14.3 Se establece una conexión a traves del puerto serie

Teniendo en cuenta que mediante el puerto serie conectaco a un PC y con el uso de las domoutilspodemos acceder a toda la funcionalidad del DOMOBOX se va a describir como actua este para contestara unas operaciones determinadas que se le manden a través del puerto serie a modo de ejemplo.

Asociado al puerto serie se tiene una interrupción que se utiliza en la recepción y transmisión decaracteres a través de este (void isr_serial() interrupt INT_SP critical using 1) aunque también existe laposibilidad de hacer la transmisión por polling. Dado que primero se recibe un carácter indicando uncomando y a continuación una trama con los argumentos o datos asociados a ese comando , mediante lavariable data_mode se diferencian ambos casos, es decir, si lo que se espera es un comando la interrup-ción notificará (poniendo en evRcv un 1) cuando reciba un carácter y esperará una trama de argumentos,si por el contrario lo que esta recibiendo es una trama de datos esperará a recibir EOT (End Of Transmi-sion) para notificarlo.

Una vez notificado el evento, en el bucle principal (domo.c) se llama a la función serial_rcv_handler(serial.c) la cual si es una trama de datos recibidos manda el checksum y pone la interrupción a la esperade un comando (data_mode a 0).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 51

Page 53: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Los comandos que emulan teclas del mando simplemente introducen directamente en las varia-bles RC5_command y RC5_system los valores correspondientes a dicha tecla y llaman a la funciónscreen_event.

En el caso de que sea recibido un comando evidentemente las acciones realizadas dependerán dedicho comando, en las siguientes subsecciones vemos algún ejemplo.

Damos un comando para transferir una parte de memoria a la memoria del OSD

Se ha recibido un caracter ’t’, y se ha llamado a la función comm_mem2osd() (serial.c), el comando des-crito lleva asociado una trama (que la interrupción se encarga de recibir) donde lleva la dirección destino, origen y número de bytes a transmitir (descritos en el módulo serial.c). Esta función a su vez llama ala función screen_mem2osd (screen.c) no sin antes haber capturado los argumentos (del vector buf) parallamar a dicha función. Por último screen_mem2osd se sirve de osd_spi_write_addr(oaddr) (osd.c) paraescribir en el registro del OSD la dirección de destino y de memory_foreach (memory.c) para hacer latransferencia propiamente dicha pasándole como último argumento la función screen_mem2osd_callbackpara que lo que lea de memoria lo guarde en la memoria del OSD.

Damos un comando para transferir una parte de memoria RAM del 8051 al PC

Este comando (’r’) se utiliza principalmente para labores de depuración para ver en el PC que valorescontiene una determinada zona de memoria del 8051, al igual que el comando anterior tambien vieneasociado a una trama de argumentos en el cual especifica la dirección de comienzo y el número debytes a leer. Una vez en la función serial_rcv_handler se llama a la función comm_ram_read() que seencarga de capturar los parametros del vector buf y almacenar desde la dirección especificada en el bufferdireccionado por rx_bufptr el numero de bytes indicados. Para que el DOMOBOX mande la trama delbuffer rx_bufptr al PC por el puerto serie este debe recibir un comando ’B’ para que transmita mediantela llamada a la función serial_xmit_buf el buffer por el puerto serie.

Se da un comando de lectura de una variable lonworks

Este comando (’l’) no se sirve de ninguna función, carga en el vector buf para su transmisión (medianteun comando ’B’) la variable almacenada en el vector lon.

7.14.4 La red domótica informa de una variable lonworks

La interfaz con la red domótica LonWorks tiene asociada una interrupción void isr_lonworks() interruptINT_X0 critical using 3 que se produce cuando la red domótica notifica del cambio de una variableo de una alarma, dicha interrupción guarda en el vector lon el identificador de variable y su valor ypone a uno la varia evLon para que el bucle principal (domo.c) llame al manejador de dicho evento,el bucle principal llama a la función lonworks_handler() (lonworks.c) la cual pone la variable evLon acero para notificar que ya se ha atendido dicho evento y llama a la función screen_event pasandole un’2’ como argumento (notificación lonworks) a continuación dicha función determina el comando que sedesea realizar mirando lon[0], en este caso llamará a la función screen_update_var() la cual actualiza elvalor de dicha variable en la pantalla de TV localizando la posición donde viene reflejada dicha variabledentro de la estructura de la pantalla y por último actualizando la memoria del osd mediante la llamadaa la función screen_template2osd (screen.c).

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 52

Page 54: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

7.14.5 Proceso para cargar una pantalla en el monitor de TV

Esta sección describe como se carga una pantalla desde que se produce el evento (evScr) hasta que lavisualizamos en el monitor de TV.

Una vez que se ha producido el evento , principalmente por que el usuario esta navegando a tra-vés de las pantallas del DOMOBOX mediante la pulsación de teclas por el mando a distancia, cuan-do se pulsa una tecla para pasar de una pantalla a otra se pone la variable evScr a uno en la funciónscreen_button_event lo cual origina que en el bucle principal se llame a la función screen_handler estafunción llama screen_update_current_page() y actualiza la variable evScr a 0 para notificar que el eventoha sido atendido.En la función screen_update_current_page() se lee la información de navegación (64 bytes) de la páginaactual para determinar que página hay que cargar (dependiendo de la página que el usuario ve en la ac-tualidad la navegación hacia adelante o atras cargará una u otra página) esto se hace mediante la funciónmemory_read() para que a partir de la dirección de la información de navegación lo pase al vector nav.Una vez esta información ha sido cargada en dicho vector podemos determinar la dirección donde seencuentra la página que se va a visualizar en el monitor de la TV. El siguiente paso es pasar desde me-moria la página seleccionada a la memoria del OSD lo cual se hace con la función screen_mem2osd(), esnecesario señalar que en el OSD se pueden almacenar dos pantallas y que la que se carga va a ir siempreen la parte de memoria del OSD que no se esta visualizando por lo que en memoria siempre estará lapantalla que se visualiza por el monitor de TV y la página anterior a esta última. A continuación seescribe en el registro del OSD ADDR la dirección de la nueva página que se va a visualizar. El últimopaso es determinar los valores de las variables domóticas representadas en la nueva pantalla a mediantela función screen_lonworks_request y presentarlas en pantalla.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 53

Page 55: Manual de Referencia del Dispositivo DOMOBOXarco.esi.uclm.es/public/prj/senda/domobox-ref-domobox.pdf · Con objeto de mantener la simplicidad y la facilidad de uso, utiliza un receptor

UCLMGrupo de Arquitectura y Redes de Computadores

Bibliografía

[ATM98] ATMEL. AT45D011:DATA SHEET, Agosto 1998.

[Gar99a] Juan Carlos Díaz García. Descripción de Arquitectura del Equipo DOMOBOX. Technicalreport, Telefónica I+D, 1.1, Julio 1999.

[Gar99b] Juan Carlos Díaz García. Especificación de Requisitos Software del Dispositivo DOMOBOX.Technical report, Telefónica I+D, 1.1, Julio 1999.

[Gar99c] Juan Carlos Díaz García. Guia del Programador del Elemento DOMOBOX. Technical report,Telefónica I+D, 1.3, Octubre 1999.

[hel] helton. Sdcc homepage http://sdcc.sourceforge.net/.

[Moy00] Francisco Moya. Estructuras de Gestión de Pantallas en el DOMOBOX. Technical report,Grupo Arco, 1.2, Septiembre 2000.

[PHI98] PHILIPS. 89C51RC+/RD+ : DATA SHEET, Octubre 1998.

[San00] Javier Sanchez. Editor de pantallas para el domobox. Technical report, Grupo Arco, 2000.

[SGS96] SGSTHOMSON MICROELECTRONICS.STV9410:CRT and LCD semigraphic display pro-cessor, Abril 1996.

Id: domobox-ref-domobox.ltx,v 1.2 2001/05/10 18:49:10 paco Exp 54