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

📄 pmp_audio_driver.c

📁 嵌入式系统下的文件管理处理,和基本图片jpg格式处理原代码
💻 C
📖 第 1 页 / 共 2 页
字号:

UINT16 SPMP_AUDIO_Stop( void )
{
	UINT16 err;

	// lanzhu@[12/26/2006]
	err = SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_PLAY_STOP, (UINT8 *)NULL, (UINT16)NULL);

	// 如果已经成功, 还需要判断是否AUDIO TASK 已经真正结束
	if ( !err ) 
	{
		// 检测结束标志, 直到AUDIO TASK 真正结束	
		while ( !SPMP_AUDIO_GetOverFlag() ) 
		{
			osTimeDly( AUDIO_OVER_DELAY );
			
#ifdef QLZ_DEBUG_0208
			sio_printf("\r\n ---- AUDIO 没有结束, 等待一下!!!\r\n");
#endif			
		}

#ifdef QLZ_DEBUG_0208
	sio_printf("\r\n ---- AUDIO 已经真正结束了!\r\n");
#endif

	}

	// 返回成功
	return err;
}

/************************************************************************/
/* audio pause
  input:
  output:
			0 成功, 非0值失败
  func:
  note:
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_Pause( void )
{
	// 进行音量的设定
	return	SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_PAUSE, (UINT8 *)NULL, (UINT16)NULL);
}

/************************************************************************/
/* audio resume
  input:
			void
  output:
			0 成功, 非0值失败
  func:
  note:
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_Resume( void )
{
	// 进行音量的设定
	return SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_RESUME, (UINT8 *)NULL, (UINT16)NULL);
}

/************************************************************************/
/* 设定输出的音量值
  input:
			UINT16 OutputValue
  output:
			0 成功, 非0值失败
  func:
			设定 Codec, 启动MP3 的播放
  note:
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_SetOutputValue( UINT16 OutputValue )
{
	UINT16 value,err;

	value = OutputValue;

	// 判断输入的参数是否越界
	if (value > OUTPUT_VALUE_MAX ) {
		value = OUTPUT_VALUE_MAX;
	}

#ifdef QLZ_DEBUG_0127
	sio_printf("\r\n ++++++++ 音量设定 ======= %d \r\n", OutputValue);
#endif
	
	// 进行音量的设定
	err = SPMP_SendSignal((UINT16)MCATCH_CMD_AUDIO_VOLUME_SET,
						(UINT8 *)&(value), 
						(UINT16)sizeof(value));
	// 返回成功
	return err;
}


extern void SPMP_Codec_ResetFlag( void );
extern void SPMP_AUDIO_SetCodec( void );

/*
 *	reset codec flag
 */
void SPMP_Codec_ResetFlag( void )
{
	gCodecFlag = 0x00;
	return;
}

/*
 *	get codec flag
 */
static UINT16 get_codec_flag( void )
{
	return gCodecFlag;
}


/************************************************************************/
/*			进行CODEC 的设置
  input:
			void 
  output:
			void 
  function:
			进行CODEC 的设置
  history:
			[01/29/2007]
			发现用户通过界面第一次发生时, 还可以从SPEAKER 中听到爆音
                                                                        */
/************************************************************************/
void SPMP_AUDIO_SetCodec( void )
{
	if ( get_codec_flag() ) 
	{
		return;
	}

#ifdef QLZ_DEBUG_0129
	sio_printf("\r\n -- 进行CODEC 的真正设置!");
#endif

	gCodecFlag ++;

	if( 1==SPMP_SpeakOutGet() )
	{
#ifdef QLZ_DEBUG_0129
	sio_printf("\r\n -- 全通道设置!!!!");
#endif

		audCodecSet(audioAppTbl, sizeof(audioAppTbl));		
	}
	else
	{
#ifdef QLZ_DEBUG_0129
	sio_printf("\r\n -- 只有耳机,没有SPEAKER!");
#endif

		audCodecSet(audioAppTbl_t, sizeof(audioAppTbl_t));		
	}

	return;
}

/************************************************************************/
/*		使能 SPEAKER

  input:
			void
  output:
			void 
  func:
			判断用户是否设定打开SPEAKER 的功放, 判断当前是否有耳机
			如果用户使能了功放, 并且没有耳机, 打开 SPEAKER 的功放
  history:
			[01/27/2007] lanzhu 发现没有考虑到耳机一直插入的状况, 
			添加对耳机插入的判断
			FIX: mantis bug 6769

			[01/27/2007] lanzhu 添加 发声标志的设置	
			[01/29/2007] lanzhu 考虑到不同的TASK 在时间上冲突, 完善了该机制 
                                                                        */
/************************************************************************/
void SPMP_SPEAKER_ENABLE( void )
{
	UINT16 i;
	
#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n >>> SPKER ENABLE!\r\n");	
#endif


	gSoundFlag  = (BIT_USER_FLAG | BIT_SOUND_FLAG);

	i =  SPMP_SpeakOutGet();
	// 只取决于用户的设定和当时耳机的状态
	if ( i && ( HEADPHONE_OUT == SPMP_Get_HPStatus() ) ){
		SPMP_Speaker_Set(i);
	}

#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n <<< SPKER ENABLE!\r\n");	
#endif
	

	return;
}

/*
 *	
 */
void SPMP_SPEAKER_ENABLE_EX( void )
{
	UINT16 i;	

#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n >>> SPKER ENABLE  EX!\r\n");	
#endif
	

	gSoundFlag |= BIT_SOUND_FLAG;

	i =  SPMP_SpeakOutGet();
	// 只取决于用户的设定和当时耳机的状态
	if ( i && ( HEADPHONE_OUT == SPMP_Get_HPStatus() ) ){
		SPMP_Speaker_Set(i);
	}

#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n <<< SPKER ENABLE  EX!\r\n");	
#endif
	

	return;
}

