WinDriver Conceptos, arquitectura,características y caso práctico Eduardo Marina Almazán Juan Carlos Macho Adalia Juan Antonio Torrico Portero.

1 WinDriver Conceptos, arquitectura,características y cas...
Author: José Reyes Moreno
0 downloads 2 Views

1 WinDriver Conceptos, arquitectura,características y caso práctico Eduardo Marina Almazán Juan Carlos Macho Adalia Juan Antonio Torrico Portero

2 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

3 ¿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

4 ¿Qué es WinDriver?  ¿Qué es lo que hace realmente WinDriver?  ¿Qué sistemas operativos soporta?  ¿Qué arquitecturas soporta?  Características

5 Veamos las características  Plataforma cruzada  Asistentes  Performance en modo Kernel

6 Ventajas de WinDriver  Facil desarrollo  Friendly Wizards  Facilidad de uso de Driver Wizards

7 Desarrollo genérico de un Driver en Windows y Linux

8 Desarrollo de un driver genérico 1.Inicio de DriverWizard 2.DriverWizard genera código. 3.Modificar código 4.Ejecutar y depurar

9 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

10 Driver para un USB Graphical Debugger WinDriver consola WinDriver paquete de distribución UTILIDADES - Usb_diag.exe - Pci_dump.exe

11 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

12 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

13 EJEMPLO PRÁCTICO GENERAREMOS UN DRIVER PARA ACCEDER AL RELOJ DE TIEMPO REAL DEL SISTEMA

14 Ejemplo práctico Dirección de la CMOSContenido 00 Segundos 02 Minutos 04 Horas 06 Día de la semana 07 Día del mes 08 Mes 09 Año

15 Ejemplo práctico  Lanzamos la aplicación

16 Ejemplo práctico  Crear nuevo dispositivo

17 Ejemplo práctico  Debemos definir el mapa de entrada y salida

18 Ejemplo práctico  Definimos registros de direcciones y datos

19 Ejemplo práctico  Comprobamos la definición de dichos registros

20 Ejemplo práctico  Seleccionamos el registro de datos

21 Ejemplo práctico  Generamos el código del driver

22 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

23 Ejemplo práctico II nserción del código nuevo 1. 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 direcciones ii. Inicializar el dispositivo iii. Configurar el offset iv. Configurar modo de acceso v. Realizar escrituras y lecturas vi. Dar formato.

24  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; };

25 Ejemplo práctico CMOS_CLOCK_Writedireccion (perif, 04); // Escribimos en el registro de direcciones bHora=CMOS_CLOCK_Readdatos (perif); // Leemos del registro de datos y lo almacenamos en bHora CMOS_CLOCK_Writedireccion (perif, 02); // Escribimos en el registro de direcciones bMinutos=CMOS_CLOCK_Readdatos (perif); // Leemos del registro de datos y lo almacenamos en bMinutos CMOS_CLOCK_Writedireccion (perif, 00); // Escribimos en el registro de direcciones bSegundos=CMOS_CLOCK_Readdatos (perif); // Leemos del registro de datos y lo almacenamos en bSegundos CMOS_CLOCK_Writedireccion (perif, 07); // Escribimos en el registro de direcciones bDiaMes=CMOS_CLOCK_Readdatos (perif);

26 Ejemplo práctico // Leemos del registro de datos y lo almacenamos en bDiaMes CMOS_CLOCK_Writedireccion (perif, 8); // Escribimos en el registro de direcciones bMes=CMOS_CLOCK_Readdatos (perif); // Leemos del registro de datos y lo almacenamos en bMes CMOS_CLOCK_Writedireccion (perif, 9); // Escribimos en el registro de direcciones bAnyo=CMOS_CLOCK_Readdatos (perif); // Leemos del registro de datos y lo almacenamos en bAnyo printf("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;

27 Ejemplo práctico case MENU_MAIN_SYSTEM_TIME: // Si ponemos un 3 saltamos a ejecutar // System_Time, pasandole el Handle System_Time(*phDev); break;