cancel
Showing results for 
Search instead for 
Did you mean: 

Increase packet size for HID demo code with STM32F10X-128-EVAL demo board.

minhthe2305
Associate II
Posted on October 14, 2009 at 04:43

Increase packet size for HID demo code with STM32F10X-128-EVAL demo board.

1 REPLY 1
minhthe2305
Associate II
Posted on October 14, 2009 at 04:43

Hi,

I am trying the HID demo code for STM32F10X-128-Eval demo board.

What I want to do is to increase the packet size for input/output transfer to 40 bytes.

I modified my code but only the input packet size increased to 40 bytes, the output packet size always is 2 bytes.

My code as following:

In the usb_desc.c

/* USB Standard Device Descriptor */

const u8 CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] =

{

0x12, /*bLength */

USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/

0x00, /*bcdUSB */

0x02,

0x00, /*bDeviceClass*/

0x00, /*bDeviceSubClass*/

0x00, /*bDeviceProtocol*/

0x40, /*bMaxPacketSize40*/

0x83, /*idVendor (0x0483)*/

0x04,

0x50, /*idProduct = 0x5750*/

0x57,

0x00, /*bcdDevice rel. 2.00*/

0x02,

1, /*Index of string descriptor describing

manufacturer */

2, /*Index of string descriptor describing

product*/

3, /*Index of string descriptor describing the

device serial number */

0x01 /*bNumConfigurations*/

}

; /* CustomHID_DeviceDescriptor */

/* USB Configuration Descriptor */

/* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */

const u8 CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =

{

0x09, /* bLength: Configuation Descriptor size */

USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */

CUSTOMHID_SIZ_CONFIG_DESC,

/* wTotalLength: Bytes returned */

0x00,

0x01, /* bNumInterfaces: 1 interface */

0x01, /* bConfigurationValue: Configuration value */

0x00, /* iConfiguration: Index of string descriptor describing

the configuration*/

0xC0, /* bmAttributes: Bus powered */

0x32, /* MaxPower 100 mA: this current is used for detecting Vbus */

/************** Descriptor of Custom HID interface ****************/

/* 09 */

0x09, /* bLength: Interface Descriptor size */

USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */

0x00, /* bInterfaceNumber: Number of Interface */

0x00, /* bAlternateSetting: Alternate setting */

0x02, /* bNumEndpoints */

0x03, /* bInterfaceClass: HID */

0x00, /* bInterfaceSubClass : 1=BOOT, 0=no boot */

0x00, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */

0, /* iInterface: Index of string descriptor */

/******************** Descriptor of Custom HID HID ********************/

/* 18 */

0x09, /* bLength: HID Descriptor size */

HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */

0x10, /* bcdHID: HID Class Spec release number */

0x01,

0x00, /* bCountryCode: Hardware target country */

0x01, /* bNumDescriptors: Number of HID class descriptors to follow */

0x22, /* bDescriptorType */

CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */

0x00,

/******************** Descriptor of Custom HID endpoints ******************/

/* 27 */

0x07, /* bLength: Endpoint Descriptor size */

USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

0x81, /* bEndpointAddress: Endpoint Address (IN) */

0x03, /* bmAttributes: Interrupt endpoint */

0x28, /* wMaxPacketSize: 2 Bytes max */

0x00,

0x20, /* bInterval: Polling Interval (32 ms) */

/* 34 */

0x07, /* bLength: Endpoint Descriptor size */

USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

/* Endpoint descriptor type */

0x01, /* bEndpointAddress: */

/* Endpoint Address (OUT) */

0x03, /* bmAttributes: Interrupt endpoint */

0x28, /* wMaxPacketSize: 2 Bytes max */

0x00,

0x20, /* bInterval: Polling Interval (20 ms) */

/* 41 */

}

; /* CustomHID_ConfigDescriptor */

const u8 CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =

