Example #1
0
/*****************************************************************************
 * FUNCTION
 *  csb_frm_check_if_card_present
 * DESCRIPTION
 *
 * PARAMETERS
 *  
 * RETURNS
 *  void
 *****************************************************************************/
pBOOL csb_frm_check_if_card_present(void)
{
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	U32 drive;
	S32 status;
	pBOOL error_code = FALSE;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	
	drive = FS_GetDrive(FS_DRIVE_V_REMOVABLE, 1, FS_NO_ALT_DRIVE);
    status = FS_GetDevStatus(drive, FS_MOUNT_STATE_ENUM);

	if(status >= 0)
	{
		error_code = TRUE;
		DisplayPopup((PU8) GetString(STR_GLOBAL_OK), IMG_GLOBAL_ERROR, 5, CSB_NOTIFY_DURATION, 0);
	}
	else
	{
		error_code = FALSE;
		DisplayPopup((PU8) GetString(STR_ID_CSB_NO_MEMORY_CARD), IMG_GLOBAL_ERROR, 5, CSB_NOTIFY_DURATION, 0);
	}

	return error_code;
}
/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_set_record_location
 * DESCRIPTION
 *  The function sets record location
 * PARAMETERS
 *  mma_type          [IN]
 *  java_recorder       [IN]
 *  path          [?]
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_mvm_audio_recorder_set_record_location(kal_int32 vm_id, kal_int32 java_recorder, kal_char *path)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 file_handle;
    kal_int32 result, length;
    kal_wchar *ext_name;
    kal_char *file_name;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_MVM_AUDIO_RECORDER_SET_RECORD_LOCATION, vm_id, java_recorder, audio_recorder[vm_id].state);
    JMA_CS_ENTER(vm_id, KAL_FALSE);

    if (audio_recorder[vm_id].id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder[vm_id].id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    mmi_ucs2ncpy((PS8) audio_recorder[vm_id].filename, (PS8) path, J2ME_PATH_BUFFER_SIZE);

    length = mmi_ucs2strlen((S8*) audio_recorder[vm_id].filename);
    if (length < 4)
    {
        JMA_CS_LEAVE(KAL_FALSE);
    }

    /* Drive name can not equal to SYSTEM DRIVE */
    if ((int)audio_recorder[vm_id].filename[0] == SRV_FMGR_SYSTEM_DRV)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    /* assign format */
    ext_name = &audio_recorder[vm_id].filename[length - 4];
    if (kal_wstrcmp(ext_name, L".amr") == 0 || kal_wstrcmp(ext_name, L".AMR") == 0)
    {
        audio_recorder[vm_id].format = MED_TYPE_AMR;
    }
    else if (kal_wstrcmp(ext_name, L".wav") == 0 || kal_wstrcmp(ext_name, L".WAV") == 0)
    {
        audio_recorder[vm_id].format = MED_TYPE_WAV;
    }
#if defined (AMRWB_ENCODE)
    else if (kal_wstrcmp(ext_name, L".awb") == 0 || kal_wstrcmp(ext_name, L".AWB") == 0)
    {
        audio_recorder[vm_id].format = MED_TYPE_AMR_WB;
    }
#endif
#if defined (__VORBIS_ENCODE__)
    else if (kal_wstrcmp(ext_name, L".ogg") == 0 || kal_wstrcmp(ext_name, L".OGG") == 0)
    {
        audio_recorder[vm_id].format = MED_TYPE_VORBIS;
    }
#endif
    else
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, audio_recorder[vm_id].format);
    /* Check if valid file path and delete the file */
    result = FS_GetDevStatus(audio_recorder[vm_id].filename[0], FS_MOUNT_STATE_ENUM);
    if (result == FS_NO_ERROR)
    {
        /* Check if valid file name */
        file_name = kal_dchar_strrchr((S8*) audio_recorder[vm_id].filename, '\\');

        if (file_name)
        {
            file_name += 2;
            if (!srv_fmgr_path_is_filename_valid((const WCHAR*)file_name))
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
                JMA_CS_LEAVE(KAL_FALSE);
            }
            /* File name can not start with space: FS API restriction */
            if (*file_name == ' ' && *(file_name + 1) == 0)
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
                JMA_CS_LEAVE(KAL_FALSE);
            }
        }
        else /* Do not contain '\\' */
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
            JMA_CS_LEAVE(KAL_FALSE);
        }

        /* Check if dir exist or if valid dir */
        *((kal_int16*)file_name) = 0;
        file_handle = FS_Open(audio_recorder[vm_id].filename, FS_OPEN_DIR | FS_READ_ONLY);
        if (file_handle > 0)
        {
            FS_Close(file_handle);
        }
        else
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
            JMA_CS_LEAVE(KAL_FALSE);
        }

        /* Copy again to repair audio_recorder.filename */
        mmi_ucs2ncpy((PS8) audio_recorder[vm_id].filename, (PS8) path, J2ME_PATH_BUFFER_SIZE);

        /* Check if file exist */
        file_handle = FS_Open(audio_recorder[vm_id].filename, FS_READ_ONLY);
        if (file_handle > 0)
        {
            result = FS_Close(file_handle); /* need to close file before delete */
            result = FS_Delete(audio_recorder[vm_id].filename);
            if (result != FS_NO_ERROR)
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
                JMA_CS_LEAVE(KAL_FALSE);
            }
        }

        JMA_CS_LEAVE(KAL_TRUE);
    }
    else
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
        JMA_CS_LEAVE(KAL_FALSE);
    }

}
Example #3
0
void INT_GetMemDevInfo(MEM_DEV_INFO_T* Info)
{
#if defined(__MTK_TARGET__) && !defined(__SMART_PHONE_MODEM__) && !defined(__RAMDISK__)	
   WCHAR driveName;
#endif   

   memset(Info, 0, sizeof(MEM_DEV_INFO_T));

#if defined(__MTK_TARGET__) && !defined(__SMART_PHONE_MODEM__) && !defined(__RAMDISK__)

   if (FS_GetDevStatus(FS_DEVICE_TYPE_NOR, FS_MOUNT_STATE_ENUM) == FS_NO_ERROR)
      Info->NORPresent = KAL_TRUE;
   else
   	  Info->NORPresent = KAL_FALSE;

   if (FS_GetDevStatus(FS_DEVICE_TYPE_NAND, FS_MOUNT_STATE_ENUM) == FS_NO_ERROR)
      Info->NANDPresent = KAL_TRUE;
   else
   	  Info->NANDPresent = KAL_FALSE;

   EMI_QueryCurSetting(&(Info->EMIInfo));

   if (Info->NANDPresent == KAL_TRUE)
   {
      driveName = GetFirstDriveNamebyDeviceType(FS_DEVICE_TYPE_NAND);

      if (driveName != 0xFFFF)
      {
         FS_IOCtrl(&driveName, FS_IOCTRL_QUERY_NAND_INFO, &(Info->NANDDevInfo));
      }

      #if defined(__EMMC_BOOTING__)
      Info->NANDConfInfo.FSBaseAddress    = EMMC_BOOTING_CODE_PARTITION_SIZE;
      Info->NANDConfInfo.FSTotalSize      = 0;
      Info->NANDConfInfo.FSFirstDriveSize = 0;
      #elif defined(_NAND_FLASH_BOOTING_) || defined(__FS_SYSDRV_ON_NAND__) || (defined(__FOTA_DM__) && defined(__UP_PKG_ON_NAND__) && defined(NAND_SUPPORT))
      Info->NANDConfInfo.FSBaseAddress    = NAND_FLASH_BASE_ADDRESS;
      Info->NANDConfInfo.FSTotalSize      = NAND_ALLOCATED_FAT_SPACE;
      Info->NANDConfInfo.FSFirstDriveSize = NAND_PARTITION_SECTORS;
      #elif defined(NAND_SUPPORT)  // NOR booting without (__FOTA_DM__ && __UP_PKG_ON_NAND__) but NAND_SUPPORT is enabled, the whole NAND flash is treated as a public drive.
      Info->NANDConfInfo.FSBaseAddress    = 0;
      Info->NANDConfInfo.FSTotalSize      = Info->NANDDevInfo.DeviceInfo.NAND.DeviceSize * 1024 * 1024; // translate to MB
      Info->NANDConfInfo.FSFirstDriveSize = 0;
      #endif /* _NAND_FLASH_BOOTING_ || __EMMC_BOOTING__ || __FS_SYSDRV_ON_NAND__ && (__FOTA_DM__ && __UP_PKG_ON_NAND__ && NAND_SUPPORT) */

      #if defined(__NAND_FDM_50__)
      Info->NANDFDMVer = 5;
      #else
      Info->NANDFDMVer = 4;
      #endif /* __NOR_FDM5__ */

   }

   if (Info->NORPresent == KAL_TRUE)
   {
      driveName = GetFirstDriveNamebyDeviceType(FS_DEVICE_TYPE_NOR);

      if (driveName != 0xFFFF)
      {
         FS_IOCtrl(&driveName, FS_IOCTRL_QUERY_NOR_INFO, &(Info->NORDevInfo));
      }

      #if !defined(_NAND_FLASH_BOOTING_) && !defined(__EMMC_BOOTING__) && !defined(__FS_SYSDRV_ON_NAND__)
      Info->NORConfInfo.FSBaseAddress     = NOR_FLASH_BASE_ADDRESS;
      Info->NORConfInfo.FSTotalSize       = NOR_ALLOCATED_FAT_SPACE;
      Info->NORConfInfo.FSFirstDriveSize  = NOR_PARTITION_SECTORS;
      #endif /* !_NAND_FLASH_BOOTING_ && !__EMMC_BOOTING__ && !__FS_SYSDRV_ON_NAND__ */

      #if defined(__NOR_FDM5__)
      Info->NORFDMVer = 5;
      #else
      Info->NORFDMVer = 4;
      #endif /* __NOR_FDM5__ */

   }

#endif /* __MTK_TARGET__ && !__SMART_PHONE_MODEM__ */

}
Example #4
0
/*
void mmi_gamesimu_exit_from_fmgr(void *filename, int is_short)
{
    
    //DeleteUptoScrID(SCREENID_GAMESIMU_LIST);
    DeleteNHistory(1);
    GoBackHistory();
}
*/
void EntryRomList(void)
{
#if 0
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S8 buf_filepath[FMGR_PATH_BUFFER_SIZE];
    FS_HANDLE file_handle;
    FMGR_FILTER filter;
    S32 create_result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
   memset(buf_filepath,0x00,FMGR_PATH_BUFFER_SIZE);
   pfnUnicodeStrcpy((S8 *)buf_filepath,(const S8 *)u8_g_game_dir);

    #ifndef NAND_SUPPORT
    if(fmgr_is_msdc_present() == FALSE)
    {
          DisplayPopup((PU8)GetString(STR_GLOBAL_NOTIFY_NO_MEMORY_CARD), IMG_GLOBAL_EMPTY,0, 1000, EMPTY_LIST_TONE);
          return;
    }
    #endif

    EntryNewScreen(SCREENID_GAMESIMU_LIST, NULL, EntryRomList, NULL);

    create_result = mmi_gamesimu_create_file_dir(buf_filepath);

    /* check if it is valid path */
    file_handle = FS_Open((PU16) buf_filepath, FS_OPEN_DIR | FS_READ_ONLY);

    if (file_handle >= 0)
    {
        FS_Close(file_handle);

        FMGR_FILTER_INIT(&filter);
	
	FMGR_FILTER_SET(&filter,FMGR_TYPE_NES);

        mmi_fmgr_select_path_and_enter(
            APP_GAME_SIMU,
            FMGR_SELECT_BROWSE,
            filter,
            buf_filepath,
            (PsExtFuncPtr) mmi_gamesimu_exit_from_fmgr);

        /* check if device is busy or not */
        if (FS_GetDevStatus(buf_filepath[0], FS_FEATURE_STATE_ENUM) == FS_DEVICE_BUSY)
        {
            /*  mmi_fmgr_select_path_and_enter will also add screen to histry */
            DeleteUptoScrID(SCREENID_GAMESIMU_LIST);

            /* Delete up to previous screen */
            DeleteNHistory(1);
        }
    }
    else
    {
        {
            /* storage is card */

            /* photo's path is not exist, and card is write protected, cant create photo folder */
            if (create_result == FS_WRITE_PROTECTION)
            {
                DisplayPopup(
                    (PU8) GetString(FMGR_FS_WRITE_PROTECTION_TEXT),
                    IMG_GLOBAL_WARNING,
                    1,
                    ST_NOTIFYDURATION,
                    WARNING_TONE);
            }
            else if (create_result == FS_DISK_FULL)
            {
                DisplayPopup(
                    (PU8) GetString(FMGR_FS_DISK_FULL_TEXT),
                    IMG_GLOBAL_WARNING,
                    1,
                    ST_NOTIFYDURATION,
                    WARNING_TONE);
            }
            else if (create_result == FS_ROOT_DIR_FULL)
            {
                DisplayPopup(
                    (PU8) GetString(FMGR_FS_ROOT_DIR_FULL_TEXT),
                    IMG_GLOBAL_WARNING,
                    1,
                    ST_NOTIFYDURATION,
                    WARNING_TONE);
            }
            else
            {
                DisplayPopup(
                    (PU8) GetString(STR_GLOBAL_NOTIFY_NO_MEMORY_CARD),
                    IMG_GLOBAL_WARNING,
                    1,
                    ST_NOTIFYDURATION,
                    WARNING_TONE);
            }

            DeleteUptoScrID(SCREENID_GAMESIMU);
            return;

        }
    }
#endif
}
/*****************************************************************************
 * FUNCTION
 *  jpush_alarm_del_file
 * DESCRIPTION
 *  Delete one entry from the alarm registry only in file.
 *  If file can not be opened or the entry can not be found, return -1.
 * PARAMETERS
 *  del_alarm       [?]   
 * RETURNS
 *  
 *****************************************************************************/
kal_int32 jpush_alarm_del_file(alarmentry_struct *del_alarm)
{

    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    alarmentry_struct *alarmp;
    int pushfd;
	kal_char tmp_buf[8] = {0};

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, JPUSH_ALARM_DEL_FILE);     
#if defined(J2ME_SLIM_MEMORY_SUPPORT)
    if (FS_GetDevStatus(SRV_FMGR_CARD_DRV, FS_MOUNT_STATE_ENUM) != FS_NO_ERROR)
    {
        return;
    }
#endif
    jpush_timer_mutex_lock();   
    if ((pushfd = jvm_file_open(_alarm_path, O_CREAT | O_TRUNC | FS_COMMITTED)) != -1)
    {
        /* Write a new list of push registrations to the persistent file */
        for (alarmp = g_jpush_alarmlist_ptr; alarmp; alarmp = alarmp->next)
        {
            /* for fix the issue the two or more push timeout in a short time */
            /* original : if (del_alarm != alarmp)*/
            if (alarmp->event_id)
            {
                /* for fix the issue : the performace is low due to committed FS_write()*/            
                if(alarmp->executed)
                {
                    jvm_file_write(pushfd, "1", 1);
                }
                else
                {
                    jvm_file_write(pushfd, "0", 1);
                }
  
                jvm_file_write(pushfd, ",", 1);
				jvm_file_write(pushfd, alarmp->midlet, strlen(alarmp->midlet));
				jvm_file_write(pushfd, ",", 1);
			    tmp_buf[0] = (alarmp->wakeup & 0xff00000000000000) >> 56;
				tmp_buf[1] = (alarmp->wakeup & 0x00ff000000000000) >> 48;
				tmp_buf[2] = (alarmp->wakeup & 0x0000ff0000000000) >> 40;
				tmp_buf[3] = (alarmp->wakeup & 0x000000ff00000000) >> 32;
				tmp_buf[4] = (alarmp->wakeup & 0x00000000ff000000) >> 24;
        		tmp_buf[5] = (alarmp->wakeup & 0x0000000000ff0000) >> 16;
        		tmp_buf[6] = (alarmp->wakeup & 0x000000000000ff00) >> 8;
        		tmp_buf[7] = alarmp->wakeup & 0x00000000000000ff;
        		jvm_file_write(pushfd, tmp_buf, 8);
        		jvm_file_write(pushfd, ",", 1);
				jvm_file_write(pushfd, alarmp->storagename, strlen(alarmp->storagename));
				jvm_file_write(pushfd, ",", 1);
				tmp_buf[0] = (alarmp->midletid& 0xff000000) >> 24;
        		tmp_buf[1] = (alarmp->midletid & 0x00ff0000) >> 16;
        		tmp_buf[2] = (alarmp->midletid & 0x0000ff00) >> 8;
        		tmp_buf[3] = alarmp->midletid & 0x000000ff;
				jvm_file_write(pushfd, tmp_buf, 4);
				jvm_file_write(pushfd, ",", 1);
            	tmp_buf[0] = alarmp->alarm_game_type & 0xff;
            	jvm_file_write(pushfd, tmp_buf, 1);
				jvm_file_write(pushfd, "\n", 1);
            }
        }
        jvm_file_close(pushfd);
        jpush_timer_mutex_unlock();
        return (0);
    }

    jpush_timer_mutex_unlock();
    return (-1);
}
/*****************************************************************************
 * FUNCTION
 *  jpush_alarm_open
 * DESCRIPTION
 *  Open the Alram Registry file, if it exists and populate
 *  an in memory cache of the file contents.
 * PARAMETERS
 *  alarm_path      [?]    
 * RETURNS
 *  void
 *****************************************************************************/
