dcf.h
来自「AMLOGIC DPF source code」· C头文件 代码 · 共 201 行
H
201 行
/*******************************************************************
*
* Copyright C 2006 by Amlogic, Inc. All Rights Reserved.
*
* Description: DCF filesystem implement V1.1 Head file
* In this version add supporting Kodak Album
*
* Author: V1.0 Andrew Liang
* V1.1 Wan Yong
* Created: 2006-11-21 @ Amlogic
*
*******************************************************************/
#ifndef __DCF_H__
#define __DCF_H__
/*
* Definitions describing DCF file system structure, as well as
* the functions necessary to access fields of DCF file system
* structures.
*/
#include <drivers/usb/image/ptp.h>
typedef struct dcf_dev_info_s
{
dev_t dev;
// PTPDeviceInfo dev_info;
}dcf_dev_info_t;
/* Belows for Kodak Extension */
/* object's handle map */
typedef struct dcf_kodak_handle_map_s
{
uint32_t map; /* one bit one label enable */
}dcf_kodak_handle_map_t;
typedef struct dcf_kodak_extension_s
{
uint32_t max_labels; /* Max Labels from GetLabelCategoryBookInfo Command */
uint32_t max_label_len;/* Max label string len from GetLabelCategoryBookInfo Command */
uint32_t lcb_file_handle;/* LCB file object handle */
uint32_t no_lcb_file; /* If search lcb file failed */
uint32_t label_length; /* Max label lenth */
uint32_t nlabels;
char ** labelarray; /* Label String Array */
struct dcf_kodak_handle_map_s * lidmaps; /* Label map index of handle offset */
}dcf_kodak_extension_t;
#define KODAK_LABLE_LENGTH_LIMT 31 /* string length limited () */
#define KODAK_LCB_OFFSET_NLABELS 0x1F
#define KODAK_LCB_OFFSET_STR_START 0x30
#define KODAK_LCB_ITEM_LEN 272
#define KODAK_LID_OFFSET_LABLE_START 0x10
#define KODAK_LID_ITEM_LEN 256
typedef struct dcf_kodak_lcb_item_s
{
uint16_t seqno;
uint8_t reserve[14];
uint8_t label[256];
}dcf_kodak_lcb_item_t;
/* End Kodak Extension */
#define DCF_CACHE_INIT_SIZE 32
typedef struct dcf_cache_s
{
unsigned char * buffer;
u32_t buf_size; //Size in byte
uint32_t handle; //Object handle
u32_t start_pos; //Byte offset
u32_t act_size; //Acture size in byte
}dcf_cache_t;
typedef struct dcf_filenam_cache_s
{
int cached_num;
char **name_array; /* filename array*/
unsigned char *name_map;
}dcf_filename_cache_t;
/*
* This structure identifies the instance of the filesystem on the
* ("dcf-file") level.
*/
#define MAX_DCF_LABEL_LEN 30
typedef struct dcf_fs_info_s
{
dcf_dev_info_t vol;
Chain_Control *chain; /* "list" of dcf-file descriptors */
avfs_filesystem_file_handlers_r *directory_handlers; /*
* a set of routines
* that handles the
* nodes of directory
* type
*/
avfs_filesystem_file_handlers_r *file_handlers; /*
* a set of routines
* that handles the
* nodes of file
* type
*/
avfs_id vol_sema; /*
* semaphore
* associated with
* the volume
*/
dcf_cache_t cache; /*
* This cache is designed for
* small read application
*/
char label[MAX_DCF_LABEL_LEN];
unsigned32 current_obj; //object in operating Andrew
dcf_kodak_extension_t *kodak; /* Data set for kodak extension */
dcf_filename_cache_t dcf_name_cache;
}dcf_fs_info_t;
typedef avfs_filesystem_node_types_t dcf_file_type_t;
#define DCF_DIRECTORY AVFS_FILESYSTEM_DIRECTORY
#define DCF_FILE AVFS_FILESYSTEM_MEMORY_FILE
#define SPECIAL_OBJ_HANDLE_MASK 0xFF000000
#define SPECIAL_OBJ_HANDLE_ALL 0x11000000
#define IS_SPECIAL_OBJ(h) (SPECIAL_OBJ_HANDLE_MASK & h)
#define KODAK_LCB_FILENAME "LABELCTB.LCB"
/*
* descriptor of a dcf-file
*
*/
typedef struct dcf_file_fd_s
{
Chain_Node link;
unsigned16 links_num;
unsigned16 path_table_index; // current dir index for dir and parent dir index for file
unsigned16 is_special;
dcf_file_type_t type;
unsigned16 dir_file_index; // index in parent dir
unsigned16 dir_file_num; // for dir only
unsigned32 obj_handle;
unsigned32 num_objects;
PTPObjectInfo *obj_info; //current object's info
PTPObjectHandles *obj_handles; //obj handles in current dir
struct dcf_file_fd_s *parent_fd;
} dcf_file_fd_t;
#ifndef RC_OK
#define RC_OK 0x00000000
#endif
#define DCF_NAME_NOT_FOUND_ERR 0xDD000001
#define DCF_VOLUME_SEMAPHORE_TIMEOUT AVFS_NO_TIMEOUT
#ifndef set_errno_and_return_minus_one
#define set_errno_and_return_minus_one avfs_set_errno_and_return_minus_one
#endif /* set_errno_and_return_minus_one */
extern avfs_filesystem_operations_table dcf_ops;
extern avfs_filesystem_file_handlers_r dcf_dir_handlers;
extern avfs_filesystem_file_handlers_r dcf_file_handlers;
#define DCF_MAX_FILE_INCREASE 64
#define DCF_NAME_MAX 256
#define DCF_DOT_NAME ". " /* ".", padded to DCF_NAME chars */
#define DCF_DOTDOT_NAME ".. " /* "..", padded to DCF_NAME chars */
typedef enum dcf_token_types_s
{
DCF_NO_MORE_PATH,
DCF_CURRENT_DIR,
DCF_UP_DIR,
DCF_NAME,
DCF_INVALID_TOKEN
} dcf_token_types_t;
extern avfs_filesystem_operations_table dcf_ops ;
#define dcf_is_separator(_ch) avfs_filesystem_is_separator(_ch)
#endif //__DCF_H__
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?