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 support@ccsinfo.com

USB composite descriptor

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



Joined: 15 Oct 2008
Posts: 1

View user's profile Send private message

USB composite descriptor
PostPosted: Fri Oct 17, 2008 8:59 am     Reply with quote

Hello, I'm new here and I have read almost all the posts related to my problem but I can not find anything to help me. The fact is I am trying to connect a LCD with buttons a pic18f2550. Buttons that the detected me like a joystick on the control panel of games.
The problem I have is that the code below'm not able to operate the buttons on hid way, I just go on LCD:

Code:

   const char USB_CLASS_SPECIFIC_DESC[] = {
      0x05, 0x01, // USAGE_PAGE (Generic Desktop)
      0x15, 0x00, // LOGICAL_MINIMUM (0)
      0x09, 0x04, // USAGE (Joystick)
      0xa1, 0x01, // COLLECTION (Application)
      0x05, 0x01, //   USAGE_PAGE (generic)
      0x05, 0x09, //   USAGE_PAGE (Button)
      0x19, 0x01, //   USAGE_MINIMUM (Button 1)
      0x29, 0x0C, //   USAGE_MAXIMUM (Button 12)
      0x15, 0x00, //   LOGICAL_MINIMUM (0)
      0x25, 0x01, //   LOGICAL_MAXIMUM (1)
      0x75, 0x01, //   REPORT_SIZE (1) //1 bit por botón
      0x95, 0x0C, //   REPORT_COUNT (12) //12 botones x 1 bits = 12 bits
      0x55, 0x00, //   UNIT_EXPONENT (0)
      0x65, 0x00, //   UNIT (None)
      0x81, 0x02, //   INPUT (Data,Var,Abs)
      0x75, 0x01, //   REPORT_SIZE (1)
      0x95, 0x04, //   REPORT_COUNT (4)
      0x81, 0x01, //   INPUT (Constant) - 4 bits padding
      0xc0         // END_COLLECTION == 37
   };

   const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP[USB_NUM_CONFIGURATIONS][1] =
   {
         0
   };

   const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[USB_NUM_CONFIGURATIONS][1] =
   {
      sizeof(USB_CLASS_SPECIFIC_DESC)
    };

   #DEFINE USB_TOTAL_CONFIG_LEN      57

   char const USB_CONFIG_DESC[] = {
   //config_descriptor for config index 1
         USB_DESC_CONFIG_LEN,     //length of descriptor size == 0
         USB_DESC_CONFIG_TYPE,         //constant CONFIGURATION (0x02) == 1
         USB_TOTAL_CONFIG_LEN,0,  //size of all data returned for this config == 2,3
         2,      //number of interfaces this device supports == 4
         0x01,                //identifier for this configuration.  (IF we had more than one configurations) == 5
         0x00,                //index of string descriptor for this configuration == 6
         0xC0,                //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 reserved and bit7=1 == 7
         0x32,                //maximum bus power required (maximum milliamperes/2)  (0x32 = 100mA) == 8

   //interface descriptor 0 alt 0
         USB_DESC_INTERFACE_LEN,  //length of descriptor == 9
         USB_DESC_INTERFACE_TYPE,      //constant INTERFACE (0x04) == 10
         0x00,                //number defining this interface (IF we had more than one interface) == 11
         0x00,                //alternate setting = 12
         2,       //number of endpoints, not counting endpoint 0. == 13
         0xFF,                //class code, FF = vendor defined == 14
         0xFF,                //subclass code, FF = vendor == 15
         0xFF,                //protocol code, FF = vendor == 16
         0x00,                //index of string descriptor for interface == 17

   //endpoint descriptor
         USB_DESC_ENDPOINT_LEN, //length of descriptor == 18
         USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)  == 19
         0x81,              //endpoint number and direction (0x81 = EP1 IN) == 20
         0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt) == 21
         USB_EP1_TX_SIZE,0x00,         //maximum packet size supported == 22,23
         0x01,              //polling interval in ms. (for interrupt transfers ONLY) == 24

   //endpoint descriptor
         USB_DESC_ENDPOINT_LEN, //length of descriptor == 25
         USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05) == 26
         0x01,              //endpoint number and direction (0x01 = EP1 OUT) == 27
         0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt) == 28
         USB_EP1_RX_SIZE,0x00,         //maximum packet size supported == 29, 30
         0x01,              //polling interval in ms. (for interrupt transfers ONLY)  == 31 (empiezar desde 0, total 32)
//***************//
   //interface descriptor 2 (Joystick)
         USB_DESC_INTERFACE_LEN, //length of descriptor       == 32
         USB_DESC_INTERFACE_TYPE, //constant INTERFACE (INTERFACE 0x04)       ==33
         0x01, //number defining this interface (IF we had more than one interface)    ==34
         0x00, //alternate setting     ==35
         1, //number of endpoints for this interface  == 36
         0x03, //class code, 03 = HID == 37
         0x00,//0x01, //subclass code //boot == 38
         0x02, //protocol code == 39
         0x00, //index of string descriptor for interface ==40

   //class descriptor 2  (HID)
         USB_DESC_CLASS_LEN, //length of descriptor ==41
         USB_DESC_CLASS_TYPE, //dscriptor type (0x21 == HID) ==42
         0x00,0x01, //hid class release number (1.0) (try 1.10) ==43,44
         0x00, //localized country code (0 = none) ==45
         0x01, //number of hid class descrptors that follow (1) ==46
         0x22, //report descriptor type (0x22 == HID) ==47
         USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[0][0], 0x00, //length of report descriptor == 48,49

   //endpoint descriptor 2 IN
         USB_DESC_ENDPOINT_LEN, //length of descriptor == 50
         USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05) == 51
         0x82, //endpoint number and direction (0x81 = EP1 IN)       ==52
         USB_ENDPOINT_TYPE_INTERRUPT, //transfer type supported (0x03 is interrupt) == 53
         USB_EP2_TX_SIZE,0x00, //maximum packet size supported                  ==54,55
         10,  //polling interval, in ms.  (cant be smaller than 10 for slow speed devices) == 56
  };

   //****** BEGIN CONFIG DESCRIPTOR LOOKUP TABLES ********
   //since we can't make pointers to constants in certain pic16s, this is an offset table to find
   //  a specific descriptor in the above table.

   //NOTE: DO TO A LIMITATION OF THE CCS CODE, ALL HID INTERFACES MUST START AT 0 AND BE SEQUENTIAL
   //      FOR EXAMPLE, IF YOU HAVE 2 HID INTERFACES THEY MUST BE INTERFACE 0 AND INTERFACE 1
   #define USB_NUM_HID_INTERFACES   1

   //the maximum number of interfaces seen on any config
   //for example, if config 1 has 1 interface and config 2 has 2 interfaces you must define this as 2
   #define USB_MAX_NUM_INTERFACES   2

   //define how many interfaces there are per config.  [0] is the first config, etc.
   const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={2};
   
   const int16 USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][USB_NUM_HID_INTERFACES][1]=
   {
   //config 1
      //interface 0
         //class 1
         //9,
         41
   };
   #if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN)
      #error USB_TOTAL_CONFIG_LEN not defined correctly
   #endif


And I do not know or I'm doing wrong. I have set the examples of ccs, ex_usb_scope and ex_usb_mouse for this, but modified for buttons. If separate settings, or I find the LCD well, or I found the buttons like a joystick, but when it comes to glue together, nothing at all.

Has anyone had the same problem and knows how to solve it?
Or if you could guide me in some way, because it took several days looking at websites and forums and nothing found.

A greeting and thanks and pardon for my bad English. Embarassed
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