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

📄 sfapi.c

📁 此为在MTK手机平台上添加软解码MP4要修改的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/* $Id: SFApi.c 67 2006-11-07 06:52:31Z snowfish $ */

#include "MMI_features.h"
#include "SFApi.h"
#include "PixtelDataTypes.h"
//#include "SFGameSimuDef.h"

#include "gdi_datatype.h"
#include "lcd_sw_inc.h"
#include "wgui.h"
#include "mdi_datatype.h"
#include "mdi_audio.h"
#include "historygprot.h"
#include "GlobalDefs.h"
#include "SettingProfile.h"
#include "Ucs2prot.h"
#include "fs_type.h"
#include "DebugInitDef.h"
#include "drv_comm.h"
#include "reg_base.h"
#include "lcd_if.h"
#include "GameFramework.h"
#include "FileMgr.h"
#include "FileManagerDef.h"
#include "CommonScreens.h"

#ifndef MMI_ON_HARDWARE_P
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#endif

#include "NVRAMType.h"
#include "NVRAMProt.h"
#include "NVRAMEnum.h"
#include "app_datetime.h"

#include "med_global.h" 
#include "med_utility.h" 
#include "mdi_video.h" 

//#include "mmidsmdef.h"

#if 1 //defined(__MMI_SNOWFISH_GAME_SIMU__)
#ifdef MMI_ON_HARDWARE_P
void* malloc(unsigned int sz);
void free(void*ptr);
extern void *kal_sys_mem_alloc(kal_uint32 size);
extern void kal_sys_mem_free(void *mem_ptr);
extern kal_uint8 custom_get_csd_profile_num(void);
#endif

//#define SF_SCREEN_WIDTH LCD_WIDTH
//#define SF_SCREEN_HEIGHT LCD_HEIGHT

typedef struct _SFTimerInfo
{
	SFTIMER_ID iTimerId;
	ISFApplication* pHandler;
	SFInt iExpiredTime;
	SFBool bOnce;
} SFTimerInfo;

typedef struct _SFAppKernal
{
	SFTimerInfo iTimerInfo;
	ISFApplication* pApplication;
	SFBool bAppRunning;
	SFUint32 iKeyState;
	gdi_handle iGdiLayer;
	SFAnyPtr pHeap;
	SFBool bWavPlaying;
	SFBool bMidiPlaying;
#ifdef WIN32
	FILE*fpFile;
#else
	FS_HANDLE hFile;
#endif
} SFAppKernal;

void SFDEBUG(const char*str)
{
#ifdef MMI_ON_HARDWARE_P
    //kal_prompt_trace(MOD_MMI,(char *)str);
#endif
}


#define SNOWFISH_APP_MEM_LENGTH 0x90000
/*U8  SnowFishMemPool[SNOWFISH_APP_MEM_LENGTH] = {0};*/ 
U16 u16_g_game_file_name[FMGR_PATH_BUFFER_SIZE/2];

const UChar g_strSFCSSavePath[]=L"c:\\d";
const UChar g_strVMACRecordPath[]=L"c:\\vmac_rec";
kal_uint16 g_mtk_MOD_MMI=MOD_MMI;
#ifdef __MMI_GPRS_FEATURES__
kal_uint32 g_mtk_nwk_account_id;// = custom_get_csd_profile_num();
#else
kal_uint32 g_mtk_nwk_account_id = 0;
#endif

static SFBool g_bFirstTime=SFTrue;
static SFAppKernal g_kernal;
static BOOL g_bBgMusicOn = TRUE;
static BOOL g_bRotate90 = TRUE;

/*Output voice only through earphone when earphone plugged*/
extern U8 isEarphonePlugged;

extern U8 gactivatedprofile;

#if defined(__IMT_LCD_ROTATE_MMI__)
extern U8 gMMILcdRotateState;
#endif
/*****************************************************************************************************
  *inner function declaration
  ****************************************************************************************************/

