📄 cls_hndl.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name:
** Last modified Date: 2005-04-22
** Last Version: V1.0
** Description:
**
**------------------------------------------------------------------------------------------------------
** Created By: Lishan Zhou
** Created date: 2005-04-22
** Version: V1.0
** Description:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
/****************************************************************************/
/* includes */
/****************************************************************************/
#include "HostStack.h"
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
};
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 ) );
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
}
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 );
}
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 );
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 );
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 );
}
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 );
}
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 + -