Autor Tema: Ingenieria inversa con dll en c# (para USB HID)  (Leído 18977 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Ingenieria inversa con dll en c# (para USB HID)
« en: 07 de Enero de 2015, 16:28:46 »
A ver si me esplico bien, encontré un ejemplo de control del puerto usb con un pic y c# que funciona, tengo la dll que agrego a referencias, pero en el ejemplo en c# el puerto viene como un componente en el formulario, es como el clasico timer que lo arrastras al formulario desde el cuadro de herramientas. La pregunta es ¿puedo generar el elemento en el cuadro de herramientas a partir de la dll? o ¿es posible definirlo "a pelo" de alguna forma?

A la hora de hacer proyectos nuevos me obligaria a partir siempre del mismo ejemplo, e ir modificando siempre sobre el.

Dejo adjunto el susodicho programa en c# para vs2010.

Saludos!!!

Edito: Dejo tambien el codigo del pic (bajado del subforo RTOS).
« Última modificación: 14 de Enero de 2015, 15:47:22 por micro_pepe »
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c#
« Respuesta #1 en: 09 de Enero de 2015, 14:57:55 »
Pues... era tan facil como arrastrar la dll de una carpeta a la barra de herramientas del IDE  :mrgreen: :mrgreen:

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c#
« Respuesta #2 en: 09 de Enero de 2015, 20:03:50 »
Pues... era tan facil como arrastrar la dll de una carpeta a la barra de herramientas del IDE  :mrgreen: :mrgreen:

Saludos!!!

Todo mi gozo en un pozo, esta dll tiene licencia, segun estaba desarrollando el código en C# me aparece de vez en cuando una ventanita indicando que hay que comprar licencia  :( imagino que en un tiempo dejará de funcionar.

Conoceis alguna otra dll gratuita para USB que funcione en VS 2010 con c# ???

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Ingenieria inversa con dll en c#
« Respuesta #3 en: 09 de Enero de 2015, 21:33:43 »
Ando un poco lejos de este tema del USB, en su momento lo tenia mas fresco  :oops:

Estas usando la dll que provee microchip en su framework?
Aunque la de microchip creo que es para VC++ y trae un ejemplo en Visual C++ 2008
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Ingenieria inversa con dll en c#
« Respuesta #4 en: 10 de Enero de 2015, 13:52:09 »
A ver si me esplico bien, encontré un ejemplo de control del puerto usb con un pic y c# que funciona, tengo la dll que agrego a referencias, pero en el ejemplo en c# el puerto viene como un componente en el formulario, es como el clasico timer que lo arrastras al formulario desde el cuadro de herramientas. La pregunta es ¿puedo generar el elemento en el cuadro de herramientas a partir de la dll? o ¿es posible definirlo "a pelo" de alguna forma?

A la hora de hacer proyectos nuevos me obligaria a partir siempre del mismo ejemplo, e ir modificando siempre sobre el.

Dejo adjunto el susodicho programa en c# para vs2010.

Saludos!!!

Edito: Dejo tambien el codigo del pic (bajado del subforo RTOS).

Hola.
¿Cual es la DLL a que te referis ?
Dll con cartel ---> debug ----> ver si es posible jmp ---> chau cartel !!!!   :-)
...o algo parecido .. :-)

Saludos.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ingenieria inversa con dll en c#
« Respuesta #5 en: 10 de Enero de 2015, 13:55:59 »
Hola Pepe

Si necesitas usar USB en un PIC en modo CDC (puerto serial virtual - COM), ya no necesitas la DLL.

http://migsantiago.com/index.php?option=com_content&view=article&id=29:pic-puerto-serial-por-usb-cdc&catid=1:tutorial&Itemid=23

Si aún necesitas la DLL, Microchip provee una DLL para USB HID y otra para USB en modo Bulk.

Ambas vienen en el Microchip Application Libraries y sin gratis, incluyendo su código fuente. Saludos.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c#
« Respuesta #6 en: 11 de Enero de 2015, 12:09:41 »
Quiero hacerlo con HID, me he descargado el "Microchip Application Libraries" pero el ejemplo que viene para c# es para VS2005, y yo uso el 2010. Lo he abierto pero no funciona bien, reconoce el pic18f4550 que estoy usando pero no envia datos del pc al pic.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c#
« Respuesta #7 en: 11 de Enero de 2015, 17:36:34 »
Una cosa, con CDC la forma de funcionar es como si usase un FT232 o similar no?

Al conectar el pic al puerto usb me crea un com virtual, tendria que conectarme a ese puerto com virtual, y la programación en c# sería como si fuese un puerto serie RS232, es correcto??

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ingenieria inversa con dll en c#
« Respuesta #8 en: 11 de Enero de 2015, 21:00:42 »
Si, es correcto. Igual deberías poder utilizar la librería de Microchip para HID, Bulk e Isócrono.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ingenieria inversa con dll en c#
« Respuesta #9 en: 12 de Enero de 2015, 12:51:06 »
Quiero hacerlo con HID, me he descargado el "Microchip Application Libraries" pero el ejemplo que viene para c# es para VS2005, y yo uso el 2010. Lo he abierto pero no funciona bien, reconoce el pic18f4550 que estoy usando pero no envia datos del pc al pic.

