Autor Tema: Ayuda El usb desencadenado : cdc usb  (Leído 2723 veces)

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

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Ayuda El usb desencadenado : cdc usb
« en: 10 de Febrero de 2009, 20:08:20 »
Saludos compañeros, estoy empezando en el tema del usb con el pic y he tomado como punto de partida el proyecto del maestro RedPic "El usb desencadenado : cdc usb", lo he ido entendiendo mas o menos, pero al mirar las librerias para definir al componente he encontrado esto:

Código: [Seleccionar]
//the offset of the starting location of each string.
//offset[0] is the start of string 0, offset[1] is the start of string 1, etc.
const char USB_STRING_DESC_OFFSET[]={0,4,12};

#define USB_STRING_DESC_COUNT sizeof(USB_STRING_DESC_OFFSET)

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 --> la compañia del producto ???
8, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
'R',0,
'R',0,
'2',0,
//string 2 --> nombre del dispositivo
22, //length of string index
USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING)
'R',0,
'e',0,
'd',0,
'P',0,
'i',0,
'c',0,
' ',0,
'U',0,
'S',0,
'B',0
};
#ENDIF   

La explicacion dada por RedPic es esta:

Código: [Seleccionar]
La tabla USB_STRING_DESC contiene la descripción del dispositivo detectado por el Driver de Windows XP y que nos va a mostrar en la correspondiente entrada en la lista del Hardware Instalado en el Sistema.

Consta de dos partes o tablas, la propiamente dicha USB_STRING_DESC que contiene las descripciones requeridas y una tabla accesoria llamada USB_STRING_DESC_OFFSET  que contiene los offset, o desplazamientos con respecto al inicio de USB_STRING_DESC en donde se encuentran las correspondientes cadenas. Ambas constan de tres elementos cada una de ellas.

USB_STRING_DESC_OFFSET  tiene tres números que indican cada uno de ellos donde comienza el correspondiente dato en la tabla USB_STRING_DESC. Así un contenido de {0,4,12} nos dice que que el primer string comienza en el byte 0, el segundo en el byte 4 y el tercero se encuentra a partir del byte número 12. Si cambiamos la longitud de cualquiera de los strings  deberemos reordenar esta tabla correspondientemente con solo contar los caracteres y apuntar en esta tabla el número de byte donde comienza cada uno de ellos.

USB_STRING_DESC contiene los tres strings en concreto que deseamos transmitir con el descriptor USB. Cada uno de ellos tiene la misma estructura que consta de un primer byte que indica la longitud total de la correspondiente cadena, un segundo byte que indica el tipo de dato que viene a continuación y por último tantos bytes como sean necesarios como contenido del string.

El primer dato de esta tabla es:

4, USB_DES_STRING_TYPE, 0x09, 0x04 que puede leerse como 4 : Longitud en bytes del dato incluido él mismo. USB_DES_STRING_TYPE que es una constante cuyo valor e 3 y que dice que lo que sigue es un string. Y 0x09, 0x04 que le indica al Windows que los strings que siguen están escritos en  correcto ingles americano (US-English)

Los dos siguientes datos son los dos strings que definen nuestro dispositivo y cuya estructura es idéntica al caso anterior:

8, USB_DES_STRING_TYPE, 'R', 0, 'R', 0, '2', 0 que define el string el nombre "RR2" de mis Hardware. Total 8 bytes ya que "RR2" se codifica añadiendo un 0x00 tras cada uno de los caracteres.

Y 22, USB_DESC_STRING_TYPE,  'R', 0, 'e', 0, 'd', 0, 'P', 0, 'i', 0, 'c', 0, ' ', 0, 'U', 0, 'S', 0, 'B', 0 que define el nombre de mi dispositivo como "RedPic USB"

Mi duda surge al determinar la longitud de las cadenas: pues al sumarlas,incluyendo en la longitud el propio dato, siempre me sale un byte de menos. La unica explicacion que encuentro, es que la longitud misma de la cadena se expresa usando 2 bytes ¿es esto asi? o sino ¿alguien sabe de dude surge el byte que me falta?

He buscado el tema original, pero no he sido capaz de encontrarlo por eso abro este tema. Muchas gracias por la ayuda.

Saludos desde Córdoba, españa

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: Ayuda El usb desencadenado : cdc usb
« Respuesta #1 en: 11 de Febrero de 2009, 09:10:37 »
Saludos! Ayer despues de postear, y con el pc apagado se me ocurrio otra posible explicacion que me parece mas logica, y es que en la longitud tambien se incluye la constante,usb_des_string_type:

Código: [Seleccionar]
USB_DES_STRING_TYPE que es una constante cuyo valor e 3 y que dice que lo que sigue es un string
Saludos desde Córdoba, españa


 

anything