#pragma once /* Stupid cpio-like tool to make read-only 'filesystems' that live on the flash SPI chip of the module. Can (will) use lzf compression (when I come around to it) to make shit quicker. Aligns names, files, headers on 4-byte boundaries so the SPI abstraction hardware in the ESP8266 doesn't crap on itself when trying to do a <4byte or unaligned read. */ /* The idea 'borrows' from cpio: it's basically a concatenation of {header, filename, file} data. Header, filename and file data is 32-bit aligned. The last file is indicated by data-less header with the FLAG_LASTFILE flag set. */ #include /// Last file in the filesystem image #define EFS_FLAG_LASTFILE (1<<0) /// Gzipped file. This does not affect espfs, it's a user-level flag; un-gzip is not implemented as part /// of the FS or CGI - gzipped files are sent directly to the browser with the appropriate header - /// saving bandwidth and getting us better compression ratios than heatshrink can achieve for larger files. #define EFS_FLAG_GZIP (1<<1) /// No filesystem level compression #define EFS_COMPRESS_NONE 0 /// The file is stored as compressed #define EFS_COMPRESS_HEATSHRINK 1 /// Magic number leading each file record #define EFS_MAGIC 0x73665345 /* ASCII sequence of bytes 'E' 'S' 'f' 's' interpreted as a little endian uint32_t */ /* 16 bytes long for alignment */ typedef struct { /// Magic number uint32_t magic; /// File flags uint8_t flags; /// Filesystem-level compression used uint8_t compression; /// Length of the file name uint16_t nameLen; /// Compressed file length (differs from the decompressed size if either gzip or heatshrink is used) uint32_t fileLenComp; /// Decompressed file length uint32_t fileLenDecomp; } __attribute__((packed)) EspFsHeader;