⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmidc_storage.c

📁 手机Camera部分上层软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************
** 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(&param_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 + -