USB Component  Version 6.6
MDK-Professional Middleware for USB Device and Host
 All Data Structures Functions Variables Enumerations Enumerator Groups Pages
User API

User API reference of the Human Interface Device Class. More...

Functions

void USBD_HIDn_Initialize (void)
 Called during USBD_Initialize to initialize the USB HID class instance.
 
void USBD_HIDn_Uninitialize (void)
 Called during USBD_Uninitialize to de-initialize the USB HID class instance.
 
int32_t USBD_HIDn_GetReport (uint8_t rtype, uint8_t req, uint8_t rid, uint8_t *buf)
 Prepare HID Report data to send.
 
bool USBD_HIDn_SetReport (uint8_t rtype, uint8_t req, uint8_t rid, const uint8_t *buf, int32_t len)
 Process received HID Report data.
 
usbStatus USBD_HID_GetReportTrigger (uint8_t instance, uint8_t rid, const uint8_t *buf, int32_t len)
 Asynchronously prepare HID Report data to send.
 

Description

User API reference of the Human Interface Device Class.

Function Documentation

usbStatus USBD_HID_GetReportTrigger ( uint8_t  instance,
uint8_t  rid,
const uint8_t *  buf,
int32_t  len 
)

Asynchronously prepare HID Report data to send.

Parameters
[in]instanceinstance of HID class.
[in]ridreport ID.
[out]bufbuffer containing report data to send.
[in]lennumber of report data bytes to send.
Returns
status code that indicates the execution status of the function as defined with usbStatus.

The function USBD_HID_GetReportTrigger asynchronously prepares data that will be returned to the USB Host upon request. It enables the USB Device to send HID report data only when the data has changed. Usually, the USB Host sets idle time to infinity upon HID Device enumeration. This means, the USB Host expects data from a device only when it has changed. If idle time is not set to infinity, the USBD_HIDn_GetReport function is called whenever the idle time period is expired.

Use the function only for reports of type HID_REPORT_INPUT and for events that needs to update report data. The function should only be used for reports with the rtype = HID_REPORT_INPUT to signal that an updated HID report is available.

The argument instance specifies the instance of the HID device that is to be used.

The argument rid specifies the report ID and should be 0 if there's only one report in the system.

The argument buf is pointing to the buffer with the data to be sent.

The argument len specifies the number of bytes to be sent.

Code Example

#include "cmsis_os.h"
#include "rl_usb.h"
#include "Keyboard.h"
int main (void) {
uint8_t but;
uint8_t buf[2];
Keyboard_Initialize();
USBD_Initialize (0); /* USB Device 0 Initialization */
USBD_Connect (0); /* USB Device 0 Connect */
USBD_Initialize (1); /* USB Device 1 Initialization */
USBD_Connect (1); /* USB Device 1 Connect */
while (1) { /* Loop forever */
but = (uint8_t)(Keyboard_GetKeys ());
if (((but ) ^ buf[0]) & 1) {
buf[0] = (but ) & 1;
USBD_HID_GetReportTrigger(0, 0, &buf[0], 1);
}
if (((but >> 1) ^ buf[1]) & 3) {
buf[1] = (but >> 1) & 3;
USBD_HID_GetReportTrigger(1, 0, &buf[1], 1);
}
osDelay(100); /* 100 ms delay for sampling buttons */
}
}
int32_t USBD_HIDn_GetReport ( uint8_t  rtype,
uint8_t  req,
uint8_t  rid,
uint8_t *  buf 
)

Prepare HID Report data to send.

Parameters
[in]rtypereport type:
  • HID_REPORT_INPUT = input report requested
  • HID_REPORT_FEATURE = feature report requested
[in]reqrequest type:
  • USBD_HID_REQ_EP_CTRL = control endpoint request
  • USBD_HID_REQ_PERIOD_UPDATE = idle period expiration request
  • USBD_HID_REQ_EP_INT = previously sent report on interrupt endpoint request
[in]ridreport ID (0 if only one report exists).
[out]bufbuffer containing report data to send.
Returns
number of report data bytes prepared to send or invalid report requested.
  • value >= 0: number of report data bytes prepared to send
  • value = -1: invalid report requested

