USB HID class

nRF5 SDK v15.2.0

nRF52840 only: Module with generic HID event data processing. More...

Modules

USB HID class types
nRF52840 only: Module with types and definitions used by HID modules.
USB HID class configuration
USB HID generic
nRF52840 only: Module with types, definitions, and API used by the HID generic class.
USB HID keyboard
nRF52840 only: Module with types, definitions, and API used by the HID keyboard class.
USB HID mouse
nRF52840 only: Module with types, definitions, and API used by the HID mouse class.

Data Structures

struct app_usbd_hid_methods_t
HID unified interface. More...
struct app_usbd_hid_report_buffer_t
HID report buffers. More...
struct app_usbd_hid_subclass_desc_t
HID subclass descriptor. More...
struct app_usbd_hid_inst_t
USB HID instance. More...
struct app_usbd_hid_ctx_t
HID internal context. More...

Macros

#define APP_USBD_HID_IFACE_IDX 0
HID instance interface index.
#define APP_USBD_HID_EPIN_IDX 0
HID instance endpoint IN index.
#define APP_USBD_HID_EPOUT_IDX 1
HID instance endpoint OUT index.
#define APP_USBD_HID_GENERIC_GLOBAL_OUT_REP_DEF (name, rep_size)
Define OUT report buffer structure app_usbd_hid_report_buffer_t . More...
#define APP_USBD_HID_GENERIC_SUBCLASS_REPORT_DESC (name,...)
Initializer of HID report descriptor. More...
#define APP_USBD_HID_GENERIC_SUBCLASS_PHYSICAL_DESC (name,...)
Initializer of HID physical descriptor. More...
#define APP_USBD_HID_INST_CONFIG (subclass_dsc,sub_boot,protocl,report_buff_in,report_buff_out,user_ev_handler,hid_methods,ep_list)
USB HID instance initializer app_usbd_hid_inst_t . More...

Typedefs

typedef void(* app_usbd_hid_user_ev_handler_t )( app_usbd_class_inst_t const *p_inst, app_usbd_hid_user_event_t event)
User event handler. More...
typedef ret_code_t (* app_usbd_hid_idle_handler_t )( app_usbd_class_inst_t const *p_inst, uint8_t report_id)
Idle report handler. More...

Functions

static void app_usbd_hid_access_lock ( app_usbd_hid_ctx_t *p_hid_ctx)
Locks internal hid context. More...
static void app_usbd_hid_access_unlock ( app_usbd_hid_ctx_t *p_hid_ctx)
Unlocks internal hid context. More...
static bool app_usbd_hid_access_lock_test ( app_usbd_hid_ctx_t *p_hid_ctx)
Tests whether internal lock is acquired. More...
static void app_usbd_hid_state_flag_set ( app_usbd_hid_ctx_t *p_hid_ctx, app_usbd_hid_state_flag_t flag)
Set one of the HID internal state flags. More...
static void app_usbd_hid_state_flag_clr ( app_usbd_hid_ctx_t *p_hid_ctx, app_usbd_hid_state_flag_t flag)
Clear one of the HID internal state flags. More...
static bool app_usbd_hid_state_flag_test ( app_usbd_hid_ctx_t *p_hid_ctx, app_usbd_hid_state_flag_t flag)
Test one of the HID internal state flags. More...
static bool app_usbd_hid_trans_required ( app_usbd_hid_ctx_t *p_hid_ctx)
Checks whether HID endpoint transfer required. More...
static bool app_usbd_hid_state_valid ( app_usbd_hid_ctx_t *p_hid_ctx)
Validates internal hid state. More...
ret_code_t app_usbd_hid_event_handler ( app_usbd_class_inst_t const *p_inst, app_usbd_hid_inst_t const *p_hinst, app_usbd_hid_ctx_t *p_hid_ctx, app_usbd_complex_evt_t const *p_event)
HID generic event handler. More...
app_usbd_hid_report_buffer_t * app_usbd_hid_rep_buff_in_get ( app_usbd_hid_inst_t const *p_hinst)
Returns IN report buffer. More...
static
app_usbd_hid_report_buffer_t
const *
app_usbd_hid_rep_buff_out_get ( app_usbd_hid_inst_t const *p_hinst)
Returns OUT report buffer. More...
static
app_usbd_hid_protocol_select_t
app_usbd_hid_selected_protocol_get ( app_usbd_hid_ctx_t *p_hid_ctx)
Returns HID selected protocol. More...
static nrf_drv_usbd_ep_t app_usbd_hid_epin_addr_get ( app_usbd_class_inst_t const *p_inst)
Auxiliary function to access to HID IN endpoint address. More...
static nrf_drv_usbd_ep_t app_usbd_hid_epout_addr_get ( app_usbd_class_inst_t const *p_inst)
Auxiliary function to access to HID generic OUT endpoint address. More...

Detailed Description

nRF52840 only: Module with generic HID event data processing.

Macro Definition Documentation

#define APP_USBD_HID_GENERIC_GLOBAL_OUT_REP_DEF ( name,
rep_size
)
Value:
static uint8_t CONCAT_2 (name, _buf)[(rep_size)]; \
.p_buff = CONCAT_2 (name, _buf), \
.size = sizeof ( CONCAT_2 (name, _buf)), \
}

Define OUT report buffer structure app_usbd_hid_report_buffer_t .

Parameters
name Instance name.
rep_size Output report size.
#define APP_USBD_HID_GENERIC_SUBCLASS_PHYSICAL_DESC ( name,
...
)
Value:
static uint8_t const CONCAT_2 (name, _data)[] = \
__VA_ARGS__ \
; \
static const app_usbd_hid_subclass_desc_t name = \
{ \
sizeof( CONCAT_2 (name, _data)), \
APP_USBD_DESCRIPTOR_PHYSICAL, \
CONCAT_2 (name,_data) \
}

Initializer of HID physical descriptor.

Parameters
name Physical descriptor name
... Physical descriptor data
#define APP_USBD_HID_GENERIC_SUBCLASS_REPORT_DESC ( name,
...
)
Value:
static uint8_t const CONCAT_2 (name, _data)[] = \
__VA_ARGS__ \
; \
static const app_usbd_hid_subclass_desc_t name = \
{ \
sizeof( CONCAT_2 (name, _data)), \
APP_USBD_DESCRIPTOR_REPORT, \
CONCAT_2 (name,_data) \
}

Initializer of HID report descriptor.

Parameters
name Report descriptor name
... Report descriptor data
#define APP_USBD_HID_INST_CONFIG ( subclass_dsc,
sub_boot,
protocl,
report_buff_in,
report_buff_out,
user_ev_handler,
hid_methods,
ep_list
)
Value:
{ \
.p_subclass_desc = subclass_dsc, \
.subclass_desc_count = ARRAY_SIZE(subclass_dsc), \
.p_rep_buffer_in = report_buff_in, \
.p_rep_buffer_out = report_buff_out, \
.user_event_handler = user_ev_handler, \
.p_hid_methods = hid_methods, \
.subclass_boot = sub_boot, \
.protocol = protocl, \
.p_ep_interval = ep_list \
}

USB HID instance initializer app_usbd_hid_inst_t .

Parameters
subclass_dsc HID subclass descriptors.
sub_boot Subclass boot. ( app_usbd_hid_subclass_t )
protocl HID protocol. ( app_usbd_hid_protocol_t )
report_buff_in Input report buffer list.
report_buff_out Output report buffer.
user_ev_handler app_usbd_hid_user_ev_handler_t .
hid_methods app_usbd_hid_methods_t .
ep_list List of endpoints and intervals

Typedef Documentation

typedef ret_code_t (* app_usbd_hid_idle_handler_t)( app_usbd_class_inst_t const *p_inst, uint8_t report_id)

Idle report handler.

Parameters
[in] p_inst Class instance.
[in] report_id Number of report ID that needs idle transfer.
typedef void(* app_usbd_hid_user_ev_handler_t)( app_usbd_class_inst_t const *p_inst, app_usbd_hid_user_event_t event)

User event handler.

Parameters
[in] p_inst Class instance.
[in] event User event.

Enumeration Type Documentation

HID context state flags.

Bit numbers in app_usbd_hid_ctx_t::state_flags .

Enumerator
APP_USBD_HID_STATE_FLAG_APPENDED

State flag APPENDED.

APP_USBD_HID_STATE_FLAG_STARTED

State flag STARTED.

APP_USBD_HID_STATE_FLAG_SUSPENDED

State flag SUSPENDED.

APP_USBD_HID_STATE_FLAG_TRANS_IN_PROGRESS

State flag TRANS_IN_PROGRESS.

Events passed to user event handler.

Note
Example prototype of user event handler:
void hid_user_ev_handler( app_usbd_class_inst_t const * p_inst,
app_usbd_hid_mouse_user_event_t event);
Enumerator
APP_USBD_HID_USER_EVT_SET_BOOT_PROTO

Event SET_BOOT_PROTOCOL.

APP_USBD_HID_USER_EVT_SET_REPORT_PROTO

Event SET_REPORT_PROTOCOL.

APP_USBD_HID_USER_EVT_OUT_REPORT_READY

Event OUT_REPORT_READY.

APP_USBD_HID_USER_EVT_IN_REPORT_DONE

Event IN_REPORT_DONE.

Function Documentation

static void app_usbd_hid_access_lock ( app_usbd_hid_ctx_t * p_hid_ctx )
inline static