Así es, hay un issue con VC# y un SO de 64 bits. Si tienes un Windows de 64 bits, debes corregir la forma de compilar del HID a 32 bits para que funcione. Yo usé las MAL y funciona de 10. Si es el caso, avísame y te explico cómo repararlo.

A mí me encantan los dispositivos HID por su constancia, repetitividad y velocidad constante.

Una cosa, con CDC la forma de funcionar es como si usase un FT232 o similar no?

Al conectar el pic al puerto usb me crea un com virtual, tendria que conectarme a ese puerto com virtual, y la programación en c# sería como si fuese un puerto serie RS232, es correcto??

Saludos!!!

Sí, te olvidas de toda DLL y cosas del otro mundo. Tú usa el COM como mejor te convenga con el lenguaje que prefieras. Es la clase USB más fácil de usar a nivel PC, pero la menos confiable en cuanto a velocidad y ancho de banda.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c#
« Respuesta #10 en: 12 de Enero de 2015, 18:46:44 »
Quiero hacerlo con HID, me he descargado el "Microchip Application Libraries" pero el ejemplo que viene para c# es para VS2005, y yo uso el 2010. Lo he abierto pero no funciona bien, reconoce el pic18f4550 que estoy usando pero no envia datos del pc al pic.

Así es, hay un issue con VC# y un SO de 64 bits. Si tienes un Windows de 64 bits, debes corregir la forma de compilar del HID a 32 bits para que funcione. Yo usé las MAL y funciona de 10. Si es el caso, avísame y te explico cómo repararlo.


Eso es justo lo que me ocurre, uso Win7 de 64bits, y si no me equivoco es el mismo error que me dió otro ejemplo que encontré por la red con otra dll.

El HID es lo mejor, con CDC es un poco latoso el tener que seleccionar el puerto COM, más lento y menos fiable.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ingenieria inversa con dll en c#
« Respuesta #11 en: 12 de Enero de 2015, 20:56:18 »
OK. Debes configurar tu C# para compilar en modo x86 (32 bits) ya que las DLL encargadas de HID en Windows siguen siendo de 32 bits.

Ve a Tools, Options y activa la opción de Show advanced build configurations.

Te aparecerá la barrita que adjunto. Juega con la configuración para activar el modo x86. Eso debe ser todo.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c#
« Respuesta #12 en: 13 de Enero de 2015, 18:39:11 »
Muchas gracias migsantiago!!!

lamentablemente no es ese el error... tengo un .hex de un proyecto que encontré con el que el ejemplo de microchip para C# envia datos PC-->PIC, he visto al depurar que las funciones que envian datos devuelven verdadero, estas:

Código: [Seleccionar]
WriteFile(WriteHandleToUSBDevice, OUTBuffer, 65, ref BytesWritten, IntPtr.Zero)

Sin embargo cuando conecto mi firmware en CCS, retornan false. En ambos casos el PIC lo reconoce como conectado al puerto USB.

Dejo adjunto el firmware en CCS, no veo que puede estar mal... con el ejemplo en c# de pago funciona, será que no hace buenas migas con microchip.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ingenieria inversa con dll en c#
« Respuesta #13 en: 13 de Enero de 2015, 19:13:53 »
Seguro es algo por aquí...

- el tamaño de los endpoints (64)
- PID y VID que espera la librería de Microchip 0x04d8 y 0x0033 según recuerdo

No hay mucha diferencia entre la Express Edition y la completa en C# en cuanto a la compilación de la DLL de HID. Checa los descriptores HID de tu PIC, algo anda chueco.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ingenieria inversa con dll en c#
« Respuesta #14 en: 13 de Enero de 2015, 20:14:58 »
Seguro es algo por aquí...

- el tamaño de los endpoints (64)
- PID y VID que espera la librería de Microchip 0x04d8 y 0x0033 según recuerdo

No hay mucha diferencia entre la Express Edition y la completa en C# en cuanto a la compilación de la DLL de HID. Checa los descriptores HID de tu PIC, algo anda chueco.

Es correcto el valor de 65, siempre y cuando en el descriptor HID se esté utilizando Report IDs.

Puede que el motivo por el cual falla el envío sea la primera ley del USB:

"TODAS las transacciones son iniciadas por el Host"

En tu caso el Host es la PC. Si la PC no abre y espera datos, el device no puede enviarlos sin su permiso. El device siempre trabaja por polling. Necesitas asegurarte que el software de PC esté conectándose al endpoint y enviando los request de lectura para que el dispositivo pueda enviar info a la PC.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.