diff --git a/firmware/dfu-util.cmake b/firmware/dfu-util.cmake new file mode 100644 index 00000000..e2abfeb3 --- /dev/null +++ b/firmware/dfu-util.cmake @@ -0,0 +1,56 @@ +# +# Copyright 2015 Dominic Spill +# +# This file is part of GreatFET. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +execute_process( + COMMAND dfu-suffix -V + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + RESULT_VARIABLE DFU_NOT_FOUND + ERROR_QUIET + OUTPUT_VARIABLE DFU_VERSION_STRING + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +set(DFU_ALL "") +if(NOT DFU_NOT_FOUND) + string(REGEX REPLACE ".*([0-9]+)\\.[0-9]+.*" "\\1" DFU_VERSION_MAJOR "${DFU_VERSION_STRING}") + string(REGEX REPLACE ".*[0-9]+\\.([0-9])+.*" "\\1" DFU_VERSION_MINOR "${DFU_VERSION_STRING}") + MESSAGE( STATUS "DFU utils version: " ${DFU_VERSION_MAJOR} "." ${DFU_VERSION_MINOR}) + execute_process( + COMMAND dfu-prefix -V + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + RESULT_VARIABLE DFU_PREFIX_NOT_FOUND + ERROR_QUIET + OUTPUT_VARIABLE DFU_PREFIX_VERSION_STRING + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(DFU_PREFIX_NOT_FOUND) + set(DFU_COMMAND dfu-suffix --vid=0x1fc9 --pid=0x000c --did=0x0 -s 0 -a _tmp.dfu) + else(DFU_PREFIX_NOT_FOUND) + set(DFU_COMMAND dfu-suffix --vid=0x1fc9 --pid=0x000c --did=0x0 -a _tmp.dfu && dfu-prefix -s 0 -a _tmp.dfu) + endif(DFU_PREFIX_NOT_FOUND) + set(DFU_ALL "ALL") +else(NOT DFU_NOT_FOUND) + MESSAGE(STATUS "dfu-suffix not found: not building DFU file") +endif(NOT DFU_NOT_FOUND) + + + + \ No newline at end of file diff --git a/firmware/hackrf-common.cmake b/firmware/hackrf-common.cmake index 8ea1e6e6..ad130dd6 100644 --- a/firmware/hackrf-common.cmake +++ b/firmware/hackrf-common.cmake @@ -26,6 +26,8 @@ enable_language(C CXX ASM) +include(../dfu-util.cmake) + SET(PATH_HACKRF ../..) SET(PATH_HACKRF_FIRMWARE ${PATH_HACKRF}/firmware) SET(PATH_HACKRF_FIRMWARE_COMMON ${PATH_HACKRF_FIRMWARE}/common) @@ -170,11 +172,11 @@ macro(DeclareTargets) ) add_custom_target( - ${PROJECT_NAME}.dfu ALL + ${PROJECT_NAME}.dfu ${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 ${DFU_COMMAND} 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