kal_int32 jpush_alarm_open(char *alarm_path)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 pushfd;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_FUNC, JPUSH_ALARM_OPEN);
#if defined(J2ME_SLIM_MEMORY_SUPPORT)
    if (FS_GetDevStatus(SRV_FMGR_CARD_DRV, FS_MOUNT_STATE_ENUM) != FS_NO_ERROR)
    {
        return;
    }
#endif

    memcpy(_alarm_path, alarm_path, strlen(alarm_path) + 1);

#if !PERSISTENT_ALARMPUSH
    /* Force to clean all timealarm after re-boot */
    if ((pushfd = jvm_file_open((const char*)alarm_path, O_CREAT | O_TRUNC)) == -1)
    {
        return (-1);
    }
    else
    {
        jvm_file_close(pushfd);
        return (0);
    }
#else /* !PERSISTENT_ALARMPUSH */ 
    /* Now read the registered connections. */
    kal_trace(TRACE_FUNC, JPUSH_ALARM_OPEN_PERSISTENT);

    if ((pushfd = jvm_file_open((const char*)alarm_path, O_RDONLY)) != -1)
    {
        kal_int32 ret;

        /* Read through the file one line at a time */
        if ((ret = jpush_alarm_parse(pushfd)) == -2)
        {
            return (-1);
        }

        /* Close the storage handle */
        jvm_file_close(pushfd);

        if (ret == -1)
        {
            return (-1);
        }

        return (-1);
    }
    else if ((pushfd = jvm_file_open((const char*)alarm_path, O_CREAT | O_RDWR)) == -1)
    {
        jvm_file_close(pushfd);    	
        return (-1);
    }
    jvm_file_close(pushfd);    
    return (0);
