make HackRF bias tee configurable (#794)

This commit is contained in:
Dr.-Ing. Johannes Pohl
2020-07-29 15:35:11 +02:00
committed by GitHub
parent ddff7078cb
commit 88fa644ead
10 changed files with 582 additions and 497 deletions

View File

@@ -252,9 +252,12 @@ jobs:
displayName: "Install build dependencies"
- script: |
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8d748e26ccc9afc8ea0d0201ae234fda35de721e/Formula/boost.rb
echo "Reinstall icu4c"
brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
echo "Link icu4c"
brew link icu4c --force
echo "Install boost"
brew install --force --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/8d748e26ccc9afc8ea0d0201ae234fda35de721e/Formula/boost.rb
cd /tmp
wget https://github.com/libusb/libusb/releases/download/v1.0.22/libusb-1.0.22.tar.bz2
tar xf libusb-1.0.22.tar.bz2

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>860</width>
<height>754</height>
<width>859</width>
<height>741</height>
</rect>
</property>
<property name="windowTitle">
@@ -81,19 +81,10 @@ QGroupBox::indicator:checked {
<number>0</number>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="13" column="1">
<widget class="QSpinBox" name="spinBoxFreqCorrection">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set the frequency correction in &lt;span style=&quot; font-weight:600;&quot;&gt;ppm&lt;/span&gt;. If you do not know what to enter here, just leave it to one.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimum">
<number>-1000</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="value">
<number>1</number>
<item row="4" column="0">
<widget class="QLabel" name="labelAntenna">
<property name="text">
<string>Antenna:</string>
</property>
</widget>
</item>
@@ -107,129 +98,33 @@ QGroupBox::indicator:checked {
</property>
</widget>
</item>
<item row="12" column="1">
<layout class="QGridLayout" name="gridLayout_8">
<item row="0" column="0">
<widget class="QSlider" name="sliderBasebandGain">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by &lt;span style=&quot; font-weight:600;&quot;&gt;complex downsampling&lt;/span&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="sliderPosition">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="tickPosition">
<enum>QSlider::NoTicks</enum>
</property>
<property name="tickInterval">
<number>0</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="spinBoxBasebandGain">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by &lt;span style=&quot; font-weight:600;&quot;&gt;complex downsampling&lt;/span&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="9" column="0">
<widget class="QLabel" name="labelBandwidth">
<property name="text">
<string>Bandwidth (Hz):</string>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="labelFreqCorrection">
<item row="2" column="1">
<widget class="QLineEdit" name="lineEditSubdevice">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set the frequency correction in &lt;span style=&quot; font-weight:600;&quot;&gt;ppm&lt;/span&gt;. If you do not know what to enter here, just leave it to one.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Frequency correction:</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Configure the subdevice of your USRP. For example, &lt;span style=&quot; font-weight:600;&quot;&gt;B:0 &lt;/span&gt;to select a WBX on slot B. You can learn more at &lt;a href=&quot;http://files.ettus.com/manual/page_configuration.html#config_subdev&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;http://files.ettus.com/manual/page_configuration.html#config_subdev.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="labelGain">
<item row="9" column="1">
<widget class="KillerDoubleSpinBox" name="spinBoxBandwidth">
<property name="decimals">
<number>10</number>
</property>
<property name="minimum">
<double>0.001000000000000</double>
</property>
<property name="maximum">
<double>1000000000000.000000000000000</double>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="labelSubdevice">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The gain (more exactly RF gain) is the gain applied to the RF signal. This amplifies the high frequent signal arriving at the antenna of your Software Defined Radio.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Configure the subdevice of your USRP. For example, &lt;span style=&quot; font-weight:600;&quot;&gt;B:0 &lt;/span&gt;to select a WBX on slot B. You can learn more at &lt;a href=&quot;http://files.ettus.com/manual/page_configuration.html#config_subdev&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;http://files.ettus.com/manual/page_configuration.html#config_subdev.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Gain:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBoxDeviceIdentifier">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You can enter a device identifier here if you have multiple SDRs of the same type attached to separate them. There is no need to configure this value otherwise. URH will &lt;span style=&quot; font-weight:600;&quot;&gt;automatically&lt;/span&gt; select an attached SDR of the configured type if you leave this value empty.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="labelDCCorrection">
<property name="toolTip">
<string>Apply DC correction during recording, that is, ensure the captured signal has a mean value of zero.</string>
</property>
<property name="text">
<string>DC correction:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelDeviceIdentifier">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You can enter a device identifier here if you have multiple SDRs of the same type attached to separate them. There is no need to configure this value otherwise. URH will &lt;span style=&quot; font-weight:600;&quot;&gt;automatically&lt;/span&gt; select an attached SDR of the configured type if you leave this value empty.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Device Identifier:</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="labelPort">
<property name="text">
<string>Port number:</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelIFGain">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The IF Gain is applied to the Intermediate Frequency signal in your Software Defined Radio. An IF signal has a lower frequency than the high frequent RF signal, so signal processing can be applied more efficiently.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>IF Gain:</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Device:</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Subdevice:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
@@ -249,10 +144,10 @@ QGroupBox::indicator:checked {
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="labelAntenna">
<item row="5" column="1">
<widget class="QLineEdit" name="lineEditIP">
<property name="text">
<string>Antenna:</string>
<string>127.0.0.1</string>
</property>
</widget>
</item>
@@ -270,73 +165,20 @@ QGroupBox::indicator:checked {
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cbDevice">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<item row="15" column="0">
<widget class="QLabel" name="labelDirectSampling">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set the direct sampling mode. If you do not know what to choose here, just set it to disabled. The&lt;span style=&quot; font-weight:600;&quot;&gt; native backend&lt;/span&gt; is recommended, when using this setting.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<item>
<property name="text">
<string>USRP</string>
</property>
</item>
<item>
<property name="text">
<string>HackRF</string>
</property>
</item>
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="lineEditIP">
<property name="text">
<string>127.0.0.1</string>
<string>Direct sampling:</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelIP">
<item row="9" column="0">
<widget class="QLabel" name="labelBandwidth">
<property name="text">
<string>IP address:</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="labelFreq">
<property name="text">
<string>Frequency (Hz):</string>
</property>
</widget>
</item>
<item row="8" column="2" rowspan="2">
<widget class="QToolButton" name="btnLockBWSR">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="urh.qrc">
<normaloff>:/icons/icons/lock.svg</normaloff>:/icons/icons/lock.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
<string>Bandwidth (Hz):</string>
</property>
</widget>
</item>
@@ -385,69 +227,6 @@ QGroupBox::indicator:checked {
</item>
</layout>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="spinBoxPort">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>1234</number>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="comboBoxAntenna"/>
</item>
<item row="14" column="1">
<widget class="QComboBox" name="comboBoxDirectSampling">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set the direct sampling mode. If you do not know what to choose here, just set it to disabled. The&lt;span style=&quot; font-weight:600;&quot;&gt; native backend&lt;/span&gt; is recommended, when using this setting.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelDirectSampling">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set the direct sampling mode. If you do not know what to choose here, just set it to disabled. The&lt;span style=&quot; font-weight:600;&quot;&gt; native backend&lt;/span&gt; is recommended, when using this setting.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Direct sampling:</string>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QLabel" name="labelNRepeat">
<property name="text">
<string>Repeat:</string>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QCheckBox" name="checkBoxDCCorrection">
<property name="toolTip">
<string>Apply DC correction during recording, that is, ensure the captured signal has a mean value of zero.</string>
</property>
<property name="text">
<string>Apply DC correction</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxChannel"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="labelChannel">
<property name="text">
<string>Channel:</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="labelSampleRate">
<property name="text">
@@ -482,7 +261,50 @@ QGroupBox::indicator:checked {
</item>
</layout>
</item>
<item row="15" column="1">
<item row="13" column="0">
<widget class="QLabel" name="labelFreqCorrection">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set the frequency correction in &lt;span style=&quot; font-weight:600;&quot;&gt;ppm&lt;/span&gt;. If you do not know what to enter here, just leave it to one.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Frequency correction:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBoxDeviceIdentifier">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You can enter a device identifier here if you have multiple SDRs of the same type attached to separate them. There is no need to configure this value otherwise. URH will &lt;span style=&quot; font-weight:600;&quot;&gt;automatically&lt;/span&gt; select an attached SDR of the configured type if you leave this value empty.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cbDevice">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>USRP</string>
</property>
</item>
<item>
<property name="text">
<string>HackRF</string>
</property>
</item>
</widget>
</item>
<item row="16" column="1">
<widget class="QSpinBox" name="spinBoxNRepeat">
<property name="specialValueText">
<string>Infinite</string>
@@ -492,6 +314,55 @@ QGroupBox::indicator:checked {
</property>
</widget>
</item>
<item row="12" column="1">
<layout class="QGridLayout" name="gridLayout_8">
<item row="0" column="0">
<widget class="QSlider" name="sliderBasebandGain">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by &lt;span style=&quot; font-weight:600;&quot;&gt;complex downsampling&lt;/span&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="sliderPosition">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="invertedControls">
<bool>false</bool>
</property>
<property name="tickPosition">
<enum>QSlider::NoTicks</enum>
</property>
<property name="tickInterval">
<number>0</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="spinBoxBasebandGain">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by &lt;span style=&quot; font-weight:600;&quot;&gt;complex downsampling&lt;/span&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="6" column="0">
<widget class="QLabel" name="labelPort">
<property name="text">
<string>Port number:</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="KillerDoubleSpinBox" name="spinBoxSampleRate">
<property name="decimals">
@@ -505,33 +376,182 @@ QGroupBox::indicator:checked {
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="KillerDoubleSpinBox" name="spinBoxBandwidth">
<property name="decimals">
<number>10</number>
</property>
<property name="minimum">
<double>0.001000000000000</double>
</property>
<property name="maximum">
<double>1000000000000.000000000000000</double>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="labelSubdevice">
<item row="10" column="0">
<widget class="QLabel" name="labelGain">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Configure the subdevice of your USRP. For example, &lt;span style=&quot; font-weight:600;&quot;&gt;B:0 &lt;/span&gt;to select a WBX on slot B. You can learn more at &lt;a href=&quot;http://files.ettus.com/manual/page_configuration.html#config_subdev&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;http://files.ettus.com/manual/page_configuration.html#config_subdev.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The gain (more exactly RF gain) is the gain applied to the RF signal. This amplifies the high frequent signal arriving at the antenna of your Software Defined Radio.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Subdevice:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>Gain:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lineEditSubdevice">
<item row="17" column="1">
<widget class="QCheckBox" name="checkBoxDCCorrection">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Configure the subdevice of your USRP. For example, &lt;span style=&quot; font-weight:600;&quot;&gt;B:0 &lt;/span&gt;to select a WBX on slot B. You can learn more at &lt;a href=&quot;http://files.ettus.com/manual/page_configuration.html#config_subdev&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;http://files.ettus.com/manual/page_configuration.html#config_subdev.&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>Apply DC correction during recording, that is, ensure the captured signal has a mean value of zero.</string>
</property>
<property name="text">
<string>Apply DC correction</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelDeviceIdentifier">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;You can enter a device identifier here if you have multiple SDRs of the same type attached to separate them. There is no need to configure this value otherwise. URH will &lt;span style=&quot; font-weight:600;&quot;&gt;automatically&lt;/span&gt; select an attached SDR of the configured type if you leave this value empty.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Device Identifier:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="comboBoxAntenna"/>
</item>
<item row="7" column="0">
<widget class="QLabel" name="labelFreq">
<property name="text">
<string>Frequency (Hz):</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="spinBoxPort">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>1234</number>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="labelIP">
<property name="text">
<string>IP address:</string>
</property>
</widget>
</item>
<item row="13" column="1">
<widget class="QSpinBox" name="spinBoxFreqCorrection">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set the frequency correction in &lt;span style=&quot; font-weight:600;&quot;&gt;ppm&lt;/span&gt;. If you do not know what to enter here, just leave it to one.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimum">
<number>-1000</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="labelNRepeat">
<property name="text">
<string>Repeat:</string>
</property>
</widget>
</item>
<item row="15" column="1">
<widget class="QComboBox" name="comboBoxDirectSampling">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set the direct sampling mode. If you do not know what to choose here, just set it to disabled. The&lt;span style=&quot; font-weight:600;&quot;&gt; native backend&lt;/span&gt; is recommended, when using this setting.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="labelDCCorrection">
<property name="toolTip">
<string>Apply DC correction during recording, that is, ensure the captured signal has a mean value of zero.</string>
</property>
<property name="text">
<string>DC correction:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxChannel"/>
</item>
<item row="11" column="0">
<widget class="QLabel" name="labelIFGain">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The IF Gain is applied to the Intermediate Frequency signal in your Software Defined Radio. An IF signal has a lower frequency than the high frequent RF signal, so signal processing can be applied more efficiently.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>IF Gain:</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="labelChannel">
<property name="text">
<string>Channel:</string>
</property>
</widget>
</item>
<item row="8" column="2" rowspan="2">
<widget class="QToolButton" name="btnLockBWSR">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="urh.qrc">
<normaloff>:/icons/icons/lock.svg</normaloff>:/icons/icons/lock.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Device:</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="labelBiasTee">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enable the bias tee of your SDR, if you have an external LNA connected. Leave this disabled if you have no external LNA attached.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Bias Tee:</string>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="QCheckBox" name="checkBoxBiasTee">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enable the bias tee of your SDR, if you have an external LNA connected. Leave this disabled if you have no external LNA attached.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Enable Bias Tee</string>
</property>
</widget>
</item>

View File

@@ -106,6 +106,11 @@ class DeviceSettingsWidget(QWidget):
checked = True if checked == "True" else False
self.ui.checkBoxDCCorrection.setChecked(checked)
checked = conf_dict.get("bias_tee_enabled", False)
if isinstance(checked, str):
checked = True if checked == "True" else False
self.ui.checkBoxBiasTee.setChecked(checked)
self.emit_editing_finished_signals()
@property
@@ -164,6 +169,7 @@ class DeviceSettingsWidget(QWidget):
self.ui.comboBoxDeviceIdentifier.editTextChanged.connect(self.on_combo_box_device_identifier_edit_text_changed)
self.ui.checkBoxBiasTee.clicked.connect(self.on_check_box_bias_tee_clicked)
self.ui.checkBoxDCCorrection.clicked.connect(self.on_check_box_dc_correction_clicked)
def set_gain_defaults(self):
@@ -307,6 +313,10 @@ class DeviceSettingsWidget(QWidget):
self.ui.checkBoxDCCorrection.setVisible(show_dc_correction)
self.ui.labelDCCorrection.setVisible(show_dc_correction)
show_bias_tee = "bias_tee_enabled" in conf and self.device is not None and self.device.bias_tee_enabled is not None
self.ui.labelBiasTee.setVisible(show_bias_tee)
self.ui.checkBoxBiasTee.setVisible(show_bias_tee)
def get_devices_for_combobox(self, continuous_send_mode):
items = []
for device_name in self.backend_handler.DEVICE_NAMES:
@@ -357,7 +367,7 @@ class DeviceSettingsWidget(QWidget):
def emit_device_parameters_changed(self):
settings = {"name": str(self.device.name)}
for attrib in ("frequency", "sample_rate", "bandwidth", "gain", "if_gain", "baseband_gain", "freq_correction",
"antenna_index", "num_sending_repeats", "apply_dc_correction", "subdevice"):
"antenna_index", "num_sending_repeats", "apply_dc_correction", "subdevice", "bias_tee_enabled"):
try:
value = getattr(self.device, attrib, None)
if value is not None:
@@ -510,6 +520,11 @@ class DeviceSettingsWidget(QWidget):
self.ui.comboBoxDeviceIdentifier.clear()
self.ui.comboBoxDeviceIdentifier.addItems(self.device.get_device_list())
@pyqtSlot(bool)
def on_check_box_bias_tee_clicked(self, checked: bool):
if self.device is not None:
self.device.bias_tee_enabled = bool(checked)
@pyqtSlot(bool)
def on_check_box_dc_correction_clicked(self, checked: bool):
self.device.apply_dc_correction = bool(checked)

View File

@@ -158,6 +158,10 @@ class VirtualDevice(QObject):
if mode == Mode.spectrum:
self.__dev.is_in_spectrum_mode = True
@property
def backend_is_native(self) -> bool:
return self.backend == Backends.native
@property
def data_type(self):
if self.backend == Backends.native:
@@ -213,6 +217,18 @@ class VirtualDevice(QObject):
if self.backend == Backends.native:
self.__dev.apply_dc_correction = bool(value)
@property
def bias_tee_enabled(self):
if self.backend_is_native:
return self.__dev.bias_tee_enabled
else:
return None
@bias_tee_enabled.setter
def bias_tee_enabled(self, value: bool):
if self.backend_is_native:
self.__dev.bias_tee_enabled = value
@property
def bandwidth_is_adjustable(self):
if self.backend == Backends.grc:

View File

@@ -48,7 +48,8 @@ DEVICE_CONFIG["HackRF"] = {
"rx_rf_gain": [0, 14],
"rx_if_gain": [0, 8, 16, 24, 32, 40],
"tx_if_gain": list(range(0, 48)),
"rx_baseband_gain": list(range(0, 63, 2)) # only available in RX
"rx_baseband_gain": list(range(0, 63, 2)), # only available in RX
"bias_tee_enabled": [False, True]
}
# https://kb.ettus.com/About_USRP_Bandwidths_and_Sampling_Rates

View File

@@ -39,6 +39,7 @@ class Device(object):
SET_FREQUENCY_CORRECTION = 8
SET_CHANNEL_INDEX = 9
SET_ANTENNA_INDEX = 10
SET_BIAS_TEE_ENABLED = 11
ASYNCHRONOUS = False
@@ -250,6 +251,7 @@ class Device(object):
self.__antenna_index = 0
self.__freq_correction = 0
self.__bias_tee_enabled = False
self.__direct_sampling_mode = 0
self.bandwidth_is_adjustable = True
@@ -523,6 +525,23 @@ class Device(object):
except (BrokenPipeError, OSError):
pass
@property
def bias_tee_enabled(self):
return self.__bias_tee_enabled
@bias_tee_enabled.setter
def bias_tee_enabled(self, value: bool):
value = bool(value)
if value != self.__bias_tee_enabled:
self.__bias_tee_enabled = value
self.set_device_bias_tee_enabled(value)
def set_device_bias_tee_enabled(self, value):
try:
self.parent_ctrl_conn.send((self.Command.SET_BIAS_TEE_ENABLED.name, int(value)))
except (BrokenPipeError, OSError):
pass
@property
def freq_correction(self):
return self.__freq_correction

View File

@@ -1,3 +1,4 @@
from collections import OrderedDict
from multiprocessing import Array
from multiprocessing.connection import Connection
@@ -13,7 +14,8 @@ class HackRF(Device):
DEVICE_METHODS = Device.DEVICE_METHODS.copy()
DEVICE_METHODS.update({
Device.Command.SET_FREQUENCY.name: "set_freq",
Device.Command.SET_BANDWIDTH.name: "set_baseband_filter_bandwidth"
Device.Command.SET_BANDWIDTH.name: "set_baseband_filter_bandwidth",
Device.Command.SET_BIAS_TEE_ENABLED.name: "set_bias_tee"
})
DATA_TYPE = np.int8
@@ -31,7 +33,7 @@ class HackRF(Device):
msg = "SETUP"
if device_identifier:
msg += " ({})".format(device_identifier)
msg += ": "+str(ret)
msg += ": " + str(ret)
ctrl_connection.send(msg)
return ret == 0
@@ -87,6 +89,17 @@ class HackRF(Device):
-9999: "HACKRF_ERROR_OTHER"
}
@property
def device_parameters(self) -> OrderedDict:
return OrderedDict([(self.Command.SET_FREQUENCY.name, self.frequency),
(self.Command.SET_SAMPLE_RATE.name, self.sample_rate),
(self.Command.SET_BANDWIDTH.name, self.bandwidth),
(self.Command.SET_RF_GAIN.name, self.gain),
(self.Command.SET_IF_GAIN.name, self.if_gain),
(self.Command.SET_BB_GAIN.name, self.baseband_gain),
(self.Command.SET_BIAS_TEE_ENABLED.name, self.bias_tee_enabled),
("identifier", self.device_serial)])
@property
def has_multi_device_support(self):
return hackrf.has_multi_device_support()

View File

@@ -1,3 +1,5 @@
from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t
cdef extern from "libhackrf/hackrf.h":
enum hackrf_error:
HACKRF_SUCCESS = 0
@@ -40,11 +42,6 @@ cdef extern from "libhackrf/hackrf.h":
ctypedef struct hackrf_device:
pass
ctypedef unsigned char uint8_t
ctypedef unsigned short uint16_t
ctypedef unsigned int uint32_t
ctypedef unsigned long long uint64_t
ctypedef struct hackrf_transfer:
hackrf_device* device
uint8_t* buffer
@@ -81,7 +78,7 @@ cdef extern from "libhackrf/hackrf.h":
int hackrf_open(hackrf_device** device);
IF HACKRF_MULTI_DEVICE_SUPPORT == 1:
int hackrf_open_by_serial(const char* const desired_serial_number, hackrf_device** device)
int hackrf_open_by_serial(const char* desired_serial_number, hackrf_device** device)
hackrf_device_list_t* hackrf_device_list()
@@ -108,12 +105,11 @@ cdef extern from "libhackrf/hackrf.h":
int hackrf_rffc5071_write(hackrf_device* device, uint8_t register_number, uint16_t value)
int hackrf_spiflash_erase(hackrf_device* device)
int hackrf_spiflash_write(hackrf_device* device, const uint32_t address, const uint16_t length, unsigned char* const data)
int hackrf_spiflash_write(hackrf_device* device, const uint32_t address, const uint16_t length, const unsigned char* data)
int hackrf_spiflash_read(hackrf_device* device, const uint32_t address, const uint16_t length, unsigned char* data)
# device will need to be reset after hackrf_cpld_write
int hackrf_cpld_write(hackrf_device* device,
unsigned char* const data, const unsigned int total_length)
int hackrf_cpld_write(hackrf_device* device, const unsigned char* data, const unsigned int total_length)
int hackrf_board_id_read(hackrf_device* device, uint8_t* value)
int hackrf_version_string_read(hackrf_device* device, char* version, uint8_t length)
@@ -130,7 +126,10 @@ cdef extern from "libhackrf/hackrf.h":
# external amp, bool on/off
int hackrf_set_amp_enable(hackrf_device* device, const uint8_t value)
# Bias Tee, bool on/off
int hackrf_set_antenna_enable(hackrf_device* device, const uint8_t value)
int hackrf_board_partid_serialno_read(hackrf_device* device, read_partid_serialno_t* read_partid_serialno)
# range 0-40 step 8d, IF gain in osmosdr

View File

@@ -1,4 +1,5 @@
cimport urh.dev.native.lib.chackrf as chackrf
from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t
from libc.stdlib cimport malloc
import time
@@ -70,7 +71,7 @@ ELSE:
cpdef get_device_list():
return None
cpdef setup(str serial):
cpdef int setup(str serial):
"""
Convenience method for init + open. This one is used by HackRF class.
:return:
@@ -78,13 +79,13 @@ cpdef setup(str serial):
init()
return open(serial)
cpdef init():
cpdef int init():
return chackrf.hackrf_init()
cpdef exit():
cpdef int exit():
return chackrf.hackrf_exit()
cpdef close():
cpdef int close():
return chackrf.hackrf_close(_c_device)
cpdef int start_rx_mode(callback):
@@ -93,42 +94,25 @@ cpdef int start_rx_mode(callback):
f = callback
return chackrf.hackrf_start_rx(_c_device, _c_callback_recv, NULL)
cpdef stop_rx_mode():
cpdef int stop_rx_mode():
global RUNNING
RUNNING = -1
time.sleep(TIMEOUT)
return chackrf.hackrf_stop_rx(_c_device)
cpdef start_tx_mode(callback):
cpdef int start_tx_mode(callback):
global f, RUNNING
RUNNING = 0
f = callback
return chackrf.hackrf_start_tx(_c_device, _c_callback_send, NULL)
cpdef stop_tx_mode():
cpdef int stop_tx_mode():
global RUNNING
RUNNING = -1
time.sleep(TIMEOUT)
return chackrf.hackrf_stop_tx(_c_device)
cpdef board_id_read():
cdef unsigned char value
ret = chackrf.hackrf_board_id_read(_c_device, &value)
if ret == hackrf_success:
return value
else:
return ""
cpdef version_string_read():
cdef char*version = <char *> malloc(20 * sizeof(char))
cdef unsigned char length = 20
ret = chackrf.hackrf_version_string_read(_c_device, version, length)
if ret == hackrf_success:
return version.decode('UTF-8')
else:
return ""
cpdef set_freq(freq_hz):
cpdef int set_freq(freq_hz):
time.sleep(TIMEOUT)
return chackrf.hackrf_set_freq(_c_device, freq_hz)
@@ -140,35 +124,39 @@ cpdef is_streaming():
else:
return False
cpdef set_rf_gain(value):
""" Enable or disable RF amplifier """
cpdef int set_amp_enable(value):
time.sleep(TIMEOUT)
cdef uint8_t val = 1 if value else 0
return chackrf.hackrf_set_amp_enable(_c_device, val)
cpdef int set_rf_gain(value):
""" Enable or disable RF amplifier """
return set_amp_enable(value)
cpdef set_if_rx_gain(value):
cpdef int set_if_rx_gain(value):
""" Sets the LNA gain, in 8Db steps, maximum value of 40 """
time.sleep(TIMEOUT)
return chackrf.hackrf_set_lna_gain(_c_device, value)
cpdef set_if_tx_gain(value):
cpdef int set_if_tx_gain(value):
""" Sets the txvga gain, in 1db steps, maximum value of 47 """
time.sleep(TIMEOUT)
return chackrf.hackrf_set_txvga_gain(_c_device, value)
cpdef set_baseband_gain(value):
cpdef int set_baseband_gain(value):
""" Sets the vga gain, in 2db steps, maximum value of 62 """
time.sleep(TIMEOUT)
return chackrf.hackrf_set_vga_gain(_c_device, value)
cpdef set_sample_rate(sample_rate):
cpdef int set_sample_rate(sample_rate):
time.sleep(TIMEOUT)
return chackrf.hackrf_set_sample_rate(_c_device, sample_rate)
cpdef set_amp_enable(value):
cpdef int set_bias_tee(on_or_off):
time.sleep(TIMEOUT)
cdef bint val = 1 if value else 0
return chackrf.hackrf_set_amp_enable(_c_device, val)
cdef uint8_t bias_tee = 1 if on_or_off else 0
return chackrf.hackrf_set_antenna_enable(_c_device, bias_tee)
cpdef set_baseband_filter_bandwidth(bandwidth_hz):
cpdef int set_baseband_filter_bandwidth(bandwidth_hz):
time.sleep(TIMEOUT)
return chackrf.hackrf_set_baseband_filter_bandwidth(_c_device, bandwidth_hz)

View File

@@ -2,7 +2,8 @@
#
#
# WARNING! All changes made in this file will be lost!
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -11,7 +12,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_FormDeviceSettings(object):
def setupUi(self, FormDeviceSettings):
FormDeviceSettings.setObjectName("FormDeviceSettings")
FormDeviceSettings.resize(860, 754)
FormDeviceSettings.resize(859, 741)
self.verticalLayout = QtWidgets.QVBoxLayout(FormDeviceSettings)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
@@ -51,64 +52,24 @@ class Ui_FormDeviceSettings(object):
self.frame_2.setObjectName("frame_2")
self.gridLayout = QtWidgets.QGridLayout(self.frame_2)
self.gridLayout.setObjectName("gridLayout")
self.spinBoxFreqCorrection = QtWidgets.QSpinBox(self.frame_2)
self.spinBoxFreqCorrection.setMinimum(-1000)
self.spinBoxFreqCorrection.setMaximum(1000)
self.spinBoxFreqCorrection.setProperty("value", 1)
self.spinBoxFreqCorrection.setObjectName("spinBoxFreqCorrection")
self.gridLayout.addWidget(self.spinBoxFreqCorrection, 13, 1, 1, 1)
self.labelAntenna = QtWidgets.QLabel(self.frame_2)
self.labelAntenna.setObjectName("labelAntenna")
self.gridLayout.addWidget(self.labelAntenna, 4, 0, 1, 1)
self.labelBasebandGain = QtWidgets.QLabel(self.frame_2)
self.labelBasebandGain.setObjectName("labelBasebandGain")
self.gridLayout.addWidget(self.labelBasebandGain, 12, 0, 1, 1)
self.gridLayout_8 = QtWidgets.QGridLayout()
self.gridLayout_8.setObjectName("gridLayout_8")
self.sliderBasebandGain = QtWidgets.QSlider(self.frame_2)
self.sliderBasebandGain.setSliderPosition(0)
self.sliderBasebandGain.setOrientation(QtCore.Qt.Horizontal)
self.sliderBasebandGain.setInvertedAppearance(False)
self.sliderBasebandGain.setInvertedControls(False)
self.sliderBasebandGain.setTickPosition(QtWidgets.QSlider.NoTicks)
self.sliderBasebandGain.setTickInterval(0)
self.sliderBasebandGain.setObjectName("sliderBasebandGain")
self.gridLayout_8.addWidget(self.sliderBasebandGain, 0, 0, 1, 1)
self.spinBoxBasebandGain = QtWidgets.QSpinBox(self.frame_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.spinBoxBasebandGain.sizePolicy().hasHeightForWidth())
self.spinBoxBasebandGain.setSizePolicy(sizePolicy)
self.spinBoxBasebandGain.setObjectName("spinBoxBasebandGain")
self.gridLayout_8.addWidget(self.spinBoxBasebandGain, 0, 1, 1, 1)
self.gridLayout.addLayout(self.gridLayout_8, 12, 1, 1, 1)
self.labelBandwidth = QtWidgets.QLabel(self.frame_2)
self.labelBandwidth.setObjectName("labelBandwidth")
self.gridLayout.addWidget(self.labelBandwidth, 9, 0, 1, 1)
self.labelFreqCorrection = QtWidgets.QLabel(self.frame_2)
self.labelFreqCorrection.setObjectName("labelFreqCorrection")
self.gridLayout.addWidget(self.labelFreqCorrection, 13, 0, 1, 1)
self.labelGain = QtWidgets.QLabel(self.frame_2)
self.labelGain.setObjectName("labelGain")
self.gridLayout.addWidget(self.labelGain, 10, 0, 1, 1)
self.comboBoxDeviceIdentifier = QtWidgets.QComboBox(self.frame_2)
self.comboBoxDeviceIdentifier.setEditable(True)
self.comboBoxDeviceIdentifier.setInsertPolicy(QtWidgets.QComboBox.NoInsert)
self.comboBoxDeviceIdentifier.setObjectName("comboBoxDeviceIdentifier")
self.gridLayout.addWidget(self.comboBoxDeviceIdentifier, 1, 1, 1, 1)
self.labelDCCorrection = QtWidgets.QLabel(self.frame_2)
self.labelDCCorrection.setObjectName("labelDCCorrection")
self.gridLayout.addWidget(self.labelDCCorrection, 16, 0, 1, 1)
self.labelDeviceIdentifier = QtWidgets.QLabel(self.frame_2)
self.labelDeviceIdentifier.setObjectName("labelDeviceIdentifier")
self.gridLayout.addWidget(self.labelDeviceIdentifier, 1, 0, 1, 1)
self.labelPort = QtWidgets.QLabel(self.frame_2)
self.labelPort.setObjectName("labelPort")
self.gridLayout.addWidget(self.labelPort, 6, 0, 1, 1)
self.labelIFGain = QtWidgets.QLabel(self.frame_2)
self.labelIFGain.setObjectName("labelIFGain")
self.gridLayout.addWidget(self.labelIFGain, 11, 0, 1, 1)
self.label_3 = QtWidgets.QLabel(self.frame_2)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1)
self.lineEditSubdevice = QtWidgets.QLineEdit(self.frame_2)
self.lineEditSubdevice.setObjectName("lineEditSubdevice")
self.gridLayout.addWidget(self.lineEditSubdevice, 2, 1, 1, 1)
self.spinBoxBandwidth = KillerDoubleSpinBox(self.frame_2)
self.spinBoxBandwidth.setDecimals(10)
self.spinBoxBandwidth.setMinimum(0.001)
self.spinBoxBandwidth.setMaximum(1000000000000.0)
self.spinBoxBandwidth.setObjectName("spinBoxBandwidth")
self.gridLayout.addWidget(self.spinBoxBandwidth, 9, 1, 1, 1)
self.labelSubdevice = QtWidgets.QLabel(self.frame_2)
self.labelSubdevice.setObjectName("labelSubdevice")
self.gridLayout.addWidget(self.labelSubdevice, 2, 0, 1, 1)
self.spinBoxFreq = KillerDoubleSpinBox(self.frame_2)
self.spinBoxFreq.setDecimals(10)
self.spinBoxFreq.setMinimum(0.001)
@@ -116,47 +77,20 @@ class Ui_FormDeviceSettings(object):
self.spinBoxFreq.setProperty("value", 433920000.0)
self.spinBoxFreq.setObjectName("spinBoxFreq")
self.gridLayout.addWidget(self.spinBoxFreq, 7, 1, 1, 1)
self.labelAntenna = QtWidgets.QLabel(self.frame_2)
self.labelAntenna.setObjectName("labelAntenna")
self.gridLayout.addWidget(self.labelAntenna, 4, 0, 1, 1)
self.lineEditIP = QtWidgets.QLineEdit(self.frame_2)
self.lineEditIP.setObjectName("lineEditIP")
self.gridLayout.addWidget(self.lineEditIP, 5, 1, 1, 1)
self.btnRefreshDeviceIdentifier = QtWidgets.QToolButton(self.frame_2)
icon = QtGui.QIcon.fromTheme("view-refresh")
self.btnRefreshDeviceIdentifier.setIcon(icon)
self.btnRefreshDeviceIdentifier.setObjectName("btnRefreshDeviceIdentifier")
self.gridLayout.addWidget(self.btnRefreshDeviceIdentifier, 1, 2, 1, 1)
self.cbDevice = QtWidgets.QComboBox(self.frame_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.cbDevice.sizePolicy().hasHeightForWidth())
self.cbDevice.setSizePolicy(sizePolicy)
self.cbDevice.setObjectName("cbDevice")
self.cbDevice.addItem("")
self.cbDevice.addItem("")
self.gridLayout.addWidget(self.cbDevice, 0, 1, 1, 1)
self.lineEditIP = QtWidgets.QLineEdit(self.frame_2)
self.lineEditIP.setObjectName("lineEditIP")
self.gridLayout.addWidget(self.lineEditIP, 5, 1, 1, 1)
self.labelIP = QtWidgets.QLabel(self.frame_2)
self.labelIP.setObjectName("labelIP")
self.gridLayout.addWidget(self.labelIP, 5, 0, 1, 1)
self.labelFreq = QtWidgets.QLabel(self.frame_2)
self.labelFreq.setObjectName("labelFreq")
self.gridLayout.addWidget(self.labelFreq, 7, 0, 1, 1)
self.btnLockBWSR = QtWidgets.QToolButton(self.frame_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.btnLockBWSR.sizePolicy().hasHeightForWidth())
self.btnLockBWSR.setSizePolicy(sizePolicy)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icons/icons/lock.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnLockBWSR.setIcon(icon)
self.btnLockBWSR.setIconSize(QtCore.QSize(16, 16))
self.btnLockBWSR.setCheckable(True)
self.btnLockBWSR.setChecked(True)
self.btnLockBWSR.setObjectName("btnLockBWSR")
self.gridLayout.addWidget(self.btnLockBWSR, 8, 2, 2, 1)
self.labelDirectSampling = QtWidgets.QLabel(self.frame_2)
self.labelDirectSampling.setObjectName("labelDirectSampling")
self.gridLayout.addWidget(self.labelDirectSampling, 15, 0, 1, 1)
self.labelBandwidth = QtWidgets.QLabel(self.frame_2)
self.labelBandwidth.setObjectName("labelBandwidth")
self.gridLayout.addWidget(self.labelBandwidth, 9, 0, 1, 1)
self.gridLayout_5 = QtWidgets.QGridLayout()
self.gridLayout_5.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
self.gridLayout_5.setObjectName("gridLayout_5")
@@ -178,34 +112,6 @@ class Ui_FormDeviceSettings(object):
self.spinBoxGain.setObjectName("spinBoxGain")
self.gridLayout_5.addWidget(self.spinBoxGain, 0, 1, 1, 1)
self.gridLayout.addLayout(self.gridLayout_5, 10, 1, 1, 1)
self.spinBoxPort = QtWidgets.QSpinBox(self.frame_2)
self.spinBoxPort.setMinimum(1)
self.spinBoxPort.setMaximum(65535)
self.spinBoxPort.setProperty("value", 1234)
self.spinBoxPort.setObjectName("spinBoxPort")
self.gridLayout.addWidget(self.spinBoxPort, 6, 1, 1, 1)
self.comboBoxAntenna = QtWidgets.QComboBox(self.frame_2)
self.comboBoxAntenna.setObjectName("comboBoxAntenna")
self.gridLayout.addWidget(self.comboBoxAntenna, 4, 1, 1, 1)
self.comboBoxDirectSampling = QtWidgets.QComboBox(self.frame_2)
self.comboBoxDirectSampling.setObjectName("comboBoxDirectSampling")
self.gridLayout.addWidget(self.comboBoxDirectSampling, 14, 1, 1, 1)
self.labelDirectSampling = QtWidgets.QLabel(self.frame_2)
self.labelDirectSampling.setObjectName("labelDirectSampling")
self.gridLayout.addWidget(self.labelDirectSampling, 14, 0, 1, 1)
self.labelNRepeat = QtWidgets.QLabel(self.frame_2)
self.labelNRepeat.setObjectName("labelNRepeat")
self.gridLayout.addWidget(self.labelNRepeat, 15, 0, 1, 1)
self.checkBoxDCCorrection = QtWidgets.QCheckBox(self.frame_2)
self.checkBoxDCCorrection.setChecked(True)
self.checkBoxDCCorrection.setObjectName("checkBoxDCCorrection")
self.gridLayout.addWidget(self.checkBoxDCCorrection, 16, 1, 1, 1)
self.comboBoxChannel = QtWidgets.QComboBox(self.frame_2)
self.comboBoxChannel.setObjectName("comboBoxChannel")
self.gridLayout.addWidget(self.comboBoxChannel, 3, 1, 1, 1)
self.labelChannel = QtWidgets.QLabel(self.frame_2)
self.labelChannel.setObjectName("labelChannel")
self.gridLayout.addWidget(self.labelChannel, 3, 0, 1, 1)
self.labelSampleRate = QtWidgets.QLabel(self.frame_2)
self.labelSampleRate.setObjectName("labelSampleRate")
self.gridLayout.addWidget(self.labelSampleRate, 8, 0, 1, 1)
@@ -224,28 +130,129 @@ class Ui_FormDeviceSettings(object):
self.spinBoxIFGain.setObjectName("spinBoxIFGain")
self.gridLayout_7.addWidget(self.spinBoxIFGain, 0, 1, 1, 1)
self.gridLayout.addLayout(self.gridLayout_7, 11, 1, 1, 1)
self.labelFreqCorrection = QtWidgets.QLabel(self.frame_2)
self.labelFreqCorrection.setObjectName("labelFreqCorrection")
self.gridLayout.addWidget(self.labelFreqCorrection, 13, 0, 1, 1)
self.comboBoxDeviceIdentifier = QtWidgets.QComboBox(self.frame_2)
self.comboBoxDeviceIdentifier.setEditable(True)
self.comboBoxDeviceIdentifier.setInsertPolicy(QtWidgets.QComboBox.NoInsert)
self.comboBoxDeviceIdentifier.setObjectName("comboBoxDeviceIdentifier")
self.gridLayout.addWidget(self.comboBoxDeviceIdentifier, 1, 1, 1, 1)
self.cbDevice = QtWidgets.QComboBox(self.frame_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.cbDevice.sizePolicy().hasHeightForWidth())
self.cbDevice.setSizePolicy(sizePolicy)
self.cbDevice.setObjectName("cbDevice")
self.cbDevice.addItem("")
self.cbDevice.addItem("")
self.gridLayout.addWidget(self.cbDevice, 0, 1, 1, 1)
self.spinBoxNRepeat = QtWidgets.QSpinBox(self.frame_2)
self.spinBoxNRepeat.setMaximum(999999999)
self.spinBoxNRepeat.setObjectName("spinBoxNRepeat")
self.gridLayout.addWidget(self.spinBoxNRepeat, 15, 1, 1, 1)
self.gridLayout.addWidget(self.spinBoxNRepeat, 16, 1, 1, 1)
self.gridLayout_8 = QtWidgets.QGridLayout()
self.gridLayout_8.setObjectName("gridLayout_8")
self.sliderBasebandGain = QtWidgets.QSlider(self.frame_2)
self.sliderBasebandGain.setSliderPosition(0)
self.sliderBasebandGain.setOrientation(QtCore.Qt.Horizontal)
self.sliderBasebandGain.setInvertedAppearance(False)
self.sliderBasebandGain.setInvertedControls(False)
self.sliderBasebandGain.setTickPosition(QtWidgets.QSlider.NoTicks)
self.sliderBasebandGain.setTickInterval(0)
self.sliderBasebandGain.setObjectName("sliderBasebandGain")
self.gridLayout_8.addWidget(self.sliderBasebandGain, 0, 0, 1, 1)
self.spinBoxBasebandGain = QtWidgets.QSpinBox(self.frame_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.spinBoxBasebandGain.sizePolicy().hasHeightForWidth())
self.spinBoxBasebandGain.setSizePolicy(sizePolicy)
self.spinBoxBasebandGain.setObjectName("spinBoxBasebandGain")
self.gridLayout_8.addWidget(self.spinBoxBasebandGain, 0, 1, 1, 1)
self.gridLayout.addLayout(self.gridLayout_8, 12, 1, 1, 1)
self.labelPort = QtWidgets.QLabel(self.frame_2)
self.labelPort.setObjectName("labelPort")
self.gridLayout.addWidget(self.labelPort, 6, 0, 1, 1)
self.spinBoxSampleRate = KillerDoubleSpinBox(self.frame_2)
self.spinBoxSampleRate.setDecimals(10)
self.spinBoxSampleRate.setMinimum(0.001)
self.spinBoxSampleRate.setMaximum(1000000000000.0)
self.spinBoxSampleRate.setObjectName("spinBoxSampleRate")
self.gridLayout.addWidget(self.spinBoxSampleRate, 8, 1, 1, 1)
self.spinBoxBandwidth = KillerDoubleSpinBox(self.frame_2)
self.spinBoxBandwidth.setDecimals(10)
self.spinBoxBandwidth.setMinimum(0.001)
self.spinBoxBandwidth.setMaximum(1000000000000.0)
self.spinBoxBandwidth.setObjectName("spinBoxBandwidth")
self.gridLayout.addWidget(self.spinBoxBandwidth, 9, 1, 1, 1)
self.labelSubdevice = QtWidgets.QLabel(self.frame_2)
self.labelSubdevice.setObjectName("labelSubdevice")
self.gridLayout.addWidget(self.labelSubdevice, 2, 0, 1, 1)
self.lineEditSubdevice = QtWidgets.QLineEdit(self.frame_2)
self.lineEditSubdevice.setObjectName("lineEditSubdevice")
self.gridLayout.addWidget(self.lineEditSubdevice, 2, 1, 1, 1)
self.labelGain = QtWidgets.QLabel(self.frame_2)
self.labelGain.setObjectName("labelGain")
self.gridLayout.addWidget(self.labelGain, 10, 0, 1, 1)
self.checkBoxDCCorrection = QtWidgets.QCheckBox(self.frame_2)
self.checkBoxDCCorrection.setChecked(True)
self.checkBoxDCCorrection.setObjectName("checkBoxDCCorrection")
self.gridLayout.addWidget(self.checkBoxDCCorrection, 17, 1, 1, 1)
self.labelDeviceIdentifier = QtWidgets.QLabel(self.frame_2)
self.labelDeviceIdentifier.setObjectName("labelDeviceIdentifier")
self.gridLayout.addWidget(self.labelDeviceIdentifier, 1, 0, 1, 1)
self.comboBoxAntenna = QtWidgets.QComboBox(self.frame_2)
self.comboBoxAntenna.setObjectName("comboBoxAntenna")
self.gridLayout.addWidget(self.comboBoxAntenna, 4, 1, 1, 1)
self.labelFreq = QtWidgets.QLabel(self.frame_2)
self.labelFreq.setObjectName("labelFreq")
self.gridLayout.addWidget(self.labelFreq, 7, 0, 1, 1)
self.spinBoxPort = QtWidgets.QSpinBox(self.frame_2)
self.spinBoxPort.setMinimum(1)
self.spinBoxPort.setMaximum(65535)
self.spinBoxPort.setProperty("value", 1234)
self.spinBoxPort.setObjectName("spinBoxPort")
self.gridLayout.addWidget(self.spinBoxPort, 6, 1, 1, 1)
self.labelIP = QtWidgets.QLabel(self.frame_2)
self.labelIP.setObjectName("labelIP")
self.gridLayout.addWidget(self.labelIP, 5, 0, 1, 1)
self.spinBoxFreqCorrection = QtWidgets.QSpinBox(self.frame_2)
self.spinBoxFreqCorrection.setMinimum(-1000)
self.spinBoxFreqCorrection.setMaximum(1000)
self.spinBoxFreqCorrection.setProperty("value", 1)
self.spinBoxFreqCorrection.setObjectName("spinBoxFreqCorrection")
self.gridLayout.addWidget(self.spinBoxFreqCorrection, 13, 1, 1, 1)
self.labelNRepeat = QtWidgets.QLabel(self.frame_2)
self.labelNRepeat.setObjectName("labelNRepeat")
self.gridLayout.addWidget(self.labelNRepeat, 16, 0, 1, 1)
self.comboBoxDirectSampling = QtWidgets.QComboBox(self.frame_2)
self.comboBoxDirectSampling.setObjectName("comboBoxDirectSampling")
self.gridLayout.addWidget(self.comboBoxDirectSampling, 15, 1, 1, 1)
self.labelDCCorrection = QtWidgets.QLabel(self.frame_2)
self.labelDCCorrection.setObjectName("labelDCCorrection")
self.gridLayout.addWidget(self.labelDCCorrection, 17, 0, 1, 1)
self.comboBoxChannel = QtWidgets.QComboBox(self.frame_2)
self.comboBoxChannel.setObjectName("comboBoxChannel")
self.gridLayout.addWidget(self.comboBoxChannel, 3, 1, 1, 1)
self.labelIFGain = QtWidgets.QLabel(self.frame_2)
self.labelIFGain.setObjectName("labelIFGain")
self.gridLayout.addWidget(self.labelIFGain, 11, 0, 1, 1)
self.labelChannel = QtWidgets.QLabel(self.frame_2)
self.labelChannel.setObjectName("labelChannel")
self.gridLayout.addWidget(self.labelChannel, 3, 0, 1, 1)
self.btnLockBWSR = QtWidgets.QToolButton(self.frame_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.btnLockBWSR.sizePolicy().hasHeightForWidth())
self.btnLockBWSR.setSizePolicy(sizePolicy)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icons/icons/lock.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnLockBWSR.setIcon(icon)
self.btnLockBWSR.setIconSize(QtCore.QSize(16, 16))
self.btnLockBWSR.setCheckable(True)
self.btnLockBWSR.setChecked(True)
self.btnLockBWSR.setObjectName("btnLockBWSR")
self.gridLayout.addWidget(self.btnLockBWSR, 8, 2, 2, 1)
self.label_3 = QtWidgets.QLabel(self.frame_2)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1)
self.labelBiasTee = QtWidgets.QLabel(self.frame_2)
self.labelBiasTee.setObjectName("labelBiasTee")
self.gridLayout.addWidget(self.labelBiasTee, 14, 0, 1, 1)
self.checkBoxBiasTee = QtWidgets.QCheckBox(self.frame_2)
self.checkBoxBiasTee.setObjectName("checkBoxBiasTee")
self.gridLayout.addWidget(self.checkBoxBiasTee, 14, 1, 1, 1)
self.gridLayout_6.addWidget(self.frame_2, 0, 0, 1, 1)
self.verticalLayout.addWidget(self.groupBoxDeviceSettings)
@@ -278,49 +285,53 @@ class Ui_FormDeviceSettings(object):
_translate = QtCore.QCoreApplication.translate
FormDeviceSettings.setWindowTitle(_translate("FormDeviceSettings", "Form"))
self.groupBoxDeviceSettings.setTitle(_translate("FormDeviceSettings", "Device settings"))
self.spinBoxFreqCorrection.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Set the frequency correction in <span style=\" font-weight:600;\">ppm</span>. If you do not know what to enter here, just leave it to one.</p></body></html>"))
self.labelAntenna.setText(_translate("FormDeviceSettings", "Antenna:"))
self.labelBasebandGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by <span style=\" font-weight:600;\">complex downsampling</span>.</p></body></html>"))
self.labelBasebandGain.setText(_translate("FormDeviceSettings", "Baseband gain:"))
self.sliderBasebandGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by <span style=\" font-weight:600;\">complex downsampling</span>.</p></body></html>"))
self.spinBoxBasebandGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by <span style=\" font-weight:600;\">complex downsampling</span>.</p></body></html>"))
self.labelBandwidth.setText(_translate("FormDeviceSettings", "Bandwidth (Hz):"))
self.labelFreqCorrection.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Set the frequency correction in <span style=\" font-weight:600;\">ppm</span>. If you do not know what to enter here, just leave it to one.</p></body></html>"))
self.labelFreqCorrection.setText(_translate("FormDeviceSettings", "Frequency correction:"))
self.labelGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The gain (more exactly RF gain) is the gain applied to the RF signal. This amplifies the high frequent signal arriving at the antenna of your Software Defined Radio.</p></body></html>"))
self.labelGain.setText(_translate("FormDeviceSettings", "Gain:"))
self.comboBoxDeviceIdentifier.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>You can enter a device identifier here if you have multiple SDRs of the same type attached to separate them. There is no need to configure this value otherwise. URH will <span style=\" font-weight:600;\">automatically</span> select an attached SDR of the configured type if you leave this value empty.</p></body></html>"))
self.labelDCCorrection.setToolTip(_translate("FormDeviceSettings", "Apply DC correction during recording, that is, ensure the captured signal has a mean value of zero."))
self.labelDCCorrection.setText(_translate("FormDeviceSettings", "DC correction:"))
self.labelDeviceIdentifier.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>You can enter a device identifier here if you have multiple SDRs of the same type attached to separate them. There is no need to configure this value otherwise. URH will <span style=\" font-weight:600;\">automatically</span> select an attached SDR of the configured type if you leave this value empty.</p></body></html>"))
self.labelDeviceIdentifier.setText(_translate("FormDeviceSettings", "Device Identifier:"))
self.labelPort.setText(_translate("FormDeviceSettings", "Port number:"))
self.labelIFGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The IF Gain is applied to the Intermediate Frequency signal in your Software Defined Radio. An IF signal has a lower frequency than the high frequent RF signal, so signal processing can be applied more efficiently.</p></body></html>"))
self.labelIFGain.setText(_translate("FormDeviceSettings", "IF Gain:"))
self.label_3.setText(_translate("FormDeviceSettings", "Device:"))
self.labelAntenna.setText(_translate("FormDeviceSettings", "Antenna:"))
self.lineEditSubdevice.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Configure the subdevice of your USRP. For example, <span style=\" font-weight:600;\">B:0 </span>to select a WBX on slot B. You can learn more at <a href=\"http://files.ettus.com/manual/page_configuration.html#config_subdev\"><span style=\" text-decoration: underline; color:#2980b9;\">http://files.ettus.com/manual/page_configuration.html#config_subdev.</span></a></p></body></html>"))
self.labelSubdevice.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Configure the subdevice of your USRP. For example, <span style=\" font-weight:600;\">B:0 </span>to select a WBX on slot B. You can learn more at <a href=\"http://files.ettus.com/manual/page_configuration.html#config_subdev\"><span style=\" text-decoration: underline; color:#2980b9;\">http://files.ettus.com/manual/page_configuration.html#config_subdev.</span></a></p></body></html>"))
self.labelSubdevice.setText(_translate("FormDeviceSettings", "<html><head/><body><p>Subdevice:</p></body></html>"))
self.lineEditIP.setText(_translate("FormDeviceSettings", "127.0.0.1"))
self.btnRefreshDeviceIdentifier.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Automatically detect connected SDRs of the above configured type. There is <span style=\" font-weight:600;\">no need</span> to press this button if you have only one SDR of a certain type attached. </p></body></html>"))
self.btnRefreshDeviceIdentifier.setText(_translate("FormDeviceSettings", "..."))
self.cbDevice.setItemText(0, _translate("FormDeviceSettings", "USRP"))
self.cbDevice.setItemText(1, _translate("FormDeviceSettings", "HackRF"))
self.lineEditIP.setText(_translate("FormDeviceSettings", "127.0.0.1"))
self.labelIP.setText(_translate("FormDeviceSettings", "IP address:"))
self.labelFreq.setText(_translate("FormDeviceSettings", "Frequency (Hz):"))
self.btnLockBWSR.setText(_translate("FormDeviceSettings", "..."))
self.sliderGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The gain (more exactly RF gain) is the gain applied to the RF signal. This amplifies the high frequent signal arriving at the antenna of your Software Defined Radio.</p></body></html>"))
self.spinBoxGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The gain (more exactly RF gain) is the gain applied to the RF signal. This amplifies the high frequent signal arriving at the antenna of your Software Defined Radio.</p></body></html>"))
self.comboBoxDirectSampling.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Set the direct sampling mode. If you do not know what to choose here, just set it to disabled. The<span style=\" font-weight:600;\"> native backend</span> is recommended, when using this setting.</p></body></html>"))
self.labelDirectSampling.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Set the direct sampling mode. If you do not know what to choose here, just set it to disabled. The<span style=\" font-weight:600;\"> native backend</span> is recommended, when using this setting.</p></body></html>"))
self.labelDirectSampling.setText(_translate("FormDeviceSettings", "Direct sampling:"))
self.labelNRepeat.setText(_translate("FormDeviceSettings", "Repeat:"))
self.checkBoxDCCorrection.setToolTip(_translate("FormDeviceSettings", "Apply DC correction during recording, that is, ensure the captured signal has a mean value of zero."))
self.checkBoxDCCorrection.setText(_translate("FormDeviceSettings", "Apply DC correction"))
self.labelChannel.setText(_translate("FormDeviceSettings", "Channel:"))
self.labelBandwidth.setText(_translate("FormDeviceSettings", "Bandwidth (Hz):"))
self.sliderGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The gain (more exactly RF gain) is the gain applied to the RF signal. This amplifies the high frequent signal arriving at the antenna of your Software Defined Radio.</p></body></html>"))
self.spinBoxGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The gain (more exactly RF gain) is the gain applied to the RF signal. This amplifies the high frequent signal arriving at the antenna of your Software Defined Radio.</p></body></html>"))
self.labelSampleRate.setText(_translate("FormDeviceSettings", "Sample rate (Sps):"))
self.sliderIFGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The IF Gain is applied to the Intermediate Frequency signal in your Software Defined Radio. An IF signal has a lower frequency than the high frequent RF signal, so signal processing can be applied more efficiently.</p></body></html>"))
self.spinBoxIFGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The IF Gain is applied to the Intermediate Frequency signal in your Software Defined Radio. An IF signal has a lower frequency than the high frequent RF signal, so signal processing can be applied more efficiently.</p></body></html>"))
self.labelFreqCorrection.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Set the frequency correction in <span style=\" font-weight:600;\">ppm</span>. If you do not know what to enter here, just leave it to one.</p></body></html>"))
self.labelFreqCorrection.setText(_translate("FormDeviceSettings", "Frequency correction:"))
self.comboBoxDeviceIdentifier.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>You can enter a device identifier here if you have multiple SDRs of the same type attached to separate them. There is no need to configure this value otherwise. URH will <span style=\" font-weight:600;\">automatically</span> select an attached SDR of the configured type if you leave this value empty.</p></body></html>"))
self.cbDevice.setItemText(0, _translate("FormDeviceSettings", "USRP"))
self.cbDevice.setItemText(1, _translate("FormDeviceSettings", "HackRF"))
self.spinBoxNRepeat.setSpecialValueText(_translate("FormDeviceSettings", "Infinite"))
self.labelSubdevice.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Configure the subdevice of your USRP. For example, <span style=\" font-weight:600;\">B:0 </span>to select a WBX on slot B. You can learn more at <a href=\"http://files.ettus.com/manual/page_configuration.html#config_subdev\"><span style=\" text-decoration: underline; color:#2980b9;\">http://files.ettus.com/manual/page_configuration.html#config_subdev.</span></a></p></body></html>"))
self.labelSubdevice.setText(_translate("FormDeviceSettings", "<html><head/><body><p>Subdevice:</p></body></html>"))
self.lineEditSubdevice.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Configure the subdevice of your USRP. For example, <span style=\" font-weight:600;\">B:0 </span>to select a WBX on slot B. You can learn more at <a href=\"http://files.ettus.com/manual/page_configuration.html#config_subdev\"><span style=\" text-decoration: underline; color:#2980b9;\">http://files.ettus.com/manual/page_configuration.html#config_subdev.</span></a></p></body></html>"))
self.sliderBasebandGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by <span style=\" font-weight:600;\">complex downsampling</span>.</p></body></html>"))
self.spinBoxBasebandGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The baseband gain is applied to the baseband signal in your software defined radio. The baseband signal is at low frequency and gathered from the RF signal by <span style=\" font-weight:600;\">complex downsampling</span>.</p></body></html>"))
self.labelPort.setText(_translate("FormDeviceSettings", "Port number:"))
self.labelGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The gain (more exactly RF gain) is the gain applied to the RF signal. This amplifies the high frequent signal arriving at the antenna of your Software Defined Radio.</p></body></html>"))
self.labelGain.setText(_translate("FormDeviceSettings", "Gain:"))
self.checkBoxDCCorrection.setToolTip(_translate("FormDeviceSettings", "Apply DC correction during recording, that is, ensure the captured signal has a mean value of zero."))
self.checkBoxDCCorrection.setText(_translate("FormDeviceSettings", "Apply DC correction"))
self.labelDeviceIdentifier.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>You can enter a device identifier here if you have multiple SDRs of the same type attached to separate them. There is no need to configure this value otherwise. URH will <span style=\" font-weight:600;\">automatically</span> select an attached SDR of the configured type if you leave this value empty.</p></body></html>"))
self.labelDeviceIdentifier.setText(_translate("FormDeviceSettings", "Device Identifier:"))
self.labelFreq.setText(_translate("FormDeviceSettings", "Frequency (Hz):"))
self.labelIP.setText(_translate("FormDeviceSettings", "IP address:"))
self.spinBoxFreqCorrection.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Set the frequency correction in <span style=\" font-weight:600;\">ppm</span>. If you do not know what to enter here, just leave it to one.</p></body></html>"))
self.labelNRepeat.setText(_translate("FormDeviceSettings", "Repeat:"))
self.comboBoxDirectSampling.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Set the direct sampling mode. If you do not know what to choose here, just set it to disabled. The<span style=\" font-weight:600;\"> native backend</span> is recommended, when using this setting.</p></body></html>"))
self.labelDCCorrection.setToolTip(_translate("FormDeviceSettings", "Apply DC correction during recording, that is, ensure the captured signal has a mean value of zero."))
self.labelDCCorrection.setText(_translate("FormDeviceSettings", "DC correction:"))
self.labelIFGain.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>The IF Gain is applied to the Intermediate Frequency signal in your Software Defined Radio. An IF signal has a lower frequency than the high frequent RF signal, so signal processing can be applied more efficiently.</p></body></html>"))
self.labelIFGain.setText(_translate("FormDeviceSettings", "IF Gain:"))
self.labelChannel.setText(_translate("FormDeviceSettings", "Channel:"))
self.btnLockBWSR.setText(_translate("FormDeviceSettings", "..."))
self.label_3.setText(_translate("FormDeviceSettings", "Device:"))
self.labelBiasTee.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Enable the bias tee of your SDR, if you have an external LNA connected. Leave this disabled if you have no external LNA attached.</p></body></html>"))
self.labelBiasTee.setText(_translate("FormDeviceSettings", "Bias Tee:"))
self.checkBoxBiasTee.setToolTip(_translate("FormDeviceSettings", "<html><head/><body><p>Enable the bias tee of your SDR, if you have an external LNA connected. Leave this disabled if you have no external LNA attached.</p></body></html>"))
self.checkBoxBiasTee.setText(_translate("FormDeviceSettings", "Enable Bias Tee"))
from urh.ui.KillerDoubleSpinBox import KillerDoubleSpinBox
from . import urh_rc