1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-20 10:54:14 +01:00

Added custom HID report descriptors. Updated packet length to 64 bytes for now.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@175 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
gussy 2010-02-05 10:33:56 +00:00 committed by gussy
parent b4c7f15677
commit 929d5fe51b
4 changed files with 71 additions and 77 deletions

View File

@ -160,7 +160,7 @@ static const uint8_t PIOS_USB_ConfigDescriptor[PIOS_USB_SIZ_CONFIG_DESC] = {
0x81, /* bEndpointAddress: Endpoint Address (IN) */
0x03, /* bmAttributes: Interrupt endpoint */
0x02, /* wMaxPacketSize: 2 Bytes max */
64,//0x02, /* wMaxPacketSize: 2 Bytes max */
0x00, 0x20, /* bInterval: Polling Interval (32 ms) */
/* 34 */
@ -170,7 +170,7 @@ static const uint8_t PIOS_USB_ConfigDescriptor[PIOS_USB_SIZ_CONFIG_DESC] = {
0x01, /* bEndpointAddress: */
/* Endpoint Address (OUT) */
0x03, /* bmAttributes: Interrupt endpoint */
0x02, /* wMaxPacketSize: 2 Bytes max */
64,//0x02, /* wMaxPacketSize: 2 Bytes max */
0x00, 0x20, /* bInterval: Polling Interval (20 ms) */
/* 41 */
};
@ -348,6 +348,8 @@ int32_t PIOS_USB_Init(uint32_t mode)
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
pInformation->Ctrl_Info.Usb_wLength = 64;
/* No error */
return 0;
}

View File