void SFApp_Entry(void);
void game_select_account(void) ;
void mmi_game_prof_data_acct_callback(U16 index) ;
void mmi_game_prof_save_data_acct(void);
static void SFApp_KeyHandler(S32 aKey,S32 aKeyState);
void SFApp_FreeGDI(void);
void EntryRomList(void);
void* sf_system_malloc_fast(unsigned int size); 
void sf_system_free_fast(void*ptr);
void* sf_system_malloc(unsigned int size);
void sf_system_free(void*ptr);
extern U8* gdi_layer_get_buffer_by_pos(U8 pos);

static SFBool SFApp_IsFirstTime(void)
{
	return g_bFirstTime;
}
static void SFApp_SetFirstTime(SFBool bFirstTime)
{
	g_bFirstTime=bFirstTime;
}

ISFApplication* SFGetApp(void)
{
	return g_kernal.pApplication;
}

/**
* @brief 关闭请求,不是用户方法
*/
void SFApp_Terminate(void)
{
	GoBackHistory();//?
}

/**
* @brief 表示应用主动要求退出,系统随后应该发送EVT_APP_DESTORY消息
*/
void SFApp_Exit(void)
{
	//send the destroy message first
	g_kernal.bAppRunning=SFFalse;
	SFApp_Terminate();
}


/**
* @brief 获取系统的屏幕缓冲区
* @return 屏幕缓冲区指针
*/
SFNColor* SFScreen_GetBuffer(void)
{
	U8*ptr;
	gdi_layer_get_buffer_ptr(&ptr);
	return (SFNColor*)ptr;
}


/**
* @brief 获取系统的屏幕宽度
* @return 屏幕宽度
*/
SFInt SFScreen_GetWidth(void)
{
	return SF_SCREEN_WIDTH;
}


/**
* @brief 获取系统的屏幕高度
* @return 屏幕高度
*/
SFInt SFScreen_GetHeight(void)
{
	return SF_SCREEN_HEIGHT;
}

/**
* @brief 把系统的屏幕缓冲区内容刷新到前台(实际屏幕)
*/
void SFScreen_Update(void)
{
	START_LCD_TRANSFER;
	//gdi_layer_blt_previous(0, 0,LCD_WIDTH, LCD_HEIGHT);
}


SFInt SFFont_GetHeight(void)
{
	return (SFInt)gui_get_character_height();
}


SFInt SFFont_GetCharWidth(UNICHAR aChar)
{
	SFInt width=0,height=0;
	U8 buf[4]={0,0,0,0};
	buf[0]=(aChar)&0xff;
	buf[1]=((aChar>>8) & 0xff);
	
	gui_measure_string_n((UI_string_type)buf,1,&width,&height);
	return width;
}


SFInt SFFont_GetStringWidth(UString aStr,SFInt aLength)
{
 SFInt width=0,height=0,i;
 //TODO LATER : should be replaced
 if(aLength<0)
 {
  aLength=sf_strlen(aStr);
 }
 for(i=0;i<aLength;i++)
 {
  width+=SFFont_GetCharWidth(aStr[i]);
 }
return width;
}

void SFScreen_SetClip(SFInt x,SFInt y,SFInt w,SFInt h)
{
	gdi_layer_set_clip(x,y,x+w,y+h);
}

void SFScreen_ResetClip(void)
{
	gdi_layer_reset_clip();
}


extern void SetLeftSoftkeyFunction(void (*f)(void),MMI_key_event_type k);
extern void SetKeyHandler(FuncPtr funcPtr, U16 keyCode, U16 keyType);

void mmi_snowfish_profile_entry_app_screen(void)
{
   game_select_account();
}

