Crivi
Joined: 15 Oct 2008 Posts: 1
|
USB composite descriptor |
Posted: Fri Oct 17, 2008 8:59 am |
|
|
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. |
|