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

📄 melody_api.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:

	result = MI_Melody_PostStop(func_id, file_id, MI_StopAndPost);
	#if 0	/* Robert.Chen removed, 2004-04-09 */
	if(melodyCtrlBlk.vbrSta.ctrlSrc != MI_VBR_SRC_FORCED)
	{
		MI_Melody_HpAmpCtrl(0);
		gbMelLP = 1;
	}
	else if(melodyCtrlBlk.vbrSta.frcCtrl != MI_VBR_FORCED_ON)
	{
		MI_Melody_HpAmpCtrl(0);
		gbMelLP = 1;
	}
	#else
	MI_Melody_HpAmpCtrl(0, MI_PWRCTRL_MUSIC);
	#endif
	//gbMelLP = 1;	/* removed 2004-04-08 */
		
	MI_Melody_RstCtrlBlk();
	
	if(result != MI_MELODY_OK)
	{
		MELODYTRACE_MSG(("MelRet:stop play failed,result=%d!", result));
		return MI_MELODY_ERROR;
	}	
	/* end change */
	return MI_MELODY_OK;
}

/******************************************************************************
 *
 * Function:
 * 		MI_PlayMusic_Stop()
 *
 * Description:
 *		 Pause the currently playing music, the current playing status will be
 *       returned which will be use as the music resume parameter
 *
 * Input:
 *		staRet pointer to a T_MELODY_STATE_RET struct which will valid when 
 *      function retuen MI_MELODY_OK.
 *          
 * Output:
 *		MI_MELODY_OK
 *		MI_MELODY_NOT_INIT
 *      MI_MELODY_ERROR
 *      MI_MELODY_PARA_ERR 
 *
 *****************************************************************************/
T_MELODY_RET MI_PlayMusic_Pause(T_MELODY_STATE_RET * const staRet)
{
	SINT32 result;
	SINT32 func_id;
	SINT32 file_id;	
	
	MELODYTRACE_MSG(("MelFunc:MI_PlayMusic_Pause()!"));
	
	if(!melodyCtrlBlk.initialized)
		return MI_MELODY_NOT_INIT;

	if(staRet == NULL)
		return MI_MELODY_PARA_ERR;

	/* no music play running */
	if(melodyCtrlBlk.musicID == MI_MELODY_MUSICID_INVALID) 
		return MI_MELODY_OK;

	func_id = melodyCtrlBlk.funcID[melodyCtrlBlk.fileType];
	file_id = melodyCtrlBlk.fileID;

	if(melodyCtrlBlk.fileType != MASMW_CNVID_AUD || melodyCtrlBlk.fileType != MASMW_CNVID_MID)
	{
		/* pause not supported by Audio and realtime MIDI converter */
		staRet->curPos		= 0;		
	}
	else
	{
		result = MaSound_Pause(func_id, file_id, NULL);
		if(result != MASMW_SUCCESS)
		{
			MELODYTRACE_MSG(("MelRet:pause failed,result=%d!", result));
			MI_Melody_ErrHdr(func_id, file_id);
			return MI_MELODY_ERROR;
		}

		result = MaSound_Control(func_id, file_id, MASMW_GET_POSITION, NULL, NULL);
		if(result < 0)
			staRet->curPos = 0;
		else
			staRet->curPos = result;		
	}

	staRet->remainCnt	= melodyCtrlBlk.remainCnt;
	staRet->musicID		= melodyCtrlBlk.musicID;
	staRet->curVolume	= melodyCtrlBlk.curVolume;

	
	MI_Melody_PostStop(func_id, file_id, MI_StopAndPost);
	MI_Melody_HpAmpCtrl(0, MI_PWRCTRL_MUSIC);
	MI_Melody_RstCtrlBlk();

	return MI_MELODY_OK;
}

/******************************************************************************
 *
 * Function:
 * 		MI_PlayMusic_Resume()
 *
 * Description:
 *		 Resume a previously posted music specified by playing state returned 
 *       when the music was paused.
 *
 * Input:
 *		staRet pointer to a T_MELODY_STATE_RET struct represents the state when
 *      the music is paused
 *          
 * Output:
 *		MI_MELODY_OK
 *		MI_MELODY_NOT_INIT
 *      MI_MELODY_ERROR
 *      MI_MELODY_PARA_ERR 
 *
 *****************************************************************************/