/************************************************************************/
/*		关闭 SPEAKER 的功放
 
  input:
			void
  output:
			void 
  func:
  history:
			[01/27/2007] 添加了一个判断条件, 对耳机进行检测
			
			[01/29/2007] 添加 不同任务之间使用该函数的完善机制

                                                                        */
/************************************************************************/
void SPMP_SPEAKER_DISABLE( void )
{
	UINT16 i;

#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n >>> SPKER DISABLE!\r\n");	
#endif
	

	gSoundFlag = 0x00;		// lanzhu add @[01/27/2007] 
	i =  SPMP_SpeakOutGet();

#ifdef QLZ_DEBUG_0206
	sio_printf(" i = 0x%x\r\n", i);	
#endif
	
	// 只取决于当前用户的设定和当时耳机的状态
	if ( i && (HEADPHONE_OUT == SPMP_Get_HPStatus() ) )
	{
		SPMP_Speaker_Set( 0x00 );
	}

#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n <<< SPKER DISABLE!\r\n");	
#endif

	return;	
}

/************************************************************************/
/*			按键音使用的关闭SPEAKER 的函数
  input:
			void 
  output:
			void 
  func:
			在播放按键音完成后, 关闭SPEAKER 的功放
                                                                        */
/************************************************************************/

void SPMP_SPEAKER_DISABLE_EX( void )
{
	UINT16 i;

#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n >>> SPKER DISABLE EX!\r\n");	
#endif

	if( gSoundFlag == (BIT_USER_FLAG |BIT_SOUND_FLAG) )	
	{
#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n --- dis speak just ret!\r\n");
#endif
		return;
	}

	// [02/06/2007] lanzhu add  fix mantis bug 7342
	if( HEADPHONE_OUT == SPMP_Get_HPStatus()){
		SPMP_Speaker_Set( 0x00 );
	}

#ifdef QLZ_DEBUG_0206
	sio_printf("\r\n <<< SPKER DISABLE EX!\r\n");	
#endif
	

	return;	
}

/*
 *	
 */
UINT16 SPMP_Get_SoundFlag( void )
{
	return (gSoundFlag&BIT_SOUND_FLAG);
}

/************************************************************************/
/* MP3 playback start

  input:
			void
  output:
			0 成功, 非0值失败
  func:
			设定 Codec, 启动MP3 的播放
  note:
			[01/29/2007] 发现每次进行音频播放时, 有CODEC 的设置动作,
						 不需要这样做.
                                                                        */
/************************************************************************/
static UINT16 mp3_playback_start( void )
{
	AUDIO_PLAY_ATTR audAttr;

	// [01/29/2007] lanzhu marked 
	//SPMP_AUDIO_SetCodec( );	// 进行CODEC 的设置	

	// 设定播放的属性
	memset(&audAttr, 0x00, sizeof(audAttr));
	audAttr.startSecond = 0;
	audAttr.audioCodec.codectype = MCATCH_AUDIO_CODEC_INTERNAL;

	// 启动音频播放
	return SPMP_SendSignal_T(	(UINT16)MCATCH_CMD_AUDIO_PLAY_START,
									(UINT8 *)&(audAttr), 
									(UINT16)sizeof(AUDIO_PLAY_ATTR));
}

/************************************************************************/
/*  获得音频信息的指针
  input:
			void 
  output:
			地址指针
  func:
			获得 Audio 的地址指针
                                                                        */
/************************************************************************/
static UINT8 * ret_audio_buf_ptr( void )
{
	return gpAudDataBuf;
}


/************************************************************************/
/*			设定AUDIO 结束标志
  input:
			flag	[in]	UINT16 
							0		没有结束
							非0	值  已经结束 
  output:
			0 成功, 非0值失败
  func:
			设定AUDIO 结束标志
  note:
			用于AUDIO PLAY 的真正结束, 以此来在2个AP之间击西宁动作的协调
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_SetOverFlag( UINT16 flag )
{
	// 首先将该位复位为空
	gAudioOverFlag &= ~AUDIO_OVER_MASK;

	if ( flag ) 
	{
#ifdef QLZ_DEBUG_0208
		sio_printf("\r\n  设定 AUDIO 真正结束 \r\n");	
#endif
		gAudioOverFlag |= AUDIO_OVER_MASK;		
	}

	return	APP_DRV_OK;
}

/************************************************************************/
/*			获得AUDIO 结束标志
  input:
			void 
  output:
			0			还没有结束
			非0值		已经真正结束
  func:
			通过此标志判断 AUDIO 的动作是否真正结束
  note:
                                                                        */
/************************************************************************/
UINT16 SPMP_AUDIO_GetOverFlag( void )
{
#ifdef QLZ_DEBUG_0208
	sio_printf("\r\n Over Flag = 0x%x\r\n", gAudioOverFlag);
#endif

	// 目前只使用 BIT0 来进行是否结束的标志
	return (gAudioOverFlag & AUDIO_OVER_MASK);
}


/*
	[03/07/2007] lanzhu add 	
	input:
		speaker_flag [in] 	0      ear phone 
				    	非0 值 speaker 
	output:
		void 	

	func:
		用于切换耳机和SPEAKER 
 */

void SPMP_AUDIO_SetCodecPath( UINT16 speaker_flag )
{
	if(speaker_flag)
	{
		audCodecSet(audioAppTbl, sizeof(audioAppTbl));				
	}	
	else{
		audCodecSet(audioAppTbl_t, sizeof(audioAppTbl_t));			
	}		
	return;
}







⌨️ 快捷键说明

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