#endif /* !PERSISTENT_ALARMPUSH */ /* !PERSISTENT_PUSH */
}
/*****************************************************************************
 * FUNCTION
 *  jpush_alarm_add
 * DESCRIPTION
 *  Add one entry to the alarm registry.
 *  If the entry already exists return previous alarm time.
 *  On succesful registration, write a new copy of the file to disk.
 * PARAMETERS
 *  str             [?]     
 *  alarm           [IN]        
 *  lastalarm       [?]      
 * RETURNS
 *  
 *****************************************************************************/
int jpush_alarm_add(char *str, kal_int64 alarm, kal_int64 *lastalarm)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    alarmentry_struct *alarmp;
    alarmentry_struct *lastp = g_jpush_alarmlist_ptr;
    alarmentry_struct *pe = NULL;
    kal_char *storage_name;
    kal_char *midlet_name;
    kal_int32 alarm_num = 0;
    kal_uint32 alarm_period;
    kal_int32 i;
    kal_int32 storage_len, midlet_len;
    kal_int32 midletid;
    kal_char tmp_buf[16];
    kal_char *tmp_str;
    kal_int32 tmp_len = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
#ifdef __SUPPORT_JAVA_PUSH__
    kal_trace(TRACE_FUNC, JPUSH_ALARM_ADD);