T_MELODY_RET MI_PlayMusic_Resume(const T_MELODY_STATE_RET *staRet)
{
	SINT32 result;
	SINT32 func_id;
	SINT32 file_id;

	MELODYTRACE_MSG(("MelFunc:MI_PlayMusic_Resume(),mID=%d.", staRet->musicID));

	if(staRet == NULL)
		return MI_MELODY_PARA_ERR;

	if(!melodyCtrlBlk.initialized)
 		return(MI_MELODY_NOT_INIT);

 	result = MI_PlayPrepare(staRet->musicID, staRet->remainCnt);
	if(result != MI_MELODY_OK)
	{
		MELODYTRACE_MSG(("MelRet:play prepare failed,result=%d!", result));
		return result;
	}

	func_id = melodyCtrlBlk.funcID[melodyCtrlBlk.fileType];
	file_id = melodyCtrlBlk.fileID;

	AI_MaskIT(0x02);
	result = MaSound_Seek(func_id, file_id, staRet->curPos, 0, NULL);
	if(result != MASMW_SUCCESS)
	{
		MELODYTRACE_MSG(("MelRet:seek pos err,result=%d!", result));
		MI_Melody_ErrHdr(func_id, file_id);
		AI_UnmaskIT(0x02);
		return MI_MELODY_ERROR;
	}

	result = MaSound_Start(func_id, file_id, staRet->remainCnt, NULL);
	if(result != MASMW_SUCCESS)
	{
		MELODYTRACE_MSG(("MelRet:resume play err,result=%d!", result));
		MI_Melody_ErrHdr(func_id, file_id);
		AI_UnmaskIT(0x02);
		return MI_MELODY_ERROR;
	}

	MaSound_DeviceControl(MASMW_SP_VOLUME, spkLev2val[melodyCtrlBlk.curVolume], 0, 0);
	#if (MIDI_STEREO == 1)
	MaSound_DeviceControl(MASMW_HP_VOLUME, 0, spkLev2val[melodyCtrlBlk.curVolume], spkLev2val[melodyCtrlBlk.curVolume]);
	#endif
	MaSound_DeviceControl(MASMW_EQ_VOLUME, 31, 0, 0);

	AI_UnmaskIT(0x02);
	MELODYTRACE_MSG(("MelSta:music resume success!"));
	
	return MI_MELODY_OK;
}

/******************************************************************************
 *
 * Function:
 * 		MI_Volume_Set()
 *
 * Description:
 *		 Set speaker volume with a specified level (0~5)
 *
 * Input:
 *		spkVol	speaker value level, from 0 to 5
 *          
 * Output:
 *		MI_MELODY_OK		
 *      MI_MELODY_ERROR
 *		MI_MELODY_NOT_INIT
 *
 * History:
 *		2004-02-07 Robert.Chen Add volume control to headphone
 *
 *****************************************************************************/
T_MELODY_RET MI_Volume_Set(UINT8 spkVol)
{
	SINT32 result1, result2;

	MELODYTRACE_MSG(("MelFunc:MI_Volume_Set(),vol=%d.", spkVol));
	
	if(!melodyCtrlBlk.initialized)
		return MI_MELODY_NOT_INIT;

	if(spkVol > MI_MELODY_VOLUME_MAX)
		spkVol = MI_MELODY_VOLUME_MAX;

	AI_MaskIT(0x02);
	if(melodyCtrlBlk.musicID != MI_MELODY_MUSICID_INVALID)
	{
		result1 = MaSound_DeviceControl(MASMW_SP_VOLUME, spkLev2val[spkVol], 0, 0);
		#if (MIDI_STEREO == 1)
		result2 = MaSound_DeviceControl(MASMW_HP_VOLUME, 0, spkLev2val[spkVol], spkLev2val[spkVol]);
		#else
		result2 = MASMW_SUCCESS;
		#endif
		if(result1 != MASMW_SUCCESS || result2 != MASMW_SUCCESS)
		{
			MELODYTRACE_MSG(("MelRet:Set spk or hp volume err,r1=%d,r2=%d!", result1, result2));
			AI_UnmaskIT(0x02);
			return MI_MELODY_ERROR;
		}
	}
	
	melodyCtrlBlk.curVolume = spkVol;
	AI_UnmaskIT(0x02);
	return MI_MELODY_OK;
}

/******************************************************************************
 *
 * Function:
 * 		MI_Volume_Get()
 *
 * Description:
 *		 Get current speaker volume level (0~5)
 *
 * Input:
 *		spkVol	
 *          
 * Output:
 *		MI_MELODY_OK		
 *      MI_MELODY_ERROR
 *		MI_MELODY_NOT_INIT
 *      MI_MELODY_PARA_ERR
 *
 *****************************************************************************/
