增加所有文件
This commit is contained in:
295
middleware/usb/uC-USBH/App/HID/app_usbh_hid.c
Normal file
295
middleware/usb/uC-USBH/App/HID/app_usbh_hid.c
Normal file
@@ -0,0 +1,295 @@
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* EXAMPLE CODE
|
||||
*
|
||||
* This file is provided as an example on how to use Micrium products.
|
||||
*
|
||||
* Please feel free to use any application code labeled as 'EXAMPLE CODE' in
|
||||
* your application products. Example code may be used as is, in whole or in
|
||||
* part, or may be used as a reference only. This file can be modified as
|
||||
* required to meet the end-product requirements.
|
||||
*
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
*
|
||||
* USB HOST HID TEST APPLICATION
|
||||
*
|
||||
* TEMPLATE
|
||||
*
|
||||
* Filename : app_usbh_hid_demo.c
|
||||
* Version : V3.42.01
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* INCLUDE FILES
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#define APP_USBH_HID_MODULE
|
||||
#include <Class/HID/usbh_hid.h>
|
||||
#include "app_usbh_hid.h"
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* LOCAL DEFINES
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
#define USBH_HID_APP_USAGE_MOUSE 0x00000002u
|
||||
#define USBH_HID_APP_USAGE_KBD 0x00000006u
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* LOCAL CONSTANTS
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* LOCAL DATA TYPES
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* LOCAL TABLES
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* LOCAL GLOBAL VARIABLES
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* LOCAL FUNCTION PROTOTYPES
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
static void App_USBH_HID_ClassDevNotify(void *p_hid_dev,
|
||||
CPU_INT08U state,
|
||||
void *p_ctx);
|
||||
|
||||
static void App_USBH_HID_DevConn (USBH_HID_DEV *p_hid_dev);
|
||||
|
||||
static void App_USBH_HID_DevDisconn (USBH_HID_DEV *p_hid_dev);
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* LOCAL CONFIGURATION ERRORS
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
* GLOBAL FUNCTIONS
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* App_USBH_HID_Init()
|
||||
*
|
||||
* Description : Register HID notify callback.
|
||||
*
|
||||
* Argument(s) : None.
|
||||
*
|
||||
* Return(s) : USBH_ERR_NONE, if the demo is initialized.
|
||||
* Specific error code, otherwise.
|
||||
*
|
||||
* Note(s) : None.
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
USBH_ERR App_USBH_HID_Init (void)
|
||||
{
|
||||
USBH_ERR host_err;
|
||||
|
||||
/* ----------- REGISTER DRV & NOTIFICATION ------------ */
|
||||
host_err = USBH_ClassDrvReg( &USBH_HID_ClassDrv,
|
||||
App_USBH_HID_ClassDevNotify,
|
||||
(void *)0);
|
||||
return (host_err);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
* LOCAL FUNCTIONS
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* App_USBH_HID_ClassDevNotify()
|
||||
*
|
||||
* Description : Handle device state change notification for HID devices.
|
||||
*
|
||||
* Argument(s) : p_class_dev Pointer to class device.
|
||||
*
|
||||
* state State.
|
||||
*
|
||||
* pctx Pointer to context.
|
||||
*
|
||||
* Return(s) : None.
|
||||
*
|
||||
* Note(s) : None.
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
static void App_USBH_HID_ClassDevNotify (void *p_class_dev,
|
||||
CPU_INT08U state,
|
||||
void *p_ctx)
|
||||
{
|
||||
USBH_HID_DEV *p_hid_dev;
|
||||
|
||||
|
||||
(void)p_ctx;
|
||||
p_hid_dev = (USBH_HID_DEV *)p_class_dev;
|
||||
|
||||
switch (state) {
|
||||
case USBH_CLASS_DEV_STATE_CONN: /* ---------------- HID DEVICE CONN'D ----------------- */
|
||||
APP_TRACE_INFO(("HID Demo: Device Connected\r\n"));
|
||||
App_USBH_HID_DevConn(p_hid_dev);
|
||||
break;
|
||||
|
||||
case USBH_CLASS_DEV_STATE_DISCONN: /* ---------------- HID DEVICE REMOVED ---------------- */
|
||||
APP_TRACE_INFO(("HID Demo: Device Removed\r\n"));
|
||||
App_USBH_HID_DevDisconn(p_hid_dev);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* App_USBH_HID_DevConn()
|
||||
*
|
||||
* Description : This function is called when HID device is connected.
|
||||
*
|
||||
* Argument(s) : p_hid_dev Pointer to HID device.
|
||||
*
|
||||
* Return(s) : None.
|
||||
*
|
||||
* Note(s) : None.
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
static void App_USBH_HID_DevConn (USBH_HID_DEV *p_hid_dev)
|
||||
{
|
||||
CPU_INT08U nbr_report_id;
|
||||
CPU_INT08U report_id_cnt;
|
||||
USBH_HID_REPORT_ID *p_report_id_array;
|
||||
USBH_HID_REPORT_ID *p_report_id;
|
||||
USBH_ERR err;
|
||||
|
||||
|
||||
err = USBH_HID_RefAdd(p_hid_dev); /* Add ref */
|
||||
if (err != USBH_ERR_NONE) {
|
||||
APP_TRACE_INFO(("Error in App_USBH_HID_DevConn(): %d\r\n", err));
|
||||
return;
|
||||
}
|
||||
|
||||
err = USBH_HID_IdleSet(p_hid_dev, 0u, 0u); /* Set Idle Time. */
|
||||
if (err == USBH_ERR_EP_STALL) {
|
||||
APP_TRACE_INFO(("Error in App_USBH_HID_DevConn(): %d\r\n", err));
|
||||
} else if (err != USBH_ERR_NONE) {
|
||||
APP_TRACE_INFO(("Error in App_USBH_HID_DevConn(): %d\r\n", err));
|
||||
return;
|
||||
}
|
||||
|
||||
err = USBH_HID_Init(p_hid_dev); /* Initialize HID */
|
||||
if (err != USBH_ERR_NONE) {
|
||||
APP_TRACE_INFO(("Error in App_USBH_HID_DevConn(): %d\r\n", err));
|
||||
return;
|
||||
}
|
||||
|
||||
err = USBH_HID_GetReportIDArray(p_hid_dev,
|
||||
&p_report_id_array,
|
||||
&nbr_report_id);
|
||||
if (err != USBH_ERR_NONE) {
|
||||
APP_TRACE_INFO(("Error in App_USBH_HID_DevConn(): %d\r\n", err));
|
||||
return;
|
||||
}
|
||||
|
||||
for (report_id_cnt = 0u; report_id_cnt < nbr_report_id; report_id_cnt++) {
|
||||
p_report_id = &p_report_id_array[report_id_cnt];
|
||||
|
||||
if (p_report_id->Type != 0x08u) { /* Validate report is of INPUT type. */
|
||||
continue;
|
||||
}
|
||||
|
||||
if (p_hid_dev->Usage == USBH_HID_APP_USAGE_KBD) {
|
||||
|
||||
APP_TRACE_INFO(("HID Demo: Keyboard Connected\r\n"));
|
||||
|
||||
err = USBH_HID_RegRxCB( p_hid_dev,
|
||||
p_report_id->ReportID,
|
||||
(USBH_HID_RXCB_FNCT)App_USBH_KBD_CallBack,
|
||||
(void *)p_hid_dev);
|
||||
|
||||
} else if (p_hid_dev->Usage == USBH_HID_APP_USAGE_MOUSE) {
|
||||
|
||||
APP_TRACE_INFO(("HID Demo: Mouse Connected\r\n"));
|
||||
|
||||
err = USBH_HID_RegRxCB( p_hid_dev,
|
||||
p_report_id->ReportID,
|
||||
(USBH_HID_RXCB_FNCT)App_USBH_MouseCallBack,
|
||||
(void *)p_hid_dev);
|
||||
}
|
||||
}
|
||||
|
||||
if (err != USBH_ERR_NONE) {
|
||||
APP_TRACE_INFO(("Error in App_USBH_HID_DevConn(): %d\r\n", err));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* App_USBH_HID_DevDisconn()
|
||||
*
|
||||
* Description : This function is called when HID device is disconnected.
|
||||
*
|
||||
* Argument(s) : phid_dev Pointer to HID device.
|
||||
*
|
||||
* Return(s) : None.
|
||||
*
|
||||
* Note(s) : None.
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
static void App_USBH_HID_DevDisconn (USBH_HID_DEV *p_hid_dev)
|
||||
{
|
||||
USBH_HID_RefRel(p_hid_dev); /* Rel ref. */
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* END
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
Reference in New Issue
Block a user