📄 cls_hndl.c
字号:
/****************************************************************************/
/* includes */
/****************************************************************************/
#include "HostStack.h"
/****************************************************************************/
/* global vars */
/****************************************************************************/
/*接口类设备初始化函数数组*/
unsigned short (*g_if_class_drive_init[ IF_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER ])( device_instance *dvi_ptr )
= {
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL
};
/*设备类设备初始化函数数组*/
unsigned short (*g_dv_class_drive_ini[ DV_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER ])( device_instance *dvi_ptr )
= {
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL
};
/*删除接口类设备函数数组*/
unsigned short (*g_if_class_drive_dispose[ IF_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER ])( device_instance *dvi_ptr )
= {
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL
};
/*删除类设备初始化函数数组*/
unsigned short (*g_dv_class_drive_dispose[ DV_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER ])( device_instance *dvi_ptr )
= {
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL
};
/*
char *class_str[] = {
"Reserved",
"Audio",
"Communication",
"HumanInterface",
"Monitor",
"PysicalInterface",
"Power",
"Printer",
"Storage",
"Hub",
"VenderSpecific"
};
*/
/****************************************************************************/
/* function prototypes */
/****************************************************************************/
static unsigned char if_reg_class_drive( unsigned char if_class_code, unsigned short (*if_class_init_method)( device_instance *dvi_ptr ), unsigned short (*if_class_dispose_method)( device_instance *dvi_ptr ) );
static unsigned char dv_reg_class_drive( unsigned char dv_class_code, unsigned short (*dv_class_init_method)( device_instance *dvi_ptr ), unsigned short (*dv_class_dispose_method)( device_instance *dvi_ptr ) );
/****************************************************************************/
/* function definitions */
/****************************************************************************/
//****************************************************************************
// 函数名称:class_driver_registration
// 输入参数:无
// 输出参数:无
// 功能描述:注册类设备驱动
//****************************************************************************
void class_driver_registration( void )
{
#ifdef HUB_CLASS_DRIVE
if ( dv_reg_class_drive( HUB_CLASS_DEVICE, hub_init_commands, hub_dispose_process ) )
while(1);
#endif
#ifdef AUDIO_CLASS_DRIVE
if ( if_reg_class_drive( AUDIO_CLASS_INTERFACE, audio_init_commands, audio_dispose_process ) )
while(1);
#endif
#ifdef PRINTER_CLASS_DRIVE
if ( if_reg_class_drive( PRINTER_CLASS_INTERFACE, printer_init_commands, printer_dispose_process ) )
while(1);
#endif
#ifdef HID_CLASS_DRIVE
if ( if_reg_class_drive( HID_CLASS_INTERFACE, hid_init_commands, hid_dispose_process ) )
while(1);
#endif
#ifdef MASSSTRAGE_CLASS_DRIVE
if ( if_reg_class_drive( MASSSTRAGE_CLASS_INTERFACE, mass_init_commands, mass_dispose_process) )
while(1);
#endif
}
//***************************************************************************
// 函数名称:class_initialization_method
// 输入参数:dvi_ptr,设备描述信息结构指针
// 输出参数:正常返回0,出错返回NULL
// 功能描述:初始化标准类设备
//***************************************************************************
unsigned short class_driver_install( device_instance *dvi_ptr )
{
unsigned char dv_class_code;
unsigned char if_class_code;
unsigned short err;
/* 检查设备类代码 */
dv_class_code = get_device_class_ID( dvi_ptr );
if ( (dv_class_code<DV_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER)&&( dv_class_code) )
{
if ( g_dv_class_drive_ini[ dv_class_code ] != NULL )
if ( 0 != (err = (*g_dv_class_drive_ini[ dv_class_code ])( dvi_ptr )) )
return ( err );
}
else
{
/* 检查接口类代码 */
if_class_code = get_interface_class_ID( dvi_ptr );
if ( if_class_code < IF_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER )
{
if ( g_if_class_drive_init[ if_class_code ] != NULL )
if ( 0 != (err = (*g_if_class_drive_init[ if_class_code ])( dvi_ptr )) )
return ( err );
}
}
return ( 0 );
}
//*******************************************************************
// 函数名称:class_dispose_method
// 输入参数:dvi_ptr,
// 输出参数:正常返回0,出借返回出错代码,
// 功能描述:删除一个标准类设备
//********************************************************************
unsigned short class_drive_dispose( device_instance *dvi_ptr )
{
unsigned char dv_class_code;
unsigned char if_class_code;
unsigned short err;
/* 检查设备类代*/
dv_class_code = get_device_class_ID( dvi_ptr );// 获取设备类ID
if ( (dv_class_code<DV_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER)&&( dv_class_code) )
{
if ( g_dv_class_drive_dispose[ dv_class_code ] != NULL )
if ( 0 != (err = (*g_dv_class_drive_dispose[ dv_class_code ])( dvi_ptr )) )
return ( err );
}
else
{
/* 检查接口类代码 */
if_class_code = get_interface_class_ID( dvi_ptr );// 获取接口类ID
if ( if_class_code < IF_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER )
if ( g_if_class_drive_dispose[ if_class_code ] != NULL )
if ( 0 != (err = (*g_if_class_drive_dispose[ if_class_code ])( dvi_ptr )) )
return ( err );
}
return ( 0 );
}
//****************************************************************************
// 函数名称:if_reg_class_drive
// 输入参数:if_class_code,接口类代码
// if_class_init_method,接口类初始化函数
// if_class_dispose_method,接口类删除函数
// 输出参数:正常返回0,接口类代码无效返回0xff
// 功能描述:初始化接口类建立及删除函数
//****************************************************************************
static unsigned char if_reg_class_drive( unsigned char if_class_code,
unsigned short (*if_class_init_method)( device_instance *dvi_ptr ),
unsigned short (*if_class_dispose_method)( device_instance *dvi_ptr ) )
{
if ( !(if_class_code < IF_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER) )
return ( 0xFF );
g_if_class_drive_init[ if_class_code ] = if_class_init_method;
g_if_class_drive_dispose[ if_class_code ] = if_class_dispose_method;
return ( 0 );
}
//****************************************************************************
// 函数名称:dv_reg_class_drive
// 输入参数:dv_class_code,设备类代码
// dv_class_init_method,设备类初始化函数
// dv_class_dispose_method,设备类删除函数
// 输出参数:正常返回0,设备类代码无效返回0xff
// 功能描述:初始化设备类建立及删除函数
//****************************************************************************
static unsigned char dv_reg_class_drive( unsigned char dv_class_code,
unsigned short (*dv_class_init_method)( device_instance *dvi_ptr ),
unsigned short (*dv_class_dispose_method)( device_instance *dvi_ptr ) )
{
if ( !(dv_class_code < DV_CLASS_INITIALIZATION_METHOD_LIST_ITEM_NUMBER) )
return ( 0xFF );
g_dv_class_drive_ini[ dv_class_code ] = dv_class_init_method;
g_dv_class_drive_dispose[ dv_class_code ] = dv_class_dispose_method;
return ( 0 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -