📄 sfapi.c
字号:
kal_get_time(&pDataTime->nMill);
}
/**
* @brief 开始播放一个声音
* @param pSndBuffer - 声音缓冲
* @param uBufferSize - 声音缓冲大小
* @param format - 声音数据格式
* @param nLoopCount - 0表示循环播放,其他表示播放次数
* @return 播放ID
*/
SFSND_ID SFSnd_Play(void*pSndBuffer,unsigned int uBufferSize,SFSND_FORMAT format,int nLoopCount)
{
if(!g_bBgMusicOn
|| (MMI_PROFILE_SILENT == gactivatedprofile)
|| (MMI_PROFILE_MEETING == gactivatedprofile))
{
return 0;
}
//Output audio only through the earphone when earphone plugged
if(isEarphonePlugged)
{
if(format==SNDFORMAT_MIDI)
{
if(g_kernal.bMidiPlaying)
mdi_audio_stop_string();
//PlayAudioMidiStream((U8*)pSndBuffer,(U16)uBufferSize,0);
mdi_audio_play_string_with_vol_path(pSndBuffer,uBufferSize,MDI_FORMAT_SMF,nLoopCount==1?DEVICE_AUDIO_PLAY_ONCE:DEVICE_AUDIO_PLAY_INFINITE,SFNull,SFNull,255,MDI_DEVICE_SPEAKER2);
g_kernal.bMidiPlaying=SFTrue;
return 1;
}
else if(format==SNDFORMAT_WAVE)
{
if(g_kernal.bWavPlaying)
mdi_audio_stop_string();
//PlayAudioWavStream((U8*)pSndBuffer,(U16)uBufferSize,0);
mdi_audio_play_string_with_vol_path(pSndBuffer,uBufferSize,MDI_FORMAT_WAV,nLoopCount==1?DEVICE_AUDIO_PLAY_ONCE:DEVICE_AUDIO_PLAY_INFINITE,SFNull,SFNull,255,MDI_DEVICE_SPEAKER2);
g_kernal.bWavPlaying=SFTrue;
return 2;
}
}
else
{
if(format==SNDFORMAT_MIDI)
{
if(g_kernal.bMidiPlaying)
mdi_audio_stop_string();
mdi_audio_play_string_with_vol_path(pSndBuffer,uBufferSize,MDI_FORMAT_SMF,nLoopCount==1?DEVICE_AUDIO_PLAY_ONCE:DEVICE_AUDIO_PLAY_INFINITE,SFNull,SFNull,255,MDI_DEVICE_SPEAKER_BOTH);
g_kernal.bMidiPlaying=SFTrue;
return 1;
}
else if(format==SNDFORMAT_WAVE)
{
if(g_kernal.bWavPlaying)
mdi_audio_stop_string();
mdi_audio_play_string_with_vol_path(pSndBuffer,uBufferSize,MDI_FORMAT_WAV,nLoopCount==1?DEVICE_AUDIO_PLAY_ONCE:DEVICE_AUDIO_PLAY_INFINITE,SFNull,SFNull,255,MDI_DEVICE_SPEAKER_BOTH);
g_kernal.bWavPlaying=SFTrue;
return 2;
}
}
return 0;
}
/**
* @brief 结束并关闭声音的播放
* @param idSnd - 播放声音ID
*/
void SFSnd_Stop(SFSND_ID idSnd)
{
if(idSnd==1)
{
mdi_audio_stop_string();
}
else if(idSnd==2)
{
mdi_audio_stop_string();
}
}
SFFS_HANDLE SFFS_Open(UString path,SFUint flags)
{
#ifdef WIN32
g_kernal.fpFile=_wfopen(path,(flags&SFFSF_READ)?L"rb":L"wb");
if(!g_kernal.fpFile)
return 0;
return 1;
#else
//暂时关闭存档功能
g_kernal.hFile=FS_Open(path,(flags&SFFSF_READ)?FS_READ_ONLY:(FS_READ_WRITE|FS_CREATE));
if(g_kernal.hFile<0)//???
return 0;
return 1;
#endif
}
SFSize_T SFFS_Read(SFFS_HANDLE hFile,SFAnyPtr buf,SFSize_T sz)
{
#ifdef WIN32
if(!g_kernal.fpFile)
return (SFSize_T)0;
return (SFSize_T)fread(buf,1,sz,g_kernal.fpFile);
#else
UINT len=0;
FS_Read(g_kernal.hFile,buf,(UINT)sz,&len);
return (SFSize_T)len;
#endif
}
SFSize_T SFFS_Write(SFFS_HANDLE hFile,const SFAny* buf,SFSize_T sz)
{
#ifdef WIN32
if(!g_kernal.fpFile)
return (SFSize_T)0;
return (SFSize_T)fwrite(buf,1,sz,g_kernal.fpFile);
#else
UINT len=0;
FS_Write(g_kernal.hFile,(void*)buf,(UINT)sz,&len);
return (SFSize_T)len;
#endif
}
void SFFS_Close(SFFS_HANDLE hHandle)
{
#ifdef WIN32
if(!g_kernal.fpFile)
return;
fclose(g_kernal.fpFile);
#else
FS_Close(g_kernal.hFile);
#endif
}
SFBool SFFS_GetSize(SFFS_HANDLE hHandle,SFSize_T*pSz)
{
#ifdef WIN32
long fsz=_filelength(g_kernal.fpFile->_file);
if(fsz>=0)
{
*pSz=fsz;
return SFTrue;
}
return SFFalse;
#else
UINT sz=0;
FS_GetFileSize(g_kernal.hFile,&sz);
*pSz=sz;
return SFTrue;
#endif
}
void SFScreen_DrawTextN(UString str,SFInt length,SFInt x,SFInt y,SFUint32 cr)
{
S32 str_w, str_h,str_size;
SFInt i;
SFInt cursor_x =x;
color text_color;
U8 buf[4]={0,0,0,0};
text_color.alpha=((cr & 0xff00000)>>24) & 0xff;
text_color.r=((cr & 0x00ff0000)>>16) & 0xff;
text_color.g=((cr & 0x0000ff00)>>8) & 0xff;
text_color.b=((cr & 0x000000ff)) & 0xff;
gui_set_text_color(text_color);
for(i=0;i<length;i++){
gui_move_text_cursor(cursor_x,y);
buf[0]=((str[i]) & 0xff);
buf[1]=((str[i]>>8) & 0xff);
gui_print_text((UI_string_type)buf);
cursor_x+=SFFont_GetCharWidth(str[i]);
}
}
extern void SFSms_Callback(unsigned char status);
SFSMS_ID SFSms_Send(const UChar*pNumber,const UChar *pContent)
{
#if 0
int i;
char buf[64];
for(i=0;i<63;i++)
{
if(pNumber[i])
buf[i]=(char)pNumber[i];
else
break;
}
buf[i]='\0';
mmi_send_short_message(buf,(unsigned char*)pContent,1,SFSms_Callback);
return 1;
#endif
}
SFBool SFSystem_HasSim(void)
{
if(mmi_bootup_is_sim_valid())
{
return SFTrue;
}
else
{
return SFFalse;
}
}
//Data_Account Interface
extern void DataAccountReadyCheck(FuncPtr ready_callback);
extern void GPRSAppDTCNTSelect( FuncPtrShort callback, U16 AppMenuID);
extern kal_uint8 custom_get_csd_profile_num();
void game_select_account(void)
{
#if 0
#ifdef __MMI_GPRS_FEATURES__
GPRSAppDTCNTSelect(mmi_game_prof_data_acct_callback, MENU_ID_SNOWFISH_APP);
#else
AppDTCNTSelect(mmi_game_prof_data_acct_callback,MENU_ID_SNOWFISH_APP);
#endif
#endif/*remove end*/
}
void mmi_game_prof_data_acct_callback(U16 index)
{
#ifdef __MMI_GPRS_FEATURES__
g_mtk_nwk_account_id = (S32)(index+custom_get_csd_profile_num());
#else
g_mtk_nwk_account_id = (S32)index;
#endif
mmi_game_prof_save_data_acct();
#ifdef MMI_ON_HARDWARE_P
kal_prompt_trace(MOD_MMI,"mmi_game_prof_data_acct_callback get account is %d",g_mtk_nwk_account_id);
#endif
}
/**
* @brief 浏览并选择一个文件以供之后打开
* @param aBuffer - 接受文件名的缓冲
* @param aMaxSize - 缓冲以字符为单位的大小,含0结尾
* @param abOpenFile - 是否是打开文件还是保存文件
* @param aFilter - 过滤字符串,格式为"*.aaa;*.bbb",如果为SFNull表示"*.*"
* @param aReason - 异步调用的通知结果的存放地址,调用后应当设为SF_REASON_BUSY,然后在系统处理完后设置实际的处理结果,成功的话设为SF_REASON_OK
* @remarks 这是一个异步调用,调用后将在之后控制权交还系统时离开本应用进入系统的打开界面,之后回到应用再设置结果。
*/
void SFSystem_SelectFile(UChar* aBuffer,SFSize_T aMaxSize,SFBool bOpenFile,const UChar* aFilter,SFReason* aReason)
{
if(bOpenFile)
{
AnsiiToUnicodeString((S8 *)aBuffer,(S8 *)"d:\\demo.nes");
* aReason = SF_REASON_OK;
}
}
#define SF_SOUND_BUFFER_SIZE 0x8000
kal_uint8 u8_g_sound_buffer[SF_SOUND_BUFFER_SIZE];
#if defined(__MTK_TARGET__)
#pragma arm section code = "AUDIOAPICODE",rwdata = "AUDIOAPIRW", zidata = "AUDIOAPIZI"
#endif
kal_uint8 u8_g_sound_playflag=0; // 声音播放标志
kal_uint8 *pu8_g_sound_bufstart; // 声音数据缓冲区首地址
kal_uint32 u32_g_sound_bufsize; // 声音缓冲区大小
kal_uint8 *pu8_g_sound_out_ptr; // 声音播出指针
kal_uint8 *pu8_g_sound_in_ptr; // 声音写入指针
/**
* @brief 创建一个PCM播放设备
* @param aFormat - 必须为0
* @param aSamplesPerSec - 每秒的采样数
* @param aBit - 采样精度8/16
* @param aChannel - 声道
* @return 创建的声音设备
*/
SFPCMDevice device;
SFPCMDevice* SFPCMDevice_Create(SFInt aFormat,SFInt aSamplesPerSec,SFInt
aBit,SFInt aChannel)
{
PARAM_UNUSED(aFormat);
PARAM_UNUSED(aSamplesPerSec);
PARAM_UNUSED(aChannel);
return &device;
}
/**
* @brief 开始播放指定的设备
* @param aDevice - 播放的设备
*/
void SFPCMDevice_Start(SFPCMDevice* aDevice)
{
PARAM_UNUSED(aDevice);
if((MMI_PROFILE_SILENT == gactivatedprofile)
|| (MMI_PROFILE_MEETING == gactivatedprofile))
{
return;
}
u8_g_sound_playflag = 1;
pu8_g_sound_bufstart = (U8 *)u8_g_sound_buffer;
u32_g_sound_bufsize = SF_SOUND_BUFFER_SIZE;
pu8_g_sound_in_ptr = pu8_g_sound_out_ptr = pu8_g_sound_bufstart;
memset(pu8_g_sound_bufstart,0x0,u32_g_sound_bufsize);
mdi_audio_play_string(pu8_g_sound_bufstart, u32_g_sound_bufsize,
MDI_FORMAT_PCM_8K, DEVICE_AUDIO_PLAY_INFINITE, NULL, NULL);
}
/**
* @brief 停止声音播放
* @param aDevice - 播放的设备
*/
void SFPCMDevice_Stop(SFPCMDevice* aDevice)
{
PARAM_UNUSED(aDevice);
if((MMI_PROFILE_SILENT == gactivatedprofile)
|| (MMI_PROFILE_MEETING == gactivatedprofile))
{
return;
}
u8_g_sound_playflag = 0;
mdi_audio_stop_string();
}
/**
* @brief 关闭设备
* @param aDevice - 创建的声音设备
*/
void SFPCMDevice_Close(SFPCMDevice* aDevice)
{
PARAM_UNUSED(aDevice);
if(u8_g_sound_playflag == 1)
{
u8_g_sound_playflag = 0;
mdi_audio_stop_string();
}
return;
}
#if defined(__MTK_TARGET__)
#pragma arm section code rwdata zidata
#endif
/**
* @brief 设置设备的音量
* @param aDevice - 创建的声音设备
* @param aVolume - 设置的音量
*/
void SFPCMDevice_SetVolume(SFPCMDevice* aDevice,SFInt aVolume)
{
PARAM_UNUSED(aDevice);
PARAM_UNUSED(aVolume);
}
/**
* @brief 获取设备的音量
* @param aDevice - 创建的声音设备
* @return 音量
*/
SFInt SFPCMDevice_GetVolume(SFPCMDevice* aDevice)
{
PARAM_UNUSED(aDevice);
return 0;
}
void mmi_game_prof_save_data_acct(void)
{
#if 0
DeleteUptoScrID(SCR_ID_SNOWFISH_APP);
GoBackHistory();
#endif/*remove end*/
}
SFSize_T SFApp_GetCommandLine(UChar* aBuffer,SFSize_T aSize)
{
SFSize_T realSize;
realSize = pfnUnicodeStrlen((S8 *)u16_g_game_file_name);
if(realSize >= aSize)
{
realSize = aSize - 1;
}
if(realSize > 0)
{
pfnUnicodeStrncpy((PS8)aBuffer, (PS8)u16_g_game_file_name,realSize);
aBuffer[realSize + 1] = 0x0;
}
return realSize;
}
#define KEY_REGISTER_TIME 0x80200230
#define KEY_REGISTER_LOW 0x80110004
#define KEY_REGISTER_MID 0x80110008
#define KEY_REGISTER_HIG 0x8011000c
#define KEY_PUB_LSK 0xfeff//KP_LOW_KEY
#define KEY_PUB_RSK 0xfbff//KP_LOW_KEY
#define KEY_PUB_LEFT 0xffdf//KP_MID_KEY
#define KEY_PUB_RIGHT 0xefff//KP_MID_KEY
#define KEY_PUB_UP 0xff7f//KP_LOW_KEY
#define KEY_PUB_DOWN 0xbfff//KP_LOW_KEY
#define KEY_PUB_OK 0x3f7 //KP_HIG_KEY
#define KEY_PUB_CALL 0xfdff//KP_LOW_KEY
#define KEY_PUB_POUND 0x2bf //KP_HIG_KEY
#define KEY_PUB_0 0x3df //KP_HIG_KEY
#define KEY_PUB_1 0x7fff//KP_LOW_KEY
#define KEY_PUB_4 0xffbf//KP_MID_KEY
#define KEY_PUB_5 0xff7f//KP_MID_KEY
#define KEY_PUB_6 0xfeff//KP_MID_KEY
#define KEY_PUB_7 0xdfff//KP_MID_KEY
#define KEY_PUB_8 0xbfff//KP_MID_KEY
#define KEY_PUB_STAR 0x3ef //KP_HIG_KEY
#define KEY_PUB_9 0x7fff//KP_MID_KEY
#define KEY_PUB_2 0xfffe//KP_MID_KEY
#define KEY_PUB_3 0xfffd//KP_MID_KEY
#define KEY_PUB_ESC 0xffbf //KP_LOW_KEY
#define KEY_PUB_VOLUP 0xfffb //KP_MID_KEY
#define KEY_PUB_VOLDOWN 0xf7ff //KP_LOW_KEY
#define KEY_PUB_FUNC1 0xfffd//KP_LOW_KEY
#define KEY_PUB_FUNC2 0xfffb//KP_LOW_KEY
#define REGISTER_PUB_LSK KEY_REGISTER_LOW
#define REGISTER_PUB_RSK KEY_REGISTER_LOW
#define REGISTER_PUB_LEFT KEY_REGISTER_MID
#define REGISTER_PUB_RIGHT KEY_REGISTER_MID
#define REGISTER_PUB_UP KEY_REGISTER_LOW
#define REGISTER_PUB_DOWN KEY_REGISTER_LOW
#define REGISTER_PUB_OK KEY_REGISTER_HIG
#define REGISTER_PUB_CALL KEY_REGISTER_LOW
#define REGISTER_PUB_POUND KEY_REGISTER_HIG
#define REGISTER_PUB_0 KEY_REGISTER_HIG
#define REGISTER_PUB_1 KEY_REGISTER_LOW
#define REGISTER_PUB_4 KEY_REGISTER_MID
#define REGISTER_PUB_5 KEY_REGISTER_MID
#define REGISTER_PUB_6 KEY_REGISTER_MID
#define REGISTER_PUB_7 KEY_REGISTER_MID
#define REGISTER_PUB_8 KEY_REGISTER_MID
#define REGISTER_PUB_STAR KEY_REGISTER_HIG
#define REGISTER_PUB_9 KEY_REGISTER_MID
#define REGISTER_PUB_2 KEY_REGISTER_MID
#define REGISTER_PUB_3 KEY_REGISTER_MID
#define REGISTER_PUB_ESC KEY_REGISTER_LOW
#define REGISTER_PUB_VOLUP KEY_REGISTER_MID
#define REGISTER_PUB_VOLDOWN KEY_REGISTER_LOW
#define REGISTER_PUB_FUNC1 KEY_REGISTER_LOW
#define REGISTER_PUB_FUNC2 KEY_REGISTER_LOW
SFUint32 SFSystem_GetKeyState(void)
{
SFUint32 keyValue = 0;
if(g_bRotate90
#if defined(__IMT_LCD_ROTATE_MMI__)
&& !gMMILcdRotateState
#endif
)
{
//if(!(DRV_Reg32(REGISTER_PUB_1)&(~KEY_PUB_1)))
//{
// keyValue |= SFKS_UP;
// keyValue |= SFKS_RIGHT;
//}
if(!(DRV_Reg32(REGISTER_PUB_UP)&(~KEY_PUB_UP)))
{
keyValue |= SFKS_RIGHT;
}
//if(!(DRV_Reg32(REGISTER_PUB_3)&(~KEY_PUB_3)))
//{
// keyValue |= SFKS_DOWN;
// keyValue |= SFKS_RIGHT;
//}
if(!(DRV_Reg32(REGISTER_PUB_LEFT)&(~KEY_PUB_LEFT)))
{
keyValue |= SFKS_UP;
}
if(!(DRV_Reg32(REGISTER_PUB_RIGHT)&(~KEY_PUB_RIGHT)))
{
keyValue |= SFKS_DOWN;
}
//if(!(DRV_Reg32(REGISTER_PUB_7)&(~KEY_PUB_7)))
//{
// keyValue |= SFKS_UP;
// keyValue |= SFKS_LEFT;
//}
if(!(DRV_Reg32(REGISTER_PUB_DOWN)&(~KEY_PUB_DOWN)))
{
keyValue |= SFKS_LEFT;
}
//if(!(DRV_Reg32(REGISTER_PUB_9)&(~KEY_PUB_9)))
//{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -