[#KINECTSDK] Kinect Missile Launcher (III): Otra forma de averiguar los valores para trabajar con el lanza misiles con C#

image

Buenas,

como he recibido varias preguntas relacionadas sobre cómo interpretar el buffer de entrada y salida de los dispositivos USB, voy a dejar una forma fácil de realizarlo.

Personalmente, yo utilizo la técnica del prueba y error; pero claro, esto te trae bastantes problemas de cabeza y lo mejor es trabajar con algún lenguaje de bajo nivel (C# sucks!).

Así que si eres amigo de las abstracciones, USB Monitor puede serte de gran ayuda. Este software te permite monitorizar los flujos de datos que se envían en los hubs USB. Dicho de otra forma podrás ver uno a uno los bytes que pasan por cada puerto USB.

En mi caso particular, y con la versión completa instalada, he configurado la misma para que capture toda la información que pasa por el segundo dispositivo HID. Ya me he dado cuenta de que el primero es el mouse.

image

Así que una vez definido el dispositivo que queremos atacar, lo siguiente es comenzar con la grabación de datos. En mi caso particular, no he aplicado ningún filtro.

He lanzado la aplicación de control del lanza misiles que viene con el mismo y he lanzado un misil. Esta es la traza que me deja el log

   1: 000238: Class-Specific Request Sent (DOWN), 24.04.2012 23:33:07.320 +22.500

   2: Request Type:Set Report (Data Field)

   3: Report Type:Output

   4: ReportID:0x0

   5: Parsed Report:

   6: Report Name:Unknown

   7: Unknown[-128..127]/[0..255]: 64

   8:  

   9: 000239: Class-Specific Data (UP), 24.04.2012 23:33:07.320 +0.0

  10: Request Type:Set Report (Data Field)

  11:  

  12: 000240: Report Arrived (UP), 24.04.2012 23:33:07.335 +0.015

  13: Report Name:Unknown

  14: Unknown[-128..127]/[0..255]: 0

  15:  

  16: 000241: Report Arrived (DOWN), 24.04.2012 23:33:07.335 +0.0

  17: Report Name:Unknown

  18: Unknown[-128..127]/[0..255]: 0

  19:  

  20: 000242: Class-Specific Request Sent (DOWN), 24.04.2012 23:33:07.335 +0.0

  21: Request Type:Set Report (Data Field)

  22: Report Type:Output

  23: ReportID:0x0

  24: Parsed Report:

  25: Report Name:Unknown

  26: Unknown[-128..127]/[0..255]: 16

  27:  

  28: 000243: Class-Specific Data (UP), 24.04.2012 23:33:07.335 +0.0

  29: Request Type:Set Report (Data Field)

  30:  

  31: 000244: Class-Specific Request Sent (DOWN), 24.04.2012 23:33:07.850 +0.514

  32: Request Type:Set Report (Data Field)

  33: Report Type:Output

  34: ReportID:0x0

  35: Parsed Report:

  36: Report Name:Unknown

  37: Unknown[-128..127]/[0..255]: 64

  38:  

  39: 000245: Class-Specific Data (UP), 24.04.2012 23:33:07.850 +0.0

  40: Request Type:Set Report (Data Field)

  41:  

  42: 000246: Report Arrived (UP), 24.04.2012 23:33:07.866 +0.015

  43: Report Name:Unknown

  44: Unknown[-128..127]/[0..255]: 16

  45:  

  46: 000247: Report Arrived (DOWN), 24.04.2012 23:33:07.866 +0.0

  47: Report Name:Unknown

  48: Unknown[-128..127]/[0..255]: 16

  49:  

  50: 000248: Class-Specific Request Sent (DOWN), 24.04.2012 23:33:07.953 +0.086

  51: Request Type:Set Report (Data Field)

  52: Report Type:Output

  53: ReportID:0x0

  54: Parsed Report:

  55: Report Name:Unknown

  56: Unknown[-128..127]/[0..255]: 64

  57:  

  58: 000249: Class-Specific Data (UP), 24.04.2012 23:33:08.007 +0.053

  59: Request Type:Set Report (Data Field)

  60:  

  61: 000250: Report Arrived (UP), 24.04.2012 23:33:08.026 +0.019

  62: Report Name:Unknown

  63: Unknown[-128..127]/[0..255]: 16

  64:  

  65: 000251: Report Arrived (DOWN), 24.04.2012 23:33:08.026 +0.0

  66: Report Name:Unknown

  67: Unknown[-128..127]/[0..255]: 16

  68:  

  69: 000252: Class-Specific Request Sent (DOWN), 24.04.2012 23:33:14.565 +6.539

  70: Request Type:Set Report (Data Field)

  71: Report Type:Output

  72: ReportID:0x0

  73: Parsed Report:

  74: Report Name:Unknown

  75: Unknown[-128..127]/[0..255]: 32

  76:  

  77: 000253: Class-Specific Data (UP), 24.04.2012 23:33:14.565 +0.0

  78: Request Type:Set Report (Data Field)

  79:  

  80: 000254: Class-Specific Request Sent (DOWN), 24.04.2012 23:37:05.977 +231.412

  81: Request Type:Set Report (Data Field)

  82: Report Type:Output

  83: ReportID:0x0

  84: Parsed Report:

  85: Report Name:Unknown

  86: Unknown[-128..127]/[0..255]: 64

  87:  

  88: 000255: Class-Specific Data (UP), 24.04.2012 23:37:05.977 +0.0

  89: Request Type:Set Report (Data Field)

  90:  

  91: 000256: Report Arrived (UP), 24.04.2012 23:37:05.977 +0.0

  92: Report Name:Unknown

  93: Unknown[-128..127]/[0..255]: 0

  94:  

  95: 000257: Report Arrived (DOWN), 24.04.2012 23:37:05.977 +0.0

  96: Report Name:Unknown

  97: Unknown[-128..127]/[0..255]: 0

  98:  

  99: 000258: Class-Specific Request Sent (DOWN), 24.04.2012 23:37:06.040 +0.062

 100: Request Type:Set Report (Data Field)

 101: Report Type:Output

 102: ReportID:0x0

 103: Parsed Report:

 104: Report Name:Unknown

 105: Unknown[-128..127]/[0..255]: 16

 106:  

 107: 000259: Class-Specific Data (UP), 24.04.2012 23:37:06.040 +0.0

 108: Request Type:Set Report (Data Field)

 109:  

 110: 000260: Class-Specific Request Sent (DOWN), 24.04.2012 23:37:06.102 +0.062

 111: Request Type:Set Report (Data Field)

 112: Report Type:Output

 113: ReportID:0x0

 114: Parsed Report:

 115: Report Name:Unknown

 116: Unknown[-128..127]/[0..255]: 64

 117:  

 118: 000261: Class-Specific Data (UP), 24.04.2012 23:37:06.196 +0.093

 119: Request Type:Set Report (Data Field)

 120:  

 121: 000262: Report Arrived (UP), 24.04.2012 23:37:06.211 +0.015

 122: Report Name:Unknown

 123: Unknown[-128..127]/[0..255]: 16

 124:  

 125: 000263: Report Arrived (DOWN), 24.04.2012 23:37:06.211 +0.0

 126: Report Name:Unknown

 127: Unknown[-128..127]/[0..255]: 16

 128:  

 129: 000264: Class-Specific Request Sent (DOWN), 24.04.2012 23:37:06.258 +0.046

 130: Request Type:Set Report (Data Field)

 131: Report Type:Output

 132: ReportID:0x0

 133: Parsed Report:

 134: Report Name:Unknown

 135: Unknown[-128..127]/[0..255]: 64

 136:  

 137: 000265: Class-Specific Data (UP), 24.04.2012 23:37:06.367 +0.109

 138: Request Type:Set Report (Data Field)

 139:  

 140: 000266: Report Arrived (UP), 24.04.2012 23:37:06.367 +0.0

 141: Report Name:Unknown

 142: Unknown[-128..127]/[0..255]: 16

 143:  

 144: 000267: Report Arrived (DOWN), 24.04.2012 23:37:06.367 +0.0

 145: Report Name:Unknown

 146: Unknown[-128..127]/[0..255]: 16

 147:  

 148: 000268: Class-Specific Request Sent (DOWN), 24.04.2012 23:37:06.430 +0.062

 149: Request Type:Set Report (Data Field)

 150: Report Type:Output

 151: ReportID:0x0

 152: Parsed Report:

 153: Report Name:Unknown

 154: Unknown[-128..127]/[0..255]: 32

 155:  

 156: 000269: Class-Specific Data (UP), 24.04.2012 23:37:06.523 +0.093

 157: Request Type:Set Report (Data Field)

Si analizamos los paquetes enviados (CS Request Sent) podremos ver la siguiente secuencia

  • 64
  • 16
  • 64
  • 64
  • 32

Además tenemos la diferencia de tiempo entre cada llamada. Yo para mi prueba la he redondeado a 50 milisegundos y he creado una aplicación de ejemplo son el siguiente código:

   1: using System;

   2: using System.Threading;

   3: using USBHIDDRIVER;

   4:  

   5: namespace HidUsbDriverConsoleTest

   6: {

   7:     internal class Program

   8:     {

   9:         private static void Main(string[] args)

  10:         {

  11:             var usb = new USBInterface(@"vid_0a81", @"pid_ff01");

  12:             usb.Connect();

  13:             WriteData(usb, 64);

  14:             WriteData(usb, 16);

  15:             WriteData(usb, 64);

  16:             WriteData(usb, 64);

  17:             WriteData(usb, 32);

  18:             Console.ReadLine();

  19:         }

  20:         private static void WriteData(USBInterface usb, byte secondByteValue)

  21:         {

  22:             var command = new byte[] { 0, 2 };

  23:             command[1] = secondByteValue;

  24:             usb.UsbDevice.writeDataSimple(command);

  25:             Thread.Sleep(50);

  26:         }

  27:     }

  28: }

Como se puede ver, las líneas 13 a la 17 simulan esta secuencia y al momento de interactuar con el lanza misiles USB, pues hacen lo mismo que la aplicación original.

Más simple es imposible Risa

 

Descarga: http://www.hhdsoftware.com/usb-monitor

Saludos @ Home

El Bruno

image image image
About these ads

4 pensamientos en “[#KINECTSDK] Kinect Missile Launcher (III): Otra forma de averiguar los valores para trabajar con el lanza misiles con C#

  1. Pingback: [#KINECTSDK] Kinect Missile Launcher (V): Video y codigo fuente | El Bruno

  2. Pingback: [#HDI] HowTo: Listar dispositivos #HDI conectados en Windows 8.1 | El Bruno

  3. Pingback: [#HDI] HowTo: Listar dispositivos #HDI conectados en Windows 8.1 - El Bruno

  4. Pingback: [#EVENT] Mi (fugaz) paso por el #Codemotion_es con #coding4Fun ha sido increíble (como siempre) Gracias !!! | El Bruno

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s