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