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

📄 mahvsw.c

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

	/*	get state	*/
	sdRet = __MaSound_Control(sdFuncId, sdFileId, MASMW_GET_STATE, NULL, NULL);
	if(sdRet < MASMW_SUCCESS) {
		return (sdRet);
	}

	switch(sdRet) {
	case MASMW_STATE_PLAYING	:
	case MASMW_STATE_PAUSE		:
		/*	playing or pause	*/
		__MaSound_Stop(sdFuncId, sdFileId, NULL);
	case MASMW_STATE_READY		:
	case MASMW_STATE_OPENED		:
		/*	opened or ready	*/
		__MaSound_Close(sdFuncId, sdFileId, NULL);
	case MASMW_STATE_LOADED		:
		/*	loaded	*/
		__MaSound_Unload(sdFuncId, sdFileId, NULL);
	default	:
		break;
	}

	gHvswInfo.sdHvFileId = -1;
	return (MASMW_SUCCESS);
}

/****************************************************************************
 *	MaHvsw_CallBack
 *
 *	Function:
 *			Hook Callback.
 *	Argument:
 *			bId	... Event number.
 *	Return:
 *			0	success.
 *			<0	error code.
 *
 ****************************************************************************/
static SINT32	MaHvsw_CallBack(UINT8 bId, SINT32 (*pfnCallbackFunc)(UINT8))
{
	SINT32	sdRet = MASMW_SUCCESS;

	if((MAHVSW_MIN_NOTE <= bId) && (bId < MAHVSW_MAX_NOTE)) {
		MaHvsw_HvNoteOff();
		MaHvsw_HvNoteOn((UINT32)(bId - MAHVSW_MIN_NOTE));
	}
	else if(bId == MAHVSW_NOTE_OFF) {
		MaHvsw_HvNoteOff();
	}
	else {
		if((bId == MASMW_REPEAT) || (bId == MASMW_END_OF_SEQUENCE)) {
			MaHvsw_HvNoteOff();
		}
		if(pfnCallbackFunc) {
			sdRet = pfnCallbackFunc(bId);
		}
	}

	return (sdRet);
}

/****************************************************************************
 *	CallBack_Dummy0/1/2
 *
 *	Function:
 *			Hook callback.
 *	Argument:
 *			bId	... Event number.
 *	Return:
 *			0	success.
 *			<0	error code.
 *
 ****************************************************************************/
static SINT32	CallBack_Dummy0(UINT8 bId)
{
	return (MaHvsw_CallBack(bId, gHvswInfo.sHook[0].pfnCallbackFunc));
}

static SINT32	CallBack_Dummy1(UINT8 bId)
{
	return (MaHvsw_CallBack(bId, gHvswInfo.sHook[1].pfnCallbackFunc));
}

static SINT32	CallBack_Dummy2(UINT8 bId)
{
	return (MaHvsw_CallBack(bId, gHvswInfo.sHook[2].pfnCallbackFunc));
}

/****************************************************************************
 *	MaSound_Create
 *
 *	Function:
 *			Setting the MA Stream Converter and callback function.
 *	Argument:
 *			cnv_id		ID number of MA Stream Converter
 *	Return:
 *			>= 0		function id of registered MA Stream Converter
 *			< 0			error code
 *
 ****************************************************************************/
SINT32 MaSound_Create
(
	UINT8	cnv_id						/* stream converter id */
)
{
	SINT32	sdRet = MASMW_ERROR;		/* result of function */

	if ((cnv_id == MASMW_CNVID_HVS) && (gHvswInfo.sdDefaultHvLanguage == MASMW_HVTYPE_NONE)) {
		return (MASMW_ERROR_ID);
	}
	sdRet = __MaSound_Create(cnv_id);
	if(sdRet < MASMW_SUCCESS) {
		/*	Prohibit access when HV is already created. */
		if((gHvswInfo.sdHvFuncId >= 0) && (gHvswInfo.sdHvFuncId == cnv_id)) {
			return (MASMW_ERROR_HV_CONFLICT);
		}
	}

	return (sdRet);
}

/****************************************************************************
 *	MaSound_Load
 *
 *	Function:
 *			Performs loading processing of Stream Converter.
 *	Arguments:
 *			func_id		function id
 *			file_ptr	pointer to file
 *			file_size	byte size of file
 *			mode		error check mode	0: no check
 *											1: check
 *											2: check only
 *											3: get contents information
 *			func		callback function
 *			ext_args	for future extension
 *	Return:
 *			>= 0		success. file id.
 *			< 0			error code
 *
 ****************************************************************************/
