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

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ingenieria inversa con dll en c#
« Respuesta #15 en: 13 de Enero de 2015, 20:46:41 »
Hola Bruno

Es que tiene una configuración diferente...

Código: [Seleccionar]
#define USB_CONFIG_HID_TX_SIZE   32
#define USB_CONFIG_HID_RX_SIZE   32

Y la HID de Microchip espera 64. Sí, los 65 están bien, el primero siempre debe ser el report ID.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c#
« Respuesta #16 en: 14 de Enero de 2015, 13:35:08 »
Muchas gracias chicos!!!

os comento los cambios que hice para que funcione:

- Poner en el firmware CCS todo en 64 bit.
- Poner el VID y el PID del firmware con los valores que trae el ejemplo c# de micrchip "Vid_04d8&Pid_003f", anteriormente lo que hice fué la inversa, cambié en c# lo que tenia en el PIC.

Lo dejo adjunto por si le sirve a alguien.

Ahora que sé por donde van los tiros intentaré cambiar otro ejemplo que encontré por tener el código más claro, el de Microchip es un poco "sucio", es más facil de desarrollar el otro.

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 #17 en: 14 de Enero de 2015, 14:33:48 »
Muy bien Pepe.  :mrgreen:

Un detalle, no son 64 bits, son 64 bytes. Cada reporte HID en USB2.0 puede cargar hasta 64 bytes (más el report ID que en custom no se usa).
« Última modificación: 14 de Enero de 2015, 14:37:02 por migsantiago »

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c#
« Respuesta #18 en: 14 de Enero de 2015, 15:46:18 »
Muy bien Pepe.  :mrgreen:

Un detalle, no son 64 bits, son 64 bytes. Cada reporte HID en USB2.0 puede cargar hasta 64 bytes (más el report ID que en custom no se usa).

OK.

Un par de cosas más, a la hora de instalar el driver, en win7 se hace de forma automática normalmente, salvo que falle, en caso de fallar o en otro sistema operativo como XP ¿que driver instalo? El de microchip del "Microchip Application Libraries" de la ruta: "C:\Microchip Solutions v2012-08-22\USB\Tools\MCHPUSB Custom Driver" ?

Y, el identificador que se pone intercalando ceros y comas ¿Es solo un letrero en la ventana de instalación del driver?

Por ultimo decir que lo que comentó migsantiago de compilar con la versión de 32bit (x86) es necesario a demás de los otros cambios que comenté.

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# (para USB HID)
« Respuesta #19 en: 14 de Enero de 2015, 21:11:52 »
Pepe, la magia de HID es que todo sistema operativo completo está obligado a enumerarlo con los drivers estándar (Windows, Linux, Mac). Es como la clase MSD... nunca debes necesitar un driver ajeno a los del SO para echarlas a andar. El custom driver que mencionas debe ser para el modo Bulk. HID es plug-and-play real.

¿Cuál identificador?  :o


Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c# (para USB HID)
« Respuesta #20 en: 15 de Enero de 2015, 12:54:15 »
Pepe, la magia de HID es que todo sistema operativo completo está obligado a enumerarlo con los drivers estándar (Windows, Linux, Mac). Es como la clase MSD... nunca debes necesitar un driver ajeno a los del SO para echarlas a andar. El custom driver que mencionas debe ser para el modo Bulk. HID es plug-and-play real.


OK  ;-)


¿Cuál identificador?  :o


Me refiero a esta parte del fichero de cabecera "usb_desc_hid.h":

Código: [Seleccionar]
char const USB_STRING_DESC[]={
   //string 0
         4, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         0x09,0x04,   //Microsoft Defined for US-English
   //string 1
         8, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         'C',0,
         'C',0,
         'S',0,
   //string 2
         26, //length of string index
         USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
         'C',0,
         'C',0,
         'S',0,
         ' ',0,
         'H',0,
         'I',0,
         'D',0,
         ' ',0,
         'D',0,
         'e',0,
         'm',0,
         'o',0
};

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# (para USB HID)
« Respuesta #21 en: 15 de Enero de 2015, 15:04:15 »
Ah ya!

