Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jopohl/urh
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2.9.3
Choose a base ref
...
head repository: jopohl/urh
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.9.4
Choose a head ref
  • 16 commits
  • 40 files changed
  • 6 contributors

Commits on Mar 1, 2022

  1. Copy the full SHA
    7ddf54b View commit details

Commits on May 24, 2022

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    e72584f View commit details

Commits on Aug 13, 2022

  1. 'Remove Carrier' encoding truncates initial input (#997)

    * Fix: 'Remove Carrier' encoding function skips input data
    
    Fix the encoding part of the 'Remove Carrier' decoding function by
    flushing any initial carrier symbols before processing actual data.
    
    * Fix: carrier pattern wraps around even with no more input data
    
    Process carrier symbols before each input data symbol.
    Append any trailing carrier symbol until the pattern wraps around.
    delta512 authored Aug 13, 2022

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    95702ab View commit details
  2. Update ci.yml (#998)

    fix mac os ci
    andynoack authored Aug 13, 2022

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    ca6228f View commit details

Commits on Aug 22, 2022

  1. Flipper raw (#1000)

    * This branch allows to import .sub files from Flipper Zero (#989)
    
    * Add rudimentary export feature for .sub-files!
    Note that all parameters (Frequency, Preset, ...) in the .sub-file are constants and export will only work for .sub-files
    
    * Apply changes from revision.
    andynoack authored Aug 22, 2022

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    6ae113d View commit details

Commits on Oct 14, 2022

  1. Add I/Q view (#1007)

    andynoack authored Oct 14, 2022

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    a4f8db4 View commit details

Commits on Oct 17, 2022

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    8004f45 View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    b7fd265 View commit details
  3. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    ab80143 View commit details

Commits on Jan 9, 2023

  1. Fix .sub file RAW_data strip (#1016)

    For some reason some of the files saved by flipper has a final space. When the RAW_data is splitted, the last space gets it's own '' value in the array. Whet we try to convert the '' value to int we get an exception.
    The exception has been controlled, showing a warning and skipping the value.
    The line is stripped to remove white spaces before of splitting
    orensbruli authored Jan 9, 2023

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    1966978 View commit details

Commits on Jan 13, 2023

  1. Add rad1o support (#1020)

    * Add rad1o support
    
    * fix CI errors regarding deprecated types: np.complex (-> complex) and np.int (-> int)
    andynoack authored Jan 13, 2023

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    82da137 View commit details
  2. CI: Install PyAudio directly via pip instead of pipwin (#1021)

    PyAudio wheels for Windows are now provided on PyPi so we do not need to use pipwin anymore.
    jopohl authored Jan 13, 2023

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    d19c8c1 View commit details

Commits on Jan 25, 2023

  1. Flipper zero sub ghz (#1023)

    * Add Flipper Zero SubGHz export from Generator support
    * Clean up and add TODO (bandwidth/deviation in FuriHal preset)
    andynoack authored Jan 25, 2023

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    1c9f936 View commit details

Commits on Jan 26, 2023

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    8673a1e View commit details

Commits on Jan 28, 2023

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    ba0b981 View commit details
  2. version2.9.4

    jopohl committed Jan 28, 2023
    Copy the full SHA
    2238289 View commit details
Showing with 947 additions and 191 deletions.
  1. +3 −2 .github/workflows/ci.yml
  2. +86 −76 data/ui/generator.ui
  3. +3 −9 data/ui/options.ui
  4. +12 −7 data/ui/signal_frame.ui
  5. +6 −1 src/urh/controller/CompareFrameController.py
  6. +27 −1 src/urh/controller/GeneratorTabController.py
  7. +2 −0 src/urh/controller/MainController.py
  8. +4 −4 src/urh/controller/dialogs/OptionsDialog.py
  9. +8 −3 src/urh/controller/widgets/SignalFrame.py
  10. +5 −1 src/urh/dev/BackendHandler.py
  11. +107 −0 src/urh/dev/PCAPNG.py
  12. +5 −0 src/urh/dev/VirtualDevice.py
  13. +11 −0 src/urh/dev/config.py
  14. +3 −2 src/urh/dev/native/ExtensionHelper.py
  15. +114 −0 src/urh/dev/native/Rad1o.py
  16. +2 −2 src/urh/main.py
  17. +106 −0 src/urh/plugins/FlipperZeroSub/FlipperZeroSubPlugin.py
  18. 0 src/urh/plugins/FlipperZeroSub/__init__.py
  19. +1 −0 src/urh/plugins/FlipperZeroSub/descr.txt
  20. +62 −0 src/urh/plugins/FlipperZeroSub/settings.ui
  21. +2 −0 src/urh/settings.py
  22. +9 −4 src/urh/signalprocessing/Encoding.py
  23. +1 −1 src/urh/signalprocessing/Filter.py
  24. +43 −1 src/urh/signalprocessing/IQArray.py
  25. +4 −0 src/urh/signalprocessing/Message.py
  26. +8 −0 src/urh/signalprocessing/ProtocolAnalyzer.py
  27. +36 −0 src/urh/signalprocessing/Signal.py
  28. +1 −1 src/urh/signalprocessing/Spectrogram.py
  29. +1 −1 src/urh/ui/painting/GridScene.py
  30. +21 −8 src/urh/ui/painting/SceneManager.py
  31. +10 −3 src/urh/ui/painting/SignalSceneManager.py
  32. +42 −35 src/urh/ui/ui_generator.py
  33. +8 −9 src/urh/ui/ui_options.py
  34. +11 −8 src/urh/ui/ui_signal_frame.py
  35. +6 −6 src/urh/ui/views/TableView.py
  36. +7 −4 src/urh/util/FileOperator.py
  37. +1 −1 src/urh/util/util.py
  38. +1 −1 src/urh/version.py
  39. +130 −0 tests/device/Rad1oTests.py
  40. +38 −0 tests/test_util.py
5 changes: 3 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -69,8 +69,7 @@ jobs:
pip install PyVirtualDisplay==0.2.5
elif [[ $OS == windows* ]]
then
pip install pywin32 pipwin
pipwin install pyaudio
pip install pywin32 pyaudio
elif [[ $OS == mac* ]]
then
brew tap pothosware/homebrew-pothos
@@ -88,6 +87,7 @@ jobs:
sudo installer -pkg SDRplay_RSP_API-MacOSX-2.13.2.pkg -target /
pip install pyaudio
pip install pillow
fi
pip install twine setuptools pytest pytest-xvfb pytest-cov pytest-faulthandler six appdirs packaging pyinstaller
python -c "import tempfile, os; open(os.path.join(tempfile.gettempdir(), 'urh_releasing'), 'w').close()"
@@ -187,6 +187,7 @@ jobs:
else
twine upload --skip-existing dist/*.whl
fi
shell: bash
env:
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
162 changes: 86 additions & 76 deletions data/ui/generator.ui
Original file line number Diff line number Diff line change
@@ -524,39 +524,7 @@ image: url(:/icons/icons/splitter_handle_vertical.svg);
<property name="bottomMargin">
<number>11</number>
</property>
<item row="2" column="6">
<widget class="QComboBox" name="cbViewType">
<item>
<property name="text">
<string>Bit</string>
</property>
</item>
<item>
<property name="text">
<string>Hex</string>
</property>
</item>
<item>
<property name="text">
<string>ASCII</string>
</property>
</item>
</widget>
</item>
<item row="2" column="5">
<widget class="QLabel" name="lViewType">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Viewtype:</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="7">
<item row="1" column="0" colspan="8">
<widget class="GeneratorTableView" name="tableMessages">
<property name="acceptDrops">
<bool>true</bool>
@@ -599,7 +567,83 @@ image: url(:/icons/icons/splitter_handle_vertical.svg);
</attribute>
</widget>
</item>
<item row="0" column="0" colspan="7">
<item row="2" column="0">
<widget class="QPushButton" name="btnNetworkSDRSend">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Send encoded data to your external application via TCP.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Send via Network</string>
</property>
<property name="icon">
<iconset theme="network-wired">
<normaloff>.</normaloff>.</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="4" colspan="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>38</width>
<height>22</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="7">
<widget class="QComboBox" name="cbViewType">
<item>
<property name="text">
<string>Bit</string>
</property>
</item>
<item>
<property name="text">
<string>Hex</string>
</property>
</item>
<item>
<property name="text">
<string>ASCII</string>
</property>
</item>
</widget>
</item>
<item row="2" column="6">
<widget class="QLabel" name="lViewType">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Viewtype:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btnRfCatSend">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Send encoded data via RfCat. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Hit again for stopping the sending process. Note that you can set the number of repetitions (from 1 to infinite) in:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Edit-&amp;gt;Options-&amp;gt;Device-&amp;gt;'Device sending repetitions'&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Send via RfCat</string>
</property>
<property name="icon">
<iconset theme="network-wireless">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item row="0" column="0" colspan="8">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="topMargin">
<number>0</number>
@@ -671,38 +715,7 @@ image: url(:/icons/icons/splitter_handle_vertical.svg);
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="btnNetworkSDRSend">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Send encoded data to your external application via TCP.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Send via Network</string>
</property>
<property name="icon">
<iconset theme="network-wired">
<normaloff>.</normaloff>.</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="btnRfCatSend">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Send encoded data via RfCat. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Hit again for stopping the sending process. Note that you can set the number of repetitions (from 1 to infinite) in:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Edit-&amp;gt;Options-&amp;gt;Device-&amp;gt;'Device sending repetitions'&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Send via RfCat</string>
</property>
<property name="icon">
<iconset theme="network-wireless">
<normaloff>.</normaloff>.</iconset>
</property>
</widget>
</item>
<item row="2" column="2">
<item row="2" column="3">
<widget class="QLabel" name="lEstimatedTime">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The estimated average time is based on the average number of bits per message and average sample rate, you set for the modulations.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
@@ -712,18 +725,15 @@ image: url(:/icons/icons/splitter_handle_vertical.svg);
</property>
</widget>
</item>
<item row="2" column="3" colspan="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<item row="2" column="2">
<widget class="QPushButton" name="btnFZSave">
<property name="text">
<string>Save as FlipperZero SubGHz</string>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>38</width>
<height>22</height>
</size>
<property name="icon">
<iconset theme="document-save-as"/>
</property>
</spacer>
</widget>
</item>
</layout>
</widget>
12 changes: 3 additions & 9 deletions data/ui/options.ui
Original file line number Diff line number Diff line change
@@ -193,18 +193,12 @@
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBoxFontSize">
<widget class="QDoubleSpinBox" name="doubleSpinBoxFontSize">
<property name="suffix">
<string>pt</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>120</number>
</property>
<property name="value">
<number>10</number>
<double>1.000000000000000</double>
</property>
</widget>
</item>
@@ -282,7 +276,7 @@
<x>0</x>
<y>0</y>
<width>762</width>
<height>397</height>
<height>466</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4"/>
19 changes: 12 additions & 7 deletions data/ui/signal_frame.ui
Original file line number Diff line number Diff line change
@@ -84,7 +84,7 @@
</font>
</property>
<property name="text">
<string>Signal View:</string>
<string>Signal view:</string>
</property>
</widget>
</item>
@@ -282,7 +282,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;For &lt;span style=&quot; font-weight:600;&quot;&gt;higher order&lt;/span&gt; modulations (&amp;gt; 1 Bits/Symbol), there are &lt;span style=&quot; font-weight:600;&quot;&gt;multiple&lt;/span&gt; centers. We assume that the &lt;span style=&quot; font-weight:600;&quot;&gt;spacing&lt;/span&gt; between all possible symbols is &lt;span style=&quot; font-weight:600;&quot;&gt;constant&lt;/span&gt;. Therefore you configure the spacing between centers.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Center Spacing:</string>
<string>Center spacing:</string>
</property>
</widget>
</item>
@@ -351,7 +351,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This is the error tolerance for determining the &lt;span style=&quot; font-weight:600;&quot;&gt;pulse lengths&lt;/span&gt; in the demodulated signal.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:400; font-style:italic;&quot;&gt;Example:&lt;/span&gt; Say, we are reading a ones pulse and the tolerance value was set to 5. Then 5 errors (which must follow sequentially) are accepted.&lt;/p&gt;&lt;p&gt;Tune this value if you have &lt;span style=&quot; font-weight:600;&quot;&gt;spiky data&lt;/span&gt; after demodulation.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Error Tolerance:</string>
<string>Error tolerance:</string>
</property>
</widget>
</item>
@@ -405,7 +405,7 @@
</sizepolicy>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Choose the view of your signal. Analog, Demodulated or Spectrogram.&lt;/p&gt;&lt;p&gt;The quadrature demodulation uses a &lt;span style=&quot; font-weight:600;&quot;&gt;threshold of magnitudes,&lt;/span&gt; to &lt;span style=&quot; font-weight:600;&quot;&gt;suppress noise&lt;/span&gt;. All samples with a magnitude lower than this threshold will be eliminated after demodulation.&lt;/p&gt;&lt;p&gt;Tune this value by selecting a &lt;span style=&quot; font-style:italic;&quot;&gt;noisy area&lt;/span&gt; and mark it as noise using &lt;span style=&quot; font-weight:600;&quot;&gt;context menu&lt;/span&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Choose the view of your signal. Analog, Demodulated, Spectrogram or I/Q view.&lt;/p&gt;&lt;p&gt;The quadrature demodulation uses a &lt;span style=&quot; font-weight:600;&quot;&gt;threshold of magnitudes,&lt;/span&gt; to &lt;span style=&quot; font-weight:600;&quot;&gt;suppress noise&lt;/span&gt;. All samples with a magnitude lower than this threshold will be eliminated after demodulation.&lt;/p&gt;&lt;p&gt;Tune this value by selecting a &lt;span style=&quot; font-style:italic;&quot;&gt;noisy area&lt;/span&gt; and mark it as noise using &lt;span style=&quot; font-weight:600;&quot;&gt;context menu&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Signal colors&lt;/span&gt;:&lt;br/&gt;I =&amp;gt; &lt;span style=&quot; font-weight:600; color:#3232e1;&quot;&gt;blue&lt;/span&gt;&lt;br/&gt;Q =&amp;gt; &lt;span style=&quot; font-weight:600;&quot;&gt;black&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<item>
<property name="text">
@@ -422,6 +422,11 @@
<string>Spectrogram</string>
</property>
</item>
<item>
<property name="text">
<string>I/Q view</string>
</property>
</item>
</widget>
</item>
<item row="2" column="1">
@@ -545,7 +550,7 @@
<string>If this is set to true, your selected protocol bits will show up in the signal view, and vice versa.</string>
</property>
<property name="text">
<string>Sync Selection</string>
<string>Sync selection</string>
</property>
<property name="checked">
<bool>true</bool>
@@ -574,7 +579,7 @@
If you want your protocol to be better separated, edit the PauseLen using right-click menu from a selection in SignalView or ProtocolView.</string>
</property>
<property name="text">
<string>Show Signal as</string>
<string>Show data as</string>
</property>
</widget>
</item>
@@ -660,7 +665,7 @@ If you want your protocol to be better separated, edit the PauseLen using right-
<item row="20" column="0">
<widget class="QLabel" name="labelFFTWindowSize">
<property name="text">
<string>FFT Window Size:</string>
<string>FFT window size:</string>
</property>
</widget>
</item>
7 changes: 6 additions & 1 deletion src/urh/controller/CompareFrameController.py
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@
from PyQt5.QtCore import pyqtSlot, QTimer, Qt, pyqtSignal, QItemSelection, QItemSelectionModel, QLocale, \
QModelIndex
from PyQt5.QtGui import QContextMenuEvent, QIcon
from PyQt5.QtWidgets import QMessageBox, QAbstractItemView, QUndoStack, QMenu, QWidget, QHeaderView
from PyQt5.QtWidgets import QMessageBox, QAbstractItemView, QUndoStack, QMenu, QWidget, QHeaderView, QInputDialog

from urh import settings
from urh.awre import AutoAssigner
@@ -864,6 +864,11 @@ def save_protocol(self):

if filename.endswith(".bin"):
self.proto_analyzer.to_binary(filename, use_decoded=True)
elif filename.endswith(".pcapng"):
data_link_type, ok = QInputDialog.getInt(self, "Link type",
"Interface Link Type to use (probably one between DLT_USER0-DLT_USER15 (147-162)):", 147, 0, 65535)
if ok:
self.proto_analyzer.to_pcapng(filename=filename, link_type=data_link_type)
else:
self.proto_analyzer.to_xml_file(filename=filename, decoders=self.decodings,
participants=self.project_manager.participants, write_bits=True)
Loading