hola MLO__ yo tambien estoy trabajando con el protocolo USB hid de tipo teclado, pero tengo el mismo problema que tu tienes y no lo eh solocionado
al paracer es por utilizar cadenas, tiempos mal medidos, windows no captura bien la onformacion, etc..
tengo el siguiente codigo :
#include <18F4550.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#DEFINE USB_HID_DEVICE TRUE
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT //Turn on EP1 for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT //Turn on EP1 for IN bulk/interrupt transfers
#define USB_EP1_TX_SIZE 8
#define USB_EP1_RX_SIZE 8
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware soportada por CCS's PIC USB driver
#include <.\include\usb_kbd_HID.h> //USB Configuration and Device descriptors for this UBS device
#include <usb.c> //handles usb setup tokens and get descriptor reports
#include <ctype.h>
#byte portb=0x06
#define LED1 PIN_D0
#define LED2 PIN_D1
#define LED_ON output_high
#define LED_OFF output_low
int8 rx_msg[USB_EP1_RX_SIZE];
int8 tx_msg[8]={2,0,0,0,0,0,0,0};
char envia[10]={0,0,0,0,0,0,0,0,0,0};//40(return)
void show8nums(unsigned int32 num)
{
char numch[1];
int j;
if (num<m)
{
int j;
for( j=0;j<=7;j++)
{
numch[0]=num%10;
if(numch[0]==0)
{
envia[8-j]=39;
}
else
{
envia[8-j]=numch[0]-1+30;
}
delay_ms(10);
num=num/10;
}
}
}
void usb_rx_task(void){
if (usb_kbhit(1)){
usb_get_packet(1, rx_msg, sizeof(rx_msg));
}
}
void main() {
int8 i;
init(); //inicializamos el USB
usb_task(); //habilita periferico usb e interrupciones
usb_wait_for_enumeration(); //esperamos hasta que el dispositivo usb sea configurado por el host
LED_ON(LED2);
LED_OFF(LED1);
i=0;
if (usb_enumerated())
{
usb_rx_task();
delay_ms(1000);
LED_ON(LED1);
LED_OFF(LED2);
tx_msg[3]=0; //clear
tx_msg[4]=0;// clear;
tx_msg[5]=0;// clear;
tx_msg[6]=0;// clear;
tx_msg[7]=0;// clear;
usb_put_packet(1,tx_msg,sizeof(tx_msg),USB_DTS_TOGGLE);
show8nums(11223344); //numero que se tiene que enviar
while(i<=10){
tx_msg[7]=envia[ i ];
usb_puts(1,tx_msg,sizeof(tx_msg),USB_DTS_TOGGLE);
delay_ms(60);
i+=1;
}
i=0;
LED_ON(LED2);
LED_OFF(LED1);
}
}
Al conectar el dispositivo a la computadora solo me aparece 1234. ya eh intentado de todoo y no eh podido resolverlo