void mmi_snowfish_profile_highlight_app(void)
{
	SetLeftSoftkeyFunction(mmi_snowfish_profile_entry_app_screen,KEY_EVENT_UP);
	SetKeyHandler(mmi_snowfish_profile_entry_app_screen, KEY_RIGHT_ARROW,KEY_EVENT_DOWN);
	SetKeyHandler(GoBackHistory,KEY_LEFT_ARROW,KEY_EVENT_DOWN);
	SetRightSoftkeyFunction(GoBackHistory,KEY_EVENT_UP);

}

static void SFTimer_Callback(void)
{
	ISFApplication*pHandler=g_kernal.iTimerInfo.pHandler;
	SFLPARAM idTimer=(SFLPARAM)g_kernal.iTimerInfo.iTimerId;
	if(g_kernal.iTimerInfo.bOnce)
	{
		g_kernal.iTimerInfo.pHandler=SFNull;
		g_kernal.iTimerInfo.iTimerId=0;
		gui_cancel_timer(SFTimer_Callback);
	}
	else
	{
		gui_start_timer(g_kernal.iTimerInfo.iExpiredTime,SFTimer_Callback);
	}
	//call the handler
	pHandler->pfnEvtHandler(pHandler,EVT_TIMER,idTimer,(SFWPARAM)0);
	/*{
		kal_uint32 stack_addr;
		med_get_med_int_stack_mem(&stack_addr);
		INT_SwitchStackToRun((void*)stack_addr,MED_INT_STACK_MEM_SIZE,(kal_func_ptr)pHandler->pfnEvtHandler,3,EVT_TIMER,idTimer,(SFWPARAM)0);
		med_free_med_int_stack_mem();
	}*/

//	g_bRotate90 = (SFNesEmuApp_GetStatus() == NESEMU_STATUS_GAMER90);
}

/**
* @brief 启动一个定时器
* @param idTimer - IN 定时器ID
* @param nExpiredTime - IN 以毫秒为单位的定时时间
* @param bOnceOrPeriod - IN YSTrue 表示定时器只有效一次,YSFalse 表示按指定间隔反复发出信号
*/
void SFTimer_Start(SFTIMER_ID idTimer,SFInt nExpiredTime,SFBool bOnce,ISFApplication*pHandler)
{
	g_kernal.iTimerInfo.bOnce=bOnce;
	g_kernal.iTimerInfo.iExpiredTime=nExpiredTime;
	g_kernal.iTimerInfo.iTimerId=idTimer;
	g_kernal.iTimerInfo.pHandler=pHandler;

	gui_start_timer(nExpiredTime,SFTimer_Callback);
}


/**
* @brief 停止指定的定时器
* @param idTimer - IN 定时器ID
*/
void SFTimer_Stop(SFTIMER_ID idTimer)
{
	if(g_kernal.iTimerInfo.iTimerId==idTimer)
	{
		gui_cancel_timer(SFTimer_Callback);
	}
}


/**
* @brief 获取游戏中可分配的连续空间首地址
* @return 取得的空间首地址
*/
SFAnyPtr SFSystem_GetHeap(void)
{
	return g_kernal.pHeap;
}

extern void InitSysStream(void);

void SFSystem_Initialize(void)
{
	g_kernal.bWavPlaying=SFFalse;
	g_kernal.bMidiPlaying=SFFalse;
#ifdef WIN32
	g_kernal.fpFile=SFNull;
#else
	g_kernal.hFile=0;
#endif

	/*g_kernal.pHeap = (void *)&SnowFishMemPool[0];*/
	//g_kernal.pHeap = sf_system_malloc(SNOWFISH_APP_MEM_LENGTH);
	InitSysStream();
}

void SFSystem_Finalize(void)
{
	if(g_kernal.bWavPlaying || g_kernal.bMidiPlaying)
		mdi_audio_stop_string();

	if (g_kernal.pHeap != NULL)
	{
		sf_system_free(g_kernal.pHeap);
		g_kernal.pHeap = NULL;
	}
}