@ -52,7 +52,7 @@ const uint8_t PIOS_USB_HID_ReportDescriptor[PIOS_USB_HID_SIZ_REPORT_DESC] = {
0x09, 0x01, /* USAGE (Demo Kit) */
0xa1, 0x01, /* COLLECTION (Application) */
/* 6 */
#if 0
/* Led 1 */
0x85, 0x01, /* REPORT_ID (1) */
0x09, 0x01, /* USAGE (LED 1) */
@ -81,34 +81,6 @@ const uint8_t PIOS_USB_HID_ReportDescriptor[PIOS_USB_HID_SIZ_REPORT_DESC] = {
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 */
/* key Push Button */
0x85, 0x05, /* REPORT_ID (5) */
0x09, 0x05, /* USAGE (Push Button) */
@ -127,7 +99,7 @@ const uint8_t PIOS_USB_HID_ReportDescriptor[PIOS_USB_HID_SIZ_REPORT_DESC] = {
0x75, 0x07, /* REPORT_SIZE (7) */
0xb1, 0x83, /* FEATURE (Cnst,Var,Abs,Vol) */
/* 114 */
/* 74 */
/* Tamper Push Button */
0x85, 0x06, /* REPORT_ID (6) */
@ -147,7 +119,7 @@ const uint8_t PIOS_USB_HID_ReportDescriptor[PIOS_USB_HID_SIZ_REPORT_DESC] = {
0x75, 0x07, /* REPORT_SIZE (7) */
0xb1, 0x83, /* FEATURE (Cnst,Var,Abs,Vol) */
/* 142 */
/* 102 */
/* ADC IN */
0x85, 0x07, /* REPORT_ID (7) */
@ -156,12 +128,55 @@ const uint8_t PIOS_USB_HID_ReportDescriptor[PIOS_USB_HID_SIZ_REPORT_DESC] = {
0x26, 0xff, 0x00, /* LOGICAL_MAXIMUM (255) */
0x75, 0x08, /* REPORT_SIZE (8) */
0x81, 0x82, /* INPUT (Data,Var,Abs,Vol) */
0x85, 0x07, /* REPORT_ID (7) */
0x09, 0x07, /* USAGE (ADC in) */
0xb1, 0x82, /* FEATURE (Data,Var,Abs,Vol) */
/* 161 */
/* 121 */
#endif
0xc0 /* END_COLLECTION */
/* In Control */
0x85, 0x06, // Report ID (6)
0x95, 0x02, // REPORT_COUNT (2)
0x75, 0x08, // REPORT_SIZE (8)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x81, 0x02, // INPUT (Data,Var,Abs)
/*21*/
/* Out Control */
0x85, 0x07, // Report ID (7)
0x95, 0x02, // REPORT_COUNT (2)
0x75, 0x08, // REPORT_SIZE (8)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
/*36*/
/* In Data */
0x85, 0x01, // Report ID (1)
0x95, 0x40, // REPORT_COUNT (64)
0x75, 0x08, // REPORT_SIZE (8)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x81, 0x02, // INPUT (Data,Var,Abs)
/*51*/
/* Out Data */
0x85, 0x02, // Report ID (2)
0x95, 0x40, // REPORT_COUNT (64)
0x75, 0x08, // REPORT_SIZE (8)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
/*66*/
0xc0 /* END_COLLECTION */
/*67*/
};
ONE_DESCRIPTOR PIOS_USB_HID_Report_Descriptor = {(uint8_t *) PIOS_USB_HID_ReportDescriptor, PIOS_USB_HID_SIZ_REPORT_DESC};
ONE_DESCRIPTOR PIOS_USB_HID_Hid_Descriptor = {(uint8_t*) PIOS_USB_HID_ReportDescriptor + PIOS_USB_HID_OFF_HID_DESC, PIOS_USB_HID_SIZ_HID_DESC};
@ -267,38 +282,18 @@ static uint8_t *PIOS_USB_HID_GetProtocolValue(uint16_t Length)
void PIOS_USB_HID_EP1_OUT_Callback(void)
{
uint8_t Receive_Buffer[2];
BitAction Led_State;
uint32_t DataLength = 0;
/* Read received data (2 bytes) */
USB_SIL_Read(0x01, Receive_Buffer);
//USB_SIL_Read(ENDP1, Receive_Buffer);
if(Receive_Buffer[1] == 0) {
Led_State = Bit_RESET;
} else {
Led_State = Bit_SET;
}
/* Get the number of received data on the selected Endpoint */
DataLength = GetEPRxCount(ENDP1 & 0x7F);
switch(Receive_Buffer[0]) {
case 1: /* Led 1 */
if(Led_State != Bit_RESET) {
PIOS_LED_On(LED1);
} else {
PIOS_LED_Off(LED1);
}
break;
case 2: /* Led 2 */
if(Led_State != Bit_RESET) {
PIOS_LED_On(LED2);
} else {
PIOS_LED_Off(LED2);
}
break;
default:
/* Use the memory interface function to write to the selected endpoint */
PMAToUserBufferCopy((uint8_t *) Receive_Buffer, GetEPRxAddr(ENDP1 & 0x7F), DataLength);
PIOS_LED_Off(LED1);
PIOS_LED_Off(LED2);
break;
}
/* Do stuff here */
SetEPRxStatus(ENDP1, EP_RX_VALID);
}

View File

@ -28,7 +28,7 @@
#define PIOS_USB_HID_H
/* Global Definitions */
#define PIOS_USB_HID_SIZ_REPORT_DESC 162
#define PIOS_USB_HID_SIZ_REPORT_DESC 67
#define PIOS_USB_HID_REPORT_DESCRIPTOR 0x22
#define PIOS_USB_HID_HID_DESCRIPTOR_TYPE 0x21
#define PIOS_USB_HID_OFF_HID_DESC 0x12

View File

@ -174,26 +174,23 @@ static void TaskHIDTest(void *pvParameters)
{
portTickType xDelay = 250 / portTICK_RATE_MS;;
__IO uint8_t Send_Buffer[2];
uint8_t count = 0;
__IO uint8_t Send_Buffer[64];
for(;;)
{
/* Report ID */
Send_Buffer[0] = 0x07;
/* Report Data */
Send_Buffer[1] = count;
Send_Buffer[0] = 0x01;
Send_Buffer[1] = 't';
Send_Buffer[2] = 'e';
Send_Buffer[3] = 's';
Send_Buffer[4] = 't';
Send_Buffer[5] = '!';
Send_Buffer[6] = '!';
/* Write the data to the pipe */
USB_SIL_Write(EP1_IN, (uint8_t*) Send_Buffer, 2);
SetEPTxValid(ENDP1);
UserToPMABufferCopy((uint8_t*) Send_Buffer, GetEPTxAddr(EP1_IN & 0x7F), 64);
SetEPTxCount(ENDP1, 64);
if(count >= 255) {
count = 0;
} else {
count++;
}
SetEPTxValid(ENDP1);
vTaskDelay(xDelay);
}