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

📄 otg_demo.c

📁 使用ISP1362芯片的USB_OTG参考设计源代码比较新的版本
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
**  WASABI-Hot! version 1.2c    (OTG sub-unit)
**
**
**      -- copyright (c) 2001-2004 by Philips Japan, Ltd. -- All rights reserved --
**
**
**      ** This code has been made to check/learn                          ** 
**      **                             the ISP1362/ISP1363 functionalities **
**      ** Release 06-Aug-2004                                             **
**
**      OKANO, Akifumi
**      
**		Application Laboratory, Mobile and Connectivity
**      Semiconductors Div, Philips Japan Ltd.
**      akifumi.okano@philips.com
**      +81-3-3740-4668 
*/


/****************************************************************************/
/*	includes																*/
/****************************************************************************/

#include		<stdio.h>
#include		<stdlib.h>
#include		<dos.h>
#include		<string.h>
#include		<conio.h>
#include		<alloc.h>
#include		<fcntl.h>
#include		<share.h>
#include		<sys\stat.h>
#include		<time.h>


#include		"general.h"
#include		"ui.h"
#include		"beep.h"

#include		"_hc_core/dev_ep.h"
#include		"_hc_core/isr.h"
#include		"_hc_core/port_ctl.h"
#include		"_hc_core/atl_mix.h"

#include		"_hc_hw/hc_comm.h"
#include		"_hc_hw/hw_acces.h"

#include		"_dc/dc_flags.h"

#include 		"_otg/otg.h"
#include 		"_otg/otg_demo.h"

#include		"class_dr/audio/sing.h"
#include		"_hc_cls/cls_hndl.h"


/****************************************************************************/
/*	constants																*/
/****************************************************************************/

#define			OTG_ERROR_FAREND_GRAB_FAILD			1
#define			OTG_ERROR_NO_FAREND_DEVICE			2

#define			OTG_CONTROL_TR_OK					0
#define			OTG_CONTROL_TR_ERROR				1

#define			OTG_CONTROL_TR_DIR_OUT				0
#define			OTG_CONTROL_TR_DIR_IN				1



#define		OTG_DEMO_SUB_COMMAND_RETRY_TRANSFER				0x80


/****************************************************************************/
/*	types																	*/
/****************************************************************************/

typedef	struct _otg_target		{	
									unsigned char		previous_bus_request_state;
									device_instance		*target_device_instance_ptr;
									char				id_name[ 11 ];
                                }
                                otg_target;


/****************************************************************************/
/*	global vars																*/
/****************************************************************************/

otg_target		g_far_end;




/****************************************************************************/
/*	Applet definitions														*/
/*	Applet definitions														*/
/*	Applet definitions														*/
/****************************************************************************/



/*
**	OTG demo applet
*/

#include		"class_dr/audio/sing.h"


unsigned long	file_size( int fh );		//	defined in printer.c

unsigned char	OTG_grab_far_end_device( void );
void			OTG_release_far_end_device( void );
unsigned char	OTG_command_to_device( unsigned char *bf_ptr, unsigned char direction, unsigned char command, unsigned char sub_command, unsigned short size, unsigned short *done_size_ptr, unsigned char timeout_sec );




unsigned short otg_demo_wasabi_init_commands( device_instance *dvi_ptr )
{
	if ( devep_regist_config_descriptors( dvi_ptr, 1, 1 ) )
	{
		mprintf( RED, CONTINUE, "error : storage_init_commands\r\n" );
		return ( error );	//	to dispose device
	}
	
	dvi_ptr->class_instance_ptr	= (void *)0x1;	//	Dummy : To call audio_dispose_process() at device detach

	return ( no_error );
}




//   77777          77777          77777          77777          77777          77777          77777        
//       7              7              7              7              7              7              7         
//      7              7              7              7              7              7              7          
//     7              7              7              7              7              7              7           
//    7              7              7              7              7              7              7            
//    7              7              7              7              7              7              7            

//   H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT   
//   H   H O   O S       T      H   H O   O S       T      H   H O   O S       T      H   H O   O S       T       
//   HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      
//   H   H O   O     S   T      H   H O   O     S   T      H   H O   O     S   T      H   H O   O     S   T      
//   H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      
 

/********* ********** ********** ********** ********** ********** ********** ********** ********** **********
	OTG demo applet "Get a string from peripheral"
 ********* ********** ********** ********** ********** ********** ********** ********** ********** **********/

/*
**	OTG demo applet "Get a string from peripheral"
**
**		Host side service
*/


