⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cls_hndl.c

📁 ARM读写U盘驱动软件包源程序
💻 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 + -