aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/CMakeLists.txt8
-rw-r--r--host/docs/calibration.dox18
-rwxr-xr-xhost/docs/res/TRRS.pngbin0 -> 2955 bytes
-rw-r--r--host/docs/usrp_e3x0.dox5
-rw-r--r--host/examples/rx_ascii_art_dft.cpp4
-rw-r--r--host/examples/rx_samples_to_file.cpp4
-rw-r--r--host/examples/rx_samples_to_udp.cpp4
-rw-r--r--host/examples/txrx_loopback_to_file.cpp4
-rw-r--r--host/lib/usrp/common/ad9361_ctrl.hpp2
-rw-r--r--host/lib/usrp/common/ad9361_driver/ad9361_device.cpp25
-rw-r--r--host/lib/utils/paths.cpp12
-rw-r--r--images/.gitignore5
12 files changed, 49 insertions, 42 deletions
diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt
index b48d433f7..2d3cdcfbd 100644
--- a/host/CMakeLists.txt
+++ b/host/CMakeLists.txt
@@ -398,16 +398,16 @@ UHD_INSTALL(
)
########################################################################
-# Handle pre-built UHD Images meant for installation
+# Handle pre-built UHD Images for packaging
########################################################################
-IF(DEFINED UHD_IMAGES_DIR AND EXISTS "${UHD_IMAGES_DIR}")
- FILE(GLOB_RECURSE _image_files "${UHD_IMAGES_DIR}/*")
+IF(DEFINED UHD_IMAGES_SRC_DIR AND EXISTS "${UHD_IMAGES_SRC_DIR}")
+ FILE(GLOB_RECURSE _image_files "${UHD_IMAGES_SRC_DIR}/*")
MESSAGE(STATUS "Using images:")
FOREACH(_img ${_image_files})
MESSAGE(STATUS " ${_img}")
ENDFOREACH(_img)
UHD_INSTALL(FILES ${_image_files} DESTINATION ${PKG_DATA_DIR}/images COMPONENT images)
-ENDIF(DEFINED UHD_IMAGES_DIR AND EXISTS "${UHD_IMAGES_DIR}")
+ENDIF(DEFINED UHD_IMAGES_SRC_DIR AND EXISTS "${UHD_IMAGES_SRC_DIR}")
########################################################################
# Print Summary
diff --git a/host/docs/calibration.dox b/host/docs/calibration.dox
index 603ae22e4..eecb7af5c 100644
--- a/host/docs/calibration.dox
+++ b/host/docs/calibration.dox
@@ -57,15 +57,23 @@ daughterboard's EEPROM: :
\subsection calibration_data Calibration Data
-Calibration files are stored in the user's home/application directory.
-They can easily be moved from machine to another by copying the "cal"
-directory. Re-running a calibration utility will replace the existing
-calibration file. The old calibration file will be renamed so it may be
-recovered by the user.
+By default, calibration files are stored in the user's home/application
+directory:
- **Linux:** `${HOME}/.uhd/cal/`
- **Windows:** `%APPDATA%\.uhd\cal\`
+If you would like to specify a custom directory, you can do so with the
+`$UHD_CONFIG_DIR` environment variable:
+
+- **Custom (any OS):** `${UHD_CONFIG_DIR}/.uhd/cal/`
+
+Calibration files can easily be moved from one machine to another by copying the
+"cal" directory. Re-running a calibration utility will replace the existing
+calibration file. The old calibration file will be renamed so it may be
+recovered by the user.
+
+
\subsection ignore_cal_file Ignoring Calibration Files
At runtime, the user can choose to ignore a daughterboard's calibration file by adding "ignore-cal-file" to the arguments. With the UHD API, it can be done as follows:
diff --git a/host/docs/res/TRRS.png b/host/docs/res/TRRS.png
new file mode 100755
index 000000000..78619c869
--- /dev/null
+++ b/host/docs/res/TRRS.png
Binary files differ
diff --git a/host/docs/usrp_e3x0.dox b/host/docs/usrp_e3x0.dox
index 68ffc0122..b55fa1054 100644
--- a/host/docs/usrp_e3x0.dox
+++ b/host/docs/usrp_e3x0.dox
@@ -362,6 +362,11 @@ For more advanced IMU based applications please refer to the <a href="https://gi
Please see the \ref page_gpio_api for information on configuring and using the GPIO bus.
\subsection e3x0_hw_audio Audio connectors
+The E3x0 2.5 mm Audio Jack TRRS pins are assigned as follows: Tip=Mic, Ring1=Right, Ring2=Left, Sleeve=GND.
+
+\image html TRRS.png "Audio Jack"
+
+The Left/Right audio outputs are compatible with typical low-impedance headphones (16 to 32 Ohms). The Microphone pin provides approximately 2 mA bias at 2.2 V when not suspended. A variety of pin configurations can be found on commonly available headsets, so an adapter may be required.
\subsection e3x0_hw_chipscope Debugging custom FPGA designs with Xilinx Chipscope
diff --git a/host/examples/rx_ascii_art_dft.cpp b/host/examples/rx_ascii_art_dft.cpp
index 81208cf8b..c73e57459 100644
--- a/host/examples/rx_ascii_art_dft.cpp
+++ b/host/examples/rx_ascii_art_dft.cpp
@@ -110,9 +110,9 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
//set the analog frontend filter bandwidth
if (vm.count("bw")){
- std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % bw << std::endl;
+ std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % (bw/1e6) << std::endl;
usrp->set_rx_bandwidth(bw);
- std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % usrp->get_rx_bandwidth() << std::endl << std::endl;
+ std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % (usrp->get_rx_bandwidth()/1e6) << std::endl << std::endl;
}
//set the antenna
diff --git a/host/examples/rx_samples_to_file.cpp b/host/examples/rx_samples_to_file.cpp
index 4e6d8139f..f71c4ed47 100644
--- a/host/examples/rx_samples_to_file.cpp
+++ b/host/examples/rx_samples_to_file.cpp
@@ -304,9 +304,9 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
//set the IF filter bandwidth
if (vm.count("bw")) {
- std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % bw << std::endl;
+ std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % (bw/1e6) << std::endl;
usrp->set_rx_bandwidth(bw);
- std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % usrp->get_rx_bandwidth() << std::endl << std::endl;
+ std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % (usrp->get_rx_bandwidth()/1e6) << std::endl << std::endl;
}
//set the antenna
diff --git a/host/examples/rx_samples_to_udp.cpp b/host/examples/rx_samples_to_udp.cpp
index 9accdef83..9a8a3f4ac 100644
--- a/host/examples/rx_samples_to_udp.cpp
+++ b/host/examples/rx_samples_to_udp.cpp
@@ -93,9 +93,9 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
//set the analog frontend filter bandwidth
if (vm.count("bw")){
- std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % bw << std::endl;
+ std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % (bw/1e6) << std::endl;
usrp->set_rx_bandwidth(bw);
- std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % usrp->get_rx_bandwidth() << std::endl << std::endl;
+ std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % (usrp->get_rx_bandwidth()/1e6) << std::endl << std::endl;
}
//set the antenna
diff --git a/host/examples/txrx_loopback_to_file.cpp b/host/examples/txrx_loopback_to_file.cpp
index 7ef77801b..d98c5187d 100644
--- a/host/examples/txrx_loopback_to_file.cpp
+++ b/host/examples/txrx_loopback_to_file.cpp
@@ -374,9 +374,9 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){
//set the receive analog frontend filter bandwidth
if (vm.count("rx-bw")){
- std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % rx_bw << std::endl;
+ std::cout << boost::format("Setting RX Bandwidth: %f MHz...") % (rx_bw/1e6) << std::endl;
rx_usrp->set_rx_bandwidth(rx_bw, channel);
- std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % rx_usrp->get_rx_bandwidth(channel) << std::endl << std::endl;
+ std::cout << boost::format("Actual RX Bandwidth: %f MHz...") % (rx_usrp->get_rx_bandwidth(channel)/1e6) << std::endl << std::endl;
}
}
//set the receive antenna
diff --git a/host/lib/usrp/common/ad9361_ctrl.hpp b/host/lib/usrp/common/ad9361_ctrl.hpp
index 7d44700fe..f831f870d 100644
--- a/host/lib/usrp/common/ad9361_ctrl.hpp
+++ b/host/lib/usrp/common/ad9361_ctrl.hpp
@@ -52,7 +52,7 @@ public:
static uhd::meta_range_t get_gain_range(const std::string &which)
{
if(which[0] == 'R') {
- return uhd::meta_range_t(0.0, 73.0, 1.0);
+ return uhd::meta_range_t(0.0, 76.0, 1.0);
} else {
return uhd::meta_range_t(0.0, 89.75, 0.25);
}
diff --git a/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp b/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
index 8ee7bf231..1ea771db0 100644
--- a/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
+++ b/host/lib/usrp/common/ad9361_driver/ad9361_device.cpp
@@ -1854,31 +1854,16 @@ double ad9361_device_t::tune(direction_t direction, const double value)
/* Set the gain of RX1, RX2, TX1, or TX2.
*
- * Note that the 'value' passed to this function is the actual gain value,
- * _not_ the gain index. This is the opposite of the eval software's GUI!
- * Also note that the RX chains are done in terms of gain, and the TX chains
- * are done in terms of attenuation. */
+ * Note that the 'value' passed to this function is the gain index
+ * for RX. Also note that the RX chains are done in terms of gain, and
+ * the TX chains are done in terms of attenuation. */
double ad9361_device_t::set_gain(direction_t direction, chain_t chain, const double value)
{
boost::lock_guard<boost::recursive_mutex> lock(_mutex);
if (direction == RX) {
- /* Indexing the gain tables requires an offset from the requested
- * amount of total gain in dB:
- * < 1300MHz: dB + 5
- * >= 1300MHz and < 4000MHz: dB + 3
- * >= 4000MHz and <= 6000MHz: dB + 14
- */
- int gain_offset = 0;
- if (_rx_freq < 1300e6) {
- gain_offset = 5;
- } else if (_rx_freq < 4000e6) {
- gain_offset = 3;
- } else {
- gain_offset = 14;
- }
- int gain_index = static_cast<int>(value + gain_offset);
+ int gain_index = static_cast<int>(value);
/* Clip the gain values to the proper min/max gain values. */
if (gain_index > 76)
@@ -1894,7 +1879,7 @@ double ad9361_device_t::set_gain(direction_t direction, chain_t chain, const dou
_io_iface->poke8(0x10c, gain_index);
}
- return gain_index - gain_offset;
+ return gain_index;
} else {
/* Setting the below bits causes a change in the TX attenuation word
* to immediately take effect. */
diff --git a/host/lib/utils/paths.cpp b/host/lib/utils/paths.cpp
index e304555bd..f29318ddd 100644
--- a/host/lib/utils/paths.cpp
+++ b/host/lib/utils/paths.cpp
@@ -173,11 +173,14 @@ std::string uhd::get_tmp_path(void){
}
std::string uhd::get_app_path(void){
- const char *appdata_path = std::getenv("APPDATA");
- if (appdata_path != NULL) return appdata_path;
+ const std::string uhdcalib_path = get_env_var("UHD_CONFIG_DIR");
+ if (not uhdcalib_path.empty()) return uhdcalib_path;
- const char *home_path = std::getenv("HOME");
- if (home_path != NULL) return home_path;
+ const std::string appdata_path = get_env_var("APPDATA");
+ if (not appdata_path.empty()) return appdata_path;
+
+ const std::string home_path = get_env_var("HOME");
+ if (not home_path.empty()) return home_path;
return uhd::get_tmp_path();
}
@@ -348,6 +351,7 @@ std::string uhd::find_image_path(const std::string &image_name, const std::strin
}
/* If we made it this far, then we didn't find anything. */
+ images_dir = "<no images directory located>";
throw uhd::io_error("Could not find path for image: " + image_name
+ "\n\n"
+ "Using images directory: " + images_dir
diff --git a/images/.gitignore b/images/.gitignore
index 8947b7a83..6cebd43d7 100644
--- a/images/.gitignore
+++ b/images/.gitignore
@@ -1,2 +1,7 @@
/build
/images
+uhdimgs.pyc
+uhd-images*.tar.gz
+uhd-images*.tar.xz
+uhd-images*.zip
+uhd-images*.md5