SINT32 MaSound_Load
(
	SINT32	func_id,					/* function id */
	UINT8 *	file_ptr,					/* pointer to file */
	UINT32	file_size,					/* size of file */
	UINT8	mode,						/* error check mode */
	SINT32	(*func)(UINT8 id),			/* callback function */
	void *	ext_args					/* for future extension */
)
{
	SINT32	sdId;
	SINT32	sdRet = MASMW_ERROR;		/* result of function */

	MASNDSEQ_DBGMSG(("MaSound_Load: id=%ld\n", func_id));

	/*	Prohibit access when HV is already created. */
	if(gHvswInfo.sdHvFuncId == func_id) {
		return (MASMW_ERROR);
	}

	/*	Check function id	*/
	sdId = IsHookFunc(func_id);
	if((sdId >= MASMW_SUCCESS) && (mode < 2)) {
		sdRet = __MaSound_Load(func_id, file_ptr, file_size, mode, gpfnCallback[sdId], ext_args);
		if(sdRet >= MASMW_SUCCESS) {
			gHvswInfo.sHook[sdId].sdFuncId			= func_id;
			gHvswInfo.sHook[sdId].sdFileId			= sdRet;
			gHvswInfo.sHook[sdId].pfnCallbackFunc	= func;
		}
	}
	else {
		sdRet = __MaSound_Load(func_id, file_ptr, file_size, mode, func, ext_args);
	}

	return (sdRet);
}

/****************************************************************************
 *	MaSound_Open
 *
 *	Function:
 *			Performs opening processing of Stream Converter.
 *	Arguments:
 *			func_id		function id
 *			file_id		file id
 *			open_mode	file open mode
 *			ext_args	for future extension
 *	Return:
 *			0			success
 *			< 0			error code
 *
 ****************************************************************************/
SINT32 MaSound_Open
(
	SINT32	func_id,					/* function id */
	SINT32	file_id,					/* file id */
	UINT16	open_mode,					/* open mode */
	void *	ext_args					/* for future extension */
)
{
	UINT8				bParam;
	SINT32				sdTmp;
	SINT32				sdHvCh;
	SINT32				sdFuncId;
	SINT32				sdHvType;
	MASMW_HVVOICEPARAM	Hvv;
	MASMW_HVSCRIPT		Hvs;
	SINT32				sdRet = MASMW_ERROR;		/* result of function */

	MASNDSEQ_DBGMSG(("MaSound_Open: id=%ld hd=%ld md=%hd\n", func_id, file_id, open_mode));

	/*	Prohibit access when HV is already created. */
	if(gHvswInfo.sdHvFuncId == func_id) {
		return (MASMW_ERROR);
	}

	sdHvType = gHvswInfo.sdDefaultHvLanguage;

	sdRet = __MaSound_Open(func_id, file_id, open_mode, ext_args);
	if((IsHookFunc(func_id) >= MASMW_SUCCESS) && (sdRet == MASMW_SUCCESS)) {
		/*	Initialize	*/
		MaHvsw_Initialize();
		/*	get HV channel number	*/
		sdHvCh = __MaSound_Control(func_id, file_id, MASMW_GET_HVCHANNEL, NULL, NULL);
		if(sdHvCh < MASMW_SUCCESS) {
			return (sdRet);
		}
		/*	get HV script	*/
		Hvs.pbBuf	= NULL;
		Hvs.dSize	= 0;
		sdTmp = __MaSound_Control(func_id, file_id, MASMW_GET_HVSCRIPT, &Hvs, NULL);
		if(sdTmp == MASMW_SUCCESS) {
			sdHvType = GetFirstLanguageType(Hvs.pbBuf, Hvs.dSize);
			/*	set language type	*/
			if ((gHvswInfo.sdDefaultHvLanguage != MASMW_HVTYPE_JAPANESE) && 
			    (sdHvType == MASMW_HVTYPE_JAPANESE)) {
				__MaSound_DeviceControl(MASMW_SET_HVTYPE, (UINT8)sdHvType, 0, 0);
			}
		}
		else {
			Hvs.pbBuf	= NULL;
			Hvs.dSize	= 0;
		}
		/*	create HVS	*/
		sdFuncId = __MaSound_Create(MASMW_CNVID_HVS);
		if(sdFuncId < MASMW_SUCCESS)
		{
			if (sdFuncId != MASMW_ERROR_ID)	/*--- MASMW_ERROR_ID means No HVS module. ---*/
			{
				__MaSound_Close(func_id, file_id, NULL);
				__MaSound_DeviceControl(MASMW_SET_HVTYPE, (UINT8)gHvswInfo.sdDefaultHvLanguage, 0, 0);
				return (MASMW_ERROR_HV_CONFLICT);
			}
		}
		/*	set HV channel number	*/
		bParam = (UINT8)sdHvCh;
		__MaSound_Control(sdFuncId, 0, MASMW_SET_HVCHANNEL, &bParam, NULL);
		/*	get HV LED/VIB status	*/
		sdTmp = __MaSound_Control(func_id, file_id, MASMW_GET_HVCHANNELSTATUS, NULL, NULL);
		if(sdTmp & 0x00000004) gHvswInfo.sdKeyCon = 1;
		/*	set HV LED/VIB status	*/
		bParam = (UINT8)(sdTmp & 0x00000003);
		__MaSound_Control(sdFuncId, 0, MASMW_SET_HVCHANNELSTATUS, &bParam, NULL);
		/*	get HV extend voice	*/
		Hvv.bProgNo	= 0;
		Hvv.pbBuf	= NULL;
		Hvv.dSize	= 0;
		sdTmp = __MaSound_Control(func_id, file_id, MASMW_GET_HVVOICE, &Hvv, NULL);
		if(sdTmp == MASMW_SUCCESS) {
			/*	set HV extend voice	*/
			Hvv.bProgNo |= 0x80;
			__MaSound_Control(sdFuncId, 0, MASMW_SET_HVVOICE, &Hvv, NULL);
		}
		/*	set HV script	*/
		LoadHvScript(Hvs.pbBuf, Hvs.dSize);

		/*	remember func & file id	*/
		gHvswInfo.sdFuncId		= func_id;
		gHvswInfo.sdFileId		= file_id;
		gHvswInfo.sdHvFuncId	= sdFuncId;
	}

	return (sdRet);
}

/****************************************************************************
 *	MaSound_Control
 *
 *	Function:
 *			Performs controlling processing of Stream Conveter.
 *	Argument:
 *			func_id		function id
 *			file_id		file id
 *			ctrl_num	control number
 *			prm			control parameter
 *			ext_args	for future extension
 *	Return:
 *			0			success
 *			< 0			error code
 *
 ****************************************************************************/
SINT32 MaSound_Control
(
	SINT32	func_id,					/* function id */
	SINT32	file_id,					/* file id */
	UINT8	ctrl_num,					/* control number */
	void *	prm,						/* parameter */
	void *	ext_args					/* for future extension */
)
{
	UINT8	bVolume;
	SINT32	sdRet		= MASMW_ERROR;		/* result of function */
	SINT32	sdFuncId	= gHvswInfo.sdHvFuncId;
	SINT32	sdFileId	= gHvswInfo.sdHvFileId;

	MASNDSEQ_DBGMSG(("MaSound_Control: id=%ld hd=%ld cn=%d\n", func_id, file_id, ctrl_num));

	/*	Prohibit access when HV is already created. */
	if(sdFuncId == func_id) {
		return (MASMW_ERROR);
	}

	if(	(sdFuncId >= 0)					&&
		(gHvswInfo.sdFuncId == func_id)	&&
		(gHvswInfo.sdFileId == file_id)) {

		if(ctrl_num == MASMW_SET_HVVOLUME) {
			/*	Argument Check!!	*/
			if(prm == NULL)		return (MASMW_ERROR_ARGUMENT);
			bVolume = *((UINT8*)prm);
			if(bVolume > 127)	return (MASMW_ERROR_ARGUMENT);

			gHvswInfo.dHvVolume = (UINT32)bVolume;
			if(sdFileId >= 0) {
				bVolume = (UINT8)MixVolume();
				__MaSound_Control(sdFuncId, sdFileId, MASMW_SET_VOLUME, &bVolume, ext_args);
			}
			return (MASMW_SUCCESS);
		}

		sdRet = __MaSound_Control(func_id, file_id, ctrl_num, prm, ext_args);
		if(sdRet >= MASMW_SUCCESS) {
			switch(ctrl_num) {
			case MASMW_SET_VOLUME :
				gHvswInfo.dVolume = (UINT32)*((UINT8*)prm);
				if(sdFileId >= 0) {
					bVolume = (UINT8)MixVolume();
					__MaSound_Control(sdFuncId, sdFileId, ctrl_num, &bVolume, ext_args);
				}
				break;
			case MASMW_SET_KEYCONTROL :
				gHvswInfo.sdKey = (SINT32)*((SINT8*)prm);
				if((sdFileId >= 0) && (gHvswInfo.sdKeyCon)) {
					__MaSound_Control(sdFuncId, sdFileId, ctrl_num, prm, ext_args);
				}
				break;
			default:
				break;
			}
		}
	}
	else {
		sdRet = __MaSound_Control(func_id, file_id, ctrl_num, prm, ext_args);
	}

	return (sdRet);
}

/****************************************************************************
 *	MaSound_Standby
 *
 *	Function:
 *			Performs standby processing of Stream Converter.
 *	Argument:
 *			func_id		function id
 *			file_id		file id
 *			ext_args	for future extension
 *	Return:
 *			0			success
 *			< 0			error code
 *
 ****************************************************************************/
SINT32 MaSound_Standby
(
	SINT32	func_id,					/* function id */
	SINT32	file_id,					/* file id */

⌨️ 快捷键说明

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