176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef BACKEND_H 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BACKEND_H 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stddef.h> 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <inttypes.h> 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdbool.h> 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <zlib.h> 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "serial.h" 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "tftp.h" 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Backend flags */ 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BE_NEEDLEN 0x01 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct upload_backend { 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *name; 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *helpmsg; 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int minargs; 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman size_t dbytes; 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman size_t zbytes; 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char **argv; 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint32_t now; 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman int (*write)(struct upload_backend *); 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman z_stream zstream; 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *outbuf; 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman size_t alloc; 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* zout.c */ 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint init_data(struct upload_backend *be, const char *argv[]); 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint write_data(struct upload_backend *be, const void *buf, size_t len); 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint flush_data(struct upload_backend *be); 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* cpio.c */ 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define cpio_init init_data 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint cpio_hdr(struct upload_backend *be, uint32_t mode, size_t datalen, 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *filename); 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint cpio_mkdir(struct upload_backend *be, const char *filename); 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint cpio_writefile(struct upload_backend *be, const char *filename, 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const void *data, size_t len); 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint cpio_close(struct upload_backend *be); 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MODE_FILE 0100644 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MODE_DIR 0040755 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* backends.c */ 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct upload_backend *get_upload_backend(const char *name); 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* backends */ 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern struct upload_backend upload_tftp; 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern struct upload_backend upload_ymodem; 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern struct upload_backend upload_srec; 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* BACKEND_H */ 57