From 9fd30e928e3599b43b3d9bbd7be82793a62d7944 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 12 May 2010 18:59:15 -0700 Subject: Added card burner python app with gui and windows support. --- host/docs/usrp2.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'host/docs') diff --git a/host/docs/usrp2.rst b/host/docs/usrp2.rst index dfde06b27..c453354ca 100644 --- a/host/docs/usrp2.rst +++ b/host/docs/usrp2.rst @@ -103,7 +103,7 @@ Run the following commands: :: cd /share/uhd/utils - ./usrp_burner --addr=192.168.10.2 --new-ip=192.168.10.3 + ./usrp_addr_burner --addr=192.168.10.2 --new-ip=192.168.10.3 **Method 2 (Linux Only):** This method assumes that you do not know the IP address of your USRP2. -- cgit v1.2.3 From 24fca6b58d37d390057f423ae4e6c3e5c9930d0a Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 12 May 2010 19:08:03 -0700 Subject: notes on usrp2 card burner --- host/docs/usrp2.rst | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'host/docs') diff --git a/host/docs/usrp2.rst b/host/docs/usrp2.rst index c453354ca..e8901b839 100644 --- a/host/docs/usrp2.rst +++ b/host/docs/usrp2.rst @@ -45,22 +45,21 @@ Run the following commands: Load the images onto the SD card ------------------------------------------------------------------------ **Warning!** -Use the u2_flash_tool with caution. If you specify the wrong device node, +Use the usrp2_card_burner.py with caution. If you specify the wrong device node, you could overwrite your hard drive. Make sure that --dev= specifies the SD card. -Load the FPGA image: - +Use the card burner tool (linux): :: - cd /firmware/microblaze - sudo ./u2_flash_tool --dev=/dev/sd -t fpga -w - -Load the firmware image: + cd /share/uhd/utils + sudo ./usrp2_card_burner.py --dev=/dev/sd --fpga= + sudo ./usrp2_card_burner.py --dev=/dev/sd --fw= +Use the card burner tool (windows): :: - cd /firmware/microblaze directory - sudo ./u2_flash_tool --dev=/dev/sd -t s/w -w + /share/uhd/utils/usrp2_card_burner.py --gui + ------------------------------------------------------------------------ Setup networking -- cgit v1.2.3 From ce0a3da138f5de23f0647d991fd4a1dfaef17286 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Fri, 14 May 2010 12:32:40 -0700 Subject: card burner notes --- host/docs/usrp2.rst | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'host/docs') diff --git a/host/docs/usrp2.rst b/host/docs/usrp2.rst index e8901b839..4731b73cf 100644 --- a/host/docs/usrp2.rst +++ b/host/docs/usrp2.rst @@ -48,14 +48,26 @@ Load the images onto the SD card Use the usrp2_card_burner.py with caution. If you specify the wrong device node, you could overwrite your hard drive. Make sure that --dev= specifies the SD card. -Use the card burner tool (linux): +Use the *--list* option to get a list of possible raw devices. +The list result will filter out disk partitions and devices too large to be the sd card. +The list option has not yet been implemented on macosx. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Use the card burner tool (unix) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: + sudo /share/uhd/utils/usrp2_card_burner.py --gui + + -- OR -- + cd /share/uhd/utils sudo ./usrp2_card_burner.py --dev=/dev/sd --fpga= sudo ./usrp2_card_burner.py --dev=/dev/sd --fw= -Use the card burner tool (windows): +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Use the card burner tool (windows) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: /share/uhd/utils/usrp2_card_burner.py --gui -- cgit v1.2.3 From a0bdd2d25aee9934c4457eb5f05341927438fb1e Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 20 May 2010 14:39:55 -0700 Subject: split the card burner into two python apps, one command line app with implementation, and the other a gui only app, updated docs as well --- host/docs/usrp2.rst | 4 +- host/utils/CMakeLists.txt | 1 + host/utils/usrp2_card_burner.py | 181 +++++------------------------------- host/utils/usrp2_card_burner_gui.py | 169 +++++++++++++++++++++++++++++++++ 4 files changed, 195 insertions(+), 160 deletions(-) create mode 100755 host/utils/usrp2_card_burner_gui.py (limited to 'host/docs') diff --git a/host/docs/usrp2.rst b/host/docs/usrp2.rst index 4731b73cf..c4a7aa64f 100644 --- a/host/docs/usrp2.rst +++ b/host/docs/usrp2.rst @@ -57,7 +57,7 @@ Use the card burner tool (unix) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: - sudo /share/uhd/utils/usrp2_card_burner.py --gui + sudo /share/uhd/utils/usrp2_card_burner_gui.py -- OR -- @@ -70,7 +70,7 @@ Use the card burner tool (windows) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: - /share/uhd/utils/usrp2_card_burner.py --gui + /share/uhd/utils/usrp2_card_burner_gui.py ------------------------------------------------------------------------ diff --git a/host/utils/CMakeLists.txt b/host/utils/CMakeLists.txt index d28576e8c..69a013a28 100644 --- a/host/utils/CMakeLists.txt +++ b/host/utils/CMakeLists.txt @@ -30,5 +30,6 @@ INSTALL(TARGETS uhd_burn_db_eeprom RUNTIME DESTINATION ${PKG_DATA_DIR}/utils) INSTALL(PROGRAMS usrp2_recovery.py usrp2_card_burner.py + usrp2_card_burner_gui.py DESTINATION ${PKG_DATA_DIR}/utils ) diff --git a/host/utils/usrp2_card_burner.py b/host/utils/usrp2_card_burner.py index dfdc663bc..59d0b3231 100755 --- a/host/utils/usrp2_card_burner.py +++ b/host/utils/usrp2_card_burner.py @@ -16,14 +16,16 @@ # along with this program. If not, see . # -######################################################################## -# Deal with raw devices -######################################################################## import platform import tempfile import subprocess import urllib +import optparse +import os +######################################################################## +# constants +######################################################################## SECTOR_SIZE = 512 # bytes MAX_FILE_SIZE = 1 * (2**20) # maximum number of bytes we'll burn to a slot @@ -32,6 +34,9 @@ FIRMWARE_OFFSET = 1 * (2**20) # offset in flash to firmware image MAX_SD_CARD_SIZE = 2048e6 # bytes (any bigger is sdhc) +######################################################################## +# helper functions +######################################################################## def command(*args): p = subprocess.Popen( args, @@ -53,6 +58,9 @@ def get_dd_path(): return dd_path return 'dd' +######################################################################## +# list possible devices +######################################################################## def get_raw_device_hints(): #################################################################### # Platform Windows: parse the output of dd.exe --list @@ -84,7 +92,7 @@ def get_raw_device_hints(): return sorted(set(volumes)) #################################################################### - # Platform Linux: call blockdev on all the /dev/sd* devices + # Platform Linux: call blockdev on all the dev0 devices #################################################################### if platform.system() == 'Linux': devs = list() @@ -107,6 +115,9 @@ def get_raw_device_hints(): #################################################################### return () +######################################################################## +# write and verify with dd +######################################################################## def verify_image(image_file, device_file, offset): #create a temporary file to store the readback tmp = tempfile.mkstemp() @@ -172,160 +183,14 @@ def burn_sd_card(dev, fw, fpga): return verbose ######################################################################## -# Graphical Tk stuff +# command line options ######################################################################## -import Tkinter, Tkconstants, tkFileDialog, tkFont, tkMessageBox -import os - -class BinFileEntry(Tkinter.Frame): - """ - Simple file entry widget for getting the file path of bin files. - Combines a label, entry, and button with file dialog callback. - """ - - def __init__(self, root, what, def_path=''): - self._what = what - Tkinter.Frame.__init__(self, root) - Tkinter.Label(self, text=what+":").pack(side=Tkinter.LEFT) - self._entry = Tkinter.Entry(self, width=50) - self._entry.insert(Tkinter.END, def_path) - self._entry.pack(side=Tkinter.LEFT) - Tkinter.Button(self, text="...", command=self._button_cb).pack(side=Tkinter.LEFT) - - def _button_cb(self): - filename = tkFileDialog.askopenfilename( - parent=self, - filetypes=[('bin files', '*.bin'), ('all files', '*.*')], - title="Select bin file for %s"%self._what, - initialdir=os.path.dirname(self.get_filename()), - ) - - # open file on your own - if filename: - self._entry.delete(0, Tkinter.END) - self._entry.insert(0, filename) - - def get_filename(self): - return self._entry.get() - -class DeviceEntryWidget(Tkinter.Frame): - """ - Simple entry widget for getting the raw device name. - Combines a label, entry, and helpful text box with hints. - """ - - def __init__(self, root, text=''): - Tkinter.Frame.__init__(self, root) - - Tkinter.Button(self, text="Rescan for Devices", command=self._reload_cb).pack() - - self._hints = Tkinter.Listbox(self) - self._hints.bind("<>", self._listbox_cb) - self._reload_cb() - self._hints.pack(expand=Tkinter.YES, fill=Tkinter.X) - - frame = Tkinter.Frame(self) - frame.pack() - - Tkinter.Label(frame, text="Raw Device:").pack(side=Tkinter.LEFT) - self._entry = Tkinter.Entry(frame, width=50) - self._entry.insert(Tkinter.END, text) - self._entry.pack(side=Tkinter.LEFT) - - def _reload_cb(self): - self._hints.delete(0, Tkinter.END) - for hint in get_raw_device_hints(): - self._hints.insert(Tkinter.END, hint) - - def _listbox_cb(self, event): - try: - sel = self._hints.get(self._hints.curselection()[0]) - self._entry.delete(0, Tkinter.END) - self._entry.insert(0, sel) - except Exception, e: print e - - def get_devname(self): - return self._entry.get() - -class SectionLabel(Tkinter.Label): - """ - Make a text label with bold font. - """ - - def __init__(self, root, text): - Tkinter.Label.__init__(self, root, text=text) - - #set the font bold - f = tkFont.Font(font=self['font']) - f['weight'] = 'bold' - self['font'] = f.name - -class USRP2CardBurnerApp(Tkinter.Frame): - """ - The top level gui application for the usrp2 sd card burner. - Creates entry widgets and button with callback to write images. - """ - - def __init__(self, root, dev, fw, fpga): - - Tkinter.Frame.__init__(self, root) - - #pack the file entry widgets - SectionLabel(self, text="Select Images").pack(pady=5) - self._fw_img_entry = BinFileEntry(self, "Firmware Image", def_path=fw) - self._fw_img_entry.pack() - self._fpga_img_entry = BinFileEntry(self, "FPGA Image", def_path=fpga) - self._fpga_img_entry.pack() - - #pack the destination entry widget - SectionLabel(self, text="Select Device").pack(pady=5) - self._raw_dev_entry = DeviceEntryWidget(self, text=dev) - self._raw_dev_entry.pack() - - #the do it button - SectionLabel(self, text="").pack(pady=5) - Tkinter.Label(self, text="Warning! This tool can overwrite your hard drive. Use with caution.").pack() - Tkinter.Button(self, text="Burn SD Card", command=self._burn).pack() - - def _burn(self): - #grab strings from the gui - fw = self._fw_img_entry.get_filename() - fpga = self._fpga_img_entry.get_filename() - dev = self._raw_dev_entry.get_devname() - - #check input - if not dev: - tkMessageBox.showerror('Error:', 'No device specified!') - return - if not fw and not fpga: - tkMessageBox.showerror('Error:', 'No images specified!') - return - if fw and not os.path.exists(fw): - tkMessageBox.showerror('Error:', 'Firmware image not found!') - return - if fpga and not os.path.exists(fpga): - tkMessageBox.showerror('Error:', 'FPGA image not found!') - return - - #burn the sd card - try: - verbose = burn_sd_card(dev=dev, fw=fw, fpga=fpga) - tkMessageBox.showinfo('Verbose:', verbose) - except Exception, e: - tkMessageBox.showerror('Verbose:', 'Error: %s'%str(e)) - -######################################################################## -# Main -######################################################################## -import optparse - -if __name__=='__main__': +def get_options(): parser = optparse.OptionParser() parser.add_option("--dev", type="string", help="raw device path", default='') parser.add_option("--fw", type="string", help="firmware image path (optional)", default='') parser.add_option("--fpga", type="string", help="fpga image path (optional)", default='') parser.add_option("--list", action="store_true", help="list possible raw devices", default=False) - parser.add_option("--gui", action="store_true", help="run in gui mode", default=False) (options, args) = parser.parse_args() if options.list: @@ -333,12 +198,12 @@ if __name__=='__main__': print ' ' + '\n '.join(get_raw_device_hints()) exit() - if options.gui: - root = Tkinter.Tk() - root.title('USRP2 SD Card Burner') - USRP2CardBurnerApp(root, dev=options.dev, fw=options.fw, fpga=options.fpga).pack() - root.mainloop() - exit() + return options +######################################################################## +# main +######################################################################## +if __name__=='__main__': + options = get_options() if not options.dev: raise Exception, 'no raw device path specified' print burn_sd_card(dev=options.dev, fw=options.fw, fpga=options.fpga) diff --git a/host/utils/usrp2_card_burner_gui.py b/host/utils/usrp2_card_burner_gui.py new file mode 100755 index 000000000..61fbadbe3 --- /dev/null +++ b/host/utils/usrp2_card_burner_gui.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python +# +# Copyright 2010 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 . +# + +import usrp2_card_burner #import implementation +import Tkinter, Tkconstants, tkFileDialog, tkFont, tkMessageBox +import os + +class BinFileEntry(Tkinter.Frame): + """ + Simple file entry widget for getting the file path of bin files. + Combines a label, entry, and button with file dialog callback. + """ + + def __init__(self, root, what, def_path=''): + self._what = what + Tkinter.Frame.__init__(self, root) + Tkinter.Label(self, text=what+":").pack(side=Tkinter.LEFT) + self._entry = Tkinter.Entry(self, width=50) + self._entry.insert(Tkinter.END, def_path) + self._entry.pack(side=Tkinter.LEFT) + Tkinter.Button(self, text="...", command=self._button_cb).pack(side=Tkinter.LEFT) + + def _button_cb(self): + filename = tkFileDialog.askopenfilename( + parent=self, + filetypes=[('bin files', '*.bin'), ('all files', '*.*')], + title="Select bin file for %s"%self._what, + initialdir=os.path.dirname(self.get_filename()), + ) + + # open file on your own + if filename: + self._entry.delete(0, Tkinter.END) + self._entry.insert(0, filename) + + def get_filename(self): + return self._entry.get() + +class DeviceEntryWidget(Tkinter.Frame): + """ + Simple entry widget for getting the raw device name. + Combines a label, entry, and helpful text box with hints. + """ + + def __init__(self, root, text=''): + Tkinter.Frame.__init__(self, root) + + Tkinter.Button(self, text="Rescan for Devices", command=self._reload_cb).pack() + + self._hints = Tkinter.Listbox(self) + self._hints.bind("<>", self._listbox_cb) + self._reload_cb() + self._hints.pack(expand=Tkinter.YES, fill=Tkinter.X) + + frame = Tkinter.Frame(self) + frame.pack() + + Tkinter.Label(frame, text="Raw Device:").pack(side=Tkinter.LEFT) + self._entry = Tkinter.Entry(frame, width=50) + self._entry.insert(Tkinter.END, text) + self._entry.pack(side=Tkinter.LEFT) + + def _reload_cb(self): + self._hints.delete(0, Tkinter.END) + for hint in usrp2_card_burner.get_raw_device_hints(): + self._hints.insert(Tkinter.END, hint) + + def _listbox_cb(self, event): + try: + sel = self._hints.get(self._hints.curselection()[0]) + self._entry.delete(0, Tkinter.END) + self._entry.insert(0, sel) + except Exception, e: print e + + def get_devname(self): + return self._entry.get() + +class SectionLabel(Tkinter.Label): + """ + Make a text label with bold font. + """ + + def __init__(self, root, text): + Tkinter.Label.__init__(self, root, text=text) + + #set the font bold + f = tkFont.Font(font=self['font']) + f['weight'] = 'bold' + self['font'] = f.name + +class USRP2CardBurnerApp(Tkinter.Frame): + """ + The top level gui application for the usrp2 sd card burner. + Creates entry widgets and button with callback to write images. + """ + + def __init__(self, root, dev, fw, fpga): + + Tkinter.Frame.__init__(self, root) + + #pack the file entry widgets + SectionLabel(self, text="Select Images").pack(pady=5) + self._fw_img_entry = BinFileEntry(self, "Firmware Image", def_path=fw) + self._fw_img_entry.pack() + self._fpga_img_entry = BinFileEntry(self, "FPGA Image", def_path=fpga) + self._fpga_img_entry.pack() + + #pack the destination entry widget + SectionLabel(self, text="Select Device").pack(pady=5) + self._raw_dev_entry = DeviceEntryWidget(self, text=dev) + self._raw_dev_entry.pack() + + #the do it button + SectionLabel(self, text="").pack(pady=5) + Tkinter.Label(self, text="Warning! This tool can overwrite your hard drive. Use with caution.").pack() + Tkinter.Button(self, text="Burn SD Card", command=self._burn).pack() + + def _burn(self): + #grab strings from the gui + fw = self._fw_img_entry.get_filename() + fpga = self._fpga_img_entry.get_filename() + dev = self._raw_dev_entry.get_devname() + + #check input + if not dev: + tkMessageBox.showerror('Error:', 'No device specified!') + return + if not fw and not fpga: + tkMessageBox.showerror('Error:', 'No images specified!') + return + if fw and not os.path.exists(fw): + tkMessageBox.showerror('Error:', 'Firmware image not found!') + return + if fpga and not os.path.exists(fpga): + tkMessageBox.showerror('Error:', 'FPGA image not found!') + return + + #burn the sd card + try: + verbose = usrp2_card_burner.burn_sd_card(dev=dev, fw=fw, fpga=fpga) + tkMessageBox.showinfo('Verbose:', verbose) + except Exception, e: + tkMessageBox.showerror('Verbose:', 'Error: %s'%str(e)) + +######################################################################## +# main +######################################################################## +if __name__=='__main__': + options = usrp2_card_burner.get_options() + root = Tkinter.Tk() + root.title('USRP2 SD Card Burner') + USRP2CardBurnerApp(root, dev=options.dev, fw=options.fw, fpga=options.fpga).pack() + root.mainloop() + exit() -- cgit v1.2.3 From af1231fddbb8bb24ef7cdd2612e4933f73f83a9f Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 20 May 2010 14:44:46 -0700 Subject: some wbx series notes --- host/README | 1 + host/docs/dboards.rst | 11 +++++++++++ 2 files changed, 12 insertions(+) (limited to 'host/docs') diff --git a/host/README b/host/README index e67bb25f8..6eaf6bb42 100644 --- a/host/README +++ b/host/README @@ -17,6 +17,7 @@ LF RX LF TX RFX Series XCVR 2450 +WBX Series ######################################################################## # Documentation diff --git a/host/docs/dboards.rst b/host/docs/dboards.rst index d08b752a6..a320f86cb 100644 --- a/host/docs/dboards.rst +++ b/host/docs/dboards.rst @@ -62,3 +62,14 @@ not doing so will yeild undefined results. The XCVR2450 uses a common LO for both receive and transmit. Even though the API allows the RX and TX LOs to be individually set, a change of one LO setting will be reflected in the other LO setting. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +WBX Series +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Transmit Antennas: **TX/RX** + +Receive Antennas: **TX/RX** or **RX2** + +The user may set the receive antenna to be TX/RX or RX2. +However, when using an RFX board in full-duplex mode, +the receive antenna will always be set to RX2, regardless of the settings. -- cgit v1.2.3 From 76ce1d824a41beacdb5bd603549c9b0e3f64d98f Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Fri, 21 May 2010 17:30:05 -0700 Subject: mac os x card burner support and documentation notes --- host/docs/build.rst | 31 ++++++++++++++++++++++++++----- host/docs/usrp2.rst | 2 +- host/lib/transport/gen_vrt.py | 2 +- host/utils/usrp2_card_burner.py | 21 +++++++++++++++++++++ 4 files changed, 49 insertions(+), 7 deletions(-) (limited to 'host/docs') diff --git a/host/docs/build.rst b/host/docs/build.rst index d28682764..f5a8dac8d 100644 --- a/host/docs/build.rst +++ b/host/docs/build.rst @@ -8,9 +8,14 @@ UHD - Build Guide Build Dependencies ------------------------------------------------------------------------ -**Unix Notes:** +**Linux Notes:** The dependencies can be acquired through the package manager. +**Mac OS X Notes:** +Install the "Xcode Developer Tools" to get the build tools (gcc and make). +Use MacPorts to get the Boost and Cheetah dependencies. +Other dependencies can be downloaded as dmg installers from the web. + **Windows Notes:** The dependencies can be acquired through installable exe files. Usually, the windows installer can be found on the project's website. @@ -27,12 +32,13 @@ or install msysgit from http://code.google.com/p/msysgit/downloads/list ^^^^^^^^^^^^^^^^ C++ ^^^^^^^^^^^^^^^^ -On unix, this is GCC 4.0 and above. On windows, this is MSVC 2008. +On Unix, this is GCC 4.0 and above. On Windows, this is MSVC 2008. Other compilers have not been tested yet or confirmed working. ^^^^^^^^^^^^^^^^ CMake ^^^^^^^^^^^^^^^^ +* **Purpose:** generates project build files * **Version:** at least 2.8 * **Required for:** build time * **Download URL:** http://www.cmake.org/cmake/resources/software.html @@ -40,6 +46,7 @@ CMake ^^^^^^^^^^^^^^^^ Boost ^^^^^^^^^^^^^^^^ +* **Purpose:** C++ library * **Version:** at least 3.6 unix, at least 4.0 windows * **Required for:** build time + run time * **Download URL:** http://www.boost.org/users/download/ @@ -48,13 +55,15 @@ Boost ^^^^^^^^^^^^^^^^ Python ^^^^^^^^^^^^^^^^ +* **Purpose:** used by Cheetah and utility scripts * **Version:** at least 2.6 -* **Required for:** build time +* **Required for:** build time + run time utility scripts * **Download URL:** http://www.python.org/download/ ^^^^^^^^^^^^^^^^ Cheetah ^^^^^^^^^^^^^^^^ +* **Purpose:** source code generation * **Version:** at least 2.0 * **Required for:** build time * **Download URL:** http://www.cheetahtemplate.org/download.html @@ -63,9 +72,17 @@ Cheetah ^^^^^^^^^^^^^^^^ Doxygen ^^^^^^^^^^^^^^^^ +* **Purpose:** generates html api documentation * **Required for:** build time (optional) * **Download URL:** http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc +^^^^^^^^^^^^^^^^ +Docutils +^^^^^^^^^^^^^^^^ +* **Purpose:** generates html user manual +* **Required for:** build time (optional) +* **Download URL:** http://docutils.sourceforge.net/ + ------------------------------------------------------------------------ Build Instructions (Unix) ------------------------------------------------------------------------ @@ -80,7 +97,7 @@ Generate Makefiles with cmake cd build cmake ../ -For a custom prefix, use: cmake -DCMAKE_INSTALL_PREFIX= ../ +For a custom prefix, use: cmake -DCMAKE_INSTALL_PREFIX= ../ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Build and install @@ -92,11 +109,15 @@ Build and install sudo make install ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Setup the library path +Setup the library path (Linux) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Make sure that libuhd.so is in your LD_LIBRARY_PATH or add it to /etc/ld.so.conf and make sure to run sudo ldconfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Setup the library path (Mac OS X) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Make sure that libuhd.dylib is in your DYLD_LIBRARY_PATH ------------------------------------------------------------------------ Build Instructions (Windows) diff --git a/host/docs/usrp2.rst b/host/docs/usrp2.rst index c4a7aa64f..1bd95cefa 100644 --- a/host/docs/usrp2.rst +++ b/host/docs/usrp2.rst @@ -50,7 +50,7 @@ you could overwrite your hard drive. Make sure that --dev= specifies the SD card Use the *--list* option to get a list of possible raw devices. The list result will filter out disk partitions and devices too large to be the sd card. -The list option has not yet been implemented on macosx. +The list option has been implemented on Linux, Mac OS X, and Windows. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use the card burner tool (unix) diff --git a/host/lib/transport/gen_vrt.py b/host/lib/transport/gen_vrt.py index 9a57c83c3..c34ffb198 100755 --- a/host/lib/transport/gen_vrt.py +++ b/host/lib/transport/gen_vrt.py @@ -57,7 +57,7 @@ void vrt::pack( size_t packet_count, //input double tick_rate //input ){ - boost::uint32_t vrt_hdr_flags; + boost::uint32_t vrt_hdr_flags = 0; boost::uint8_t pred = 0; if (metadata.has_stream_id) pred |= $hex($sid_p); diff --git a/host/utils/usrp2_card_burner.py b/host/utils/usrp2_card_burner.py index 60aca9133..d47a4f5f4 100755 --- a/host/utils/usrp2_card_burner.py +++ b/host/utils/usrp2_card_burner.py @@ -22,6 +22,7 @@ import subprocess import urllib import optparse import os +import re ######################################################################## # constants @@ -106,6 +107,26 @@ def get_raw_device_hints(): return sorted(set(devs)) + #################################################################### + # Platform Mac OS X: parse diskutil list and info commands + #################################################################### + if platform.system() == 'Darwin': + devs = map(lambda d: d.split()[0], filter(lambda l: l.startswith('/dev'), command('diskutil', 'list').splitlines())) + def output_to_info(output): + return dict([map(str.strip, pair.lower().split(':')) for pair in filter(lambda l: ':' in l, output.splitlines())]) + def is_dev_valid(dev): + info = output_to_info(command('diskutil', 'info', dev)) + try: + if info.has_key('internal'): assert info['internal'] == 'no' + if info.has_key('ejectable'): assert info['ejectable'] == 'yes' + if info.has_key('total size'): + size_match = re.match('^.*\((\d+)\s*bytes\).*$', info['total size']) + if size_match: assert int(size_match.groups()[0]) <= MAX_SD_CARD_SIZE + return True + except: return False + + return sorted(set(filter(is_dev_valid, devs))) + #################################################################### # Platform Others: #################################################################### -- cgit v1.2.3