void OTG_demo_host_side_7( void )
{
	char				bf[ 64 ];
	unsigned short		rx_size;
	unsigned short		i;
	
	if ( OTG_grab_far_end_device() )
		return;
	

	mprintf( LIGHTCYAN,  CONTINUE, "\r\n\r\nOTG feature demo :   " );
	mprintf( WHITE, CONTINUE, "String message receive\r\n" );

	if ( OTG_command_to_device( bf, OTG_CONTROL_TR_DIR_IN, OTG_DEMO_GET_A_STRING, 0, 10, &rx_size, 1 ) )
	{
		OTG_release_far_end_device();
		return;
	}
	else
	{
		*(bf + rx_size)	= 0;
		
		mprintf( WHITE, CONTINUE, "   message from remote : " );
		mprintf( (WHITE << 4) | BLACK, CONTINUE, "%s", bf );
		mprintf( WHITE, CONTINUE, "\r\n" );
	}



	if ( OTG_command_to_device( bf, OTG_CONTROL_TR_DIR_IN, OTG_DEMO_GET_A_STRING, 1, 64, &rx_size, 1 ) )
	{
		OTG_release_far_end_device();
		return;
	}
	else
	{
		*(bf + rx_size)	= 0;
		
		mprintf( WHITE, CONTINUE, "   message from remote : " );
		mprintf( (WHITE << 4) | BLACK, CONTINUE, "%s", bf );
		mprintf( WHITE, CONTINUE, "\r\n" );
	}
	
	OTG_release_far_end_device();
}

//   77777          77777          77777          77777          77777          77777          77777        
//       7              7              7              7              7              7              7         
//      7              7              7              7              7              7              7          
//     7              7              7              7              7              7              7           
//    7              7              7              7              7              7              7            
//    7              7              7              7              7              7              7            

//   PPPP  EEEE RRRR  I PPPP  H   H    PPPP  EEEE RRRR  I PPPP  H   H    PPPP  EEEE RRRR  I PPPP  H   H    
//   P   P E    R   R I P   P H   H    P   P E    R   R I P   P H   H    P   P E    R   R I P   P H   H    
//   P   P EEE  R   R I P   P HHHHH    P   P EEE  R   R I P   P HHHHH    P   P EEE  R   R I P   P HHHHH    
//   PPP   E    RRRR  I PPPP  H   H    PPP   E    RRRR  I PPPP  H   H    PPP   E    RRRR  I PPPP  H   H    
//   P     EEEE R   R I P     H   H    P     EEEE R   R I P     H   H    P     EEEE R   R I P     H   H    

/*
**	OTG demo applet "Get a string from peripheral"
**
**		Peripheral side service
*/

void OTG_demo_peripheral_side_7( char *s, unsigned short *length, unsigned char mode )
{
	mode	&= ~OTG_DEMO_SUB_COMMAND_RETRY_TRANSFER;

	sprintf( s, "%s%s", mode ? "Hello OTG!   my name is " : "", gp_id_string );
	*length		= strlen( s );
}


//    888            888            888            888            888            888            888          
//   8   8          8   8          8   8          8   8          8   8          8   8          8   8         
//    888            888            888            888            888            888            888          
//   8   8          8   8          8   8          8   8          8   8          8   8          8   8         
//   8   8          8   8          8   8          8   8          8   8          8   8          8   8         
//    888            888            888            888            888            888            888          

//   H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT   
//   H   H O   O S       T      H   H O   O S       T      H   H O   O S       T      H   H O   O S       T       
//   HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      
//   H   H O   O     S   T      H   H O   O     S   T      H   H O   O     S   T      H   H O   O     S   T      
//   H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      
 

/********* ********** ********** ********** ********** ********** ********** ********** ********** **********
	OTG demo applet "Bar display demo (dummy data transfer)"
 ********* ********** ********** ********** ********** ********** ********** ********** ********** **********/


/*
**	OTG demo applet "Bar display demo (dummy data transfer)"
**
**		Host side service
*/

