|
|
|
# pio-genespfs is a platformio extra script that uses mkespfs to generate a filesystem image
|
|
|
|
# that it then converts into a C file so all the data can be included into the flash image.
|
|
|
|
|
|
|
|
Import("env")
|
|
|
|
#Import("projenv")
|
|
|
|
|
|
|
|
from mkespfs import mkespfs
|
|
|
|
from io import BytesIO
|
|
|
|
from pathlib import Path
|
|
|
|
import shutil
|
|
|
|
|
|
|
|
dir = "html"
|
|
|
|
hdr = "head-"
|
|
|
|
temp = "temp-espfs"
|
|
|
|
espfile = "src/espfs_img.c"
|
|
|
|
|
|
|
|
# create empty temporary dir to create fs image
|
|
|
|
shutil.rmtree(temp, ignore_errors=True)
|
|
|
|
Path(temp).mkdir()
|
|
|
|
|
|
|
|
# place all the files we want into a temp directory and prefix all .html with hdr
|
|
|
|
f_html = list(Path(dir).rglob('*.html'))
|
|
|
|
f_css = list(Path(dir).rglob('*.css'))
|
|
|
|
f_js = list(Path(dir).rglob('*.js'))
|
|
|
|
f_img = list(Path(dir).rglob('*.ico')) + list(Path(dir).rglob('*.png'))
|
|
|
|
# simply copy most files
|
|
|
|
for fn in f_css+f_js+f_img:
|
|
|
|
dst = Path(temp).joinpath(fn.relative_to(dir))
|
|
|
|
dst.parent.mkdir(exist_ok=True)
|
|
|
|
shutil.copyfile(fn, dst)
|
|
|
|
# prepend shared header to html files
|
|
|
|
for fn in f_html:
|
|
|
|
with open(Path(temp).joinpath(fn.relative_to(dir)), 'wb') as dst:
|
|
|
|
with open(Path(dir).joinpath(hdr), 'rb') as src:
|
|
|
|
shutil.copyfileobj(src, dst)
|
|
|
|
with open(fn, 'rb') as src:
|
|
|
|
shutil.copyfileobj(src, dst)
|
|
|
|
|
|
|
|
# generate espfs image
|
|
|
|
buf = BytesIO()
|
|
|
|
espfsimg = mkespfs(temp, buf)
|
|
|
|
|
|
|
|
# remove temp tree
|
|
|
|
#shutil.rmtree(temp, ignore_errors=True)
|
|
|
|
|
|
|
|
# write as C file
|
|
|
|
fd = Path(espfile).open(mode='w')
|
|
|
|
fd.write("unsigned char espfs_image[] ");
|
|
|
|
fd.write("__attribute__((aligned(4))) ");
|
|
|
|
fd.write("__attribute__((section(\".irom.text\"))) = {");
|
|
|
|
for i, b in enumerate(buf.getbuffer()):
|
|
|
|
if i%16 == 0: fd.write("\n")
|
|
|
|
fd.write(" 0x{:02x},".format(b))
|
|
|
|
fd.write("\n};\n");
|
|
|
|
fd.close()
|