#if defined(J2ME_SLIM_MEMORY_SUPPORT)
    if (FS_GetDevStatus(SRV_FMGR_CARD_DRV, FS_MOUNT_STATE_ENUM) != FS_NO_ERROR)
    {
        return;
    }
#endif
    jpush_timer_mutex_lock(); 
    *lastalarm = 0;

    storage_name = jpush_push_getstoragename(str, 2, &storage_len);
    midlet_name = jpush_push_getstoragename(str, 0, &midlet_len);
    tmp_str = jpush_push_getstoragename(str, 3, &tmp_len);
    memcpy(tmp_buf, tmp_str, tmp_len);
    tmp_buf[tmp_len] = 0;
    sscanf(tmp_buf, "%d", &midletid);

	
    /* Check if the entry already exists? */
    for (alarmp = g_jpush_alarmlist_ptr; alarmp; alarmp = alarmp->next)
    {
        alarm_num++;

        if (strncmp(midlet_name, alarmp->midlet, midlet_len) == 0 &&
            strncmp(storage_name, alarmp->storagename, storage_len) == 0 &&
            midletid == alarmp->midletid &&
            alarmp->midlet[midlet_len] == 0 && alarmp->storagename[storage_len] == 0)
        {
            kal_int64 temp = alarmp->wakeup;
            *lastalarm = alarmp->wakeup; // 20110321: Fix MIDP OTA TCK: PushRegistry WakeUp

            kal_trace(TRACE_FUNC, JPUSH_ALARM_ADD_REGISTERED);
            
           
            /* Cancel timer, Fix to check if valid event */
            if (alarmp->event_id)
            {
             
                jpush_alarm_cancel(&alarmp->event_id);
                              
            }
            for (i = 0; i < MAX_PUSH_REGISTRY; i++)
            {
                /* remove the push indication memorized by MMI */
                if (g_mmi_java_push_cntx.push_entry_used[i])
                {
                    if (strcmp(alarmp->storagename, g_mmi_java_push_cntx.push_entry[i].mids_storage_name) == 0 &&
						alarmp->midletid == g_mmi_java_push_cntx.push_entry[i].mid_id &&
                        strcmp(alarmp->midlet, g_mmi_java_push_cntx.push_entry[i].mid_class_name) == 0)
                    {
                        jpush_search_and_delete_persistent_push(
                            0,
                            g_mmi_java_push_cntx.push_entry[i].pushalarm_type,
                            g_mmi_java_push_cntx.push_entry[i].mid_class_name,
                            g_mmi_java_push_cntx.push_entry[i].mid_id,
                            g_mmi_java_push_cntx.push_entry[i].mids_storage_name,
                            NULL,
                            NULL,
                            NULL,
                            NULL,
                            KAL_TRUE);
                        g_mmi_java_push_cntx.push_entry_used[i] = KAL_FALSE;
                        g_mmi_java_push_cntx.push_entry[i].mids_storage_name = NULL;
                    }
                }
            }
            alarmp->event_id = NULL;

            if (alarm == 0)
            {
                /* Remove an entry. */
                if (alarmp == g_jpush_alarmlist_ptr)
                {
                    g_jpush_alarmlist_ptr = alarmp->next;
                }
                else
                {
                    lastp->next = alarmp->next;
                }

                alarmp->next = NULL;
                free_ctrl_buffer(alarmp->midlet);
                alarmp->midlet = NULL;
                free_ctrl_buffer(alarmp->storagename);
                alarmp->storagename = NULL;
                free_ctrl_buffer(alarmp);

                jpush_alarm_save();

            }
            else
            {
                /* Replace an entry. */
                alarmp->wakeup = alarm;
                alarmp->executed = 0;

                if (alarm >= CurrentTime_md())
                {

                    alarm_period = j2me_ms_2_tick(alarm - CurrentTime_md());
                                       
                    alarmp->event_id = jpush_alarm_set(alarmp, alarm_period);

                    jpush_alarm_save();
                }
                else
                {
                    j2me_alarm_timeout_handler(alarmp);
                }
            }

            ///*lastalarm = temp; // 20110321: Reomved for MIDP OTA TCK: PushRegistry WakeUp
            jpush_timer_mutex_unlock(); 
            return 0;
        }

        lastp = alarmp;
    }
    g_timealarm_count = alarm_num;
    kal_trace(TRACE_FUNC, JPUSH_ALARM_ADD_NEW,(g_timealarm_count));

    /* Add a new entry. */
    if (alarm &&
        alarm_num + g_push_length < MAX_PUSH_REGISTRY &&
        ((pe = (alarmentry_struct*) get_ctrl_buffer(sizeof(alarmentry_struct))) != NULL))
    {
        pe->next = g_jpush_alarmlist_ptr;
        pe->wakeup = alarm;
        pe->executed = 0;

        pe->midlet = jvm_str_dup(midlet_name, midlet_len);

        pe->storagename = jvm_str_dup(storage_name, storage_len);

        pe->midletid = midletid;

        pe->alarm_game_type = 0;

        if ((pe->midlet == NULL) || (pe->midletid <= 0) || (pe->storagename == NULL))
        {
            free_ctrl_buffer(pe->midlet);
            pe->midlet = NULL;
            free_ctrl_buffer(pe->storagename);
            pe->storagename = NULL;
            free_ctrl_buffer(pe);
            pe = NULL;
        }
        else
        {
            g_jpush_alarmlist_ptr = pe;

            /* Set timer */
            if(alarm > CurrentTime_md())
            {
                alarm_period = j2me_ms_2_tick(alarm - CurrentTime_md());
                pe->event_id = jpush_alarm_set(pe, alarm_period);
          
            }
            else
            {
                j2me_alarm_timeout_handler(pe);
            }
        }
    }

    if (pe == NULL)
    {
        jpush_timer_mutex_unlock(); 
        return (-2);
    }
    
    jpush_timer_mutex_unlock(); 
    jpush_alarm_save();  
#endif
    return (0);
}