CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Need help for USB HID report descriptor

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Guest








Need help for USB HID report descriptor
PostPosted: Thu Jun 15, 2006 6:14 am     Reply with quote

Hi Guys,

I have already search in differents topics of the CCS forum, but I can't find a solution for my problem.
I need your help !!!
I'am building a Thermostat USB with the example provide by CCS (ex_usb_hid.c).
I'am using a PIC 18F2550
I know that my problem come from the HID report descriptor.
I have searched differents example but nothing can't help me.

I can receive my 11 data of one byte from the PIC to my computer.
I am using a Visual Basic application created by Hidmaker (Tracesystems) to communicate with the windows HID driver.
My problem is the other side:
I send 7 data of one byte to the PIC from my computer, my application is saying to me that it's done, but when I look the watches in the debbuger mode, I see that I receive only the last data not all of my data.

_____________________________________________________________
This my main C code:
while (TRUE) {

// Gestion de la sonde et acquisition de la valeur de température
sonde();

// Gestion du relais
//relay();

// Usb task
usb_task();

// Fonction usb_debug_task qui affiche sur la liaison série les echanges de
// communication du bus USB

usb_debug_task();

// Si l'enumaration est faite alors nous pouvons communiquer
if (usb_enumerated()) {//Si la fonction énumération est vraie alors
if (!send_timer) {//Si le timer est different de 0
send_timer=250;

// Envoie des valeurs au PC
out_data[0]=45; // InTempVarLsb valeur du poid faible de la température
out_data[1]=1; // InTempVarMsb valeur du poid fort de la température

out_data[2]=1; // IntempLowVarLsb valeur du poid faible de la température de déclenchement TL
out_data[3]=1; // IntempLowVarMsb valeur du poid fort de la température de déclenchement TL

out_data[4]=2; // InTempHighVarLsb valeur du poid faible de la température de déclenchement TH
out_data[5]=2; // InTempHighVarMsb valeur du poid fort de la température de déclenchement TH

out_data[6]=19; // InSwitchVar variable non utilisé
out_data[7]=97; // InModeStatus variable de l'etat du mode du relais
out_data[8]=Heater_sensor.ds18b20_status; // InsondeStatus, 0 tout est ok ,1 ligne one wire court-circuitée,
// 2 pas de capteur et 3 erreur de crc lors de la lecture de la température;
out_data[9]='c'; // InBootStatus variable dedier au bootloader
out_data[10]=relais; // InEtatRelay variable de l'état du relais 0 ou 1

if (usb_put_packet(1, out_data, 11, USB_DTS_TOGGLE))
printf("\r\n<-- Sending 2 bytes: 0x%X 0x%X", out_data[0], out_data[1]);
}

// réception des valeurs depuis le PC
if (usb_kbhit(1)) {
usb_get_packet(1, in_data, 7);
printf("\r\n--> Received data: 0x%X 0x%X",in_data[0],in_data[1]);
if (in_data[0]) {LED_ON(LED_RELAY);} else {LED_OFF(LED_RELAY);}
if (in_data[1]) {LED_ON(LED_ERROR);} else {LED_OFF(LED_ERROR);}
test = in_data[0];
test2 = in_data[1];
test3 = in_data[2];
}
send_timer--;
delay_ms(1);
}
}


_____________________________________________________________
This is my report descriptor:

const char USB_CLASS_SPECIFIC_DESC[] = {
6, 0, 255, // Usage Page = Vendor Defined
9, 1, // Usage = IO device
0xa1, 1, // Collection = Application
0x19, 1, // Usage minimum
0x29, 11, // Usage maximum

0x15, 0x80, // Logical minimum (-128)
0x25, 0x7F, // Logical maximum (127)
/////////////////////////////////////////////////////////////
// The input report (PIC to the PC)
0x75, 8, // Report size = 8 (bits)
//
0x95, 11, // Report count = 16 bits (2 bytes)
//
0x81, 2, // Input (Data, Var, Abs)
//////////////////////////////////////////////////////////////
// The output report (PC to the PIC)
0x19, 1, // Usage minimum
0x19, 12, // Usage maximum
0x75, 8, // Report size = 8 (bits)
//
0x95, 7, // Report count = 16 bits (2 bytes)
//
0x91, 2, // Output (Data, Var, Abs)
0xc0 // End Collection
};

//if a class has an extra descriptor not part of the config descriptor,
// this lookup table defines where to look for it in the const
// USB_CLASS_SPECIFIC_DESC[] array.
//first element is the config number (if your device has more than one config)
//second element is which interface number
//set element to 0xFFFF if this config/interface combo doesn't exist
const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP[USB_NUM_CONFIGURATIONS][1] =
{
//config 1
//interface 0
0
};

//if a class has an extra descriptor not part of the config descriptor,
// this lookup table defines the size of that descriptor.
//first element is the config number (if your device has more than one config)
//second element is which interface number
//set element to 0xFFFF if this config/interface combo doesn't exist
const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[USB_NUM_CONFIGURATIONS][1] =
{
//config 1
//interface 0
32
};
_____________________________________________________________

This is the result of my VB application:

est results: 15.06.2006 13:35:11

Device # 1:
+ + + A Report has just ARRIVED. + + +
Report num in current Interface = 1
Report num in global report list = 0
//It's come from the PIC
InTempVarLsb 45
InTempVarMsb 1
InTempLowVarLsb 1
InTempLowVarMsb 1
InTempHighVarLsb 2
InTempHighVarMsb 2
InTempSwitchVar 19
InModeStatus 97
InSondeStatus 0
InBootStatus 99
InEtatRelay 0
----------------------------------------------------------------
//It's send to the pic
Wrote to device: OutTempLowVarLsb = 0x1
Wrote to device: OutTempLowVarMsb = 0x2
Wrote to device: OutTempHighVarLsb = 0x3
Wrote to device: OutTempHighVarMsb = 0x4
Wrote to device: OutModeRelayVar = 0x5
Wrote to device: OutBootStatus = 0x6
Wrote to device: OutBootVar = 0x7
+ + + A Report has just been SELECTED. + + +
Report num in global report list = 1

Successfully wrote to device

____________________________________________________________
This is my debbuger result :

out_data = (45,1,1,1,2,2,19,97,0,99,0,0,0,0,0,0,0,0,0,0)

in_data = (7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
---->Wrote to device: OutBootVar = 0x7
_____________________________________________________________



I hope there is enough informations to solve my problem.
Thanks in advance.
risou550 Very Happy
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group