WinDriver Conceptos, arquitectura,características y caso práctico Eduardo Marina Almazán Juan...

Post on 24-Jan-2016

228 views 1 download

Transcript of WinDriver Conceptos, arquitectura,características y caso práctico Eduardo Marina Almazán Juan...

WinDriver

Conceptos, arquitectura,características y

caso práctico

Eduardo Marina Almazán

Juan Carlos Macho Adalia

Juan Antonio Torrico Portero

Vamos a ver...

¿Porqué un lenguaje 4GL? ¿Qué es WinDriver? Ventajas de WinDriver Desarrollo genérico de un

Driver Driver para un USB Driver para una tarjeta

PCI/ISA/CardBus Ejemplo Práctico

¿Porqué un lenguaje 4GL?

Reducen tiempos y costes de desarrollo El usuario solo se preocupa de lo que hace,

no de cómo lo hace Orientados a entornos específicos Generadores de informes Entornos de desarrollo

¿Qué es WinDriver?

¿Qué es lo que hace realmente WinDriver?

¿Qué sistemas operativos soporta?

¿Qué arquitecturas soporta?

Características

Veamos las características

Plataforma cruzada Asistentes Performance en modo Kernel

Ventajas de WinDriver

Facil desarrollo

Friendly Wizards

Facilidad de uso de Driver Wizards

Desarrollo genérico de un Driver en Windows y Linux

Desarrollo de un driver genérico

1. Inicio de DriverWizard

2. DriverWizard genera código.

3. Modificar código

4. Ejecutar y depurar

Driver para un USB

Módulos generados:- O windrvr.h

- O wdu_lib.h

- O windrvr_int_thread.h

- O windrvr_events.h

- O utils.h

- O status_strings.h

Driver para un USB

• Graphical Debugger

• WinDriver consola

• WinDriver paquete de distribución

• UTILIDADES

- Usb_diag.exe

- Pci_dump.exe

DRIVER PARA PCI/ISA/CardBus

Módulos generados- O windrvr.h

- O wdu_lib.h

- O windrvr_int_thread.h

- O windrvr_events.h

- O utils.h

- O status_strings.h

DRIVER PARA PCI/ISA/CardBus

• DriverWizard• Graphical Debugger

• WinDriver paquete de distribucion.

• Utilidades: - Pci_dump.exe

- Pci_diag.exe

- Pci_scan.exe

- Pcmcia_diag.exe

EJEMPLO PRÁCTICO

GENERAREMOS UN DRIVER PARA ACCEDER AL

RELOJ DE TIEMPO REAL DEL SISTEMA

Ejemplo práctico

Dirección de la CMOS Contenido00 Segundos02 Minutos04 Horas06 Día de la semana07 Día del mes08 Mes09 Año

Ejemplo práctico

Lanzamos la aplicación

Ejemplo práctico

Crear nuevo dispositivo

Ejemplo práctico

Debemos definir el mapa de entrada y salida

Ejemplo práctico

Definimos registros de direcciones y datos

Ejemplo práctico

Comprobamos la definición de dichos registros

Ejemplo práctico

Seleccionamos el registro de datos

Ejemplo práctico

Generamos el código del driver

Ejemplo práctico

Código generado

* Cmos_clock_diag.c

* Cmos_clock_lib.h

* Cmos_clock_lib.c

* Windriver/simples/shared/wdc_diag_lib.h

* Windriver/simples/shared/wdc_diag_lib.c

Ejemplo práctico

Inserción del código nuevo1. Modificar el programa de diagnostico 2. Crear una función.3. Conseguir que se ejecute System_Time()4. Modificar la definición de System_Time()

i. inicializar espacio de direccionesii. Inicializar el dispositivoiii. Configurar el offsetiv. Configurar modo de accesov. Realizar escrituras y lecturasvi. Dar formato.

Ejemplo práctico

Código del driver. (parte que añadimos nosotros)int System_Time(WDC_DEVICE_HANDLE perif)

{

DWORD dwOffset; BYTE bHora;

BYTE bMinutos;BYTE bSegundos;BYTE bDiaMes;BYTE bMes;BYTE bAnyo;

UINT32 u32Data = 0; BYTE Datos;};

Ejemplo práctico

CMOS_CLOCK_Writedireccion (perif, 04);// Escribimos en el registro de direccionesbHora=CMOS_CLOCK_Readdatos (perif);// Leemos del registro de datos y lo almacenamos en bHoraCMOS_CLOCK_Writedireccion (perif, 02);// Escribimos en el registro de direccionesbMinutos=CMOS_CLOCK_Readdatos (perif);// Leemos del registro de datos y lo almacenamos en bMinutosCMOS_CLOCK_Writedireccion (perif, 00);// Escribimos en el registro de direccionesbSegundos=CMOS_CLOCK_Readdatos (perif);// Leemos del registro de datos y lo almacenamos en bSegundosCMOS_CLOCK_Writedireccion (perif, 07);// Escribimos en el registro de direccionesbDiaMes=CMOS_CLOCK_Readdatos (perif);

Ejemplo práctico

// Leemos del registro de datos y lo almacenamos en bDiaMesCMOS_CLOCK_Writedireccion (perif, 8);// Escribimos en el registro de direccionesbMes=CMOS_CLOCK_Readdatos (perif);// Leemos del registro de datos y lo almacenamos en bMesCMOS_CLOCK_Writedireccion (perif, 9);// Escribimos en el registro de direccionesbAnyo=CMOS_CLOCK_Readdatos (perif);// Leemos del registro de datos y lo almacenamos en bAnyoprintf("Anyo:200%x ", bAnyo);printf("Mes:%x ", bMes);printf("Dia:%x ", bDiaMes);printf("Hora:%x ", bHora);printf("Minuto:%x ", bMinutos);printf("Segundo:%x ", bSegundos);return 0;

Ejemplo práctico

case MENU_MAIN_SYSTEM_TIME: // Si ponemos un 3 saltamos a ejecutar

// System_Time, pasandole el Handle

System_Time(*phDev);

break;