The function USBD_HIDn_GetReport prepares data that will be returned to the USB Host. You may modify the function to the application's needs. The function is called on any of the following events:

  • if USB Host has requested new data by request on Control Endpoint 0,
  • if USB Host set idle period different than infinite, at each idle period expiration,
  • if data was sent to USB Host.

The argument rtype specifies the report type:

Value Description
HID_REPORT_INPUT Input report requested
HID_REPORT_FEATUREFeature report requested

The argument req specifies the request type:

Value Description
USBD_HID_REQ_EP_CTRL Request came from control endpoint
USBD_HID_REQ_PERIOD_UPDATERequest came from idle period expiration
USBD_HID_REQ_EP_INT Request came from previously sent report on interrupt endpoint

The argument rid specifies the report ID and should be 0 if there's only one report in the system.

The argument buf is pointing to the buffer to report data.

Code Example

#include "rl_usbd.h"
#include "usb_hid.h"
int32_t USBD_HIDn_GetReport (uint8_t rtype, uint8_t req, uint8_t rid, uint8_t *buf) {
switch (rtype) {
case HID_REPORT_INPUT:
switch (rid) {
case 0:
switch (req) {
break;
}
break;
}
break;
case HID_REPORT_FEATURE:
break;
}
return (0);
}
void USBD_HIDn_Initialize ( void  )

Called during USBD_Initialize to initialize the USB HID class instance.

Returns
none.

The function USBD_HIDn_Initialize is called automatically upon initialization of a Human Interface Device Class Device and needs no invocation in the user code.

Modify this function to the application needs to allocate resources and initialize additional peripherals.

Code Example

#include "rl_usb.h"
#include "rl_usbd.h"
#include "usb_hid.h"
int main (void) {
..
USBD_Initialize (0); // USB Device 0 Initialization calls USBD_HIDn_Initialize() automatically
USBD_Connect (0); // USB Device 0 Connect
..
}
bool USBD_HIDn_SetReport ( uint8_t  rtype,
uint8_t  req,
uint8_t  rid,
const uint8_t *  buf,
int32_t  len 
)

Process received HID Report data.

Parameters
[in]rtypereport type:
  • HID_REPORT_OUTPUT = output report received
  • HID_REPORT_FEATURE = feature report received
[in]reqrequest type:
  • USBD_HID_REQ_EP_CTRL = report received on control endpoint
  • USBD_HID_REQ_EP_INT = report received on interrupt endpoint
[in]ridreport ID (0 if only one report exists).
[in]bufbuffer that receives report data.
[in]lenlength of received report data.
Returns
true received report data processed.
false received report data not processed or request not supported.

The function USBD_HIDn_SetReport handles HID report data that is received from the USB Host. The function is called when a HID report was received. You may modify the function to the application's needs.

The argument rtype specifies the report type:

Value Description
HID_REPORT_OUTPUT Output report received
HID_REPORT_FEATUREFeature report received

The argument req specifies the request type:

Value Description
USBD_HID_REQ_EP_CTRL Request came through control endpoint
USBD_HID_REQ_EP_INT Request came through interrupt endpoint

The argument rid specifies the report ID and should be 0 if there's only one report in the system.

The argument buf is pointing to the buffer to report data.

The argument len specifies the length of the received report data.

Code Example

#include "rl_usbd.h"
#include "usb_hid.h"
bool USBD_HIDn_SetReport (uint8_t rtype, uint8_t req, uint8_t rid, const uint8_t *buf, int32_t len) {
uint8_t i;
switch (rtype) {
case HID_REPORT_OUTPUT:
for (i = 0; i < 4; i++) {
if (*buf & (1 << i))
LED_On (i);
else
LED_Off (i);
}
break;
case HID_REPORT_FEATURE:
break;
}
return true;
}
void USBD_HIDn_Uninitialize ( void  )

Called during USBD_Uninitialize to de-initialize the USB HID class instance.

Returns
none.

The function USBD_HIDn_Uninitialize is called automatically upon un-initialization of a Human Interface Device Class Device and needs no invocation in the user code. If USBD_HIDn_Initialize has been adapted to the application, USBD_HIDn_Uninitialize should release resources and should de-initialize peripherals.

Code Example

#include "rl_usb.h"
#include "rl_usbd.h"
#include "usb_hid.h"
int main (void) {
..
USBD_Initialize (0); // USB Device 0 Initialization
...
USBD_Uninitialize (0); // USB Device 0 Un-Initialization
..
}