T_MELODY_RET MI_Volume_Get(UINT8* spkVol)
{
	MELODYTRACE_MSG(("MelFunc:MI_Volume_Get()!"));

	if(spkVol == NULL)
		return MI_MELODY_PARA_ERR;

	if(!melodyCtrlBlk.initialized)
		return MI_MELODY_NOT_INIT;

	*spkVol = melodyCtrlBlk.curVolume;
	return MI_MELODY_OK;	
}

/******************************************************************************
 *
 * Function:
 * 		MI_Volume_Up()
 *
 * Description:
 *		 increase current speaker volume one level (0~5)
 *
 * Input:
 *		curVol	if not equal NULL, return new speaker volume when function
 *              return with MI_MELODY_OK
 *          
 * Output:
 *		MI_MELODY_OK		
 *      MI_MELODY_ERROR
 *		MI_MELODY_NOT_INIT
 *
 *****************************************************************************/
T_MELODY_RET MI_Volume_Up(UINT8* curVol)
{
	SINT32	result = MI_MELODY_OK;

	MELODYTRACE_MSG(("MelFunc:MI_Volume_Up()!"));
	
	if(melodyCtrlBlk.curVolume < MI_MELODY_VOLUME_MAX)
		result = MI_Volume_Set(melodyCtrlBlk.curVolume+1);
	else
		return MI_MELODY_OK;
	
	if(result == MI_MELODY_OK && curVol != NULL)
		*curVol = melodyCtrlBlk.curVolume;

	return result;
}

/******************************************************************************
 *
 * Function:
 * 		MI_Volume_Down()
 *
 * Description:
 *		 decrease current speaker volume one level (0~5)
 *
 * Input:
 *		curVol	if not equal NULL, return new speaker volume when function
 *              return with MI_MELODY_OK
 *          
 * Output:
 *		MI_MELODY_OK		
 *      MI_MELODY_ERROR
 *		MI_MELODY_NOT_INIT
 *
 *****************************************************************************/
T_MELODY_RET MI_Volume_Down(UINT8* curVol)
{
	SINT32	result = MI_MELODY_OK;

	MELODYTRACE_MSG(("MelFunc:MI_Volume_Down()!"));
	
	if(melodyCtrlBlk.curVolume > MI_MELODY_VOLUME_MIN)
		result = MI_Volume_Set(melodyCtrlBlk.curVolume-1);
	else
		return MI_MELODY_OK;
	
	if(result == MI_MELODY_OK && curVol != NULL)
		*curVol = melodyCtrlBlk.curVolume;

	return result;
}

/******************************************************************************
 *
 * Function:
 * 		MI_Vibrator_SetMode()
 *
 * Description:
 *		Set the vibrator control source and config blinking frequency
 *
 * Input:
 *		ctrlSrc		vibrator control source
 *          MI_VBR_SRC_OFF
 *          MI_VBR_SRC_SEQSYNC
 *          MI_VBR_SRC_FORCED
 *      blkFreq		vibrator blinking frequency
 *          MI_VBR_BLK_OFF		no blink
 *          MI_VBR_BLK_XXXHZ	blinking at a frequency when MI_VBR_SRC_FORCED
 *          
 * Output:
 *		MI_MELODY_OK		
 *      MI_MELODY_ERROR
 *		MI_MELODY_NOT_INIT
 *
 *****************************************************************************/
T_MELODY_RET MI_Vibrator_SetMode(UINT8 ctrlSrc, UINT8 blkFreq)
{
	SINT32 result;	

	MELODYTRACE_MSG(("MelFunc:MI_Vibrator_SetMode(src=%d,freq=%d)",ctrlSrc, blkFreq));	
	
	if(!melodyCtrlBlk.initialized)
		return MI_MELODY_NOT_INIT;

  #ifdef MELODY_POWERSAVE
	result = MI_Melody_PwrRelease();
	if(result != MI_MELODY_OK)
		return MI_MELODY_ERROR;
  #endif

	result = MaSound_DeviceControl(MASMW_MTR_MASTER, ctrlSrc, 0, 0);
	if(result != MASMW_SUCCESS)
		return MI_MELODY_ERROR;
	else
		melodyCtrlBlk.vbrSta.ctrlSrc	= ctrlSrc;

	result = MaSound_DeviceControl(MASMW_MTR_BLINK, blkFreq, 0, 0);
	if(result != MASMW_SUCCESS)
		return MI_MELODY_ERROR;
	else
		melodyCtrlBlk.vbrSta.blink		= blkFreq;

	return MI_MELODY_OK;
}

