Skip to content

Commit

Permalink
ESP32: fill binary filename, count MD5 only for esp8266
Browse files Browse the repository at this point in the history
  • Loading branch information
uzi18 committed Apr 14, 2020
1 parent 9df2837 commit d2f276c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 28 deletions.
2 changes: 1 addition & 1 deletion before_deploy
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ do
if [ -f $FIRMWARE_FACTORY_BIN ]; then
FBIN=${BINARY_PATH}/${ENV}/ESP_Easy_${VERSION}_${ENV}_factory.bin
cp ${FIRMWARE_FACTORY_BIN} $FBIN
#python2 crc2.py $FBIN
python2 crc2.py $FBIN
mv $FBIN "${FBINDIR}/ESP_Easy_${VERSION}_${ENV}_factory.bin"
fi
else
Expand Down
62 changes: 35 additions & 27 deletions crc2.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,18 @@ def showParts(fileContent, offset):
#FileName = "C:/ArduinoPortable/sketchbooks/build/sketch_jan15a.ino.bin"
print( "\n\nReplacing dummy MD5 checksum in .bin file")



with open(FileName, mode='rb') as file: # b is important -> binary
nextpos =0;
fileContent = file.read()
while nextpos >=0:

firmware_esp8266 = fileContent.find("Mega32") < 0
if firmware_esp8266:
print("ESP8266 build")
else:
print("ESP32 build")

if firmware_esp8266:
nextpos =0;
while nextpos >=0:
nextpos = showParts(fileContent,nextpos)

startArray,endArray,hashString = "","",""
Expand All @@ -70,47 +76,49 @@ def showParts(fileContent, offset):
# 3: RAM (initialized by bin file. Can be read but changes as you go :-( )
# 4: RAM

for i in (1,2 ): # use only stable segments, must be 4 in total. We use 2.
if firmware_esp8266:
for i in (1,2 ): # use only stable segments, must be 4 in total. We use 2.
startArray =startArray + MemorySegmentStart[i]
endArray = endArray + MemorySegmentEnd[i]
hashString =hashString + MemoryContent[i]
with open(FileName+str(i), mode='wb') as file: # b is important -> binary
file.write(MemoryContent[i])
includeStr = includeStr +" "+ str(i)
print (includeStr)
# IMPORTANT: pad array with zeros if you use only 3 segments (see above)
while len(startArray) < 16 :
startArray =startArray + struct.pack("I",0)
endArray = endArray + struct.pack("I",0)
# debug print (binascii.hexlify(startArray))
# debug print (binascii.hexlify(endArray))
if (len(endArray) + len (startArray)) != 32 :
print (includeStr)

# IMPORTANT: pad array with zeros if you use only 3 segments (see above)
while len(startArray) < 16 :
startArray =startArray + struct.pack("I",0)
endArray = endArray + struct.pack("I",0)
# debug print (binascii.hexlify(startArray))
# debug print (binascii.hexlify(endArray))
if (len(endArray) + len (startArray)) != 32 :
print("ERROR: please make sure you add / remove padding if you change the semgents.")

BinaryFileName = "";
if fileContent.find( FILENAMEDUMMY) < 0:
print("ERROR: FILENAMEDUMMY dummy not found in binary")
else:
BinaryFileName=os.path.basename(FileName) +"\0"
if len(BinaryFileName) >64: # check that filename is <48 chars
BinaryFileName=BinaryFileName[0:64] # truncate if necessary. 49th char in ESP is zero already
else:
BinaryFileName= BinaryFileName.ljust(64,'\0'); # pad with zeros.

BinaryFileName=os.path.basename(FileName) +"\0"
if len(BinaryFileName) >64: # check that filename is <48 chars
BinaryFileName=BinaryFileName[0:64] # truncate if necessary. 49th char in ESP is zero already
else:
BinaryFileName= BinaryFileName.ljust(64,'\0'); # pad with zeros.

fileContent=fileContent.replace(FILENAMEDUMMY,BinaryFileName)

if fileContent.find( MD5DUMMY) < 0:
if firmware_esp8266:
if fileContent.find( MD5DUMMY) < 0:
print("ERROR: MD5 dummy not found in binary")
else:
else:
hashString=hashString.replace (MD5DUMMY,"",1)
m = md5.new()
m.update (hashString) #use segment 1
md5hash = m.digest()
print("MD5 hash: "+ m.hexdigest())
print("\nwriting output file:\n" + FileName)

fileContent=fileContent.replace(MD5DUMMY,md5hash+startArray+endArray)
fileContent=fileContent.replace(FILENAMEDUMMY,BinaryFileName)

with open(FileName, mode='wb') as file: # b is important -> binary
file.write(fileContent)
print("\nwriting output file:\n" + FileName)
with open(FileName, mode='wb') as file: # b is important -> binary
file.write(fileContent)

#k=input("press close to exit")

0 comments on commit d2f276c

Please sign in to comment.