/* ************************************************************************** */ /* _____ _ */ /* libp7.h |_ _|__ _ _| |__ ___ _ _ */ /* | Project: libp7 | |/ _ \| | | | '_ \ / _ \ | | | */ /* | | (_) | |_| | | | | __/ |_| | */ /* By: thomas |_|\___/ \__,_|_| |_|\___|\__, |.fr */ /* Last updated: 2017/01/04 15:01:48 |___/ */ /* */ /* ************************************************************************** */ #ifndef LIBP7_H # define LIBP7_H # if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) \ && !defined(__WINDOWS__) # define __WINDOWS__ # endif # include # include # include /* integer types */ # define PRIuP7SHORT PRIuFAST16 # define PRIxP7SHORT PRIxFAST16 typedef uint_fast16_t p7ushort_t; # define PRIuP7INT PRIuFAST32 # define PRIxP7INT PRIxFAST32 typedef uint_fast32_t p7uint_t; # include # include /* PRI*FAST* */ # ifdef __WINDOWS__ # include # else # include # endif # ifdef __cplusplus extern "C" { # endif /* ************************************************************************** */ /* Types */ /* ************************************************************************** */ /* handles - from streams, include `libp7/stream.h` */ struct p7_handle_s; typedef struct p7_handle_s p7_handle_t; extern const size_t p7_handle_size; # define p7_alloca_handle() (alloca(p7_handle_size)) /* A version ("xx.xx.xx" + type) */ typedef struct { unsigned int major; unsigned int minor; unsigned int rev; } p7_version_t; /* CASIOWIN entry */ typedef struct { /* version */ p7_version_t version; /* syscall table address */ p7uint_t syscall_table_offset; } p7_casiowin_entry_t; /* ************************************************************************** */ /* libp7 errors */ /* ************************************************************************** */ /* Enumeration */ /* - Whenever you add/remove errors, think about updating core/strerror ! - */ typedef enum { p7_noerror, /* basic communication errors */ p7_error_uninitialized, p7_error_nocalc, p7_error_noaccess, p7_error_nochar, p7_error_com, p7_error_timeout, p7_error_checksum, /* not actually meant to be used */ p7_error_irrecoverable, /* stream */ p7_error_nostream, p7_error_noread, p7_error_nowrite, p7_error_noseek, /* user interface */ p7_error_active, p7_error_doubleshift, p7_error_empty, p7_error_filename, p7_error_dirname, p7_error_fullmem, p7_error_notfound, p7_error_denied_overwrite, p7_error_terminated, p7_error_interrupted, /* others */ p7_error_unsupported, p7_error_unsupported_device, p7_error_alloc, p7_error_unknown } p7_error_t; /* Message getting macro */ extern const char *p7_error_strings[]; # define p7_strerror(N) p7_error_strings[N] # define p7_geterror(N) p7_error_strings[N] /* ************************************************************************** */ /* Random stuff */ /* ************************************************************************** */ /* Filename and dirname */ int p7_validate_filename(const char *filename); int p7_validate_dirname(const char *dirname); /* ************************************************************************** */ /* Core functions */ /* ************************************************************************** */ /* Initialization and exit flags */ # define P7_ACTIVE 1 # define P7_CHECK 2 # define P7_TERM 4 /* "Normal" initialization */ int p7_init(p7_handle_t **handle, unsigned int flags); int p7_cominit(p7_handle_t **handle, unsigned int flags, int com); /* Testing initialization */ # ifndef P7_DISABLED_FILE int p7_finit(p7_handle_t **handle, unsigned int flags, FILE *readstream, FILE *writestream); # endif int p7_fdinit(p7_handle_t **handle, unsigned int flags, const char *name, int readfd, int writefd); /* De-initialization */ void p7_exit(p7_handle_t *handle); /* ************************************************************************** */ /* Protocol */ /* ************************************************************************** */ /* Send a file using buffer */ int p7_send(p7_handle_t *handle, const p7_buffer_t *buffer, const char *dirname, const char *filename, const char *devname, int overwrite, int (*ow_conf)(void), void (*disp)(p7ushort_t, p7ushort_t)); /* Receive a file using buffer */ int p7_request(p7_handle_t *handle, const p7_buffer_t *buffer, const char *dirname, const char *filename, const char *devname, void (*disp)(p7ushort_t, p7ushort_t)); /* FILE version of the two previous functions */ # ifndef P7_DISABLED_FILE int p7_sendfile(p7_handle_t *handle, FILE *file, const char *dirname, const char *filename, const char *devname, int overwrite, int (*ow_conf)(void), void (*disp)(p7ushort_t, p7ushort_t)); int p7_reqfile(p7_handle_t *handle, FILE *file, const char *dirname, const char *filename, const char *devname, void (*disp)(p7ushort_t, p7ushort_t)); # endif /* Create a directory */ int p7_createdir(p7_handle_t *handle, const char *dirname, const char *devname); /* Delete distant file */ int p7_delete(p7_handle_t *handle, const char *dirname, const char *filename, const char *devname); /* Copy file on distant device */ int p7_copy(p7_handle_t *handle, const char *dirname, const char *filename, const char *newdir, const char *newname, const char *devname); /* List files */ int p7_list(p7_handle_t *handle, const char *devname, void (*callback)(void*, const char*, const char*, p7uint_t), void *cookie); /* Get the free memory amount */ int p7_getfreemem(p7_handle_t *handle, const char *devname, p7uint_t *capacity); /* Reset filesystem on a distant device */ int p7_reset(p7_handle_t *handle, const char *devname); /* Optimize distant device */ int p7_optimize(p7_handle_t *handle, const char *devname); /* Send an update.exe */ int p7_sendexe(p7_handle_t *handle, const p7_buffer_t *buffer, p7uint_t loadaddr, p7uint_t straddr, void (*disp)(p7ushort_t, p7ushort_t)); /* Backup the flash ROM, bootcode and CASIOWIN entry */ int p7_backup_rom(p7_handle_t *handle, const p7_buffer_t *buffer, void (*disp)(p7ushort_t, p7ushort_t)); int p7_backup_boot(p7_handle_t *handle, const p7_buffer_t *buffer, void (*disp)(p7ushort_t, p7ushort_t)); int p7_backup_casiowin_entry(p7_handle_t *handle, p7_casiowin_entry_t *entry); /* FILE version of the previous functions */ # ifndef P7_DISABLED_FILE /* Send an update.exe */ int p7_sendexe_file(p7_handle_t *handle, FILE *exe, p7uint_t loadaddr, p7uint_t straddr, void (*disp)(p7ushort_t, p7ushort_t)); int p7_backup_romfile(p7_handle_t *handle, FILE *file, void (*disp)(p7ushort_t, p7ushort_t)); int p7_backup_bootfile(p7_handle_t *handle, FILE *file, void (*disp)(p7ushort_t, p7ushort_t)); # endif /* Display streamed screen */ int p7_getscreen(p7_handle_t *handle, int (*callback)(int, int, uint32_t**)); # ifdef __cplusplus } # endif # include #endif /* LIBP7_H */