📄 mmidc_storage.c
字号:
/*****************************************************************************
** File Name: mmidc_storage.c *
** Author: *
** Date: 2005-8 *
** Copyright: 2003 Spreadtrum, Incorporated. All Rights Reserved. *
** Description: This file is used to describe dc file storage *
*****************************************************************************
** Important Edit History *
** --------------------------------------------------------------------------*
** DATE NAME DESCRIPTION *
** 08/2005 Bruce.Chi Create *
*****************************************************************************/
#ifndef _MMIDC_STORAGE_C_
#define _MMIDC_STORAGE_C_
/**--------------------------------------------------------------------------*
** Include Files *
**--------------------------------------------------------------------------*/
#include "mmidc_internal.h"
#include "mmi_id.h"
#include "mmi_appmsg.h"
#include "mmi_common.h"
#include "mainapp.h"
#include "guilistbox.h"
#include "mmimultim.h"
#include "mmi_pubwin.h"
#include "block_mem.h"
#include "mmimms.h"
#include "ffs.h"
/**--------------------------------------------------------------------------*
** MACRO DEFINITION *
**--------------------------------------------------------------------------*/
#define MMIDC_ROOT_DIR "/" // 根目录
#define MMIDC_DEFAULT_DIR "DC" // DC存储的目录,在根目录下
#define ALERT_TIMEOUT 3000
/**--------------------------------------------------------------------------*
** STATIC DEFINITION *
**--------------------------------------------------------------------------*/
MMIDC_PHOTO_INFO_T s_mmidc_photo_info;//照片的详情
//static uint32 s_jpg_buf[MMIDC_MAX_PHOTO_SIZE / sizeof(uint32)];
static BOOLEAN s_is_jpgbuf_used = FALSE;
/*---------------------------------------------------------------------------*/
/* TYPE AND CONSTANT */
/*---------------------------------------------------------------------------*/
typedef struct
{
FILE_DEV_E_T e_file_dev;
HFS hfs; //前面打开的FILE HANDLER
MMI_WIN_ID_T win_id; //要接收操作完毕消息的窗口
uint8 *buf_ptr; //要保存的buffer指针
uint32 buf_size; //要保存或者读取的大小
MMIDC_PHOTO_DETAIL_T photo_detail; //转存的photo detail
uint32 photo_index; //要删除的文件名
}MMIDC_FFS_SAVE_PARAM_T; //异步操作文件系统时,要保存的参数。
/**--------------------------------------------------------------------------*
** EXTERNAL DECLARE *
**--------------------------------------------------------------------------*/
/**--------------------------------------------------------------------------*
** GLOBAL DEFINITION *
**--------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/* LOCAL FUNCTION DECLARE */
/*---------------------------------------------------------------------------*/
/*****************************************************************************/
// Description : get wchar length
// Global resource dependence :
// Author: Bruce.Chi
// Note:
///*****************************************************************************/
LOCAL uint32 DCGetWcharlength(
uint16* pwchar
);
/*****************************************************************************/
// Description : adapter for FILE SYSTEM
// Global resource dependence :
// Author: Bruce.Chi
// Note: it's FFS now
///*****************************************************************************/
LOCAL FFS_ERROR_E FILE_CdDCPath(FILE_DEV_E_T e_file_dev);
/*****************************************************************************/
// Description : call back of DCSaveFS_AsyAdd
// Global resource dependence :
// Author: bruce.chi
// Note: standard interface
/*****************************************************************************/
LOCAL void DCSaveFS_AsyAddCallBack(
FFS_ERROR_E error,
FFS_RESULT result,
FFS_PARAM param
);
/*****************************************************************************/
// Description : call back of DCSaveFS_AsyDelete
// Global resource dependence :
// Author: bruce.chi
// Note: standard interface
/*****************************************************************************/
LOCAL void DCSaveFS_AsyDeleteCallBack(
FFS_ERROR_E error,
FFS_RESULT result,
FFS_PARAM param
);
/*****************************************************************************/
// Description : sort function by file time
// Global resource dependence :
// Author: lin.lin
// Note:
/*****************************************************************************/
LOCAL int SortByTime(const void *arg1, const void *arg2);
/*****************************************************************************/
// Description : init the photo detail according the find photo file
// Global resource dependence :
// Author: Great.Tian
// Note:
/*****************************************************************************/
LOCAL BOOLEAN InitPhotoDetail(
MMIDC_PHOTO_DETAIL_T* detail_ptr,
FILE_DEV_E_T e_file_dev,
FFS_FIND_DATA_T* fd
);
/*****************************************************************************/
// Description : add item to listbox
// Global resource dependence :
// Author:bruce.chi
// Note: make sure it is ucs2
/*****************************************************************************/
LOCAL BOOLEAN DC_AddItemToListbox(
MMI_CTRL_ID_T list_ctrl_id,
uint8 *str,
uint8 str_len,
FILE_DEV_E_T device
);
/*****************************************************************************/
// Description : is this photo set as wall paper
// Global resource dependence :
// Author: bruce.chi
// Note:
/*****************************************************************************/
PUBLIC BOOLEAN IsDCWallpaper(
uint16 *name,
uint16 name_len,
FILE_DEV_E_T device
);
/*****************************************************************************/
// Description : call back of DCSaveFS_AsyRead
// Global resource dependence :
// Author: bruce.chi
// Note: standard interface
/*****************************************************************************/
LOCAL void DCSaveFS_AsyReadCallBack(
FFS_ERROR_E ffs_error,
FFS_RESULT result,
FFS_PARAM param
);
/*****************************************************************************/
// Description : 复制文件等待窗口
// Global resource dependence :
// Author:ycd
// Note:
/*****************************************************************************/
LOCAL MMI_RESULT_E HandleDCCopyFileWaitWinMsg(
MMI_WIN_ID_T win_id,
MMI_MESSAGE_ID_E msg_id,
DPARAM param
);
/*****************************************************************************/
// Description : handle dc copy alert window message
// Global resource dependence :
// Author:ycd
// Note:
/*****************************************************************************/
LOCAL MMI_RESULT_E HandleDCCopyAlertWinMsg(
MMI_WIN_ID_T win_id,
MMI_MESSAGE_ID_E msg_id,
DPARAM param
);
/*****************************************************************************/
// Description : delete one ffs file in asynchronize way
// Global resource dependence :
// Author: bruce.chi
// Note:
/*****************************************************************************/
LOCAL MMIDC_FFS_DEL_RESULT_E DCSaveFS_AsyDelete(MMI_WIN_ID_T win_id,
uint32 photo_index,
FILE_DEV_E_T file_dev,
uint16 *del_name_ptr,
uint16 del_name_len
)
{
uint16 file_name[(MMIDC_MAX_PHOTO_NAME_LEN + MMIDC_DEFAULT_SUBFIX_LEN * 2 + 4) / 2] = {0};
uint16 name_len = 0;
HFS cur_hfs = 0;
MMIDC_FFS_SAVE_PARAM_T *param_save_ptr = PNULL;
FFS_OVERLAPPED_T overlapped = {0};
MMIDC_FFS_DEL_RESULT_E del_result = 0;
FFS_ERROR_E ffs_error = 0;
// enter dc path
if (FFS_NO_ERROR == FILE_CdDCPath(file_dev))
{
// add subfix
SCI_MEMSET(file_name, 0x00, sizeof(file_name));
SCI_MEMCPY(file_name, del_name_ptr, del_name_len);
name_len = MMISTR_AddSubfix((uint8 *)file_name, del_name_len, TRUE, (uint8 *)MMIDC_DEFAULT_SUBFIX, MMIDC_DEFAULT_SUBFIX_LEN);
DC_ASSERT_LOW(name_len <= MMIDC_MAX_PHOTO_NAME_LEN + MMIDC_DEFAULT_SUBFIX_LEN * 2);
// check
if (FFS_CheckExist(file_dev, (wchar *)file_name))
{
param_save_ptr = SCI_ALLOC(sizeof(MMIDC_FFS_SAVE_PARAM_T));
param_save_ptr->hfs = cur_hfs;
param_save_ptr->win_id = win_id;
param_save_ptr->buf_ptr = PNULL;
param_save_ptr->buf_size = 0;
SCI_MEMSET(¶m_save_ptr->photo_detail, 0, sizeof(param_save_ptr->photo_detail));
param_save_ptr->photo_index = photo_index;
overlapped.offset = 0;
overlapped.complete_route = DCSaveFS_AsyDeleteCallBack;
overlapped.param = (FFS_PARAM)param_save_ptr; //free it in call back function
ffs_error = FFS_AYS_Delete(
file_dev,
(wchar *)file_name,
&overlapped);
if (FFS_ERROR_NONE == ffs_error)
{
SCI_TRACE_LOW("mmidc_storage.c: DCSaveFS_AsyDelete() del success");
del_result = DCFFS_DEL_SUCCEED;
}
else if (FFS_ERROR_IO_PENDING == ffs_error)
{
SCI_TRACE_LOW("mmidc_storage.c: DCSaveFS_AsyDelete() del start");
del_result = DCFFS_DEL_PANDING;
}
else
{
SCI_TRACE_LOW("mmidc_storage.c: DCSaveFS_AsyDelete() del file failed");
del_result = DCFFS_DEL_FAIL;
}
}
else
{
uint32 i;
SCI_TRACE_LOW("mmidc_storage.c: DCSaveFS_AsyDelete() the file is not exist!");
for (i = 0; i<name_len;i++)
{
SCI_TRACE_LOW("file_name[%d]=0x%04x", i, file_name[i]);
}
del_result = DCFFS_DEL_FAIL;
}
}
else
{
SCI_TRACE_LOW("mmidc_storage.c: DCSaveFS_AsyDelete() can't enter the DC dir!");
del_result = DCFFS_DEL_FAIL;
}
return (del_result);
}
/*****************************************************************************/
// Description : call back of DCSaveFS_AsyDelete
// Global resource dependence :
// Author: bruce.chi
// Note: standard interface
/*****************************************************************************/
LOCAL void DCSaveFS_AsyDeleteCallBack(
FFS_ERROR_E ffs_error,
FFS_RESULT result,
FFS_PARAM param
)
{
MMIDC_FFS_SAVE_PARAM_T *ffs_param_in_ptr = PNULL;
MMIDC_FFS_ASY_DEL_RESULT_T st_del_result = {0};
SCI_TRACE_LOW("mmidc_storage:DCSaveFS_AsyReadCallBack, efs_error=%d, result=%d, param=%d", ffs_error, result, param);
//init
SCI_MEMSET(&st_del_result, 0, sizeof(st_del_result));
//get in param
SCI_ASSERT(param != 0);
ffs_param_in_ptr = (MMIDC_FFS_SAVE_PARAM_T *)param;
//judge del status
if(FFS_ERROR_NONE == ffs_error)
{
st_del_result.e_del_result = DCFFS_DEL_SUCCEED;
}
else
{
st_del_result.e_del_result = DCFFS_DEL_FAIL;
}
//post message
st_del_result.hfs = ffs_param_in_ptr->hfs;
st_del_result.photo_index = ffs_param_in_ptr->photo_index;
MMK_PostMsg(
VIRTUAL_WIN_ID,
MSG_DC_FILE_DEL_DONE,
&st_del_result,
sizeof(st_del_result)
); //note: MMK_PostMsg will save one copy of this message, and it will free it
//free in param
SCI_FREE(ffs_param_in_ptr);
}
/*****************************************************************************/
// Description : delete one photo
// Global resource dependence :
// Author: bruce.chi
// Note:
/*****************************************************************************/
PUBLIC MMIDC_FFS_DEL_RESULT_E DCSaveInfo_AsyDelete(MMI_WIN_ID_T win_id, uint32 photo_index)
{
MMIDC_FFS_DEL_RESULT_E del_result = 0;
SCI_ASSERT(photo_index < s_mmidc_photo_info.total_num);
//begin to read
del_result = DCSaveFS_AsyDelete(
win_id,
photo_index,
s_mmidc_photo_info.photo_detail[photo_index].location,
s_mmidc_photo_info.photo_detail[photo_index].name_ptr,
s_mmidc_photo_info.photo_detail[photo_index].name_len
);
return del_result;
}
/*****************************************************************************/
// Description : delete one photo step 2
// Global resource dependence :
// Author: bruce.chi
// Note:
/*****************************************************************************/
PUBLIC MMIDC_FFS_WRITE_RESULT_E DCSaveInfo_AsyDeleteStep2(MMIDC_FFS_ASY_DEL_RESULT_T *del_result_ptr)
{
uint32 index = 0;
uint32 memory = 0;
uint16 file_name[(MMIDC_MAX_PHOTO_NAME_LEN + MMIDC_DEFAULT_SUBFIX_LEN * 2 + 4) / 2] = {0};
uint16 name_len = 0;
DC_ASSERT_LOW(del_result_ptr != PNULL);
DC_ASSERT_LOW(del_result_ptr->photo_index < s_mmidc_photo_info.total_num);
//if del succeed
if (del_result_ptr->e_del_result == DCFFS_DEL_SUCCEED)
{
index = del_result_ptr->photo_index;
memory = s_mmidc_photo_info.photo_detail[index].memory_size;
// judge whether delete wallpaper
SCI_MEMSET(file_name, 0x00, sizeof(file_name));
SCI_MEMCPY(file_name,
s_mmidc_photo_info.photo_detail[index].name_ptr,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -