New ML support - postbuild.sh - initial version
This commit is contained in:
parent
2cf20c8c99
commit
1f7324ea9a
|
|
@ -0,0 +1,99 @@
|
|||
#!/bin/sh
|
||||
# postbuild.sh
|
||||
#
|
||||
# Output folder and elf file:
|
||||
OUTDIR="../../output"
|
||||
OUTELF="$OUTDIR/Firmware.ino.elf"
|
||||
#
|
||||
# AVR gcc tools used:
|
||||
OBJCOPY=C:/arduino-1.6.8/hardware/tools/avr/bin/avr-objcopy.exe
|
||||
|
||||
function finish
|
||||
{
|
||||
echo
|
||||
echo "postbuild.sh finished... press enter key"
|
||||
read
|
||||
exit
|
||||
}
|
||||
|
||||
echo "postbuild.sh started..."
|
||||
|
||||
#check input files
|
||||
echo " checking files:"
|
||||
if [ ! -e $OUTDIR ]; then echo " folder '$OUTDIR' not found!"; finish; fi
|
||||
echo " folder OK"
|
||||
if [ ! -e $OUTELF ]; then echo " elf file '$OUTELF' not found!"; finish; fi
|
||||
echo " elf OK"
|
||||
if ! ls $OUTDIR/sketch/*.o >/dev/null 2>&1; then echo " no object files in '$OUTDIR/sketch/'!"; finish; fi
|
||||
echo " objects OK"
|
||||
|
||||
#run progmem.sh to examine content of progmem1
|
||||
./progmem.sh 1
|
||||
|
||||
#create sorted list of strings from progmem1.var and lang_en.txt
|
||||
#lines from progmem1.var will contain addres (8 chars) and english text
|
||||
#lines from lang_en.txt will contain linenumber and english text
|
||||
#after sort this will generate pairs of lines (line from progmem1 first)
|
||||
#result of sort is compiled with simple script and stored to file textaddr.txt
|
||||
echo "compiling progmem1.var and lang_en.txt"
|
||||
addr=''
|
||||
text=''
|
||||
(cat progmem1.var | sed -E "s/^([^ ]*) ([^ ]*) (.*)/\1 \"\3\"/";\
|
||||
cat lang_en.txt | sed "/^$/d;/^#/d" | sed = | sed '{N;s/\n/ /}') |\
|
||||
sort -k2 |\
|
||||
sed "s/\\\/\\\\\\\/g" | while read num txt; do
|
||||
if [ ${#num} -eq 8 ]; then
|
||||
if [ -z "$addr" ]; then
|
||||
addr=$num
|
||||
else
|
||||
if [ "$text" == "$txt" ]; then
|
||||
addr="$addr $num"
|
||||
else
|
||||
echo "ADDR NF $addr $text"
|
||||
addr=$num
|
||||
fi
|
||||
fi
|
||||
text=$txt
|
||||
else
|
||||
if [ -z "$addr" ]; then
|
||||
echo "TEXT NF $num $txt"
|
||||
else
|
||||
if [ "$text" == "$txt" ]; then
|
||||
if [ ${#addr} -eq 8 ]; then
|
||||
echo "ADDR OK $addr $num"
|
||||
else
|
||||
echo "$addr" | sed "s/ /\n/g" | while read ad; do
|
||||
echo "ADDR OK $ad $num"
|
||||
done
|
||||
fi
|
||||
addr=''
|
||||
text=''
|
||||
else
|
||||
echo "TEXT NF $num $txt"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done > textaddr.txt
|
||||
|
||||
#check for messages declared in progmem1, but not found in lang_en.txt
|
||||
echo "checking textaddr.txt..."
|
||||
if cat textaddr.txt | grep "^ADDR NF"; then echo "Some strings not found in lang_en.txt!"; finish; fi
|
||||
|
||||
#update progmem1 id entries in binary file
|
||||
echo "extracting binary..."
|
||||
$OBJCOPY -I ihex -O binary $OUTDIR/Firmware.ino.hex ./firmware.bin
|
||||
|
||||
#update progmem1 id entries in binary file
|
||||
echo "updating binary..."
|
||||
#dd if=/dev/zero of=test.bin bs=512 count=64 2>/dev/null
|
||||
time cat textaddr.txt | grep "^ADDR OK" | cut -f3- -d' ' | sed "s/^0000/0x/" |\
|
||||
awk '{ hi = int($2 / 256); lo = int($2 - 256 * hi); printf("%d \\\\x%02x\\\\x%02x\n", strtonum($1), hi, lo); }' |\
|
||||
while read addr data; do
|
||||
echo -n -e $data | dd of=./firmware.bin bs=1 count=2 seek=$addr conv=notrunc oflag=nonblock 2>/dev/null
|
||||
done
|
||||
|
||||
#update progmem1 id entries in binary file
|
||||
echo "converting to hex..."
|
||||
$OBJCOPY -I binary -O ihex ./firmware.bin ./firmware.hex
|
||||
|
||||
finish
|
||||
Loading…
Reference in New Issue