/******************************************************************************
 *
 * Function:
 * 		MI_Vibrator_GetMode()
 *
 * Description:
 *		Get the vibrator config mode and current state (on/off)
 *
 * Input:
 *		vbrSet	pointer to a struct contains current vibrator setting and state
 *          
 * Output:
 *		MI_MELODY_OK		
 *		MI_MELODY_NOT_INIT
 *		MI_MELODY_PARA_ERR
 *
 *****************************************************************************/
T_MELODY_RET MI_Vibrator_GetMode(T_MELODY_VBR_STARET *const vbrSet)
{
	MELODYTRACE_MSG(("MelFunc:MI_Vibrator_GetMode()!"));

	if(vbrSet == NULL)
		return MI_MELODY_PARA_ERR;

	if(!melodyCtrlBlk.initialized)
		return MI_MELODY_NOT_INIT;

	vbrSet->ctrlSrc	= melodyCtrlBlk.vbrSta.ctrlSrc;
	vbrSet->blink	= melodyCtrlBlk.vbrSta.blink;
	vbrSet->frcCtrl	= melodyCtrlBlk.vbrSta.frcCtrl;

	return MI_MELODY_OK;
}

/******************************************************************************
 *
 * Function:
 * 		MI_Vibrator_SetMode()
 *
 * Description:
 *		Set the vibrator control source and config blinking frequency
 *
 * Input:
 *		ctrlSrc		vibrator control source
 *          MI_VBR_SRC_OFF
 *          MI_VBR_SRC_SEQSYNC
 *          MI_VBR_SRC_FORCED
 *      blkFreq		vibrator blinking frequency
 *          MI_VBR_BLK_OFF		no blink
 *          MI_VBR_BLK_XXXHZ	blinking at a frequency when MI_VBR_SRC_FORCED
 *          
 * Output:
 *		MI_MELODY_OK		
 *      MI_MELODY_ERROR
 *		MI_MELODY_NOT_INIT
 *
 *****************************************************************************/
T_MELODY_RET MI_Vibrator_ForcedCtrl(UINT8 ctrl)
{
	SINT32 result;	

	MELODYTRACE_MSG(("MelFunc:MI_Vibrator_ForcedCtrl(ctrl=%d).", ctrl));
	
	if(!melodyCtrlBlk.initialized)
		return MI_MELODY_NOT_INIT;

  #ifdef MELODY_POWERSAVE
	result = MI_Melody_PwrRelease();
	if(result != MI_MELODY_OK)
		return MI_MELODY_ERROR;
  #endif

	AI_MaskIT(0x02);
	#if 0	/* Robert.Chen removed, 2004-04-08 */
	if(ctrl == MI_VBR_FORCED_ON && melodyCtrlBlk.musicID == MI_MELODY_MUSICID_INVALID)
	{
		MI_Melody_HpAmpCtrl(1);		
		gbMelLP = 0;
	}
	#else
	if(ctrl == MI_VBR_FORCED_ON)
		MI_Melody_HpAmpCtrl(1, MI_PWRCTRL_VBR);
	#endif
	
	result = MaSound_DeviceControl(MASMW_MTR_DIRECT, ctrl, 0, 0);

	#if 0	/* Robert.Chen removed, 2004-04-08 */ 
	if(ctrl == MI_VBR_FORCED_OFF && melodyCtrlBlk.musicID == MI_MELODY_MUSICID_INVALID)
	{
		MI_Melody_HpAmpCtrl(0);
		gbMelLP = 1;
	}
	#else
	if(ctrl == MI_VBR_FORCED_OFF)
		MI_Melody_HpAmpCtrl(0, MI_PWRCTRL_VBR);
	#endif
	
	if(result != MASMW_SUCCESS)
	{
		AI_UnmaskIT(0x02);
		return MI_MELODY_ERROR;
	}	
	else
		melodyCtrlBlk.vbrSta.frcCtrl = ctrl;
	
	AI_UnmaskIT(0x02);	

  #ifdef MELODY_POWERSAVE
	if(ctrl != MI_VBR_FORCED_ON)
		NU_Control_Timer(&melodyCtrlBlk.pwrSaveTmr, NU_ENABLE_TIMER);
  #endif

	return MI_MELODY_OK;
}



⌨️ 快捷键说明

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