Resultados 1 al 3 de 3

USB -Necesito ayuda.

  1. #1 USB -Necesito ayuda. 
    Iniciado
    Fecha de ingreso
    Mar 2008
    Mensajes
    1
    Descargas
    0
    Uploads
    0
    Hola a todos y gracias por adelantado.
    Necesito crear un sistema en Visual .NET que, entre otras cosas, debe detectar un dispositivo conectado al USB (es un pendrive) y luego leer y escribir un archivo plano de ahí. El problema es que no tengo idea como hacerlo, y según he podido investigar se necesita una especie de driver para que el sistema detecte el dispositivo y le asigne una letra a la unidad y luego si, poder trabajar como se haría con cualquier dispositivo de almacenamiento.
    Agradecería alguna guia sobre como resolver esto.
    Citar  
     

  2. #2  
    Moderador HH
    Fecha de ingreso
    Mar 2003
    Ubicación
    Galiza
    Mensajes
    3.919
    Descargas
    8
    Uploads
    1
    en la web de intel sobre USB hay ya ejemplos de lo que pides, el problema es que está todo en inglés... por ello te recomiendo que te pases por allí y busques que hay lo que tu buscas, lo que ya no se si lo habrá en .NET, pero si lo encuentras en otro lenguaje, siempre habrá opción de adaptar a .NET, ya sea directamente el código y creando una dll que despues se llame desde .NET...

    Un Saluo
    He conocido muchos dioses. Quien niegue su existencia está tan ciego como el que confía en ellos con una fe desmesurada. Robert E. Howard
    La suerte ayuda a la mente preparada.
    Citar  
     

  3. #3  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Buenas! Ya hablé del tema de USB en otro hilo.

    Si es bajo Windows, debes despreocuparte del tema de drivers, ya que si lo único que quieres es detectar un dispositivo, es el propio Windows el que incorpora el plug&play (aunque este fuera introducido mucho antes que microsoft xD), y no necesitarás establecer interrupciones ni nada similar manualmente. Pero vamos que ésto es así tanto para USB como RS232, como paralelo o lo que sea...

    Es evidente que para acceder a un dispositivo bajo Windows, en un sistema con E/S independiente (por ejemplo arquitecturas x86) no es viable, ya que Windows sólo puede hacer uso de estos recursos en modo kernel. El usuario sólo puede acceder a través de llamadas al sistema (API WIN32), en donde las funciones de la API pasan las estructuras IRP al driver, gestionando éste como un fichero (fichero .sys en windows).

    Entonces... ¿cuando se necesita un driver?, pues bien, el sistema operativo provee de unos drivers genéricos (drivers de clase), que hacen que un dispositivo pueda funcionar en teoria, siempre y cuando use la misma interfaz. Un driver (específico) se necesitará cuando sea necesario establecer protocolos de comunicación especiales o cuando se trate de un dispositivo no genérico, o cuando sea genérico pero con funcionalidades no genéricas.

    Los dispositivos USB se diferencian dos tipos: los de almacenamiento y los de interfaz humano (HID).

    Para los primeros no se suele utilizar drivers, ya que la propia circuitería del dispositivo se encarga de realizar la sincronización de datos, direccion y control necesarios para tranferir la información. Es el software contenido en la ROM de un microcontrolador el que realiza la tarea.

    Para los segundos, como puede ser por ejemplo un teclado, un ratón, un joystick o yo que sé... un mando con inclinómetro para controlar el puntero de un raton... xD (como el mando de la Wii), es decir, pertenecen a este conjunto aquellos dispositivos en los que intervenga un "humano" (o un mono de feria xD), es necesario un driver solo si es necesario establecer un protocolo de comunicación especial que haga funcionar el dispositivo correctamente. Por ejemplo el caso más fácil, puede ser el de un teclado con teclas para "bajar/subir volumen", "aumentar/reducir el brillo de la pantalla" o teclas especiales (por ejemplo un teclado kamikaze que tiene el botón "autodestroy" xD). En estos casos, que son más específicos si es necesario realizar un driver, que haga funcionar dicho cacharrito.

    Windows incorpora un driver genérico, que hará que tu teclado pueda escribir. Pero no hará para este caso que puedas usar el botón de volumen, de brillo o el de "autodestroy". Ya que no todos los teclados tienen estos botones, y evidentemente realizar un driver para cada dispositivo es algo un poco imposible... ya que cada dispositivo trae algo más de lo estandar... por ello necesitarás el driver.

    Realizar el driver lo único que permite es poder acceder a los recursos del dispositivo. Ya que por ejemplo para poder getionar el teclado kamikaze, probablemente se almacene en un registro especial (dentro del microcontrolador), el estado del botón (pulsado o no pulsado). Si el driver genérico del sistema operativo no tiene en cuenta esta posibilidad, entonces el botón de autodestrucción jamás funcionará. Se ha de instalar el driver para ello.

    Por ello como el acceso a un dispositivo de almacenamiento es algo "genérico", tal y como lo es "poder escribir con cualquier teclado, sea o no kamikaze", no necesitarás drivers...

    Ahora bien, aclarado el tema de drivers, vuelvo a lo de detectar un dispositivo USB. Ya dije que Windows es plug&play, por tanto para detectar un pen drive sólo has de preguntarle al Sistema operativo: "oye, has detectado algo?", pero hacer ésto no es "elegante", ni mucho menos "eficiente", (es como el polling para gestionar la E/S), solo será bueno si es durante un periodo corto de tiempo. Eso sí será muy rápido en cuanto lo detecte... para solucionar ésto, tal y como lo haría la gestión de E/S mediante interrupciones es decirle al sistema operativo: "oye avísame cuando haya algo para mi...", esto equivale a usar los notificadores de eventos o de cambios (google). Evidentemente esto si es más eficiente ya que no consume recursos de la CPU.

    Para el acceso, simplemente al tratarse de un pen drive, esto es, cuando se conecte se creará una unidad nueva, sólo tendrás que acceder a ella.

    Como solución a todo ésto, puedes usar la función GetDriveType de la API de Windows.

    Cuando lo veas, observarás que es un polling, xD (aún no he tenido tiempo de usar otro método), pero bueno ahí lo tienes...

    Te dejo un enlace al hilo donde explico como usarla:

    http://www.hackhispano.com/foro/showthread.php?t=29373&highlight=usb
    Última edición por hystd; 10-03-2008 a las 21:37
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

Temas similares

  1. Necesito ayuda
    Por asiciv en el foro MALWARE
    Respuestas: 2
    Último mensaje: 03-01-2010, 00:08
  2. necesito ayuda csd
    Por yoyo en el foro DIGITAL+
    Respuestas: 3
    Último mensaje: 13-11-2008, 20:08
  3. Respuestas: 1
    Último mensaje: 17-09-2006, 23:46
  4. Necesito ayuda
    Por ozedane en el foro TELEVISION
    Respuestas: 6
    Último mensaje: 06-05-2006, 01:47
  5. necesito ayuda
    Por skullpirats en el foro HACK HiSPANO
    Respuestas: 1
    Último mensaje: 02-06-2002, 11:09

Marcadores

Marcadores