📄 otg_demo.c
字号:
/*
** 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 + -