summaryrefslogtreecommitdiffstats
path: root/host/utils
diff options
context:
space:
mode:
authorNicholas Corgan <nick.corgan@ettus.com>2012-06-07 12:30:21 -0700
committerJosh Blum <josh@joshknows.com>2012-06-07 15:05:41 -0700
commite7df63844f0920d35bc76a9fe70f9bbb59443c2f (patch)
tree63cff49610a8f03c2168f7144e662662bb843392 /host/utils
parent49d4f8e479534d856a242c2271d1b930487aea6c (diff)
downloaduhd-e7df63844f0920d35bc76a9fe70f9bbb59443c2f.tar.gz
uhd-e7df63844f0920d35bc76a9fe70f9bbb59443c2f.tar.bz2
uhd-e7df63844f0920d35bc76a9fe70f9bbb59443c2f.zip
utils: UHD Image Downloader - downloads firmware/FPGA images compatible with the current host code and places them in the images directory
Diffstat (limited to 'host/utils')
-rw-r--r--host/utils/CMakeLists.txt13
-rw-r--r--host/utils/uhd_images_downloader.py95
2 files changed, 107 insertions, 1 deletions
diff --git a/host/utils/CMakeLists.txt b/host/utils/CMakeLists.txt
index 0ecd6b4e7..8ddab035b 100644
--- a/host/utils/CMakeLists.txt
+++ b/host/utils/CMakeLists.txt
@@ -1,5 +1,5 @@
#
-# Copyright 2010-2011 Ettus Research LLC
+# Copyright 2010-2012 Ettus Research LLC
#
# 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
@@ -64,6 +64,17 @@ FOREACH(util_source ${util_share_sources})
INSTALL(TARGETS ${util_name} RUNTIME DESTINATION ${PKG_LIB_DIR}/utils COMPONENT utilities)
ENDFOREACH(util_source)
+#UHD images downloader configuration
+CONFIGURE_FILE(
+ ${CMAKE_CURRENT_SOURCE_DIR}/uhd_images_downloader.py
+ ${CMAKE_CURRENT_BINARY_DIR}/uhd_images_downloader.py
+@ONLY)
+INSTALL(PROGRAMS
+ ${CMAKE_CURRENT_BINARY_DIR}/uhd_images_downloader.py
+ DESTINATION ${PKG_LIB_DIR}/utils
+ COMPONENT utilities
+)
+
IF(ENABLE_USRP2)
IF(WIN32 AND UHD_RELEASE_MODE) #include dd.exe
FILE(DOWNLOAD
diff --git a/host/utils/uhd_images_downloader.py b/host/utils/uhd_images_downloader.py
new file mode 100644
index 000000000..be76f5b2d
--- /dev/null
+++ b/host/utils/uhd_images_downloader.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+#
+# Copyright 2012 Ettus Research LLC
+#
+# 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
+#
+
+from optparse import OptionParser
+import os
+import os.path
+import shutil
+import sys
+import urllib2
+import zipfile
+
+if __name__ == "__main__":
+
+ #Command line options
+ parser = OptionParser()
+ parser.add_option("--download-location", type="string", default="@CMAKE_INSTALL_PREFIX@/share/uhd/images", help="Set custom download location for images, [default=%default]")
+ parser.add_option("--buffer-size", type="int", default=8192, help="Set download buffer size, [default=%default]",)
+ (options, args) = parser.parse_args()
+
+ #Configuring image download info
+ images_src = "@UHD_IMAGES_DOWNLOAD_SRC@"
+ filename = images_src.split("/")[-1]
+
+ #Configuring image destination
+ cmake_install_prefix = "@CMAKE_INSTALL_PREFIX@"
+ if options.download_location != "":
+ images_dir = options.download_location
+ else:
+ images_dir = "@CMAKE_INSTALL_PREFIX@/share/uhd/images"
+
+ u = urllib2.urlopen(images_src)
+ f = open(filename, "wb")
+ meta = u.info()
+ #filesize = int(meta.getheaders("Content-Length")[0])
+ filesize = float(int(meta.getheaders("Content-Length")[0]))
+
+ print "Downloading images from: %s" % images_src
+
+ filesize_dl = 0.0
+
+ #Downloading file
+ while True:
+ buffer = u.read(options.buffer_size)
+ if not buffer:
+ break
+
+ filesize_dl -= len(buffer)
+ f.write(buffer)
+
+ status = r"%2.2f MB/%2.2f MB (%3.2f" % (-filesize_dl/1e6, filesize/1e6, (-filesize_dl*100.)/filesize) + r"%)"
+ status += chr(8)*(len(status)+1)
+ print status,
+
+ f.close()
+
+ #Extracting contents of zip file
+ if os.path.exists("tempdir"):
+ shutil.rmtree("tempdir")
+ os.mkdir("tempdir")
+
+ images_zip = zipfile.ZipFile(filename)
+ images_zip.extractall("tempdir")
+
+ #Removing images currently in images_dir
+ if os.path.exists(images_dir):
+ try:
+ shutil.rmtree(images_dir)
+ except:
+ sys.stderr.write("\nMake sure you have write permissions in the images directory.\n")
+ sys.exit(0)
+
+ #Copying downloaded images into images_dir
+ shutil.copytree("tempdir/%s/share/uhd/images" % filename[:-4],images_dir)
+
+ #Removing tempdir and zip file
+ shutil.rmtree("tempdir")
+ images_zip.close()
+ os.remove(filename)
+
+ print "\nImages successfully installed to: %s" % images_dir