{

0x05, 0x8c, /* USAGE_PAGE (ST Page) */

0x09, 0x01, /* USAGE (Demo Kit) */

0xa1, 0x01, /* COLLECTION (Application) */

/* 6 */

/* Led 1 */

0x85, 0x01, /* REPORT_ID (1) */

0x09, 0x01, /* USAGE (LED 1) */

0x15, 0x00, /* LOGICAL_MINIMUM (0) */

0x25, 0x01, /* LOGICAL_MAXIMUM (1) */

0x75, 0x08, /* REPORT_SIZE (8) */

0x95, 0x01, /* REPORT_COUNT (1) */

0xB1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */

0x85, 0x01, /* REPORT_ID (1) */

0x09, 0x01, /* USAGE (LED 1) */

0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */

/* 26 */

/* Led 2 */

0x85, 0x02, /* REPORT_ID 2 */

0x09, 0x02, /* USAGE (LED 2) */

0x15, 0x00, /* LOGICAL_MINIMUM (0) */

0x25, 0x01, /* LOGICAL_MAXIMUM (1) */

0x75, 0x08, /* REPORT_SIZE (8) */

0x95, 0x01, /* REPORT_COUNT (1) */

0xB1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */

0x85, 0x02, /* REPORT_ID (2) */

0x09, 0x02, /* USAGE (LED 2) */

0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */

/* 46 */

/* Led 3 */

0x85, 0x03, /* REPORT_ID (3) */

0x09, 0x03, /* USAGE (LED 3) */

0x15, 0x00, /* LOGICAL_MINIMUM (0) */

0x25, 0x01, /* LOGICAL_MAXIMUM (1) */

0x75, 0x08, /* REPORT_SIZE (8) */

0x95, 0x01, /* REPORT_COUNT (1) */

0xB1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */

0x85, 0x03, /* REPORT_ID (3) */

0x09, 0x03, /* USAGE (LED 3) */

0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */

/* 66 */

/* Led 4 */

0x85, 0x04, /* REPORT_ID 4) */

0x09, 0x04, /* USAGE (LED 4) */

0x15, 0x00, /* LOGICAL_MINIMUM (0) */

0x25, 0x01, /* LOGICAL_MAXIMUM (1) */

0x75, 0x08, /* REPORT_SIZE (8) */

0x95, 0x01, /* REPORT_COUNT (1) */

0xB1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */

0x85, 0x04, /* REPORT_ID (4) */

0x09, 0x04, /* USAGE (LED 4) */

0x91, 0x82, /* OUTPUT (Data,Var,Abs,Vol) */

/* 86 */

/* ADC IN */

0x85, 0x05, /* REPORT_ID (7) */

0x09, 0x05, /* USAGE (ADC IN) */

0x15, 0x00, /* LOGICAL_MINIMUM (0) */

0x26, 0xff, 0x00, /* LOGICAL_MAXIMUM (255) */

0x75, 0x08, /* REPORT_SIZE (8) */

0x95, 39,

0x81, 0x82, /* INPUT (Data,Var,Abs,Vol) */

0x85, 0x05, /* REPORT_ID (7) */

0x09, 0x05, /* USAGE (ADC in) */

0xb1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */

/* 161 */

0xc0 /* END_COLLECTION */

}; /* CustomHID_ReportDescriptor */

In the usb_conf.h -> change the address for Endpoint 1

#define ENDP1_TXADDR (0x100)

#define ENDP1_RXADDR (0x150)

In the usb_prop.c ->change the size for endpoint 1 to 40 bytes

/* Initialize Endpoint 1 */

SetEPType(ENDP1, EP_INTERRUPT);

SetEPTxAddr(ENDP1, ENDP1_TXADDR);

SetEPRxAddr(ENDP1, ENDP1_RXADDR);

SetEPTxCount(ENDP1, 40);

SetEPRxCount(ENDP1, 40);

SetEPRxStatus(ENDP1, EP_RX_VALID);

SetEPTxStatus(ENDP1, EP_TX_NAK);

Could somebody help?

Thank you very much.

MThe.