https://bitbucket.org/hudson/magic-lantern
Revision 0f532cd88c89bcaee634781698da4bfa53da9d26 authored by a1ex on 28 February 2016, 00:19:38 UTC, committed by a1ex on 28 February 2016, 00:19:38 UTC
1 parent 698b001
Raw File
Tip revision: 0f532cd88c89bcaee634781698da4bfa53da9d26 authored by a1ex on 28 February 2016, 00:19:38 UTC
Close branch printf
Tip revision: 0f532cd
fio-ml.h
#ifndef fio_5d3_h
#define fio_5d3_h

#define CARD_A 0
#define CARD_B 1
#define CARD_C 2

struct card_info {
    char * drive_letter;
    char * type;
    int cluster_size;
    int free_space_raw;
    int file_number;
    int folder_number;
};

struct card_info * get_ml_card();
struct card_info * get_shooting_card();

struct card_info * get_card(int cardId);

int get_free_space_32k (const struct card_info * card);

/* returns true if the specified file or directory exists */
int is_file(const char* path);
int is_dir(const char* path);

/* returns a numbered file name that does not already exist.
 * example:
 * char filename[100];
 * int num;
 * num = get_numbered_file_name("IMG_%04d.BMP", 9999, filename, sizeof(filename));
 * => num = 1234, filename = IMG_1234.BMP
 * 
 * Notes:
 * - numbering starts at 0
 * - zero-byte files are overwritten
 * - if you already have files 0, 1 and 3, it will return 2
 * - if all the files numbered from 0 to nmax are used, the function will return -1 and the filename string will be numbered with 0.
 */
int get_numbered_file_name(const char* pattern, int nmax, char* filename, int maxlen);

typedef struct _file * FILE;

/** \name File I/O flags.
 *
 * \note I don't know how many of these are supported
 * @{
 */
#define O_RDONLY             00
#define O_WRONLY             01
#define O_RDWR               02
#define O_CREAT            0100 /* not fcntl */
#define O_EXCL             0200 /* not fcntl */
#define O_NOCTTY           0400 /* not fcntl */
#define O_TRUNC           01000 /* not fcntl */
#define O_APPEND          02000
#define O_NONBLOCK        04000
#define O_NDELAY        O_NONBLOCK
#define O_SYNC           010000
#define O_FSYNC          O_SYNC
#define O_ASYNC          020000
/* @} */

/* whence value for FIO_SeekSkipFile */
#define 	SEEK_SET   0
#define 	SEEK_CUR   1
#define 	SEEK_END   2

/**
 * File mode attributes, for FindFirst/FindNext
 */
#define     ATTR_NORMAL     0x00          /* normal file */ 
#define     ATTR_READONLY   0x01          /* file is readonly */ 
#define     ATTR_HIDDEN     0x02          /* file is hidden */ 
#define     ATTR_SYSTEM     0x04          /* file is a system file */ 
#define     ATTR_VOLUME     0x08          /* entry is a volume label */ 
#define     ATTR_DIRECTORY  0x10          /* entry is a directory name */ 
#define     ATTR_ARCHIVE    0x20          /* file is new or modified */ 

#define FIO_MAX_PATH_LENGTH 0x80

/** We don't know anything about this one. */
struct fio_dirent;

/** Directory entry returned by FIO_FindFirstEx() */
struct fio_file {
        //! 0x10 == directory, 0x22 
        uint32_t                mode;           // off_0x00;
        uint32_t                size;
        uint32_t                timestamp;      // off_0x08;
        uint32_t                off_0x0c;
        char                    name[ FIO_MAX_PATH_LENGTH ];
        uint32_t                a;
        uint32_t                b;
        uint32_t                c;
        uint32_t                d;
};

// file IO
extern FILE* FIO_OpenFile( const char* filename, unsigned mode );
extern int FIO_ReadFile( FILE* stream, void* ptr, size_t count );
extern int FIO_WriteFile( FILE* stream, const void* ptr, size_t count );
extern void FIO_CloseFile( FILE* stream );

/* Returns 0 for success */
extern int FIO_GetFileSize( const char * filename, uint32_t * size );

extern struct fio_dirent * FIO_FindFirstEx( const char * dirname, struct fio_file * file );
extern int FIO_FindNextEx( struct fio_dirent * dirent, struct fio_file * file );
extern void FIO_FindClose( struct fio_dirent * dirent );
extern int FIO_RenameFile(char *src,char *dst);
extern int FIO_RemoveFile(const char * filename);
extern int FIO_GetFileSize(const char * filename, uint32_t * size);
extern uint32_t FIO_GetFileSize_direct(const char * filename);   /* todo: use just this one */

/* returns absolute position after seeking */
/* note: seeking past the end of a file does not work on all cameras */
extern int64_t FIO_SeekSkipFile( FILE* stream, int64_t position, int whence );

/* ML wrappers */
extern FILE* FIO_CreateFile( const char* name );
extern FILE* FIO_CreateFileOrAppend( const char* name );
extern int FIO_CopyFile(char *src,char *dst);
extern int FIO_MoveFile(char *src,char *dst);   /* copy and erase */

extern int FIO_CreateDirectory(const char * dirname);

/* for ML startup */
void _find_ml_card();
void _card_tweaks();

/* dump anything from RAM to a file */
void dump_seg(void* start, uint32_t size, char* filename);

/* dump 0x10000000 bytes (256MB) from 0x10000000 * k */
void dump_big_seg(int k, char* filename);

size_t read_file( const char * filename, void * buf, size_t size);

uint8_t* read_entire_file(const char * filename, int* buf_size);

#endif
back to top