static const SFByte s_mapKey[MAX_KEYS] =
{
	SFKEY_NUM0,//KEY_0= 0,
	SFKEY_NUM1,//KEY_1,				
	SFKEY_NUM2,//KEY_2,				
	SFKEY_NUM3,//KEY_3,				
	SFKEY_NUM4,//KEY_4,				
	SFKEY_NUM5,//KEY_5,				
	SFKEY_NUM6,//KEY_6,				
	SFKEY_NUM7,//KEY_7,				
	SFKEY_NUM8,//KEY_8,				
	SFKEY_NUM9,//KEY_9,				
	SFKEY_SL,//KEY_LSK,			
	SFKEY_SR,//KEY_RSK,			
	SFKEY_SM,//KEY_CSK,
	SFKEY_UP,//KEY_UP_ARROW,			
	SFKEY_DOWN,//KEY_DOWN_ARROW,		
	SFKEY_LEFT,//KEY_LEFT_ARROW,		
	SFKEY_RIGHT,//KEY_RIGHT_ARROW,		
	SFKEY_NONE,//KEY_SEND,					
	SFKEY_NONE,//KEY_END,					
	SFKEY_CLR,//KEY_CLEAR,				
	SFKEY_STAR,//KEY_STAR,					
	SFKEY_POUND,//KEY_POUND,				
	SFKEY_NONE,//KEY_VOL_UP,				
	SFKEY_NONE,//KEY_VOL_DOWN,			
	SFKEY_NONE,//KEY_QUICK_ACS,KEY_CAMERA			
	SFKEY_NONE,//KEY_ENTER,KEY_WAP,KEY_IP					
	SFKEY_NONE,//KEY_EXTRA_1,
	SFKEY_NONE//KEY_EXTRA_2,
};

void SfKey0_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_0,KEY_EVENT_DOWN);
}

void SfKey0_UpHandler(void)
{
	SFApp_KeyHandler(KEY_0,KEY_EVENT_UP);
}


void SfKey1_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_1,KEY_EVENT_DOWN);
}

void SfKey1_UpHandler(void)
{
	SFApp_KeyHandler(KEY_1,KEY_EVENT_UP);
}

void SfKey2_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_2,KEY_EVENT_DOWN);
}

void SfKey2_UpHandler(void)
{
	SFApp_KeyHandler(KEY_2,KEY_EVENT_UP);
}



void SfKey3_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_3,KEY_EVENT_DOWN);
}

void SfKey3_UpHandler(void)
{
	SFApp_KeyHandler(KEY_3,KEY_EVENT_UP);
}


void SfKey4_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_4,KEY_EVENT_DOWN);
}

void SfKey4_UpHandler(void)
{
	SFApp_KeyHandler(KEY_4,KEY_EVENT_UP);
}


void SfKey5_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_5,KEY_EVENT_DOWN);
}

void SfKey5_UpHandler(void)
{
	SFApp_KeyHandler(KEY_5,KEY_EVENT_UP);
}

void SfKey6_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_6,KEY_EVENT_DOWN);
}

void SfKey6_UpHandler(void)
{
	SFApp_KeyHandler(KEY_6,KEY_EVENT_UP);
}

void SfKey7_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_7,KEY_EVENT_DOWN);
}

void SfKey7_UpHandler(void)
{
	SFApp_KeyHandler(KEY_7,KEY_EVENT_UP);
}


void SfKey8_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_8,KEY_EVENT_DOWN);
}

void SfKey8_UpHandler(void)
{
	SFApp_KeyHandler(KEY_8,KEY_EVENT_UP);
}



void SfKey9_DownHandler(void)
{
  	SFApp_KeyHandler(KEY_9,KEY_EVENT_DOWN);
}

void SfKey9_UpHandler(void)
{
	SFApp_KeyHandler(KEY_9,KEY_EVENT_UP);
}

void SfKeyLSK_DownHandler(void)

⌨️ 快捷键说明

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