AnsweredAssumed Answered

STM32F303 USB HID Output Report

Question asked by R. L. on Dec 12, 2017

Hello,

 

i have a functioning USB HID Keyboard on my STM32F303 with an Output Report. I used the STM32Cube Software to create the standard mouse device and created my project on that Base. Now I want to send something to the Keyboard with the created Output Report but I dont know where I can get the Data on the STM32.

I use the VB.Net HIDLibrary to send the data to the Keyboard and that works fine without any errors, I just dont know where I can get the received data from. I also found this (https://community.st.com/message/72155) example and followed the solution B but in my usbd_def.h in the USBD_HandleTypeDef the pClassData variable is defined as void and the compiler dosen't know hhid->RxBuffer and hhid->RxLength.

 

Could someone tell me how to receive data from the host in a output report?

 

 

This is my Description

 

 

__ALIGN_BEGIN static uint8_t HID_CUSTOM_ReportDesc[HID_CUSTOM_REPORT_DESC_SIZE]  __ALIGN_END = {
// 78 bytes
  0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
  0x09, 0x06,        // Usage (Keyboard)
  0xA1, 0x01,        // Collection (Application)
  0x85, 0x01,        //   Report ID (1)
  0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
  0x75, 0x01,        //   Report Size (1)
  0x95, 0x08,        //   Report Count (8)
  0x19, 0xE0,        //   Usage Minimum (0xE0)
  0x29, 0xE7,        //   Usage Maximum (0xE7)
  0x15, 0x00,        //   Logical Minimum (0)
  0x25, 0x01,        //   Logical Maximum (1)
  0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
  0x95, 0x03,        //   Report Count (3)
  0x75, 0x08,        //   Report Size (8)
  0x15, 0x00,        //   Logical Minimum (0)
  0x25, 0x64,        //   Logical Maximum (100)
  0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
  0x19, 0x00,        //   Usage Minimum (0x00)
  0x29, 0x65,        //   Usage Maximum (0x65)
  0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
  0xC0,              // End Collection
  0x05, 0x0C,        // Usage Page (Consumer)
  0x09, 0x01,        // Usage (Consumer Control)
  0xA1, 0x01,        // Collection (Application)
  0x85, 0x02,        //   Report ID (2)
  0x05, 0x0C,        //   Usage Page (Consumer)
  0x15, 0x00,        //   Logical Minimum (0)
  0x25, 0x01,        //   Logical Maximum (1)
  0x75, 0x01,        //   Report Size (1)
  0x95, 0x08,        //   Report Count (8)
  0x09, 0xB5,        //   Usage (Scan Next Track)
  0x09, 0xB6,        //   Usage (Scan Previous Track)
  0x09, 0xB7,        //   Usage (Stop)
  0x09, 0xB8,        //   Usage (Eject)
  0x09, 0xCD,        //   Usage (Play/Pause)
  0x09, 0xE2,        //   Usage (Mute)
  0x09, 0xE9,        //   Usage (Volume Increment)
  0x09, 0xEA,        //   Usage (Volume Decrement)
  0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
  0xC0,              // End Collection //78
  0x06, 0x00, 0xff,  // USAGE_PAGE (Vendor Defined Page 1)
  0x09, 0x01,        // USAGE (Vendor Usage  1)
  0xa1, 0x01,        // COLLECTION (Application)
// ------- common globals --------
  0x15, 0x00,        //   LOGICAL_MINIMUM (0)
  0x26, 0xff, 0x00,  //   LOGICAL_MAXIMUM (255)
  0x75, 0x08,        //   REPORT_SIZE (8)
// ------- 420 bytes report --------
  0x85, 0x20,        //   REPORT_ID (3)
  0x96, 0xA4, 0x01,  //   REPORT_COUNT (420)
  0x09, 0x01,        //   USAGE (Vendor Usage  1)
  0x81, 0x02,        //   INPUT (Data,Var,Abs)
  0x09, 0x01,        //   USAGE (Vendor Usage  1)
  0x91, 0x02,        //   OUTPUT (Data,Var,Abs)
  0xc0               // END_COLLECTION
};

Outcomes