void OTG_demo_host_side_8( void )
{
	char				bf[ 64 ];
	unsigned short		rx_size;
	unsigned short		i;
	unsigned short		j;
	char				str[ 70 ];
	char				message[]	= "OTG-HOST : data retrieving from remote  ";
//									   1234567890123456789012345678901234567890
	
	if ( OTG_grab_far_end_device() )
		return;

	mprintf( LIGHTCYAN,  CONTINUE, "\r\n\r\nOTG feature demo :   " );
	mprintf( WHITE, CONTINUE, "Dummy data transfer\r\n" );

	for ( j = 0; j < 70; j++ )
		*(str + j)	= ' ';

	strncpy( str + 10, message, 40 );

	for ( i = 0; i < 70; i++ )
	{
		unsigned char	t;
		rx_size		= 64;
	
		if ( OTG_command_to_device( bf, OTG_CONTROL_TR_DIR_IN, OTG_DEMO_BAR_DISPLAY, i++, 64, &rx_size, 1 ) )
			break;

		gotoxy( 1, wherey() );

		mprintf( BLACK, CONTINUE, "     " );

		for ( j = 0; j < i; j++ )
			mprintf( BLUE << 4 | WHITE, CONTINUE, "%c", *(str + j) );
			
		for ( j = i; j < 70; j++ )
			mprintf( BLACK << 4 | BLACK, CONTINUE, "%c", *(str + j) );
			
		mprintf( BLACK << 4 | WHITE, CONTINUE, "\r" );
		
		wait_ms( 100L );
	}
	
	mprintf( WHITE, CONTINUE, "\r\nDummy transfer done.\r\n" );

	OTG_release_far_end_device();
}

//    888            888            888            888            888            888            888          
//   8   8          8   8          8   8          8   8          8   8          8   8          8   8         
//    888            888            888            888            888            888            888          
//   8   8          8   8          8   8          8   8          8   8          8   8          8   8         
//   8   8          8   8          8   8          8   8          8   8          8   8          8   8         
//    888            888            888            888            888            888            888          

//   PPPP  EEEE RRRR  I PPPP  H   H    PPPP  EEEE RRRR  I PPPP  H   H    PPPP  EEEE RRRR  I PPPP  H   H    
//   P   P E    R   R I P   P H   H    P   P E    R   R I P   P H   H    P   P E    R   R I P   P H   H    
//   P   P EEE  R   R I P   P HHHHH    P   P EEE  R   R I P   P HHHHH    P   P EEE  R   R I P   P HHHHH    
//   PPP   E    RRRR  I PPPP  H   H    PPP   E    RRRR  I PPPP  H   H    PPP   E    RRRR  I PPPP  H   H    
//   P     EEEE R   R I P     H   H    P     EEEE R   R I P     H   H    P     EEEE R   R I P     H   H    

/*
**	OTG demo applet "Bar display demo (dummy data transfer)"
**
**		Peripheral side service
*/

void OTG_demo_peripheral_side_8( unsigned char index )
{
#if 1
	unsigned short		j;
	char				str[ 70 ];
	char				message[]	= "OTG-PERIPHERAL : data sending to remote ";
//									   1234567890123456789012345678901234567890

	index	&= ~OTG_DEMO_SUB_COMMAND_RETRY_TRANSFER;

	for ( j = 0; j < 70; j++ )
		*(str + j)	= ' ';

	strncpy( str + 10, message, 40 );

	index	= 70 - 1 - index;

	gotoxy( 1, wherey() );

	mprintf( YELLOW, CONTINUE, "     " );

	for ( j = 0; j < index; j++ )
		mprintf( GREEN << 4 | WHITE, CONTINUE, "%c", *(str + j) );
		
	for ( j = index; j < 70; j++ )
		mprintf( BLACK << 4 | BLACK, CONTINUE, "%c", *(str + j) );
		
	mprintf( BLACK << 4 | BLACK, CONTINUE, "\r" );
	
	if ( !index )
		mprintf( BLACK << 4 | BLACK, CONTINUE, "\r\n" );
#endif
}


//    999            999            999            999            999            999            999          
//   9   9          9   9          9   9          9   9          9   9          9   9          9   9         
//   9   9          9   9          9   9          9   9          9   9          9   9          9   9         
//    9999           9999           9999           9999           9999           9999           9999         
//       9              9              9              9              9              9              9         
//    999            999            999            999            999            999            999          

//   H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT    H   H  OOO   SSSS TTTTT   
//   H   H O   O S       T      H   H O   O S       T      H   H O   O S       T      H   H O   O S       T       
//   HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      HHHHH O   O  SSS    T      
//   H   H O   O     S   T      H   H O   O     S   T      H   H O   O     S   T      H   H O   O     S   T      
//   H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      H   H  OOO  SSSS    T      
 

/********* ********** ********** ********** ********** ********** ********** ********** ********** **********
	OTG demo applet "Get audio list item and start"
 ********* ********** ********** ********** ********** ********** ********** ********** ********** **********/

/*
**	OTG demo applet "Get audio list item"
**
**		Host side service
*/


#define		OTG_DEMO_SUB_COMMAND_LIST_ITEM		0x00
#define		OTG_DEMO_SUB_COMMAND_AUDIO_START	0x10
#define		OTG_DEMO_SUB_COMMAND_AUDIO_STATE	0x20


void OTG_demo_host_side_9( void )
{
	unsigned char		num_of_items;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -