48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
|
import os
|
||
|
import shutil
|
||
|
from platformio import util
|
||
|
|
||
|
Import("env")
|
||
|
|
||
|
def create_full_bin(source, target, env):
|
||
|
# Get paths
|
||
|
firmware_path = str(target[0])
|
||
|
build_dir = os.path.dirname(firmware_path)
|
||
|
project_dir = env.get("PROJECT_DIR")
|
||
|
|
||
|
# Create full binary
|
||
|
firmware_name = os.path.basename(firmware_path)
|
||
|
spiffs_bin = os.path.join(build_dir, "spiffs.bin")
|
||
|
full_bin = os.path.join(build_dir, "full.bin")
|
||
|
|
||
|
print("Creating full.bin...")
|
||
|
|
||
|
# Check if files exist
|
||
|
if not os.path.exists(firmware_path):
|
||
|
print("Error: Firmware binary not found!")
|
||
|
return
|
||
|
if not os.path.exists(spiffs_bin):
|
||
|
print("Error: SPIFFS binary not found!")
|
||
|
return
|
||
|
|
||
|
# Calculate padding size
|
||
|
firmware_size = os.path.getsize(firmware_path)
|
||
|
padding_size = 0x3D0000 - firmware_size # SPIFFS start address - firmware size
|
||
|
|
||
|
# Create full binary
|
||
|
with open(full_bin, 'wb') as outfile:
|
||
|
# Copy firmware
|
||
|
with open(firmware_path, 'rb') as f:
|
||
|
outfile.write(f.read())
|
||
|
|
||
|
# Add padding
|
||
|
outfile.write(b'\xFF' * padding_size)
|
||
|
|
||
|
# Copy SPIFFS
|
||
|
with open(spiffs_bin, 'rb') as f:
|
||
|
outfile.write(f.read())
|
||
|
|
||
|
print(f"Created full.bin ({os.path.getsize(full_bin)} bytes)")
|
||
|
|
||
|
# Register the callback
|
||
|
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", create_full_bin)
|