Locks internal hid context.

Simple semaphore functionality to prevent concurrent access from application and interrupt to internal mouse data.

Parameters
[in] p_hid_ctx Internal hid context
static bool app_usbd_hid_access_lock_test ( app_usbd_hid_ctx_t * p_hid_ctx )
inline static

Tests whether internal lock is acquired.

Parameters
[in] p_hid_ctx Internal HID context.
Return values
true Locked.
false Unlocked.
static void app_usbd_hid_access_unlock ( app_usbd_hid_ctx_t * p_hid_ctx )
inline static

Unlocks internal hid context.

Simple semaphore functionality to prevent concurrent access from application and interrupt to internal mouse data.

Parameters
[in] p_hid_ctx Internal hid context.
static nrf_drv_usbd_ep_t app_usbd_hid_epin_addr_get ( app_usbd_class_inst_t const * p_inst )
inline static

Auxiliary function to access to HID IN endpoint address.

Parameters
[in] p_inst Class instance data.
Returns
IN endpoint address.

<HID instance interface index.

<HID instance endpoint IN index.

static nrf_drv_usbd_ep_t app_usbd_hid_epout_addr_get ( app_usbd_class_inst_t const * p_inst )
inline static

Auxiliary function to access to HID generic OUT endpoint address.

Parameters
[in] p_inst Class instance data.
Returns
OUT endpoint address.

<HID instance interface index.

<HID instance endpoint OUT index.

ret_code_t app_usbd_hid_event_handler ( app_usbd_class_inst_t const * p_inst ,
app_usbd_hid_inst_t const * p_hinst ,
app_usbd_hid_ctx_t * p_hid_ctx ,
app_usbd_complex_evt_t const * p_event
)

HID generic event handler.

This handler should process every class event after specific class handler. This approach allow to handle some events in the same way in all HID sub-classes.

Parameters
[in] p_inst Generic class instance.
[in] p_hinst HID class instance.
[in] p_hid_ctx HID context.
[in] p_event Complex event structure.
Returns
Standard error code.
app_usbd_hid_report_buffer_t * app_usbd_hid_rep_buff_in_get ( app_usbd_hid_inst_t const * p_hinst )

Returns IN report buffer.

Parameters
[in] p_hinst HID class instance.
Returns
Report buffer handle or NULL if report doesn't exist.
static app_usbd_hid_report_buffer_t const* app_usbd_hid_rep_buff_out_get ( app_usbd_hid_inst_t const * p_hinst )
inline static

Returns OUT report buffer.

Output reports are handled in interrupt handler so only one buffer is required. Buffer returned by this function has predefined size, which should be equal (maximum OUTPUT report size + 1). To receive OUT report this function should be called on APP_USBD_HID_USER_EVT_OUT_REPORT_READY event.

Parameters
[in] p_hinst HID class instance.
Returns
Report buffer handle or NULL if report doesn't exist.
static app_usbd_hid_protocol_select_t app_usbd_hid_selected_protocol_get ( app_usbd_hid_ctx_t * p_hid_ctx )
inline static

Returns HID selected protocol.

Parameters
[in] p_hid_ctx HID context.
Returns
Currently selected protocol ( app_usbd_hid_protocol_select_t ).
static void app_usbd_hid_state_flag_clr ( app_usbd_hid_ctx_t * p_hid_ctx ,
app_usbd_hid_state_flag_t flag
)
inline static

Clear one of the HID internal state flags.

Parameters
[in] p_hid_ctx Internal HID context.
[in] flag Flag to clear.
static void app_usbd_hid_state_flag_set ( app_usbd_hid_ctx_t * p_hid_ctx ,
app_usbd_hid_state_flag_t flag
)
inline static

Set one of the HID internal state flags.

Parameters
[in] p_hid_ctx Internal HID context.
[in] flag Flag to set.
static bool app_usbd_hid_state_flag_test ( app_usbd_hid_ctx_t * p_hid_ctx ,
app_usbd_hid_state_flag_t flag
)
inline static

Test one of the HID internal state flags.

Parameters
[in] p_hid_ctx Internal HID context.
[in] flag Flag to test.
Return values
true Flag is set.
false Flag is not set.
static bool app_usbd_hid_state_valid ( app_usbd_hid_ctx_t * p_hid_ctx )
inline static

Validates internal hid state.

HID Mouse has to receive some USBD events before functions from this module could be used.

Parameters
[in] p_hid_ctx Internal hid context.
Return values
true State is valid.
false State is invalid.
static bool app_usbd_hid_trans_required ( app_usbd_hid_ctx_t * p_hid_ctx )
inline static

Checks whether HID endpoint transfer required.

Parameters
[in] p_hid_ctx Internal HID context.
Return values
true Input endpoint transfer required.
false Transfer in progress or not allowed.