fileio.h
来自「AMLOGIC DPF source code」· C头文件 代码 · 共 216 行
H
216 行
/*******************************************************************
*
* Copyright C 2005 by Amlogic, Inc. All Rights Reserved.
*
* Description:
*
* Author: Amlogic Software
* Created: Fri Nov 11 00:24:17 2005
*
*******************************************************************/
#ifndef _FILEIO_H_
#define _FILEIO_H_
#include "buffer.h"
#include <stdlib.h>
#include <stdio.h>
#include "includes.h"
#include <chain.h>
#include <status.h>
#include <fs.h>
#define AV_MAX_FILES 8
#define FILE_IO_TASK_STACK_SIZE 512
#define AV_SEEK_CUR SEEK_CUR
#define AV_SEEK_SET SEEK_SET
#define AV_SEEK_END SEEK_END
#define F_FLUSH 1
#define F_ABORT 2
#define FIO_INITED 1
#define FIO_SHUTDOWN 2
#define AV_FILE \
av_file_t
#define AV_SIZE_T \
size_t
#define AV_FILEOFFSET_T \
long
#define AV_FOPEN(name, mode, bd) \
av_fopen(name, mode, bd)
#define AV_FCLOSE(fp) \
av_fclose(fp)
#define AV_FREAD(a, bsize, n, fp, cb) \
av_fread(a, bsize, n, fp, cb)
#define AV_FGETC(fp) \
av_fgetc(fp)
#define AV_FEOF(fp) \
av_feof(fp)
#define AV_FERROR(fp) \
av_ferror(fp)
#define AV_FSEEK(fp, offset, origin) \
av_fseek(fp, offset, origin)
#define AV_FTELL(fp) \
av_ftell(fp)
typedef struct transfer_request_s{
Chain_Node link;
unsigned char transfer_src_type;
unsigned char transfer_dst_type;
unsigned char endian;
unsigned char option;
unsigned transfer_size;
unsigned src_start_addr;
unsigned dst_start_addr;
char *src_buffer;
char *dst_buffer;
void (*transfer_done_callback)(void *arg, avfs_status_code status, int error);
void (*request_done_callback)(void *arg, avfs_status_code status, int error);
void *request_done_arg;
} transfer_request_t;
// for src type
#define READ_FROM_DEVICE 1
#define READ_FROM_SDRAM 0
#define READ_TO_VIDEO_BUFFER 0x3
#define READ_TO_AUDIO_BUFFER 0x2
#define READ_TO_USERDATA_BUFFER 0x1
#define READ_TO_SDRAM 0x0
// for dst type and fread param: void* buffer
#define TARGET_MASK 0xc0000000
#define TO_VIDEO_BUFFER (0x3<<30)
#define TO_AUDIO_BUFFER (0x2<<30)
#define TO_USERDATA_BUFFER (0x1<<30)
#define TO_SDRAM (0x0<<30)
#define target_type(addr) ((((addr)&TARGET_MASK)>>30)&3)
#define ENDIAN_MASK 0x30000000
#define NO_ENDIAN_CHANGE (ENDIAN_ABCD_ABCD<<28)
#define ABCD_TO_BADC (ENDIAN_ABCD_BADC<<28)
#define ABCD_TO_CDAB (ENDIAN_ABCD_CDAB<<28)
#define ABCD_TO_DCBA (ENDIAN_ABCD_DCBA<<28)
#define endian_type(addr) ((((addr)&ENDIAN_MASK)>>28)&3)
#define OPTION_MASK 0x0c000000
#define DRM_ENABLE 0x2
#define CSS_ENABLE 0x1
#define NO_OPTION 0x0
#define option_of(addr) ((((addr)&OPTION_MASK)>>26)&3)
#define ADDR_MASK 0x03ffffff
#define address_of(addr) ((addr)&ADDR_MASK)
#define BUF_CTL_REFILL_EN 0x01
typedef struct av_file_s{
int fd;
long offset; // current read offset
long total_bytes; // total bytes of file
unsigned32 dev_blk_size;
unsigned32 dev_feature;
av_buffer_t buf;
int buf_control;
int (*init)(struct av_file_s *);
int (*refill)(struct av_file_s *);
int (*read)(struct av_file_s *, void *, size_t);
int (*seek)(struct av_file_s *, unsigned);
int (*shutdown)(struct av_file_s *);
int (*stat)(struct av_file_s *, buffer_status_t *);
int (*flush)(struct av_file_s *, unsigned char mode);
unsigned short file_io_task_id;
unsigned short state;
OS_STK *file_io_task_stack;
void (*transfer_done_call_back)(void *arg, avfs_status_code status, int error);
OS_EVENT *request_event;
OS_EVENT *transfer_done_event;
OS_EVENT *target_done_event;
OS_EVENT *device_done_event;
Chain_Control *transfer_request_chain;
int status;
int target_fd[4];
} av_file_t;
typedef void (*av_file_transfer_done_cb_t)(void *arg, avfs_status_code status, int error);
typedef struct buffer_operation_s
{
int (*init)(struct av_file_s *);
int (*refill)(struct av_file_s *);
int (*read)(struct av_file_s *, void *, size_t);
int (*seek)(struct av_file_s *, unsigned);
int (*shutdown)(struct av_file_s *);
int (*stat)(struct av_file_s *, buffer_status_t *);
int (*flush)(struct av_file_s *, unsigned char mode);
} buffer_operation_t;
typedef struct{
void* chain;
int size;
char type;
}file_datachain_req_t;
#define CHAIN_TYPE_NULL 0
#define CHAIN_TYPE_PBUF 1
AV_FILE* av_fopen(const char *name, const char *mode, buffer_descriptor_t *bd);
int av_fclose( AV_FILE *stream );
int av_fgetc( AV_FILE *stream );
int av_feof( AV_FILE *stream );
int av_ferror(AV_FILE* fp);
int av_fseek( AV_FILE *stream, long offset, int origin );
size_t av_fread( void *buffer, size_t size, size_t count, AV_FILE *stream, av_file_transfer_done_cb_t cb);
size_t av_fwrite( const void *buffer, size_t size, size_t count, AV_FILE *stream );
long av_ftell( AV_FILE *stream );
int av_ferror( AV_FILE *stream );
/* mode "ABORT" -- cancel last unfinished read operation and force data into target
mode "FLUSH" -- wait read operation done and force pending data into target */
int av_fflush( AV_FILE *stream, const char *mode );
/** Read a 32-bit value from an file. */
int read_val32(unsigned32 *val32, AV_FILE *f);
/** Read a 16-bit value from an file. */
int read_val16(unsigned16 *val16, AV_FILE *f);
/** Read an 8-bit value from an file. */
int read_val8(unsigned8 *val8, AV_FILE *f);
#ifndef RC_OK
#define RC_OK 0x00000000
#endif
#define FILE_IOCTL_DEV_READ 1
#define FILE_IOCTL_DEV_FEATURE 2
#define FILE_IOCTL_DEV_WRITE 3
#define FILE_IOCTL_EXTEND_FILE 4
#define FILE_IOCTL_GET_RESOURCE 0xf1
#define FILE_IOCTL_GET_LABEL 0xf2
#define FILE_IOCTL_CHECK_FREESPC 0xf3
#define FILE_IOCTL_GET_COUNT 0xf4
#define FILE_IOCTL_REGISTER_INTERRUPT_CB 0xf5
#define FILE_IOCTL_SET_OPT 0xf6
#define FILE_IOCTL_SYNC 0xf7
#define FILE_IOCTL_GET_DATACHAIN 0xf8
#define FILE_IOCTL_SET_READ_UNIT 0xf9
#define FILE_IOCTL_SET_TIMEOUT 0xfa
#define FILE_IOCTL_GET_DEV_INFO 0xfb
extern avfs_filesystem_operations_table iso9660_ops;
#endif //_FILEIO_H_
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?