diff --git a/firmware/hackrf-common.cmake b/firmware/hackrf-common.cmake index 03c53f3f..92a098e8 100644 --- a/firmware/hackrf-common.cmake +++ b/firmware/hackrf-common.cmake @@ -168,12 +168,7 @@ macro(DeclareTargets) add_custom_target( ${PROJECT_NAME}.dfu ALL DEPENDS ${PROJECT_NAME}.bin - COMMAND rm -f _tmp.dfu _header.bin - COMMAND cp ${PROJECT_NAME}.bin _tmp.dfu - COMMAND dfu-suffix --vid=0x1fc9 --pid=0x000c --did=0x0 -s 0 -a _tmp.dfu - COMMAND python -c \"import os.path\; import struct\; print\('0000000: da ff ' + ' '.join\(map\(lambda s: '%02x' % ord\(s\), struct.pack\(' _header.bin - COMMAND cat _header.bin _tmp.dfu >${PROJECT_NAME}.dfu - COMMAND rm -f _tmp.dfu _header.bin + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../tools/make-dfu.py ${PROJECT_NAME}.bin ${PROJECT_NAME}.dfu ) add_custom_target( diff --git a/firmware/tools/make-dfu.py b/firmware/tools/make-dfu.py new file mode 100755 index 00000000..81e1540e --- /dev/null +++ b/firmware/tools/make-dfu.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python2 +# vim: set ts=4 sw=4 tw=0 et pm=: +import struct +import sys +import os.path +import getopt +import zlib + +options, remainder = getopt.getopt(sys.argv[1:], 'p:v:d:S:v', ['pid=', + 'vid=', + 'did=', + 'spec=', + 'verbose', + ]) + +pid = 0x000c +vid = 0x1fc9 +did = 0 +spec = 0x0100 +verbose = False + +for opt, arg in options: + if opt in ('-p', '--pid'): + pid = int(arg) + if opt in ('-v', '--vid'): + vid = int(arg) + if opt in ('-d', '--did'): + did = int(arg) + if opt in ('-S', '--spec'): + spec = int(arg) + elif opt in ('-v', '--verbose'): + verbose = True + +if len(remainder)<1: + in_file = "/dev/stdin" +else: + in_file = remainder[0] + +if len(remainder)<2: + out = open("/dev/stdout","wb") +else: + out = open(remainder[1],"wb") + +# ref. NXP UM10503 Table 24 (Boot image header description) +header = "" +header += struct.pack ('