📄 jam_adaptation.c
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2001
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* jam_adaptation.c
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* This file implements JAM (Java Application Manager) and other module
* adaptation interface layer.
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
/*************************************************************************
* Include Header Files
*************************************************************************/
#include <kni.h>
#include <defaultLCDUI.h>
#include <imageDecode.h>
#include <images.h>
#include "jam_msg_handler.h"
#include "jam_internal.h"
#include "global.h"
#include "storage.h"
#include "commandState.h"
#include "gdi_include.h"
#include "gd_primitive.h"
#include "gdi_util.h"
#include "installer.h" // For __SUPPORT_INDEX_STORAGE_NAME__
/*************************************************************************
* External Declaration
*************************************************************************/
extern kal_int32 skipOneStringField(kal_uint8* myBuffer, kal_int32 scanPosition);
extern kal_uint32 update_crc(kal_uint32 crc, kal_uint8 *buf, kal_int32 len);
extern void jpush_push_deletesuite(char *store);
extern void jam_trans_midlist_icondata(kal_uint8* icon, kal_int32 icon_len,
kal_int32 width, kal_int32 height);
extern kal_bool jam_get_removal_confirm(game_type_enum type, kal_int32 MIDSID);
extern void UCS2ToUTF8(kal_char* toString, kal_uint8* myBuffer,
kal_uint32 scanOffset, kal_uint32 length);
extern void javaFileRecovery(game_type_enum type);
extern void javaFileRemoveAll(game_type_enum type);
extern void j2me_send_alertuser(char* message, int len);
extern kal_int32 jam_start_up(game_type_enum type, kal_int32 mids_id,
kal_wchar* mid_name_str);
extern void jam_tck_start_up(java_mode_enum tck_mode, kal_bool to_execute);
extern kal_int32 jam_get_setting(game_type_enum type, mmi_setting_struct *get_setting_ptr,
mmi_setting_struct *max_setting, kal_int32 mids_id,
mids_list_info_struct *mids_info_ptr, kal_bool* is_trused);
extern kal_int32 jam_set_setting(game_type_enum type, mmi_setting_struct *set_setting_ptr,
kal_int32 mids_id, mids_list_info_struct* mids_info_ptr);
extern void jam_remove_midlet_suite(game_type_enum type, kal_int32 mids_id, kal_bool *commit);
extern void jam_update_midlet_suite(game_type_enum type, kal_int32 mids_id);
extern void jam_install_midlet_suite(game_type_enum type, kal_wchar* jad_file_name,
kal_wchar* jar_file_name, kal_wchar* download_url);
extern kal_int32 jam_get_event_abort_handler(void);
extern kal_wchar* jam_get_jar_storage_name(void* (*malloc)(int size), kal_int32 MIDS_id);
extern kal_bool jam_clean_and_recovery_storage(game_type_enum type);
#ifdef OGDR_SECURITY_SETTING
extern kal_int32 jam_get_domain_list(game_type_enum type, kal_int32* total_domain, kal_wchar domains[10][30]);
extern kal_int32 jam_get_default_setting(game_type_enum type, kal_int32 domain_id, mmi_setting_struct* max_setting, mmi_setting_struct* default_setting);
extern kal_int32 jam_set_default_setting(game_type_enum type, kal_int32 domain_id, mmi_setting_struct* default_setting);
extern kal_int32 jam_reset_default_permission_setting(game_type_enum type);
#endif
kal_bool commit_removal = KAL_FALSE;
/*************************************************************************
* Internal Macro
*************************************************************************/
#define RGB_TRANSPARENT_COLOR_16 (0x1234)
#if LITTLE_ENDIAN
#define FixUCS2Endian(ucs2str_ptr){\
int scanIndex = 0;\
while(ucs2str_ptr[scanIndex] != 0){\
ucs2str_ptr[scanIndex] = ((ucs2str_ptr[scanIndex] >> 8) | (ucs2str_ptr[scanIndex] << 8));\
scanIndex ++;\
}}
#else
#define FixUCS2Endian(ucs2str_ptr)
#endif
#define traslateInt(integer) \
((kal_uint32)integer >> 24) | ((((kal_uint32)integer << 8) >> 24) << 8) | \
((((kal_uint32)integer << 16) >> 24) << 16) | ((kal_uint32)integer << 24)
#define getMIDSInt(myBuffer, offset) \
(((kal_uint32)myBuffer[offset] << 24) | ((kal_uint32)myBuffer[offset + 1] << 16) | \
((kal_uint32)myBuffer[offset + 2] << 8) | myBuffer[offset + 3])
void* LCDUIDrawScaled(void *dst, void *img,
jint dst_width, jint dst_height,
jint* x_src, jint* y_src,
jint* width, jint* height)
{
pImageGC src_ = (pImageGC)((img==NULL)?NULL:(((BYTEARRAY)img)->bdata));
int srcWidth = src_->width;
int srcHeight = src_->height;
if (dst_width == 0 || dst_height == 0 || *height == 0 || *width == 0)
{
return NULL;
} else
{
BYTEARRAY scaledB = (BYTEARRAY)instantiateArrayKNI(PrimitiveArrayClasses[T_BYTE],
(dst_width * dst_height * 2 + sizeof(ImageGC)));
pImageGC scaledSrc;
#ifdef GDI_USING_HW_RESIZER
BOOL hardwareDone = KAL_FALSE;
if (scaledB == NULL)
return NULL;
scaledSrc = (pImageGC)scaledB->bdata;
if (src_->prop == HAS_SOLID)
{
unsigned char *srcImage = ((unsigned char *)src_->u.data) + ((*x_src + *y_src * srcWidth) << 1);
unsigned char *dstImage = (unsigned char*)scaledSrc->u.data;
srcImage = (U8*)FBBR_invalid_l1_cache_img(srcImage, 0, 0, *width, *height, *width);
dstImage = (U8*)FBBR_invalid_l1_cache_img(dstImage, 0, 0, dst_width, dst_height, dst_width);
if (gdi_resizer((U8*)srcImage, *width, *height, srcWidth, dstImage,
dst_width, dst_height, 0, 0, dst_width - 1, dst_height -1) == GDI_IMAGE_SUCCEED)
{
hardwareDone = TRUE;
}
}
if (!hardwareDone) /* use software resizer */
#endif
{
int xIncr = (*width << 16) / dst_width;
int yIncr = (*height << 16) / dst_height;
int srcScanX = 0; /* rounding */
int srcScanY = 0; /* rounding */
unsigned char *srcImage = ((unsigned char *)src_->u.data) + ((*x_src + *y_src * srcWidth) << 1);
unsigned char *dstImage = NULL;
unsigned char *dstImageEnd = dstImage + ((dst_width * dst_height) << 1);
int tempSrcWidth = srcWidth << 1;
int tempDstWidth = dst_width << 1;
if (scaledB == NULL)
return NULL;
scaledSrc = (pImageGC)scaledB->bdata;
dstImage = (unsigned char*)scaledSrc->u.data;
do
{
unsigned char* srcScanImage = srcImage + ((srcScanY >> 16) * tempSrcWidth);
int scanLine = 0;
srcScanY += yIncr;
srcScanX = 0; /* rounding */
do
{
((unsigned short *)dstImage)[scanLine] = ((unsigned short*)srcScanImage)[(srcScanX >> 16)];
srcScanX += xIncr;
scanLine ++;
}while (scanLine < dst_width);
dstImage += tempDstWidth;
}while (dstImage < dstImageEnd);
}
scaledSrc->prop = src_->prop;
scaledSrc->width = dst_width;
scaledSrc->height = dst_height;
*x_src = 0;
*y_src = 0;
srcWidth = dst_width;
srcHeight = dst_height;
*width = dst_width;
*height = dst_height;
return scaledB;
}
}
/* for removal */
static int removeSuiteFromSUITEUTF(kal_char* storageName)
{
kal_char *myError = NULL;
kal_int32 handle;
kal_char *content;
kal_int32 scanPos = 0;
kal_uint32 CRCCode;
kal_int32 strLen = strlen(storageName);
int scanStrLen = 0;
int size;
#ifdef __SUPPORT_MIDLETSUITE_HASH_VALUE__
char* hash_content=NULL;
int hash_content_size = 0;
int record_index = 0;
#endif
handle = storageOpen(&myError, "suites.utf", O_RDWR|O_BINARY);
size = storageSizeOf(&myError, handle);
content = (kal_char*)midpMalloc(size);
storageRead(&myError, handle, content, size);
storageClose(&myError, handle);
#ifdef __SUPPORT_MIDLETSUITE_HASH_VALUE__
handle = storageOpen(&myError, SUITE_HASH_FILENAME, O_RDWR|O_BINARY);
hash_content_size = storageSizeOf(&myError, handle) - 4; //discard CRC
hash_content = (kal_char*)midpMalloc(hash_content_size);
if(hash_content==NULL)
{
return -1;
}
storageRead(&myError, handle, hash_content, hash_content_size);
storageClose(&myError, handle);
#endif
while (scanPos < size - 4)
{
scanStrLen = ((kal_uint8 *)content)[scanPos + 1];
scanStrLen += ((kal_uint8 *)content)[scanPos] << 8;
if (strLen == strlen(content + scanPos + 2) &&
strncmp(content + scanPos + 2, storageName, strLen) == 0)
break;
scanPos += scanStrLen + 2;
#ifdef __SUPPORT_MIDLETSUITE_HASH_VALUE__
record_index++;
#endif
}
if (scanPos >= size - 4) /* can not find out the suite in suite.utf */
return -1;
/* the old CRC code is not useful at all, omit copying it */
memcpy(content + scanPos, content + scanPos + scanStrLen + 2, size - scanPos - scanStrLen - 2 - 4);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -