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;
Top Related