Ese texto sale en tu Device Manager de Windows y así es como el PIC se presenta a sí mismo ante el mundo. Es su nombre de pila jeje

Lleva los ceros porque es texto Unicode o UTF, no recuerdo, y los chars pesan 2 bytes en esa codificación. Es así para soportar caracteres internacionales.

Puedes cambiarlo, pero deberás recalcular el tamaño del string y modificar los descriptores para que Windows lo recupere correctamente.

Desconectado rlc11

  • PIC10
  • *
  • Mensajes: 10
Re: Ingenieria inversa con dll en c# (para USB HID)
« Respuesta #22 en: 25 de Enero de 2015, 12:38:55 »
si aun necesitas me avisas tengo un documento de moyano, comunicacion usb hid, yo lo use en C# 2010 y me funciona bien, pero al parecer solo funciona con sistemas de 32 bytes.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c# (para USB HID)
« Respuesta #23 en: 25 de Enero de 2015, 14:34:44 »
si aun necesitas me avisas tengo un documento de moyano, comunicacion usb hid, yo lo use en C# 2010 y me funciona bien, pero al parecer solo funciona con sistemas de 32 bytes.


Gracias, ya tengo un ejemplo funcionando, pero si no ocupa mucho cuelgalo por aquí.

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 Lollipop

  • PIC10
  • *
  • Mensajes: 10
Re: Ingenieria inversa con dll en c# (para USB HID)
« Respuesta #24 en: 04 de Febrero de 2015, 12:26:42 »
Caramba! Ustedes son unos cracks! Tuve que leer el hilo dos veces... detenidamente.

Gracias chicos por compartir.
:-)

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re: Ingenieria inversa con dll en c# (para USB HID)
« Respuesta #25 en: 12 de Julio de 2015, 07:19:54 »
Hola micro_Pepe, se que el hilo es viejo y ya no te servira, pero creo que te interesara saberlo.

Citar
  es un poco latoso el tener que seleccionar el puerto COM, más lento y menos fiable

Yo he hecho muchos programas en C# y cdc, pero me molestaba al igual que a ti tener que seleccionar el puerto com.

Así que desarrolle un programa, con ayuda de captura de excepciones que secuencialmente en el evento de abrir el programa, en el de abrir el formulario hijo, o al darle a un boton conectar, pregunta a todos los puertos com disponibles en el ordenador, el puerto que no responde nada es capturado por la excepción y pasa al siguiente, así hasta que pregunta al que tiene tu maquina y este le responde el mensaje esperado.

 De esta manera tu maquina se conecta automáticamente y totalmente transparente al puerto COM correcto nada mas enchufar el USB.

Así tienes la ventaja de la facilidad del USB cdc y lo rápido y sencillo de conectar del hid.

Un saludo.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: Ingenieria inversa con dll en c# (para USB HID)
« Respuesta #26 en: 13 de Julio de 2015, 13:49:42 »
Hola micro_Pepe, se que el hilo es viejo y ya no te servira, pero creo que te interesara saberlo.

Citar
  es un poco latoso el tener que seleccionar el puerto COM, más lento y menos fiable

Yo he hecho muchos programas en C# y cdc, pero me molestaba al igual que a ti tener que seleccionar el puerto com.

Así que desarrolle un programa, con ayuda de captura de excepciones que secuencialmente en el evento de abrir el programa, en el de abrir el formulario hijo, o al darle a un boton conectar, pregunta a todos los puertos com disponibles en el ordenador, el puerto que no responde nada es capturado por la excepción y pasa al siguiente, así hasta que pregunta al que tiene tu maquina y este le responde el mensaje esperado.

 De esta manera tu maquina se conecta automáticamente y totalmente transparente al puerto COM correcto nada mas enchufar el USB.

Así tienes la ventaja de la facilidad del USB cdc y lo rápido y sencillo de conectar del hid.

Un saludo.

OK, lo tendré en cuenta para un proximo invento  :) la verdad es que esta forma es mucho más facil de programar.

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.

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