diff --git a/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerConfiguration.java b/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerConfiguration.java index 9213577c..8efb77aa 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerConfiguration.java +++ b/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerConfiguration.java @@ -33,6 +33,7 @@ public class HackRFTunerConfiguration extends TunerConfiguration private HackRFLNAGain mLNAGain = HackRFLNAGain.GAIN_16; // We can see some signal at this gain private HackRFVGAGain mVGAGain = HackRFVGAGain.GAIN_16; // We can see some signal at this gain private boolean mAmplifierEnabled = false; //Probably should start off disabled + private boolean mBiasTEnabled = false; /** * Default constructor for JAXB @@ -65,6 +66,23 @@ public class HackRFTunerConfiguration extends TunerConfiguration mAmplifierEnabled = enabled; } + /** + * Indicates if the Bias-T antenna port power is enabled. + */ + @JacksonXmlProperty(isAttribute = true, localName = "bias_t") + public boolean isBiasT() + { + return mBiasTEnabled; + } + + /** + * Enables or disables the Bias-T antenna port power. + */ + public void setBiasT(boolean enabled) + { + mBiasTEnabled = enabled; + } + @JacksonXmlProperty(isAttribute = true, localName = "lna_gain") public HackRFLNAGain getLNAGain() { diff --git a/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerController.java b/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerController.java index 5a4f1b55..b62d277a 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerController.java +++ b/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerController.java @@ -73,6 +73,7 @@ public class HackRFTunerController extends TunerController private String mFirmwareVersion; private HackRFSampleRate mSampleRate = HackRFSampleRate.RATE_5_0; private boolean mAmplifierEnabled = false; + private boolean mBiasTEnabled = false; private volatile int mBufferSampleCount = DEFAULT_BUFFER_SAMPLE_COUNT; private boolean mStreaming = false; @@ -198,6 +199,15 @@ public class HackRFTunerController extends TunerController { if(device != null) { + try + { + device.setAntennaEnable(false); + } + catch(HackRfException | RuntimeException e) + { + mLog.error("Error disabling HackRF Bias-T antenna power", e); + } + try { device.close(); @@ -413,6 +423,12 @@ public class HackRFTunerController extends TunerController { execute(device -> device.startRx(this::receive)); mStreaming = mDevice != null; + + //The firmware turns off antenna power when the transceiver returns to idle, so restore it + if(mBiasTEnabled) + { + execute(device -> device.setAntennaEnable(true)); + } } } @@ -540,6 +556,20 @@ public class HackRFTunerController extends TunerController return mAmplifierEnabled; } + /** + * Enables (true) or disables (false) the Bias-T power on the antenna port. + */ + public void setBiasTEnabled(boolean enabled) throws SourceException + { + execute(device -> device.setAntennaEnable(enabled)); + mBiasTEnabled = enabled; + } + + public boolean isBiasTEnabled() + { + return mBiasTEnabled; + } + /** * Sets the IF LNA Gain */ @@ -602,6 +632,7 @@ public class HackRFTunerController extends TunerController { setSampleRate(hackRFConfig.getSampleRate()); setAmplifierEnabled(hackRFConfig.getAmplifierEnabled()); + setBiasTEnabled(hackRFConfig.isBiasT()); setLNAGain(hackRFConfig.getLNAGain()); setVGAGain(hackRFConfig.getVGAGain()); } diff --git a/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerEditor.java b/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerEditor.java index cbbefbd6..8e35c6d6 100644 --- a/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerEditor.java +++ b/src/main/java/io/github/dsheirer/source/tuner/hackrf/HackRFTunerEditor.java @@ -49,6 +49,7 @@ public class HackRFTunerEditor extends TunerEditor mSampleRateCombo; private JToggleButton mAmplifier; + private JToggleButton mBiasT; private JComboBox mLnaGainCombo; private JComboBox mVgaGainCombo; @@ -80,7 +81,7 @@ public class HackRFTunerEditor extends TunerEditor mBiasT.setText(mBiasT.isSelected() ? "Enabled" : "Disabled")); + mBiasT.addActionListener(arg0 -> + { + if(!isLoading()) + { + try + { + getTuner().getController().setBiasTEnabled(mBiasT.isSelected()); + save(); + } + catch(SourceException e) + { + mLog.error("couldn't enable/disable bias-t", e); + + JOptionPane.showMessageDialog(HackRFTunerEditor.this, "Couldn't change Bias-T setting", + "Error changing Bias-T setting", JOptionPane.ERROR_MESSAGE); + } + } + }); + } + + return mBiasT; + } + private JComboBox getSampleRateCombo() { if(mSampleRateCombo == null) @@ -371,6 +412,7 @@ public class HackRFTunerEditor extends TunerEditor