elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
11 Octubre 2008, 18:59  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++
| | |-+  Desesperación desarrollando driver
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Desesperación desarrollando driver  (Leído 158 veces)
HySTD

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Desesperación desarrollando driver
« en: 21 Junio 2008, 19:25 »

Buenas compañeros vengo de HackHispano, solicitando ayuda en distintos foros. Estoy desarrollando (con fines didácticos) un driver para Windows XP de una Webcam por USB Creative. El controlador de la camara es el 0V511+ (de Omnivision). El datasheet está bastante bien, pero falta alguna que otra información.

Me encuentro desarrollandolo con las DDK y Driver Studio 2.7. El problema que tengo es que usa dos endpoints, uno es el de control (endpoint 0) de entrada salida (con lo cual tenemos dos direcciones 0x80 y 0x00), y el otro es Isócrono de entrada (endpoint 1), para la transferencia de video. Hasta ahí bien.

Viendo el datasheet, se observa que utiliza una compresión hardware del fabricante en el módulo OmniCE. Asi que decidí, dejarlo por el momento y hacer pruebas más sencillas de comunicación. Una de ellas consiste en eneceder y apagar el diodo LED que tiene. Dicho diodo es accesible mediante el registro 55h de la cámara. El problema que tengo es acceder a dicho registro.

Está claro que si usa el endpoint 0 para las transferencias de control, entonces el objeto a utilizar es de tipo KUsbLowerDevice, y su método BuildVendorRequest. Pero para ello debo saber los valores de algunos parámetros, por ejemplo Request y Value. Decidí para ello, usar un sniffer para USB, con los drivers originales de la cámara. Viendo el tráfico a través del USBD, observo el contenido de los paquetes URB. Se puede observar que los valores Request y Value permanecen constantes para cualquier tipo de petición y que lo único que varía es el parámetro Index (1 byte), cuyo contenido siempre oscila entre 10 y BF que son curiosamente el mapa de memoria de los registros, con lo cual, la hipótesis que tengo es que Index contiene la dirección del registro a acceder.

Haciendo cientos de pruebas, no conseguí nada, solo un montón pantallazos azules de volcado de memoria...

Otro detalle importante que aparece en el datasheet es que dice que la cámara entra en modo suspensión si pasados 3 milisegundos no se tranfiere ninguna información. Con lo cual he podido deducir que no puedo acceder bien al registro porque ya está en ese modo (como un standby). Pero el fabricante no facilita información al respecto sobre cómo "despertarla".

Tengo muchas dudas, y no sé si estoy realizando correctamente el procedimiento:

En el método Write (KIrp I) {...} lo que hago es lo siguiente:

PURB miurb; //Declaro una variable que apuntará a la estructura URB a mandar al USBD

miurb=m_Lower.BuildVendorRequest(pBuffer, dwTotalSize, 0x00, 0x00, 0x02, false, false, NULL, 0x55, URB_FUNCTION_VENDOR_DEVICE, NULL); //Construimos el URB a partir del IRP que llegue de la aplicación (pBuffer), y usamos los valores Request y Value que observé en el Sniffer, 0x02 para datos de salida, y 0x03 para datos de entrada. Por último 0x55 es Index, la dirección del registro a acceder.

m_Lower.SubmitUrb(mirub, NULL, NULL, 0); //Enviamos el URB al USBD.

Haciendo ésto aparece un pantallazo azul... ¿qué está fallando?

Buscando en "Google code search", he observado drivers para Linux para el controlador 0V511+. El problema es que según esos drivers, los parámetros se pasan en Request y Value (lo que en el sniffer era constante), y además no hace nada extraño... usa las funciones de la API del kernel "usb_control_msg" y "usb_sndctrlpipe", en esta última, especificando el endpoint 0. Lo que su homólogo equivale a BuildVendorRequest para las DDK.

Aquí les dejo la información del chip 0V511+:
http://mxhaard.free.fr/spca50x/Doc/O...on/ds_511P.pdf

Un saludo y gracias de antemano.
En línea
HySTD

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Desesperación desarrollando driver
« Respuesta #1 en: 23 Junio 2008, 13:16 »

Ya lo he solucionado!!! faltaba inicializar la cámara. Gracias de todas maneras.

Un saludo
En línea
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats