From 6ca18411cf942651f6a29518607a2613023cf2e5 Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Tue, 14 Apr 2026 22:06:31 +0300 Subject: [PATCH] protocol 2 fix --- Source/NEXT_STEPS.md | 24 +- Source/NOTES_PROTOCOL2_RECEIVERS_THETIS.md | 179 ++++ Source/WORKLOG_PROTOCOL2_2026-04-13.md | 75 ++ Source/WORKLOG_PROTOCOL2_2026-04-14.md | 108 +++ Source/bin/settings.ini | 22 +- Source/bin/windowsSettings.ini | 4 +- Source/cudaSDR.log | 925 ------------------- Source/src/DataEngine/cusdr_dataEngine.cpp | 19 + Source/src/DataEngine/cusdr_dataEngine.h | 11 +- Source/src/DataEngine/cusdr_protocol2_io.cpp | 676 +++++++++++++- Source/src/DataEngine/cusdr_protocol2_io.h | 44 + Source/src/cusdr_mainWidget.cpp | 65 +- Source/src/cusdr_settings.cpp | 7 +- 13 files changed, 1135 insertions(+), 1024 deletions(-) create mode 100644 Source/NOTES_PROTOCOL2_RECEIVERS_THETIS.md create mode 100644 Source/WORKLOG_PROTOCOL2_2026-04-14.md delete mode 100644 Source/cudaSDR.log diff --git a/Source/NEXT_STEPS.md b/Source/NEXT_STEPS.md index 5eb27c5..acc7d96 100644 --- a/Source/NEXT_STEPS.md +++ b/Source/NEXT_STEPS.md @@ -3,8 +3,8 @@ ## Priority 1. Investigate Protocol 2 stop handling. -2. Complete Protocol 2 Alex support for boards with `Alex1`. -3. Continue UI cleanup for Protocol 2 specific hardware presentation. +2. Validate Protocol 2 wideband behavior on real hardware. +3. Complete Protocol 2 Alex support for boards with `Alex1`. ## Immediate Issues To Debug @@ -40,6 +40,21 @@ ## Protocol 2 Functional Work +### Protocol 2 wideband runtime verification + +- Re-test Protocol 2 wideband on real hardware after the 2026-04-14 integration. +- Verify that pressing the UI `Wideband` button now really causes the transceiver to: + - start sending wideband UDP data, + - stop sending wideband UDP data. +- Verify that this works while the device is already running, without requiring a full stop/start cycle. +- Verify the incoming packet format and pacing match what the implementation now assumes: + - UDP base port `1027`, + - sequence number in bytes `0..3`, + - 16-bit raw ADC samples starting at byte `4`, + - one full spectrum block formed from `Settings::getWidebandBuffers()` packets. +- Pay special attention to boards that may not follow the default `32 packets per frame` behavior. +- If a board reports or requires fixed wideband constraints, use the protocol document/device profile to specialize the current defaults. + - Implement proper `Alex1/BPF2/RX2` handling for boards that support a second Alex register: - Orion MkII - SATURN / ANAN-G2 @@ -50,6 +65,11 @@ ## UI Work - Review UI areas that still assume `Metis/Hermes` semantics internally. +- Confirm the `Wideband` button behavior is now correct from the user point of view: + - button state, + - dock visibility, + - `widebandData` setting, + - real hardware stream enable/disable. - Make Protocol 2 model/capability presentation more explicit where useful: - selected model, - protocol version, diff --git a/Source/NOTES_PROTOCOL2_RECEIVERS_THETIS.md b/Source/NOTES_PROTOCOL2_RECEIVERS_THETIS.md new file mode 100644 index 0000000..545d68a --- /dev/null +++ b/Source/NOTES_PROTOCOL2_RECEIVERS_THETIS.md @@ -0,0 +1,179 @@ +# Protocol 2 Receiver/DDC Notes from Thetis + +Date: 2026-04-14 + +This note captures findings from two sources: + +- local protocol documentation: `doc/openHPSDR Ethernet Protocol v4.3.docx` +- local Thetis source tree: `/home/vladimir/Документы/source/Thetis` + +It is intended as a working note for future Protocol 2 receiver work, especially for the second receiver and Orion MkII / ANAN-7000DLE / ANAN-8000DLE behavior. + +## High-level conclusion + +Protocol 2 does not impose a global "only 2 receivers" limit. + +The protocol separates: + +- number of ADCs +- number of DDCs + +This strongly suggests that DDCs are logical/digital receive channels built on top of available ADC inputs, not a one-to-one count of independent analog hardware chains. + +## Protocol document findings + +From `openHPSDR Ethernet Protocol v4.3.docx`: + +- The protocol tries not to restrict the number of configurable resources. +- Current hardware implementation applies only a broad upper limit of `80 DDCs` and `8 ADCs`. +- Discovery reply includes `Number of DDCs implemented`, so the hardware reports its own DDC capability. + +Board capability appendix findings already extracted: + +- `Board 1 = Hermes (ANAN-10, 100)` + - `Number of ADCs = 1` + - `Number of DDCs supported = 2` +- `Board 2 = Hermes (ANAN-10E)` + - `Number of ADCs = 1` + - `Number of DDCs supported = 2` +- `Board 3 = Angelia (ANAN-100D)` + - `Number of ADCs = 2` + - `Number of DDCs supported = 7` +- `Board 4 = Orion (ANAN-200D)` + - `Number of ADCs = 2` + - `Number of DDCs supported = 7` + +Implication: + +- low-end boards really are 2-DDC devices +- higher-end 2-ADC boards support more logical DDC channels than ADC count + +## Thetis findings + +Relevant files: + +- [network.h](/home/vladimir/Документы/source/Thetis/Project Files/Source/ChannelMaster/network.h:414) +- [console.cs](/home/vladimir/Документы/source/Thetis/Project Files/Source/Console/console.cs:8186) +- [networkproto1.c](/home/vladimir/Документы/source/Thetis/Project Files/Source/ChannelMaster/networkproto1.c:497) + +### Model grouping + +Thetis groups these as the same high-end hardware family for receiver/DDC logic: + +- `ANAN-100D` +- `ANAN-200D` +- `ORIONMKII` +- `ANAN7000D` +- `ANAN8000D` +- `ANAN-G2` +- `ANVELINAPRO3` + +See: + +- [console.cs](/home/vladimir/Документы/source/Thetis/Project Files/Source/Console/console.cs:8211) + +### Protocol 1 interpretation in Thetis + +For that high-end family, Thetis explicitly sets: + +- `P1_rxcount = 5` +- `nddc = 5` + +See: + +- [console.cs](/home/vladimir/Документы/source/Thetis/Project Files/Source/Console/console.cs:8219) + +This means Thetis does not treat `ANAN-7000DLE/8000DLE` as a 2-DDC class device. + +`networkproto1.c` also contains special handling for `nddc == 5`, again separating these boards from 2-DDC hardware: + +- [networkproto1.c](/home/vladimir/Документы/source/Thetis/Project Files/Source/ChannelMaster/networkproto1.c:504) +- [networkproto1.c](/home/vladimir/Документы/source/Thetis/Project Files/Source/ChannelMaster/networkproto1.c:528) + +### Protocol 2 interpretation in Thetis + +For Protocol 2, Thetis groups: + +- `Angelia` +- `Orion` +- `OrionMKII` +- `Saturn` + +into one receiver/DDC mapping block: + +- [console.cs](/home/vladimir/Документы/source/Thetis/Project Files/Source/Console/console.cs:8556) + +In the normal non-diversity, non-sync mapping, Thetis uses: + +- `rx1 = 2` +- `rx2 = 3` + +See: + +- [console.cs](/home/vladimir/Документы/source/Thetis/Project Files/Source/Console/console.cs:8562) + +This is important: + +- for high-end Protocol 2 boards, Thetis does not map main receivers onto `DDC0` and `DDC1` +- it maps them onto `DDC2` and `DDC3` + +### Frequency map evidence + +Thetis has explicit frequency mapping entries up to at least `RX7`: + +- [network.c](/home/vladimir/Документы/source/Thetis/Project Files/Source/ChannelMaster/network.c:947) +- [network.c](/home/vladimir/Документы/source/Thetis/Project Files/Source/ChannelMaster/network.c:977) + +And sequence/error tracking exists up to `DDC6`: + +- [netInterface.c](/home/vladimir/Документы/source/Thetis/Project Files/Source/ChannelMaster/netInterface.c:173) +- [netInterface.c](/home/vladimir/Документы/source/Thetis/Project Files/Source/ChannelMaster/netInterface.c:185) + +This again supports the idea that these are logical digital channels, not simply "one DDC per physical receiver front-end". + +## Working interpretation for Orion MkII / ANAN-7000DLE / ANAN-8000DLE + +Most likely model: + +- there are `2` hardware ADC inputs +- there are multiple logical DDC channels built on top of those ADC inputs +- wideband is a separate stream, not "DDC1" +- `DDC0/DDC1` are likely reserved or preferred for sync/diversity/PureSignal related modes on high-end boards +- normal user RX channels on high-end Protocol 2 boards are likely expected on `DDC2` and `DDC3` + +This is consistent with: + +- protocol appendix: `2 ADC` and more-than-2 supported DDC on high-end hardware +- Thetis P2 receiver mapping +- Thetis P1 special-case handling for `nddc == 5` + +## Important caution + +One user assertion remains plausible and should not be discarded: + +- Orion MkII may have only `2` hardware receive chains in the analog sense + +That does not contradict the protocol or Thetis findings. + +It would simply mean: + +- `2` hardware ADC/analog paths +- multiple digital DDC slices derived from those ADCs + +So the likely correction is not "two hardware DDC total", but rather: + +- "two hardware ADC/front-end paths, several logical DDC channels" + +## Practical implication for cudaSDR Protocol 2 work + +For future receiver work, do not assume: + +- high-end Protocol 2 boards use the same DDC mapping as Hermes / HermesII +- receiver 1 and receiver 2 should be attached to `DDC0` and `DDC1` + +Instead, verify whether our Protocol 2 implementation should follow Thetis-style mapping for high-end boards: + +- RX1 -> `DDC2` +- RX2 -> `DDC3` + +And keep wideband separate from DDC numbering. diff --git a/Source/WORKLOG_PROTOCOL2_2026-04-13.md b/Source/WORKLOG_PROTOCOL2_2026-04-13.md index 1703016..a6a4fd7 100644 --- a/Source/WORKLOG_PROTOCOL2_2026-04-13.md +++ b/Source/WORKLOG_PROTOCOL2_2026-04-13.md @@ -185,3 +185,78 @@ This file records the Protocol 2 related work completed in this repository so fu - `doc/openHPSDR Ethernet Protocol v4.3.docx` - Highest value next task: - implement proper `Alex1/BPF2/RX2` handling for Protocol 2 boards that support a second Alex register. + +## Additional Fixes On 2026-04-14 + +### 1. Protocol 2 control-timing corrections + +- Re-read the local protocol document and verified the command timing requirements again: + - `High Priority` / C&C must be sent at least once per second, + - `100 ms` is the recommended periodic rate, + - packets should also be sent when relevant data changes. +- Updated `src/DataEngine/cusdr_protocol2_io.cpp` so Protocol 2 now reacts immediately to settings changes instead of relying only on the `100 ms` heartbeat: + - center/VFO frequency changes, + - current receiver changes, + - band changes, + - Alex config/state changes, + - sample-rate changes, + - DDC dither/random changes, + - number-of-receivers changes. +- `General`, `DDC Specific`, and `High Priority` packets are now refreshed according to the type of change, and DDC sockets are rebuilt if the active RX count changes. + +### 2. Protocol 2 wideband support integrated + +- Re-read the `Wideband` sections of `doc/openHPSDR Ethernet Protocol v4.3.docx`. +- Implemented Protocol 2 wideband receive support in: + - `src/DataEngine/cusdr_protocol2_io.h` + - `src/DataEngine/cusdr_protocol2_io.cpp` +- Added Protocol 2 wideband socket handling: + - bind UDP wideband receive socket on base port `1027`, + - receive raw ADC wideband packets, + - track per-port sequence numbers, + - reassemble a full wideband block into `io->wb_queue` for the existing wideband DSP/display pipeline. +- Updated Protocol 2 `General packet` wideband fields from the document: + - bytes `21..22`: wideband base port `1027`, + - byte `23`: enable bit for ADC0 wideband, + - bytes `24..25`: `512` samples per packet, + - byte `26`: `16`-bit samples, + - byte `27`: `20 ms` update rate, + - byte `28`: packets per frame from `Settings::getWidebandBuffers()`. +- Added live handling for `widebandDataChanged(...)` so Protocol 2 can enable/disable wideband by resending the `General packet` while running. +- When wideband is disabled, the partial Protocol 2 wideband accumulator is cleared and the wideband spectrum display is reset. + +### 3. UI wideband button now controls the actual stream + +- Investigated the existing UI and found the `Wideband` button only showed/hid the dock widget. +- It did **not** previously toggle the actual hardware wideband data stream. +- Updated `src/cusdr_mainWidget.cpp` so the `Wideband` button now: + - sets `widebandData`, + - sets `widebandStatus`, + - shows/hides the dock. +- Updated dock visibility handling so manual close/open remains synchronized with both UI state and data-stream state. +- Also removed the old behavior where the button stayed disabled merely because `widebandData` was off in the saved settings. + +### 4. Protocol 1 live wideband toggle aligned with UI + +- Updated `src/DataEngine/cusdr_dataEngine.h` and `src/DataEngine/cusdr_dataEngine.cpp` so `widebandDataChanged(...)` now reissues the legacy start command while the data engine is already running: + - `0x03` with wideband, + - `0x01` without wideband. +- Protocol 2 keeps its own separate live wideband handling inside `Protocol2DataPath`, so the legacy restart command is skipped for Protocol 2 devices. + +### 5. Build re-check + +- Rebuilt after the wideband work: + - `make -j4` + - success + +### Current status after wideband integration + +- Protocol 2 now has: + - periodic and change-driven command refresh, + - integrated wideband receive path, + - UI-triggered wideband enable/disable behavior. +- This is compile-verified. +- Runtime validation on real Protocol 2 hardware is still required for: + - actual wideband packet cadence, + - live on/off switching while running, + - board-specific wideband constraints such as fixed packets-per-frame behavior on some hardware. diff --git a/Source/WORKLOG_PROTOCOL2_2026-04-14.md b/Source/WORKLOG_PROTOCOL2_2026-04-14.md new file mode 100644 index 0000000..1d8208e --- /dev/null +++ b/Source/WORKLOG_PROTOCOL2_2026-04-14.md @@ -0,0 +1,108 @@ +# Protocol 2 Worklog - 2026-04-14 + +## Что подтверждено + +- Устройство корректно находится по Protocol 2. +- Для `Orion MkII / boardID 5` рабочий RX действительно идёт через `DDC2`, то есть поток приходит с `UDP 1037`. +- Реальное железо шлёт обратный трафик не на отдельные локальные порты `1025/1037/...`, а на локальный ephemeral-порт сессии. +- Поэтому схема с отдельными `QUdpSocket` для status/DDC не работала на реальном трансивере, хотя по tcpdump трафик был виден. +- После перехода на приём через общий сокет входящие IQ начали реально доходить: + - `dgrams > 0` + - `samples > 0` + - `iqFrames > 0` +- `iq_queue` и упаковка в legacy-кадр уже не являются первичным блокером: спектр/водопад появляются хотя бы кратковременно. + +## Что уже исправлено в коде + +### Protocol 2 mapping и пакеты + +- Добавлен high-end mapping `RX1 -> DDC2`, `RX2 -> DDC3` для `boardID 3/4/5/10`. +- `High Priority` пишет RX частоты в реальные DDC-слоты. +- Добавлена запись `DUC frequency` в `HP bytes 329..332`. +- `DDC Specific` отправляется полным пакетом `1444` байта. +- Sample rate в `DDC Specific` передаётся в `ksps`, а не в `Hz`. +- В `General Packet` исправлены: + - `DUC Specific port = 1026` + - `Mic data port = 1026` + - `Hardware watchdog enable` + - `PA enable` +- Добавлен минимальный `DUC/TX Specific` пакет. + +### Сокеты и входящий трафик + +- Исходно была реализована схема с отдельными UDP-сокетами под `1025`, `1037` и т.д. +- По tcpdump выяснилось, что реальный Orion MkII шлёт status/DDC/mic обратно на локальный порт командного сокета. +- После этого реализован приём как в `pihpsdr`: + - один основной сокет с локальным session-port + - demux по `source port` + - `1025 -> status` + - `1026 -> mic` + - `1035+N -> DDC IQ` + - `1027 -> wideband` + +### Диагностика + +- Добавлены счётчики: + - `dgrams` + - `samples` + - `iqFrames` + - `hpTx` + - `hpRx` +- Добавлен периодический лог состояния RX. + +## Что показывают последние логи + +- `hpTx` продолжает расти. +- `hpRx` продолжает расти. +- Значит: + - общий UDP сокет работает + - `QSocket/readyRead()` не является основным подозреваемым + - status-трафик живой +- Но `dgrams` по DDC останавливаются на фиксированном числе. +- Это означает, что после короткого времени именно радио перестаёт слать `DDC IQ`, при том что control/status канал остаётся жив. + +## Что уже проверено как гипотезы + +- Только `HP` в heartbeat. +- `HP` каждые `50 ms`. +- Только `HP + DDC Specific`. +- Цикл, близкий к `pihpsdr`: + - `HP` каждые `100 ms` + - `TX Specific` / `RX Specific` по очереди + - `General` раз в `800 ms` + +Поведение меняется, но DDC поток всё равно обрывается. + +## Что нужно сделать следующим + +Нужен лог с разбивкой по входящим `source port`, чтобы зафиксировать точную картину после остановки RX потока. + +Ожидаемый лог теперь имеет вид: + +```text +Protocol2:: rx flow: ... ports[1025=..., 1026=..., 1037=...] +``` + +### Критичный вопрос + +Что происходит после остановки `dgrams`: + +- если растут только `1025/1026`, а `1037` стоит: + - радио отключает именно DDC поток, при том что session/status живы; +- если `1037` растёт, а `dgrams` нет: + - ошибка в нашем demux/parse; +- если появляется другой неожиданный порт: + - нужно смотреть новую маршрутизацию/режим потока. + +## Главный вывод на текущий момент + +Проблема уже не выглядит как: + +- ошибка DSP, +- пустой `iq_queue`, +- неверные номера портов в `General`, +- мёртвый `QSocket`. + +Основной текущий подозреваемый: + +- содержимое или cadence одного из Protocol 2 control-пакетов всё ещё не совпадает с тем, что ожидает реальный `Orion MkII`, и из-за этого радио через короткое время прекращает выдачу `DDC IQ`, хотя status-канал продолжает жить. diff --git a/Source/bin/settings.ini b/Source/bin/settings.ini index efa03c9..d86239f 100644 --- a/Source/bin/settings.ini +++ b/Source/bin/settings.ini @@ -1,7 +1,7 @@ [General] cudaSDR%20BETA=v0.3.2.13+ cudaSDR%20BETA%20=v0.3.2.13+ -saved=\x43f\x43e\x43d\x435\x434\x435\x43b\x44c\x43d\x438\x43a 13 \x430\x43f\x440\x435\x43b\x44f 2026 22:06:20 +saved=\x432\x442\x43e\x440\x43d\x438\x43a 14 \x430\x43f\x440\x435\x43b\x44f 2026 21:53:53 [ChirpWSPR] chirpAmplitude=75 @@ -112,9 +112,9 @@ pennylane=false [network] audio_port=15000 -hpsdr_local_ipAddress=192.168.122.1 +hpsdr_local_ipAddress=172.16.2.99 listen_port=11000 -metis_port=48349 +metis_port=42421 server_ipAddress=192.168.122.1 server_port=52685 socketBufferSize=32 @@ -202,7 +202,7 @@ attenuatorGen=off audioVolume=73 averaging=on averagingCnt=5 -centerFrequency=7055083 +centerFrequency=7117391 clickVFO=on dBmPanScaleMax10cm=-10 dBmPanScaleMax10m=-30 @@ -292,14 +292,14 @@ lastCenterFrequency23cm=902000000 lastCenterFrequency2m=144000000 lastCenterFrequency30m=10100000 lastCenterFrequency33cm=902000000 -lastCenterFrequency40m=7055083 +lastCenterFrequency40m=7117391 lastCenterFrequency5cm=902000000 lastCenterFrequency60m=5260000 lastCenterFrequency630m=472000 lastCenterFrequency6m=50000000 lastCenterFrequency70cm=420000000 lastCenterFrequency80m=3713673 -lastCenterFrequencyGen=22830500 +lastCenterFrequencyGen=25159002 lastVfoFrequency10cm=902000000 lastVfoFrequency10m=28676442 lastVfoFrequency125cm=222000000 @@ -314,18 +314,18 @@ lastVfoFrequency23cm=902000000 lastVfoFrequency2m=144000000 lastVfoFrequency30m=10100000 lastVfoFrequency33cm=902000000 -lastVfoFrequency40m=7087913 +lastVfoFrequency40m=7178865 lastVfoFrequency5cm=902000000 lastVfoFrequency60m=5260000 lastVfoFrequency630m=472000 lastVfoFrequency6m=50000000 lastVfoFrequency70cm=420000000 lastVfoFrequency80m=3669000 -lastVfoFrequencyGen=22875900 +lastVfoFrequencyGen=25188000 mouseWheelFreqStep=100 panLocked=off panMode=FILLEDLINE -vfoFrequency=7087913 +vfoFrequency=7178865 waterfallMode=ENHANCED waterfallOffsetHi=20 waterfallOffsetLo=-5 @@ -3466,8 +3466,8 @@ averagingCnt=5 dBmWideBandScaleMax=-42 dBmWideBandScaleMin=-152 panMode=LINE -widebandData=on -widebandDisplay=on +widebandData=off +widebandDisplay=off [window] minimumGroupBoxWidth=230 diff --git a/Source/bin/windowsSettings.ini b/Source/bin/windowsSettings.ini index 1ff2652..2ffcb63 100644 --- a/Source/bin/windowsSettings.ini +++ b/Source/bin/windowsSettings.ini @@ -1,3 +1,3 @@ [General] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x5@\0\0\x3\x1b\0\0\0\0\0\0\0\x1c\0\0\x5@\0\0\x3\x1b\0\0\0\0\0\0\0\0\n\0\0\0\0\0\0\0\0\x1c\0\0\x5@\0\0\x3\x1b) -windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\x1\0\0\0\xf5\0\0\x2<\xfc\x2\0\0\0\x5\xfb\0\0\0\x12\0R\0\x61\0\x64\0i\0o\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x14\0S\0\x65\0r\0v\0\x65\0r\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x12\0H\0P\0S\0\x44\0R\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x12\0\x43\0h\0i\0r\0p\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x16\0\x44\0i\0s\0p\0l\0\x61\0y\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\0\0\x5\x41\0\0\x2<\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\xa5\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x44\0i\0s\0p\0l\0\x61\0y\0P\0\x61\0n\0\x65\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0\x42\0u\0t\0t\0o\0n\0s\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x1\xf9\0\0\0J\0\0\a9\0\0\x3\x65\0\0\x1\xf9\0\0\0\x66\0\0\a9\0\0\x3\x65\0\0\0\0\0\0\0\0\n\0\0\0\x1\xf9\0\0\0\x66\0\0\a9\0\0\x3\x65) +windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\x1\0\0\0\xf5\0\0\x2<\xfc\x2\0\0\0\x5\xfb\0\0\0\x12\0R\0\x61\0\x64\0i\0o\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x14\0S\0\x65\0r\0v\0\x65\0r\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x12\0H\0P\0S\0\x44\0R\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x12\0\x43\0h\0i\0r\0p\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x16\0\x44\0i\0s\0p\0l\0\x61\0y\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\0\0\x5\x41\0\0\x2<\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\xe1\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x44\0i\0s\0p\0l\0\x61\0y\0P\0\x61\0n\0\x65\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0\x42\0u\0t\0t\0o\0n\0s\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) diff --git a/Source/cudaSDR.log b/Source/cudaSDR.log deleted file mode 100644 index 7ce4da0..0000000 --- a/Source/cudaSDR.log +++ /dev/null @@ -1,925 +0,0 @@ -пн апр. 13 21:48:40 2026: ************************************************************************ -пн апр. 13 21:48:40 2026: Settings:: start at: пн апр. 13 21:48:40 2026 -пн апр. 13 21:48:40 2026: cudaSDR BETA -пн апр. 13 21:48:41 2026: Settings:: Alex config: 4098 -пн апр. 13 21:48:41 2026: Settings:: reading done. -пн апр. 13 21:48:41 2026: Init:: OpenGL found. -пн апр. 13 21:48:41 2026: Init:: Framebuffer Objects found. -пн апр. 13 21:48:41 2026: Init:: main window setup ... -пн апр. 13 21:48:42 2026: MainWindow:: main window init done -пн апр. 13 21:48:42 2026: MainWindow:: server ip from ini-file: "192.168.122.1" -пн апр. 13 21:48:42 2026: MainWindow:: HPSDR device local ip from ini-file: "192.168.122.1" -пн апр. 13 21:48:42 2026: MainWindow:: network interface "bridge0" : -пн апр. 13 21:48:42 2026: MainWindow:: -> broadcast address: 172.16.2.255 -пн апр. 13 21:48:42 2026: MainWindow:: -> ip address: 172.16.2.99 -пн апр. 13 21:48:42 2026: MainWindow:: network interface "virbr0" : -пн апр. 13 21:48:42 2026: MainWindow:: -> broadcast address: 192.168.122.255 -пн апр. 13 21:48:42 2026: MainWindow:: -> ip address: 192.168.122.1 -пн апр. 13 21:48:42 2026: MainWindow:: found 2 valid ip addresses. -пн апр. 13 21:48:42 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1") -пн апр. 13 21:48:42 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1") -пн апр. 13 21:48:42 2026: MainWindow:: using ip address 192.168.122.1 for the server. -пн апр. 13 21:48:42 2026: MainWindow:: using ip address 192.168.122.1 for connecting to a HPSDR device. -пн апр. 13 21:48:42 2026: Init:: main window setup done. -пн апр. 13 21:48:43 2026: Init:: current path: /home/vladimir/Документы/source/cudaSDR/Source -пн апр. 13 21:48:43 2026: Init:: fftwf_wisdom exists. -пн апр. 13 21:48:43 2026: Init:: found fftwf_wisdom - this will be quick! -пн апр. 13 21:48:43 2026: Init:: running application ... - -пн апр. 13 21:48:44 2026: -пн апр. 13 21:48:44 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:48:44 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:48:44 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:48:44 2026: Discoverer:: discovery_socket bound successfully to port 38814 -пн апр. 13 21:48:44 2026: Discoverer:: discovery data sent. -пн апр. 13 21:48:45 2026: Discoverer:: no device found - trying again... -пн апр. 13 21:48:45 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:48:45 2026: Discoverer:: discovery_socket bound successfully to port 55394 -пн апр. 13 21:48:45 2026: Discoverer:: discovery data sent. -пн апр. 13 21:48:45 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:48:45 2026: -пн апр. 13 21:48:45 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:48:45 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:48:45 2026: DiscovererP2:: using 192.168.122.1 for discovery protocol 2. -пн апр. 13 21:48:45 2026: DiscovererP2:: discovery_socket protocol 2 bound successfully to port 49021 -пн апр. 13 21:48:45 2026: DiscovererP2:: discovery protocol 2 data sent. -пн апр. 13 21:48:46 2026: DiscovererP2:: Device on protocol 2 found at 192.168.122.1:1024; Mac addr: [00:1C:C0:A2:18:EE] -пн апр. 13 21:48:46 2026: DiscovererP2:: Device protocol 2 code version: 19 -пн апр. 13 21:48:46 2026: DiscovererP2:: Protocol 2 device board ID: 5 -пн апр. 13 21:48:46 2026: DiscovererP2:: Protocol 2 device is: Orion MkII / ANAN-7/8000DLE -пн апр. 13 21:48:46 2026: DiscovererP2:: Protocol 2 capabilities: 2 ADC, 2 DDC, phaseWords=true, iqFlags=0x"3" -пн апр. 13 21:48:46 2026: DiscovererP2:: Device selected: 192.168.122.1 -пн апр. 13 21:48:46 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:48:46 2026: DataEngine:: found 1 network device(s) -пн апр. 13 21:48:46 2026: DataEngine:: Device 0 @ 192.168.122.1 [00:1C:C0:A2:18:EE] P38 -пн апр. 13 21:48:46 2026: DataEngine:: using HPSDR network device at 192.168.122.1 -пн апр. 13 21:48:46 2026: DataEngine:: shut down done. -пн апр. 13 21:48:46 2026: DataEngine:: got firmware versions: -пн апр. 13 21:48:46 2026: DataEngine:: Metis firmware: 0 -пн апр. 13 21:48:46 2026: DataEngine:: Mercury firmware: 0 -пн апр. 13 21:48:46 2026: DataEngine:: Penelope firmware: 0 -пн апр. 13 21:48:46 2026: DataEngine:: Pennylane firmware: 0 -пн апр. 13 21:48:46 2026: DataEngine:: Hermes firmware: 19 -пн апр. 13 21:48:46 2026: DataEngine:: stopping and restarting data engine. -пн апр. 13 21:48:46 2026: DataEngine:: trying to init a DSP core for rx 0 -пн апр. 13 21:48:46 2026: DSPEngine:: init DSPEngine with size: 1024 -пн апр. 13 21:48:46 2026: Receiver:: set DSP mode to: "LSB" -пн апр. 13 21:48:46 2026: Receiver:: QtDSP for receiver: 0 started. -пн апр. 13 21:48:46 2026: DataEngine:: init DSP core for rx 0 successful ! -пн апр. 13 21:48:46 2026: DataEngine:: Alex Configuration = 4098 -пн апр. 13 21:48:46 2026: Soundcard volume 32768 -пн апр. 13 21:48:46 2026: l: "lavrate" -пн апр. 13 21:48:46 2026: l: "samplerate" -пн апр. 13 21:48:46 2026: l: "speexrate" -пн апр. 13 21:48:46 2026: l: "jack" -пн апр. 13 21:48:46 2026: l: "oss" -пн апр. 13 21:48:46 2026: l: "pipewire" -пн апр. 13 21:48:46 2026: l: "pulse" -пн апр. 13 21:48:46 2026: l: "speex" -пн апр. 13 21:48:46 2026: l: "upmix" -пн апр. 13 21:48:46 2026: l: "vdownmix" -пн апр. 13 21:48:46 2026: l: "default" -пн апр. 13 21:48:46 2026: l: "hdmi:CARD=Generic,DEV=0" -пн апр. 13 21:48:46 2026: l: "hdmi:CARD=Generic,DEV=1" -пн апр. 13 21:48:46 2026: l: "hdmi:CARD=Generic,DEV=2" -пн апр. 13 21:48:46 2026: l: "hdmi:CARD=Generic,DEV=3" -пн апр. 13 21:48:46 2026: l: "usbstream:CARD=Generic" -пн апр. 13 21:48:46 2026: l: "sysdefault:CARD=Generic_1" -пн апр. 13 21:48:46 2026: l: "front:CARD=Generic_1,DEV=0" -пн апр. 13 21:48:46 2026: l: "surround21:CARD=Generic_1,DEV=0" -пн апр. 13 21:48:46 2026: l: "surround40:CARD=Generic_1,DEV=0" -пн апр. 13 21:48:46 2026: l: "surround41:CARD=Generic_1,DEV=0" -пн апр. 13 21:48:46 2026: l: "surround50:CARD=Generic_1,DEV=0" -пн апр. 13 21:48:46 2026: l: "surround51:CARD=Generic_1,DEV=0" -пн апр. 13 21:48:46 2026: l: "surround71:CARD=Generic_1,DEV=0" -пн апр. 13 21:48:46 2026: l: "usbstream:CARD=Generic_1" -пн апр. 13 21:48:46 2026: l: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:48:46 2026: l: "alsa_output.pci-0000_05_00.6.analog-stereo" -пн апр. 13 21:48:46 2026: res: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:48:46 2026: SoundOutRatio Rate 1 48000 -пн апр. 13 21:48:46 2026: DataEngine:: configured for 1 receiver(s) at 192 kHz sample rate -пн апр. 13 21:48:46 2026: DataEngine:: receiver processor thread started for Rx 0 -пн апр. 13 21:48:46 2026: DataEngine:: wide band data processor thread started. -пн апр. 13 21:48:46 2026: DataEngine:: data processor thread started. -пн апр. 13 21:48:46 2026: DataProcessor:: Data Processor thread: QThread(0x7fc2ac044000) -пн апр. 13 21:48:46 2026: DataEngine:: data IO thread started. -пн апр. 13 21:48:46 2026: Protocol2:: sockets initialized for 1 receiver(s). -пн апр. 13 21:48:46 2026: -пн апр. 13 21:48:46 2026: Settings:: ********************************************************** -пн апр. 13 21:48:46 2026: Settings:: Error: No error -пн апр. 13 21:48:46 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:48:46 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:48:46 2026: Settings:: DataEngine State: up -пн апр. 13 21:48:46 2026: -пн апр. 13 21:48:46 2026: DataEngine:: Data Engine thread: QThread(0x564408afb080) -пн апр. 13 21:48:59 2026: Settings:: save settings done. -пн апр. 13 21:48:59 2026: DataEngine:: HPSDR device stopped -пн апр. 13 21:48:59 2026: DataEngine:: data IO thread not yet finished... -пн апр. 13 21:48:59 2026: sound thread exit -пн апр. 13 21:48:59 2026: DataEngine:: data IO thread deleted. -пн апр. 13 21:48:59 2026: DataEngine:: iq_queue empty. -пн апр. 13 21:48:59 2026: DataEngine:: data processor thread deleted. -пн апр. 13 21:48:59 2026: WidebandProcessor:: wrong wide band buffer length: 0 -пн апр. 13 21:48:59 2026: DataEngine:: wide band data processor thread deleted. -пн апр. 13 21:48:59 2026: DataEngine:: device cards list cleared. -пн апр. 13 21:48:59 2026: DataEngine:: receiver threads deleted, receivers deleted, receiver & thread list cleared. -пн апр. 13 21:48:59 2026: Settings:: switch to receiver: 0 -пн апр. 13 21:48:59 2026: MainWindow:: setCurrentReceiver: 0 -пн апр. 13 21:48:59 2026: -пн апр. 13 21:48:59 2026: Settings:: ********************************************************** -пн апр. 13 21:48:59 2026: Settings:: Error: No error -пн апр. 13 21:48:59 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:48:59 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:48:59 2026: Settings:: DataEngine State: down -пн апр. 13 21:48:59 2026: -пн апр. 13 21:48:59 2026: DataEngine:: shut down done. -пн апр. 13 21:49:03 2026: -пн апр. 13 21:49:03 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:49:03 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:49:03 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:49:03 2026: Discoverer:: discovery_socket bound successfully to port 41133 -пн апр. 13 21:49:03 2026: Discoverer:: discovery data sent. -пн апр. 13 21:49:03 2026: Discoverer:: no device found - trying again... -пн апр. 13 21:49:03 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:49:03 2026: Discoverer:: discovery_socket bound successfully to port 46632 -пн апр. 13 21:49:03 2026: Discoverer:: discovery data sent. -пн апр. 13 21:49:04 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:49:04 2026: -пн апр. 13 21:49:04 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:49:04 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:49:04 2026: DiscovererP2:: using 192.168.122.1 for discovery protocol 2. -пн апр. 13 21:49:04 2026: DiscovererP2:: discovery_socket protocol 2 bound successfully to port 36287 -пн апр. 13 21:49:04 2026: DiscovererP2:: discovery protocol 2 data sent. -пн апр. 13 21:49:04 2026: DiscovererP2:: Device on protocol 2 found at 192.168.122.1:1024; Mac addr: [00:1C:C0:A2:18:EE] -пн апр. 13 21:49:04 2026: DiscovererP2:: Device protocol 2 code version: 19 -пн апр. 13 21:49:04 2026: DiscovererP2:: Protocol 2 device board ID: 5 -пн апр. 13 21:49:04 2026: DiscovererP2:: Protocol 2 device is: Orion MkII / ANAN-7/8000DLE -пн апр. 13 21:49:04 2026: DiscovererP2:: Protocol 2 capabilities: 2 ADC, 2 DDC, phaseWords=true, iqFlags=0x"3" -пн апр. 13 21:49:04 2026: DiscovererP2:: Device selected: 192.168.122.1 -пн апр. 13 21:49:04 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:49:04 2026: DataEngine:: found 1 network device(s) -пн апр. 13 21:49:04 2026: DataEngine:: Device 0 @ 192.168.122.1 [00:1C:C0:A2:18:EE] P38 -пн апр. 13 21:49:04 2026: DataEngine:: using HPSDR network device at 192.168.122.1 -пн апр. 13 21:49:04 2026: DataEngine:: shut down done. -пн апр. 13 21:49:04 2026: DataEngine:: got firmware versions: -пн апр. 13 21:49:04 2026: DataEngine:: Metis firmware: 0 -пн апр. 13 21:49:04 2026: DataEngine:: Mercury firmware: 0 -пн апр. 13 21:49:04 2026: DataEngine:: Penelope firmware: 0 -пн апр. 13 21:49:04 2026: DataEngine:: Pennylane firmware: 0 -пн апр. 13 21:49:04 2026: DataEngine:: Hermes firmware: 19 -пн апр. 13 21:49:04 2026: DataEngine:: stopping and restarting data engine. -пн апр. 13 21:49:04 2026: DataEngine:: trying to init a DSP core for rx 0 -пн апр. 13 21:49:04 2026: DSPEngine:: init DSPEngine with size: 1024 -пн апр. 13 21:49:04 2026: Receiver:: set DSP mode to: "LSB" -пн апр. 13 21:49:04 2026: Receiver:: QtDSP for receiver: 0 started. -пн апр. 13 21:49:04 2026: DataEngine:: init DSP core for rx 0 successful ! -пн апр. 13 21:49:04 2026: DataEngine:: Alex Configuration = 4098 -пн апр. 13 21:49:05 2026: Soundcard volume 32768 -пн апр. 13 21:49:05 2026: l: "lavrate" -пн апр. 13 21:49:05 2026: l: "samplerate" -пн апр. 13 21:49:05 2026: l: "speexrate" -пн апр. 13 21:49:05 2026: l: "jack" -пн апр. 13 21:49:05 2026: l: "oss" -пн апр. 13 21:49:05 2026: l: "pipewire" -пн апр. 13 21:49:05 2026: l: "pulse" -пн апр. 13 21:49:05 2026: l: "speex" -пн апр. 13 21:49:05 2026: l: "upmix" -пн апр. 13 21:49:05 2026: l: "vdownmix" -пн апр. 13 21:49:05 2026: l: "default" -пн апр. 13 21:49:05 2026: l: "hdmi:CARD=Generic,DEV=0" -пн апр. 13 21:49:05 2026: l: "hdmi:CARD=Generic,DEV=1" -пн апр. 13 21:49:05 2026: l: "hdmi:CARD=Generic,DEV=2" -пн апр. 13 21:49:05 2026: l: "hdmi:CARD=Generic,DEV=3" -пн апр. 13 21:49:05 2026: l: "usbstream:CARD=Generic" -пн апр. 13 21:49:05 2026: l: "sysdefault:CARD=Generic_1" -пн апр. 13 21:49:05 2026: l: "front:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:05 2026: l: "surround21:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:05 2026: l: "surround40:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:05 2026: l: "surround41:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:05 2026: l: "surround50:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:05 2026: l: "surround51:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:05 2026: l: "surround71:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:05 2026: l: "usbstream:CARD=Generic_1" -пн апр. 13 21:49:05 2026: l: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:49:05 2026: l: "alsa_output.pci-0000_05_00.6.analog-stereo" -пн апр. 13 21:49:05 2026: res: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:49:05 2026: SoundOutRatio Rate 1 48000 -пн апр. 13 21:49:05 2026: DataEngine:: configured for 1 receiver(s) at 192 kHz sample rate -пн апр. 13 21:49:05 2026: DataEngine:: receiver processor thread started for Rx 0 -пн апр. 13 21:49:05 2026: DataEngine:: wide band data processor thread started. -пн апр. 13 21:49:05 2026: DataEngine:: data processor thread started. -пн апр. 13 21:49:05 2026: DataProcessor:: Data Processor thread: QThread(0x56440ed9c670) -пн апр. 13 21:49:05 2026: DataEngine:: data IO thread started. -пн апр. 13 21:49:05 2026: Protocol2:: sockets initialized for 1 receiver(s). -пн апр. 13 21:49:05 2026: -пн апр. 13 21:49:05 2026: Settings:: ********************************************************** -пн апр. 13 21:49:05 2026: Settings:: Error: No error -пн апр. 13 21:49:05 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:49:05 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:49:05 2026: Settings:: DataEngine State: up -пн апр. 13 21:49:05 2026: -пн апр. 13 21:49:05 2026: DataEngine:: Data Engine thread: QThread(0x564408afb080) -пн апр. 13 21:49:14 2026: Settings:: save settings done. -пн апр. 13 21:49:14 2026: DataEngine:: HPSDR device stopped -пн апр. 13 21:49:14 2026: DataEngine:: data IO thread not yet finished... -пн апр. 13 21:49:14 2026: sound thread exit -пн апр. 13 21:49:14 2026: DataEngine:: data IO thread deleted. -пн апр. 13 21:49:14 2026: DataEngine:: iq_queue empty. -пн апр. 13 21:49:14 2026: DataEngine:: data processor thread deleted. -пн апр. 13 21:49:14 2026: WidebandProcessor:: wrong wide band buffer length: 0 -пн апр. 13 21:49:14 2026: DataEngine:: wide band data processor thread deleted. -пн апр. 13 21:49:14 2026: DataEngine:: device cards list cleared. -пн апр. 13 21:49:14 2026: DataEngine:: receiver threads deleted, receivers deleted, receiver & thread list cleared. -пн апр. 13 21:49:14 2026: Settings:: switch to receiver: 0 -пн апр. 13 21:49:14 2026: MainWindow:: setCurrentReceiver: 0 -пн апр. 13 21:49:14 2026: -пн апр. 13 21:49:14 2026: Settings:: ********************************************************** -пн апр. 13 21:49:14 2026: Settings:: Error: No error -пн апр. 13 21:49:14 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:49:14 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:49:14 2026: Settings:: DataEngine State: down -пн апр. 13 21:49:14 2026: -пн апр. 13 21:49:14 2026: DataEngine:: shut down done. -пн апр. 13 21:49:15 2026: -пн апр. 13 21:49:15 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:49:15 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:49:15 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:49:15 2026: Discoverer:: discovery_socket bound successfully to port 44694 -пн апр. 13 21:49:15 2026: Discoverer:: discovery data sent. -пн апр. 13 21:49:16 2026: Discoverer:: no device found - trying again... -пн апр. 13 21:49:16 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:49:16 2026: Discoverer:: discovery_socket bound successfully to port 53887 -пн апр. 13 21:49:16 2026: Discoverer:: discovery data sent. -пн апр. 13 21:49:16 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:49:16 2026: -пн апр. 13 21:49:16 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:49:16 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:49:16 2026: DiscovererP2:: using 192.168.122.1 for discovery protocol 2. -пн апр. 13 21:49:16 2026: DiscovererP2:: discovery_socket protocol 2 bound successfully to port 38861 -пн апр. 13 21:49:16 2026: DiscovererP2:: discovery protocol 2 data sent. -пн апр. 13 21:49:17 2026: DiscovererP2:: Device on protocol 2 found at 192.168.122.1:1024; Mac addr: [00:1C:C0:A2:18:EE] -пн апр. 13 21:49:17 2026: DiscovererP2:: Device protocol 2 code version: 19 -пн апр. 13 21:49:17 2026: DiscovererP2:: Protocol 2 device board ID: 5 -пн апр. 13 21:49:17 2026: DiscovererP2:: Protocol 2 device is: Orion MkII / ANAN-7/8000DLE -пн апр. 13 21:49:17 2026: DiscovererP2:: Protocol 2 capabilities: 2 ADC, 2 DDC, phaseWords=true, iqFlags=0x"3" -пн апр. 13 21:49:17 2026: DiscovererP2:: Device selected: 192.168.122.1 -пн апр. 13 21:49:17 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:49:17 2026: DataEngine:: found 1 network device(s) -пн апр. 13 21:49:17 2026: DataEngine:: Device 0 @ 192.168.122.1 [00:1C:C0:A2:18:EE] P38 -пн апр. 13 21:49:17 2026: DataEngine:: using HPSDR network device at 192.168.122.1 -пн апр. 13 21:49:17 2026: DataEngine:: shut down done. -пн апр. 13 21:49:17 2026: DataEngine:: got firmware versions: -пн апр. 13 21:49:17 2026: DataEngine:: Metis firmware: 0 -пн апр. 13 21:49:17 2026: DataEngine:: Mercury firmware: 0 -пн апр. 13 21:49:17 2026: DataEngine:: Penelope firmware: 0 -пн апр. 13 21:49:17 2026: DataEngine:: Pennylane firmware: 0 -пн апр. 13 21:49:17 2026: DataEngine:: Hermes firmware: 19 -пн апр. 13 21:49:17 2026: DataEngine:: stopping and restarting data engine. -пн апр. 13 21:49:17 2026: DataEngine:: trying to init a DSP core for rx 0 -пн апр. 13 21:49:17 2026: DSPEngine:: init DSPEngine with size: 1024 -пн апр. 13 21:49:17 2026: Receiver:: set DSP mode to: "LSB" -пн апр. 13 21:49:17 2026: Receiver:: QtDSP for receiver: 0 started. -пн апр. 13 21:49:17 2026: DataEngine:: init DSP core for rx 0 successful ! -пн апр. 13 21:49:17 2026: DataEngine:: Alex Configuration = 4098 -пн апр. 13 21:49:17 2026: Soundcard volume 32768 -пн апр. 13 21:49:17 2026: l: "lavrate" -пн апр. 13 21:49:17 2026: l: "samplerate" -пн апр. 13 21:49:17 2026: l: "speexrate" -пн апр. 13 21:49:17 2026: l: "jack" -пн апр. 13 21:49:17 2026: l: "oss" -пн апр. 13 21:49:17 2026: l: "pipewire" -пн апр. 13 21:49:17 2026: l: "pulse" -пн апр. 13 21:49:17 2026: l: "speex" -пн апр. 13 21:49:17 2026: l: "upmix" -пн апр. 13 21:49:17 2026: l: "vdownmix" -пн апр. 13 21:49:17 2026: l: "default" -пн апр. 13 21:49:17 2026: l: "hdmi:CARD=Generic,DEV=0" -пн апр. 13 21:49:17 2026: l: "hdmi:CARD=Generic,DEV=1" -пн апр. 13 21:49:17 2026: l: "hdmi:CARD=Generic,DEV=2" -пн апр. 13 21:49:17 2026: l: "hdmi:CARD=Generic,DEV=3" -пн апр. 13 21:49:17 2026: l: "usbstream:CARD=Generic" -пн апр. 13 21:49:17 2026: l: "sysdefault:CARD=Generic_1" -пн апр. 13 21:49:17 2026: l: "front:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:17 2026: l: "surround21:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:17 2026: l: "surround40:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:17 2026: l: "surround41:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:17 2026: l: "surround50:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:17 2026: l: "surround51:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:17 2026: l: "surround71:CARD=Generic_1,DEV=0" -пн апр. 13 21:49:17 2026: l: "usbstream:CARD=Generic_1" -пн апр. 13 21:49:17 2026: l: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:49:17 2026: l: "alsa_output.pci-0000_05_00.6.analog-stereo" -пн апр. 13 21:49:17 2026: res: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:49:17 2026: SoundOutRatio Rate 1 48000 -пн апр. 13 21:49:17 2026: DataEngine:: configured for 1 receiver(s) at 192 kHz sample rate -пн апр. 13 21:49:17 2026: DataEngine:: receiver processor thread started for Rx 0 -пн апр. 13 21:49:17 2026: DataEngine:: wide band data processor thread started. -пн апр. 13 21:49:17 2026: DataEngine:: data processor thread started. -пн апр. 13 21:49:17 2026: DataProcessor:: Data Processor thread: QThread(0x56440ed8df70) -пн апр. 13 21:49:17 2026: DataEngine:: data IO thread started. -пн апр. 13 21:49:17 2026: Protocol2:: sockets initialized for 1 receiver(s). -пн апр. 13 21:49:17 2026: -пн апр. 13 21:49:17 2026: Settings:: ********************************************************** -пн апр. 13 21:49:17 2026: Settings:: Error: No error -пн апр. 13 21:49:17 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:49:17 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:49:17 2026: Settings:: DataEngine State: up -пн апр. 13 21:49:17 2026: -пн апр. 13 21:49:17 2026: DataEngine:: Data Engine thread: QThread(0x564408afb080) -пн апр. 13 21:49:21 2026: Settings:: save settings done. -пн апр. 13 21:49:21 2026: DataEngine:: HPSDR device stopped -пн апр. 13 21:49:21 2026: DataEngine:: data IO thread not yet finished... -пн апр. 13 21:49:21 2026: sound thread exit -пн апр. 13 21:49:21 2026: DataEngine:: data IO thread deleted. -пн апр. 13 21:49:21 2026: DataEngine:: iq_queue empty. -пн апр. 13 21:49:21 2026: DataEngine:: data processor thread deleted. -пн апр. 13 21:49:21 2026: WidebandProcessor:: wrong wide band buffer length: 0 -пн апр. 13 21:49:21 2026: DataEngine:: wide band data processor thread deleted. -пн апр. 13 21:49:22 2026: DataEngine:: device cards list cleared. -пн апр. 13 21:49:22 2026: DataEngine:: receiver threads deleted, receivers deleted, receiver & thread list cleared. -пн апр. 13 21:49:22 2026: Settings:: switch to receiver: 0 -пн апр. 13 21:49:22 2026: MainWindow:: setCurrentReceiver: 0 -пн апр. 13 21:49:22 2026: -пн апр. 13 21:49:22 2026: Settings:: ********************************************************** -пн апр. 13 21:49:22 2026: Settings:: Error: No error -пн апр. 13 21:49:22 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:49:22 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:49:22 2026: Settings:: DataEngine State: down -пн апр. 13 21:49:22 2026: -пн апр. 13 21:49:22 2026: DataEngine:: shut down done. -пн апр. 13 21:50:30 2026: ************************************************************************ -пн апр. 13 21:50:30 2026: Settings:: start at: пн апр. 13 21:50:30 2026 -пн апр. 13 21:50:30 2026: cudaSDR BETA -пн апр. 13 21:50:31 2026: Settings:: Alex config: 4098 -пн апр. 13 21:50:31 2026: Settings:: reading done. -пн апр. 13 21:50:31 2026: Init:: OpenGL found. -пн апр. 13 21:50:31 2026: Init:: Framebuffer Objects found. -пн апр. 13 21:50:31 2026: Init:: main window setup ... -пн апр. 13 21:50:32 2026: MainWindow:: main window init done -пн апр. 13 21:50:32 2026: MainWindow:: server ip from ini-file: "192.168.122.1" -пн апр. 13 21:50:32 2026: MainWindow:: HPSDR device local ip from ini-file: "192.168.122.1" -пн апр. 13 21:50:32 2026: MainWindow:: network interface "bridge0" : -пн апр. 13 21:50:32 2026: MainWindow:: -> broadcast address: 172.16.2.255 -пн апр. 13 21:50:32 2026: MainWindow:: -> ip address: 172.16.2.99 -пн апр. 13 21:50:32 2026: MainWindow:: network interface "virbr0" : -пн апр. 13 21:50:32 2026: MainWindow:: -> broadcast address: 192.168.122.255 -пн апр. 13 21:50:32 2026: MainWindow:: -> ip address: 192.168.122.1 -пн апр. 13 21:50:32 2026: MainWindow:: found 2 valid ip addresses. -пн апр. 13 21:50:32 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1") -пн апр. 13 21:50:32 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1") -пн апр. 13 21:50:32 2026: MainWindow:: using ip address 192.168.122.1 for the server. -пн апр. 13 21:50:32 2026: MainWindow:: using ip address 192.168.122.1 for connecting to a HPSDR device. -пн апр. 13 21:50:32 2026: Init:: main window setup done. -пн апр. 13 21:50:33 2026: Init:: current path: /home/vladimir/Документы/source/cudaSDR/Source -пн апр. 13 21:50:33 2026: Init:: fftwf_wisdom exists. -пн апр. 13 21:50:33 2026: Init:: found fftwf_wisdom - this will be quick! -пн апр. 13 21:50:33 2026: Init:: running application ... - -пн апр. 13 21:50:34 2026: -пн апр. 13 21:50:34 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:50:34 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:50:34 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:50:34 2026: Discoverer:: discovery_socket bound successfully to port 51309 -пн апр. 13 21:50:34 2026: Discoverer:: discovery data sent. -пн апр. 13 21:50:34 2026: Discoverer:: Device found at 192.168.122.1:1024; Mac addr: [00:1C:C0:A2:18:DD] -пн апр. 13 21:50:34 2026: Discoverer:: Device code version: 1f -пн апр. 13 21:50:34 2026: Discoverer:: Device board ID: 10 -пн апр. 13 21:50:34 2026: Discoverer:: Device is: -пн апр. 13 21:50:34 2026: Discoverer:: Device selected: 192.168.122.1 -пн апр. 13 21:50:34 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:50:34 2026: DataEngine:: found 1 network device(s) -пн апр. 13 21:50:34 2026: DataEngine:: Device 0 @ 192.168.122.1 [00:1C:C0:A2:18:DD] P1 -пн апр. 13 21:50:34 2026: DataEngine:: using HPSDR network device at 192.168.122.1 -пн апр. 13 21:50:35 2026: DataEngine:: trying to init a DSP core for rx 0 -пн апр. 13 21:50:35 2026: DSPEngine:: init DSPEngine with size: 1024 -пн апр. 13 21:50:35 2026: Receiver:: set DSP mode to: "LSB" -пн апр. 13 21:50:35 2026: Receiver:: QtDSP for receiver: 0 started. -пн апр. 13 21:50:35 2026: DataEngine:: init DSP core for rx 0 successful ! -пн апр. 13 21:50:35 2026: DataEngine:: Alex Configuration = 4098 -пн апр. 13 21:50:35 2026: Soundcard volume 32768 -пн апр. 13 21:50:35 2026: l: "lavrate" -пн апр. 13 21:50:35 2026: l: "samplerate" -пн апр. 13 21:50:35 2026: l: "speexrate" -пн апр. 13 21:50:35 2026: l: "jack" -пн апр. 13 21:50:35 2026: l: "oss" -пн апр. 13 21:50:35 2026: l: "pipewire" -пн апр. 13 21:50:35 2026: l: "pulse" -пн апр. 13 21:50:35 2026: l: "speex" -пн апр. 13 21:50:35 2026: l: "upmix" -пн апр. 13 21:50:35 2026: l: "vdownmix" -пн апр. 13 21:50:35 2026: l: "default" -пн апр. 13 21:50:35 2026: l: "hdmi:CARD=Generic,DEV=0" -пн апр. 13 21:50:35 2026: l: "hdmi:CARD=Generic,DEV=1" -пн апр. 13 21:50:35 2026: l: "hdmi:CARD=Generic,DEV=2" -пн апр. 13 21:50:35 2026: l: "hdmi:CARD=Generic,DEV=3" -пн апр. 13 21:50:35 2026: l: "usbstream:CARD=Generic" -пн апр. 13 21:50:35 2026: l: "sysdefault:CARD=Generic_1" -пн апр. 13 21:50:35 2026: l: "front:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:35 2026: l: "surround21:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:35 2026: l: "surround40:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:35 2026: l: "surround41:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:35 2026: l: "surround50:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:35 2026: l: "surround51:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:35 2026: l: "surround71:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:35 2026: l: "usbstream:CARD=Generic_1" -пн апр. 13 21:50:35 2026: l: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:50:35 2026: l: "alsa_output.pci-0000_05_00.6.analog-stereo" -пн апр. 13 21:50:35 2026: res: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:50:35 2026: SoundOutRatio Rate 1 48000 -пн апр. 13 21:50:35 2026: DataEngine:: configured for 1 receiver(s) at 192 kHz sample rate -пн апр. 13 21:50:35 2026: DataEngine:: data processor thread started. -пн апр. 13 21:50:35 2026: DataEngine:: data IO thread started. -пн апр. 13 21:50:35 2026: DataProcessor:: Data Processor thread: QThread(0x55af709c9240) -пн апр. 13 21:50:35 2026: DataIO:: socket buffer size set to 64 kB. -пн апр. 13 21:50:35 2026: DataIO:: data receiver socket bound successful to local port 51309 -пн апр. 13 21:50:35 2026: DataIO:: init frames sent to network device. -пн апр. 13 21:50:35 2026: DataIO:: init frames sent to network device. -пн апр. 13 21:50:35 2026: DataIO:: sent start command to device at: 192.168.122.1 -пн апр. 13 21:50:35 2026: -пн апр. 13 21:50:35 2026: Settings:: ********************************************************** -пн апр. 13 21:50:35 2026: Settings:: Error: No error -пн апр. 13 21:50:35 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:50:35 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:50:35 2026: Settings:: DataEngine State: up -пн апр. 13 21:50:35 2026: -пн апр. 13 21:50:35 2026: DataEngine:: Hermes firmware version: 21 -пн апр. 13 21:50:35 2026: DataIO:: sent stop command to device at: 192.168.122.1 -пн апр. 13 21:50:35 2026: DataEngine:: HPSDR device stopped -пн апр. 13 21:50:35 2026: DataEngine:: data IO thread not yet finished... -пн апр. 13 21:50:35 2026: sound thread exit -пн апр. 13 21:50:35 2026: DataEngine:: data IO thread deleted. -пн апр. 13 21:50:36 2026: DataEngine:: iq_queue empty. -пн апр. 13 21:50:36 2026: DataEngine:: data processor thread deleted. -пн апр. 13 21:50:36 2026: DataEngine:: device cards list cleared. -пн апр. 13 21:50:36 2026: DataEngine:: receiver threads deleted, receivers deleted, receiver & thread list cleared. -пн апр. 13 21:50:36 2026: Settings:: switch to receiver: 0 -пн апр. 13 21:50:36 2026: MainWindow:: setCurrentReceiver: 0 -пн апр. 13 21:50:36 2026: -пн апр. 13 21:50:36 2026: Settings:: ********************************************************** -пн апр. 13 21:50:36 2026: Settings:: Error: No error -пн апр. 13 21:50:36 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:50:36 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:50:36 2026: Settings:: DataEngine State: down -пн апр. 13 21:50:36 2026: -пн апр. 13 21:50:36 2026: DataEngine:: shut down done. -пн апр. 13 21:50:36 2026: DataEngine:: got firmware versions: -пн апр. 13 21:50:36 2026: DataEngine:: Metis firmware: 0 -пн апр. 13 21:50:36 2026: DataEngine:: Mercury firmware: 0 -пн апр. 13 21:50:36 2026: DataEngine:: Penelope firmware: 0 -пн апр. 13 21:50:36 2026: DataEngine:: Pennylane firmware: 0 -пн апр. 13 21:50:36 2026: DataEngine:: Hermes firmware: 21 -пн апр. 13 21:50:36 2026: DataEngine:: stopping and restarting data engine. -пн апр. 13 21:50:36 2026: DataEngine:: trying to init a DSP core for rx 0 -пн апр. 13 21:50:36 2026: DSPEngine:: init DSPEngine with size: 1024 -пн апр. 13 21:50:36 2026: Receiver:: set DSP mode to: "LSB" -пн апр. 13 21:50:36 2026: Receiver:: QtDSP for receiver: 0 started. -пн апр. 13 21:50:36 2026: DataEngine:: init DSP core for rx 0 successful ! -пн апр. 13 21:50:36 2026: DataEngine:: Alex Configuration = 4098 -пн апр. 13 21:50:36 2026: Soundcard volume 32768 -пн апр. 13 21:50:36 2026: l: "lavrate" -пн апр. 13 21:50:36 2026: l: "samplerate" -пн апр. 13 21:50:36 2026: l: "speexrate" -пн апр. 13 21:50:36 2026: l: "jack" -пн апр. 13 21:50:36 2026: l: "oss" -пн апр. 13 21:50:36 2026: l: "pipewire" -пн апр. 13 21:50:36 2026: l: "pulse" -пн апр. 13 21:50:36 2026: l: "speex" -пн апр. 13 21:50:36 2026: l: "upmix" -пн апр. 13 21:50:36 2026: l: "vdownmix" -пн апр. 13 21:50:36 2026: l: "default" -пн апр. 13 21:50:36 2026: l: "hdmi:CARD=Generic,DEV=0" -пн апр. 13 21:50:36 2026: l: "hdmi:CARD=Generic,DEV=1" -пн апр. 13 21:50:36 2026: l: "hdmi:CARD=Generic,DEV=2" -пн апр. 13 21:50:36 2026: l: "hdmi:CARD=Generic,DEV=3" -пн апр. 13 21:50:36 2026: l: "usbstream:CARD=Generic" -пн апр. 13 21:50:36 2026: l: "sysdefault:CARD=Generic_1" -пн апр. 13 21:50:36 2026: l: "front:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:36 2026: l: "surround21:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:36 2026: l: "surround40:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:36 2026: l: "surround41:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:36 2026: l: "surround50:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:36 2026: l: "surround51:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:36 2026: l: "surround71:CARD=Generic_1,DEV=0" -пн апр. 13 21:50:36 2026: l: "usbstream:CARD=Generic_1" -пн апр. 13 21:50:36 2026: l: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:50:36 2026: l: "alsa_output.pci-0000_05_00.6.analog-stereo" -пн апр. 13 21:50:36 2026: res: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:50:36 2026: SoundOutRatio Rate 1 48000 -пн апр. 13 21:50:36 2026: DataEngine:: configured for 1 receiver(s) at 192 kHz sample rate -пн апр. 13 21:50:36 2026: DataEngine:: receiver processor thread started for Rx 0 -пн апр. 13 21:50:36 2026: DataEngine:: wide band data processor thread started. -пн апр. 13 21:50:36 2026: DataEngine:: data processor thread started. -пн апр. 13 21:50:36 2026: DataProcessor:: Data Processor thread: QThread(0x55af70443eb0) -пн апр. 13 21:50:36 2026: DataEngine:: data IO thread started. -пн апр. 13 21:50:36 2026: DataIO:: socket buffer size set to 64 kB. -пн апр. 13 21:50:36 2026: DataIO:: data receiver socket bound successful to local port 51309 -пн апр. 13 21:50:36 2026: DataIO:: init frames sent to network device. -пн апр. 13 21:50:36 2026: DataIO:: init frames sent to network device. -пн апр. 13 21:50:36 2026: DataIO:: sent start command to device at: 192.168.122.1 -пн апр. 13 21:50:36 2026: -пн апр. 13 21:50:36 2026: Settings:: ********************************************************** -пн апр. 13 21:50:36 2026: Settings:: Error: No error -пн апр. 13 21:50:36 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:50:36 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:50:36 2026: Settings:: DataEngine State: up -пн апр. 13 21:50:36 2026: -пн апр. 13 21:50:36 2026: DataEngine:: Data Engine thread: QThread(0x55af6aa99080) -пн апр. 13 21:50:36 2026: DataEngine:: Hermes firmware version: 21 -пн апр. 13 21:51:11 2026: Settings:: save settings done. -пн апр. 13 21:51:11 2026: DataIO:: sent stop command to device at: 192.168.122.1 -пн апр. 13 21:51:11 2026: DataEngine:: HPSDR device stopped -пн апр. 13 21:51:11 2026: DataEngine:: data IO thread not yet finished... -пн апр. 13 21:51:11 2026: sound thread exit -пн апр. 13 21:51:11 2026: DataEngine:: data IO thread deleted. -пн апр. 13 21:51:11 2026: DataEngine:: iq_queue empty. -пн апр. 13 21:51:11 2026: DataEngine:: data processor thread deleted. -пн апр. 13 21:51:11 2026: WidebandProcessor:: wrong wide band buffer length: 0 -пн апр. 13 21:51:11 2026: DataEngine:: wide band data processor thread deleted. -пн апр. 13 21:51:11 2026: DataEngine:: device cards list cleared. -пн апр. 13 21:51:11 2026: DataEngine:: receiver threads deleted, receivers deleted, receiver & thread list cleared. -пн апр. 13 21:51:11 2026: Settings:: switch to receiver: 0 -пн апр. 13 21:51:11 2026: MainWindow:: setCurrentReceiver: 0 -пн апр. 13 21:51:11 2026: -пн апр. 13 21:51:11 2026: Settings:: ********************************************************** -пн апр. 13 21:51:11 2026: Settings:: Error: No error -пн апр. 13 21:51:11 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:51:11 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:51:11 2026: Settings:: DataEngine State: down -пн апр. 13 21:51:11 2026: -пн апр. 13 21:51:11 2026: DataEngine:: shut down done. -пн апр. 13 21:51:42 2026: -пн апр. 13 21:51:42 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:51:42 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:51:42 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:51:42 2026: Discoverer:: discovery_socket bound successfully to port 57220 -пн апр. 13 21:51:42 2026: Discoverer:: discovery data sent. -пн апр. 13 21:51:43 2026: Discoverer:: no device found - trying again... -пн апр. 13 21:51:43 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 21:51:43 2026: Discoverer:: discovery_socket bound successfully to port 49672 -пн апр. 13 21:51:43 2026: Discoverer:: discovery data sent. -пн апр. 13 21:51:43 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:51:43 2026: -пн апр. 13 21:51:43 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 21:51:43 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 21:51:43 2026: DiscovererP2:: using 192.168.122.1 for discovery protocol 2. -пн апр. 13 21:51:43 2026: DiscovererP2:: discovery_socket protocol 2 bound successfully to port 48403 -пн апр. 13 21:51:43 2026: DiscovererP2:: discovery protocol 2 data sent. -пн апр. 13 21:51:44 2026: DiscovererP2:: Device on protocol 2 found at 192.168.122.1:1024; Mac addr: [00:1C:C0:A2:18:EE] -пн апр. 13 21:51:44 2026: DiscovererP2:: Device protocol 2 code version: 19 -пн апр. 13 21:51:44 2026: DiscovererP2:: Protocol 2 device board ID: 5 -пн апр. 13 21:51:44 2026: DiscovererP2:: Protocol 2 device is: Orion MkII / ANAN-7/8000DLE -пн апр. 13 21:51:44 2026: DiscovererP2:: Protocol 2 capabilities: 2 ADC, 2 DDC, phaseWords=true, iqFlags=0x"3" -пн апр. 13 21:51:44 2026: DiscovererP2:: Device selected: 192.168.122.1 -пн апр. 13 21:51:44 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 21:51:44 2026: DataEngine:: found 1 network device(s) -пн апр. 13 21:51:44 2026: DataEngine:: Device 0 @ 192.168.122.1 [00:1C:C0:A2:18:EE] P38 -пн апр. 13 21:51:44 2026: DataEngine:: using HPSDR network device at 192.168.122.1 -пн апр. 13 21:51:44 2026: DataEngine:: shut down done. -пн апр. 13 21:51:44 2026: DataEngine:: got firmware versions: -пн апр. 13 21:51:44 2026: DataEngine:: Metis firmware: 0 -пн апр. 13 21:51:44 2026: DataEngine:: Mercury firmware: 0 -пн апр. 13 21:51:44 2026: DataEngine:: Penelope firmware: 0 -пн апр. 13 21:51:44 2026: DataEngine:: Pennylane firmware: 0 -пн апр. 13 21:51:44 2026: DataEngine:: Hermes firmware: 19 -пн апр. 13 21:51:44 2026: DataEngine:: stopping and restarting data engine. -пн апр. 13 21:51:44 2026: DataEngine:: trying to init a DSP core for rx 0 -пн апр. 13 21:51:44 2026: DSPEngine:: init DSPEngine with size: 1024 -пн апр. 13 21:51:44 2026: Receiver:: set DSP mode to: "LSB" -пн апр. 13 21:51:44 2026: Receiver:: QtDSP for receiver: 0 started. -пн апр. 13 21:51:44 2026: DataEngine:: init DSP core for rx 0 successful ! -пн апр. 13 21:51:44 2026: DataEngine:: Alex Configuration = 4098 -пн апр. 13 21:51:44 2026: Soundcard volume 32768 -пн апр. 13 21:51:44 2026: l: "lavrate" -пн апр. 13 21:51:44 2026: l: "samplerate" -пн апр. 13 21:51:44 2026: l: "speexrate" -пн апр. 13 21:51:44 2026: l: "jack" -пн апр. 13 21:51:44 2026: l: "oss" -пн апр. 13 21:51:44 2026: l: "pipewire" -пн апр. 13 21:51:44 2026: l: "pulse" -пн апр. 13 21:51:44 2026: l: "speex" -пн апр. 13 21:51:44 2026: l: "upmix" -пн апр. 13 21:51:44 2026: l: "vdownmix" -пн апр. 13 21:51:44 2026: l: "default" -пн апр. 13 21:51:44 2026: l: "hdmi:CARD=Generic,DEV=0" -пн апр. 13 21:51:44 2026: l: "hdmi:CARD=Generic,DEV=1" -пн апр. 13 21:51:44 2026: l: "hdmi:CARD=Generic,DEV=2" -пн апр. 13 21:51:44 2026: l: "hdmi:CARD=Generic,DEV=3" -пн апр. 13 21:51:44 2026: l: "usbstream:CARD=Generic" -пн апр. 13 21:51:44 2026: l: "sysdefault:CARD=Generic_1" -пн апр. 13 21:51:44 2026: l: "front:CARD=Generic_1,DEV=0" -пн апр. 13 21:51:44 2026: l: "surround21:CARD=Generic_1,DEV=0" -пн апр. 13 21:51:44 2026: l: "surround40:CARD=Generic_1,DEV=0" -пн апр. 13 21:51:44 2026: l: "surround41:CARD=Generic_1,DEV=0" -пн апр. 13 21:51:44 2026: l: "surround50:CARD=Generic_1,DEV=0" -пн апр. 13 21:51:44 2026: l: "surround51:CARD=Generic_1,DEV=0" -пн апр. 13 21:51:44 2026: l: "surround71:CARD=Generic_1,DEV=0" -пн апр. 13 21:51:44 2026: l: "usbstream:CARD=Generic_1" -пн апр. 13 21:51:44 2026: l: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:51:44 2026: l: "alsa_output.pci-0000_05_00.6.analog-stereo" -пн апр. 13 21:51:44 2026: res: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 21:51:44 2026: SoundOutRatio Rate 1 48000 -пн апр. 13 21:51:44 2026: DataEngine:: configured for 1 receiver(s) at 192 kHz sample rate -пн апр. 13 21:51:44 2026: DataEngine:: receiver processor thread started for Rx 0 -пн апр. 13 21:51:44 2026: DataEngine:: wide band data processor thread started. -пн апр. 13 21:51:44 2026: DataEngine:: data processor thread started. -пн апр. 13 21:51:44 2026: DataProcessor:: Data Processor thread: QThread(0x55af6ac74cc0) -пн апр. 13 21:51:44 2026: DataEngine:: data IO thread started. -пн апр. 13 21:51:44 2026: Protocol2:: sockets initialized for 1 receiver(s). -пн апр. 13 21:51:44 2026: -пн апр. 13 21:51:44 2026: Settings:: ********************************************************** -пн апр. 13 21:51:44 2026: Settings:: Error: No error -пн апр. 13 21:51:44 2026: Settings:: HW Interface: Hermes -пн апр. 13 21:51:44 2026: Settings:: Server Mode: SDR mode -пн апр. 13 21:51:44 2026: Settings:: DataEngine State: up -пн апр. 13 21:51:44 2026: -пн апр. 13 21:51:44 2026: DataEngine:: Data Engine thread: QThread(0x55af6aa99080) -пн апр. 13 22:04:00 2026: Settings:: save settings done. -пн апр. 13 22:04:00 2026: DataEngine:: HPSDR device stopped -пн апр. 13 22:04:00 2026: DataEngine:: data IO thread not yet finished... -пн апр. 13 22:04:00 2026: sound thread exit -пн апр. 13 22:04:00 2026: DataEngine:: data IO thread deleted. -пн апр. 13 22:04:00 2026: DataEngine:: iq_queue empty. -пн апр. 13 22:04:00 2026: DataEngine:: data processor thread deleted. -пн апр. 13 22:04:00 2026: WidebandProcessor:: wrong wide band buffer length: 0 -пн апр. 13 22:04:00 2026: DataEngine:: wide band data processor thread deleted. -пн апр. 13 22:04:00 2026: DataEngine:: device cards list cleared. -пн апр. 13 22:04:00 2026: DataEngine:: receiver threads deleted, receivers deleted, receiver & thread list cleared. -пн апр. 13 22:04:00 2026: Settings:: switch to receiver: 0 -пн апр. 13 22:04:00 2026: MainWindow:: setCurrentReceiver: 0 -пн апр. 13 22:04:00 2026: -пн апр. 13 22:04:00 2026: Settings:: ********************************************************** -пн апр. 13 22:04:00 2026: Settings:: Error: No error -пн апр. 13 22:04:00 2026: Settings:: HW Interface: Hermes -пн апр. 13 22:04:00 2026: Settings:: Server Mode: SDR mode -пн апр. 13 22:04:00 2026: Settings:: DataEngine State: down -пн апр. 13 22:04:00 2026: -пн апр. 13 22:04:00 2026: DataEngine:: shut down done. -пн апр. 13 22:04:52 2026: ************************************************************************ -пн апр. 13 22:04:52 2026: Settings:: start at: пн апр. 13 22:04:52 2026 -пн апр. 13 22:04:52 2026: cudaSDR BETA -пн апр. 13 22:04:53 2026: Settings:: Alex config: 4098 -пн апр. 13 22:04:53 2026: Settings:: reading done. -пн апр. 13 22:04:53 2026: Init:: OpenGL found. -пн апр. 13 22:04:54 2026: Init:: Framebuffer Objects found. -пн апр. 13 22:04:54 2026: Init:: main window setup ... -пн апр. 13 22:04:54 2026: MainWindow:: main window init done -пн апр. 13 22:04:55 2026: MainWindow:: server ip from ini-file: "192.168.122.1" -пн апр. 13 22:04:55 2026: MainWindow:: HPSDR device local ip from ini-file: "192.168.122.1" -пн апр. 13 22:04:55 2026: MainWindow:: network interface "bridge0" : -пн апр. 13 22:04:55 2026: MainWindow:: -> broadcast address: 172.16.2.255 -пн апр. 13 22:04:55 2026: MainWindow:: -> ip address: 172.16.2.99 -пн апр. 13 22:04:55 2026: MainWindow:: network interface "virbr0" : -пн апр. 13 22:04:55 2026: MainWindow:: -> broadcast address: 192.168.122.255 -пн апр. 13 22:04:55 2026: MainWindow:: -> ip address: 192.168.122.1 -пн апр. 13 22:04:55 2026: MainWindow:: found 2 valid ip addresses. -пн апр. 13 22:04:55 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1") -пн апр. 13 22:04:55 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1") -пн апр. 13 22:04:55 2026: MainWindow:: using ip address 192.168.122.1 for the server. -пн апр. 13 22:04:55 2026: MainWindow:: using ip address 192.168.122.1 for connecting to a HPSDR device. -пн апр. 13 22:04:55 2026: Init:: main window setup done. -пн апр. 13 22:04:55 2026: Init:: current path: /home/vladimir/Документы/source/cudaSDR/Source -пн апр. 13 22:04:55 2026: Init:: fftwf_wisdom exists. -пн апр. 13 22:04:55 2026: Init:: found fftwf_wisdom - this will be quick! -пн апр. 13 22:04:55 2026: Init:: running application ... - -пн апр. 13 22:04:57 2026: -пн апр. 13 22:04:57 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 22:04:57 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 22:04:57 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 22:04:57 2026: Discoverer:: discovery_socket bound successfully to port 55054 -пн апр. 13 22:04:57 2026: Discoverer:: discovery data sent. -пн апр. 13 22:04:58 2026: Discoverer:: no device found - trying again... -пн апр. 13 22:04:58 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 22:04:58 2026: Discoverer:: discovery_socket bound successfully to port 40036 -пн апр. 13 22:04:58 2026: Discoverer:: discovery data sent. -пн апр. 13 22:04:58 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 22:04:58 2026: -пн апр. 13 22:04:58 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 22:04:58 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 22:04:58 2026: DiscovererP2:: using 192.168.122.1 for discovery protocol 2. -пн апр. 13 22:04:58 2026: DiscovererP2:: discovery_socket protocol 2 bound successfully to port 54473 -пн апр. 13 22:04:58 2026: DiscovererP2:: discovery protocol 2 data sent. -пн апр. 13 22:04:59 2026: DiscovererP2:: Device on protocol 2 found at 192.168.122.1:1024; Mac addr: [00:1C:C0:A2:18:EE] -пн апр. 13 22:04:59 2026: DiscovererP2:: Device protocol 2 code version: 19 -пн апр. 13 22:04:59 2026: DiscovererP2:: Protocol 2 device board ID: 5 -пн апр. 13 22:04:59 2026: DiscovererP2:: Protocol 2 device is: Orion MkII / ANAN-7/8000DLE -пн апр. 13 22:04:59 2026: DiscovererP2:: Protocol 2 capabilities: 2 ADC, 2 DDC, phaseWords=true, iqFlags=0x"3" -пн апр. 13 22:04:59 2026: DiscovererP2:: Device selected: 192.168.122.1 -пн апр. 13 22:04:59 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 22:04:59 2026: DataEngine:: found 1 network device(s) -пн апр. 13 22:04:59 2026: DataEngine:: Device 0 @ 192.168.122.1 [00:1C:C0:A2:18:EE] P38 -пн апр. 13 22:04:59 2026: DataEngine:: using HPSDR network device at 192.168.122.1 -пн апр. 13 22:04:59 2026: DataEngine:: shut down done. -пн апр. 13 22:04:59 2026: DataEngine:: got firmware versions: -пн апр. 13 22:04:59 2026: DataEngine:: Metis firmware: 0 -пн апр. 13 22:04:59 2026: DataEngine:: Mercury firmware: 0 -пн апр. 13 22:04:59 2026: DataEngine:: Penelope firmware: 0 -пн апр. 13 22:04:59 2026: DataEngine:: Pennylane firmware: 0 -пн апр. 13 22:04:59 2026: DataEngine:: Hermes firmware: 19 -пн апр. 13 22:04:59 2026: DataEngine:: stopping and restarting data engine. -пн апр. 13 22:04:59 2026: DataEngine:: trying to init a DSP core for rx 0 -пн апр. 13 22:04:59 2026: DSPEngine:: init DSPEngine with size: 1024 -пн апр. 13 22:04:59 2026: Receiver:: set DSP mode to: "LSB" -пн апр. 13 22:04:59 2026: Receiver:: QtDSP for receiver: 0 started. -пн апр. 13 22:04:59 2026: DataEngine:: init DSP core for rx 0 successful ! -пн апр. 13 22:04:59 2026: DataEngine:: Alex Configuration = 4098 -пн апр. 13 22:04:59 2026: Soundcard volume 32768 -пн апр. 13 22:04:59 2026: l: "lavrate" -пн апр. 13 22:04:59 2026: l: "samplerate" -пн апр. 13 22:04:59 2026: l: "speexrate" -пн апр. 13 22:04:59 2026: l: "jack" -пн апр. 13 22:04:59 2026: l: "oss" -пн апр. 13 22:04:59 2026: l: "pipewire" -пн апр. 13 22:04:59 2026: l: "pulse" -пн апр. 13 22:04:59 2026: l: "speex" -пн апр. 13 22:04:59 2026: l: "upmix" -пн апр. 13 22:04:59 2026: l: "vdownmix" -пн апр. 13 22:04:59 2026: l: "default" -пн апр. 13 22:04:59 2026: l: "hdmi:CARD=Generic,DEV=0" -пн апр. 13 22:04:59 2026: l: "hdmi:CARD=Generic,DEV=1" -пн апр. 13 22:04:59 2026: l: "hdmi:CARD=Generic,DEV=2" -пн апр. 13 22:04:59 2026: l: "hdmi:CARD=Generic,DEV=3" -пн апр. 13 22:04:59 2026: l: "usbstream:CARD=Generic" -пн апр. 13 22:04:59 2026: l: "sysdefault:CARD=Generic_1" -пн апр. 13 22:04:59 2026: l: "front:CARD=Generic_1,DEV=0" -пн апр. 13 22:04:59 2026: l: "surround21:CARD=Generic_1,DEV=0" -пн апр. 13 22:04:59 2026: l: "surround40:CARD=Generic_1,DEV=0" -пн апр. 13 22:04:59 2026: l: "surround41:CARD=Generic_1,DEV=0" -пн апр. 13 22:04:59 2026: l: "surround50:CARD=Generic_1,DEV=0" -пн апр. 13 22:04:59 2026: l: "surround51:CARD=Generic_1,DEV=0" -пн апр. 13 22:04:59 2026: l: "surround71:CARD=Generic_1,DEV=0" -пн апр. 13 22:04:59 2026: l: "usbstream:CARD=Generic_1" -пн апр. 13 22:04:59 2026: l: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 22:04:59 2026: l: "alsa_output.pci-0000_05_00.6.analog-stereo" -пн апр. 13 22:04:59 2026: res: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 22:04:59 2026: SoundOutRatio Rate 1 48000 -пн апр. 13 22:04:59 2026: DataEngine:: configured for 1 receiver(s) at 192 kHz sample rate -пн апр. 13 22:04:59 2026: DataEngine:: receiver processor thread started for Rx 0 -пн апр. 13 22:04:59 2026: DataEngine:: wide band data processor thread started. -пн апр. 13 22:04:59 2026: DataEngine:: data processor thread started. -пн апр. 13 22:04:59 2026: DataProcessor:: Data Processor thread: QThread(0x7f2d6400b330) -пн апр. 13 22:04:59 2026: DataEngine:: data IO thread started. -пн апр. 13 22:04:59 2026: Protocol2:: sockets initialized for 1 receiver(s). -пн апр. 13 22:04:59 2026: -пн апр. 13 22:04:59 2026: Settings:: ********************************************************** -пн апр. 13 22:04:59 2026: Settings:: Error: No error -пн апр. 13 22:04:59 2026: Settings:: HW Interface: Hermes -пн апр. 13 22:04:59 2026: Settings:: Server Mode: SDR mode -пн апр. 13 22:04:59 2026: Settings:: DataEngine State: up -пн апр. 13 22:04:59 2026: -пн апр. 13 22:04:59 2026: DataEngine:: Data Engine thread: QThread(0x55d0e7c3a080) -пн апр. 13 22:05:28 2026: Settings:: save settings done. -пн апр. 13 22:05:28 2026: DataEngine:: HPSDR device stopped -пн апр. 13 22:05:29 2026: sound thread exit -пн апр. 13 22:05:29 2026: DataEngine:: data IO thread deleted. -пн апр. 13 22:05:29 2026: DataEngine:: iq_queue empty. -пн апр. 13 22:05:29 2026: DataEngine:: data processor thread deleted. -пн апр. 13 22:05:29 2026: WidebandProcessor:: wrong wide band buffer length: 0 -пн апр. 13 22:05:29 2026: DataEngine:: wide band data processor thread deleted. -пн апр. 13 22:05:29 2026: DataEngine:: device cards list cleared. -пн апр. 13 22:05:29 2026: DataEngine:: receiver threads deleted, receivers deleted, receiver & thread list cleared. -пн апр. 13 22:05:29 2026: Settings:: switch to receiver: 0 -пн апр. 13 22:05:29 2026: MainWindow:: setCurrentReceiver: 0 -пн апр. 13 22:05:29 2026: -пн апр. 13 22:05:29 2026: Settings:: ********************************************************** -пн апр. 13 22:05:29 2026: Settings:: Error: No error -пн апр. 13 22:05:29 2026: Settings:: HW Interface: Hermes -пн апр. 13 22:05:29 2026: Settings:: Server Mode: SDR mode -пн апр. 13 22:05:29 2026: Settings:: DataEngine State: down -пн апр. 13 22:05:29 2026: -пн апр. 13 22:05:29 2026: DataEngine:: shut down done. -пн апр. 13 22:05:50 2026: ************************************************************************ -пн апр. 13 22:05:50 2026: Settings:: start at: пн апр. 13 22:05:50 2026 -пн апр. 13 22:05:50 2026: cudaSDR BETA -пн апр. 13 22:05:51 2026: Settings:: Alex config: 4098 -пн апр. 13 22:05:51 2026: Settings:: reading done. -пн апр. 13 22:05:52 2026: Init:: OpenGL found. -пн апр. 13 22:05:52 2026: Init:: Framebuffer Objects found. -пн апр. 13 22:05:52 2026: Init:: main window setup ... -пн апр. 13 22:05:52 2026: MainWindow:: main window init done -пн апр. 13 22:05:53 2026: MainWindow:: server ip from ini-file: "192.168.122.1" -пн апр. 13 22:05:53 2026: MainWindow:: HPSDR device local ip from ini-file: "192.168.122.1" -пн апр. 13 22:05:53 2026: MainWindow:: network interface "bridge0" : -пн апр. 13 22:05:53 2026: MainWindow:: -> broadcast address: 172.16.2.255 -пн апр. 13 22:05:53 2026: MainWindow:: -> ip address: 172.16.2.99 -пн апр. 13 22:05:53 2026: MainWindow:: network interface "virbr0" : -пн апр. 13 22:05:53 2026: MainWindow:: -> broadcast address: 192.168.122.255 -пн апр. 13 22:05:53 2026: MainWindow:: -> ip address: 192.168.122.1 -пн апр. 13 22:05:53 2026: MainWindow:: found 2 valid ip addresses. -пн апр. 13 22:05:53 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1") -пн апр. 13 22:05:53 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1") -пн апр. 13 22:05:53 2026: MainWindow:: using ip address 192.168.122.1 for the server. -пн апр. 13 22:05:53 2026: MainWindow:: using ip address 192.168.122.1 for connecting to a HPSDR device. -пн апр. 13 22:05:53 2026: Init:: main window setup done. -пн апр. 13 22:05:53 2026: Init:: current path: /home/vladimir/Документы/source/cudaSDR/Source -пн апр. 13 22:05:53 2026: Init:: fftwf_wisdom exists. -пн апр. 13 22:05:53 2026: Init:: found fftwf_wisdom - this will be quick! -пн апр. 13 22:05:53 2026: Init:: running application ... - -пн апр. 13 22:05:54 2026: -пн апр. 13 22:05:54 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 22:05:54 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 22:05:54 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 22:05:54 2026: Discoverer:: discovery_socket bound successfully to port 46000 -пн апр. 13 22:05:54 2026: Discoverer:: discovery data sent. -пн апр. 13 22:05:55 2026: Discoverer:: no device found - trying again... -пн апр. 13 22:05:55 2026: Discoverer:: using 192.168.122.1 for discovery. -пн апр. 13 22:05:55 2026: Discoverer:: discovery_socket bound successfully to port 53869 -пн апр. 13 22:05:55 2026: Discoverer:: discovery data sent. -пн апр. 13 22:05:55 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 22:05:55 2026: -пн апр. 13 22:05:55 2026: DataEngine:: HPSDR device discovery thread started. -пн апр. 13 22:05:55 2026: DataEngine:: HPSDR network device detection...please wait. -пн апр. 13 22:05:55 2026: DiscovererP2:: using 192.168.122.1 for discovery protocol 2. -пн апр. 13 22:05:55 2026: DiscovererP2:: discovery_socket protocol 2 bound successfully to port 48349 -пн апр. 13 22:05:55 2026: DiscovererP2:: discovery protocol 2 data sent. -пн апр. 13 22:05:56 2026: DiscovererP2:: Device on protocol 2 found at 192.168.122.1:1024; Mac addr: [00:1C:C0:A2:17:EE] -пн апр. 13 22:05:56 2026: DiscovererP2:: Device protocol 2 code version: 19 -пн апр. 13 22:05:56 2026: DiscovererP2:: Protocol 2 device board ID: 3 -пн апр. 13 22:05:56 2026: DiscovererP2:: Protocol 2 device is: Angelia / ANAN-100D -пн апр. 13 22:05:56 2026: DiscovererP2:: Protocol 2 capabilities: 2 ADC, 2 DDC, phaseWords=true, iqFlags=0x"3" -пн апр. 13 22:05:56 2026: DiscovererP2:: Device selected: 192.168.122.1 -пн апр. 13 22:05:56 2026: DataEngine:: HPSDR discovery thread stopped and deleted. -пн апр. 13 22:05:56 2026: DataEngine:: found 1 network device(s) -пн апр. 13 22:05:56 2026: DataEngine:: Device 0 @ 192.168.122.1 [00:1C:C0:A2:17:EE] P38 -пн апр. 13 22:05:56 2026: DataEngine:: using HPSDR network device at 192.168.122.1 -пн апр. 13 22:05:56 2026: DataEngine:: shut down done. -пн апр. 13 22:05:56 2026: DataEngine:: got firmware versions: -пн апр. 13 22:05:56 2026: DataEngine:: Metis firmware: 0 -пн апр. 13 22:05:56 2026: DataEngine:: Mercury firmware: 0 -пн апр. 13 22:05:56 2026: DataEngine:: Penelope firmware: 0 -пн апр. 13 22:05:56 2026: DataEngine:: Pennylane firmware: 0 -пн апр. 13 22:05:56 2026: DataEngine:: Hermes firmware: 19 -пн апр. 13 22:05:56 2026: DataEngine:: stopping and restarting data engine. -пн апр. 13 22:05:56 2026: DataEngine:: trying to init a DSP core for rx 0 -пн апр. 13 22:05:56 2026: DSPEngine:: init DSPEngine with size: 1024 -пн апр. 13 22:05:56 2026: Receiver:: set DSP mode to: "LSB" -пн апр. 13 22:05:56 2026: Receiver:: QtDSP for receiver: 0 started. -пн апр. 13 22:05:56 2026: DataEngine:: init DSP core for rx 0 successful ! -пн апр. 13 22:05:56 2026: DataEngine:: Alex Configuration = 4098 -пн апр. 13 22:05:56 2026: Soundcard volume 32768 -пн апр. 13 22:05:56 2026: l: "lavrate" -пн апр. 13 22:05:56 2026: l: "samplerate" -пн апр. 13 22:05:56 2026: l: "speexrate" -пн апр. 13 22:05:56 2026: l: "jack" -пн апр. 13 22:05:56 2026: l: "oss" -пн апр. 13 22:05:56 2026: l: "pipewire" -пн апр. 13 22:05:56 2026: l: "pulse" -пн апр. 13 22:05:56 2026: l: "speex" -пн апр. 13 22:05:56 2026: l: "upmix" -пн апр. 13 22:05:56 2026: l: "vdownmix" -пн апр. 13 22:05:56 2026: l: "default" -пн апр. 13 22:05:56 2026: l: "hdmi:CARD=Generic,DEV=0" -пн апр. 13 22:05:56 2026: l: "hdmi:CARD=Generic,DEV=1" -пн апр. 13 22:05:56 2026: l: "hdmi:CARD=Generic,DEV=2" -пн апр. 13 22:05:56 2026: l: "hdmi:CARD=Generic,DEV=3" -пн апр. 13 22:05:56 2026: l: "usbstream:CARD=Generic" -пн апр. 13 22:05:56 2026: l: "sysdefault:CARD=Generic_1" -пн апр. 13 22:05:56 2026: l: "front:CARD=Generic_1,DEV=0" -пн апр. 13 22:05:56 2026: l: "surround21:CARD=Generic_1,DEV=0" -пн апр. 13 22:05:56 2026: l: "surround40:CARD=Generic_1,DEV=0" -пн апр. 13 22:05:56 2026: l: "surround41:CARD=Generic_1,DEV=0" -пн апр. 13 22:05:56 2026: l: "surround50:CARD=Generic_1,DEV=0" -пн апр. 13 22:05:56 2026: l: "surround51:CARD=Generic_1,DEV=0" -пн апр. 13 22:05:56 2026: l: "surround71:CARD=Generic_1,DEV=0" -пн апр. 13 22:05:56 2026: l: "usbstream:CARD=Generic_1" -пн апр. 13 22:05:56 2026: l: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 22:05:56 2026: l: "alsa_output.pci-0000_05_00.6.analog-stereo" -пн апр. 13 22:05:56 2026: res: "alsa_output.pci-0000_05_00.1.hdmi-stereo" -пн апр. 13 22:05:56 2026: SoundOutRatio Rate 1 48000 -пн апр. 13 22:05:56 2026: DataEngine:: configured for 1 receiver(s) at 192 kHz sample rate -пн апр. 13 22:05:56 2026: DataEngine:: receiver processor thread started for Rx 0 -пн апр. 13 22:05:56 2026: DataEngine:: wide band data processor thread started. -пн апр. 13 22:05:56 2026: DataEngine:: data processor thread started. -пн апр. 13 22:05:56 2026: DataProcessor:: Data Processor thread: QThread(0x55e6b632a040) -пн апр. 13 22:05:56 2026: DataEngine:: data IO thread started. -пн апр. 13 22:05:56 2026: Protocol2:: sockets initialized for 1 receiver(s). -пн апр. 13 22:05:56 2026: -пн апр. 13 22:05:56 2026: Settings:: ********************************************************** -пн апр. 13 22:05:56 2026: Settings:: Error: No error -пн апр. 13 22:05:56 2026: Settings:: HW Interface: Hermes -пн апр. 13 22:05:56 2026: Settings:: Server Mode: SDR mode -пн апр. 13 22:05:56 2026: Settings:: DataEngine State: up -пн апр. 13 22:05:56 2026: -пн апр. 13 22:05:56 2026: DataEngine:: Data Engine thread: QThread(0x55e6b00b5080) -пн апр. 13 22:06:20 2026: Settings:: save settings done. -пн апр. 13 22:06:20 2026: DataEngine:: HPSDR device stopped -пн апр. 13 22:06:21 2026: DataEngine:: data IO thread not yet finished... -пн апр. 13 22:06:21 2026: sound thread exit -пн апр. 13 22:06:21 2026: DataEngine:: data IO thread deleted. -пн апр. 13 22:06:21 2026: DataEngine:: iq_queue empty. -пн апр. 13 22:06:21 2026: DataEngine:: data processor thread deleted. -пн апр. 13 22:06:21 2026: WidebandProcessor:: wrong wide band buffer length: 0 -пн апр. 13 22:06:21 2026: DataEngine:: wide band data processor thread deleted. -пн апр. 13 22:06:21 2026: DataEngine:: device cards list cleared. -пн апр. 13 22:06:21 2026: DataEngine:: receiver threads deleted, receivers deleted, receiver & thread list cleared. -пн апр. 13 22:06:21 2026: Settings:: switch to receiver: 0 -пн апр. 13 22:06:21 2026: MainWindow:: setCurrentReceiver: 0 -пн апр. 13 22:06:21 2026: -пн апр. 13 22:06:21 2026: Settings:: ********************************************************** -пн апр. 13 22:06:21 2026: Settings:: Error: No error -пн апр. 13 22:06:21 2026: Settings:: HW Interface: Hermes -пн апр. 13 22:06:21 2026: Settings:: Server Mode: SDR mode -пн апр. 13 22:06:21 2026: Settings:: DataEngine State: down -пн апр. 13 22:06:21 2026: -пн апр. 13 22:06:21 2026: DataEngine:: shut down done. diff --git a/Source/src/DataEngine/cusdr_dataEngine.cpp b/Source/src/DataEngine/cusdr_dataEngine.cpp index 5c22cee..fd5c06a 100644 --- a/Source/src/DataEngine/cusdr_dataEngine.cpp +++ b/Source/src/DataEngine/cusdr_dataEngine.cpp @@ -338,6 +338,12 @@ void DataEngine::setupConnections() { this, SLOT(searchHpsdrNetworkDevices())); + CHECKED_CONNECT( + set, + SIGNAL(widebandDataChanged(QObject *, bool)), + this, + SLOT(setWidebandData(QObject *, bool))); + /*CHECKED_CONNECT( set, SIGNAL(spectrumAveragingChanged(QObject*, int, bool)), @@ -2567,6 +2573,19 @@ void DataEngine::setFrequency(QObject* sender, int mode, int rx, long frequency) io.tx_freq_change = rx; } +void DataEngine::setWidebandData(QObject *sender, bool value) { + Q_UNUSED(sender) + + if (m_dataEngineState != QSDR::DataEngineUp || !m_dataIO) + return; + + const TNetworkDevicecard device = set->getCurrentMetisCard(); + if (device.protocolVersion >= 2) + return; + + invokeDataIOStartStop(m_dataIO, value ? 0x03 : 0x01); +} + void DataEngine::loadWavFile(const QString &fileName) { if (m_audioEngine->loadFile(fileName)) diff --git a/Source/src/DataEngine/cusdr_dataEngine.h b/Source/src/DataEngine/cusdr_dataEngine.h index bf31c0f..ffdc419 100644 --- a/Source/src/DataEngine/cusdr_dataEngine.h +++ b/Source/src/DataEngine/cusdr_dataEngine.h @@ -141,11 +141,12 @@ public slots: void set122_88MhzSource(QObject *sender, int source); void setMicSource(QObject *sender, int source); void setMercuryClass(QObject *sender, int value); - void setMercuryTiming(QObject* sender, int value); - void setHamBand(QObject *sender, int rx, bool byBtn, HamBand band); - void setFrequency(QObject* sender, int mode, int rx, long frequency); - - void loadWavFile(const QString &fileName); + void setMercuryTiming(QObject* sender, int value); + void setHamBand(QObject *sender, int rx, bool byBtn, HamBand band); + void setFrequency(QObject* sender, int mode, int rx, long frequency); + void setWidebandData(QObject *sender, bool value); + + void loadWavFile(const QString &fileName); void suspend(); void startPlayback(); void showSettingsDialog(); diff --git a/Source/src/DataEngine/cusdr_protocol2_io.cpp b/Source/src/DataEngine/cusdr_protocol2_io.cpp index 53a0264..2810d8f 100644 --- a/Source/src/DataEngine/cusdr_protocol2_io.cpp +++ b/Source/src/DataEngine/cusdr_protocol2_io.cpp @@ -8,6 +8,8 @@ #include "cusdr_protocol2_io.h" #include "cusdr_protocol2_profile.h" +#include + #ifdef LOG_DATAIO # define PROTOCOL2_DEBUG qDebug().nospace() << "Protocol2::\t" #else @@ -18,14 +20,26 @@ namespace { static const quint16 kProtocol2DdcSpecificPort = 1025; +static const quint16 kProtocol2DucSpecificPort = 1026; +static const quint16 kProtocol2MicDataPort = 1026; +static const quint16 kProtocol2WidebandBasePort = 1027; static const quint16 kProtocol2HighPriorityToPcPort = 1025; static const quint16 kProtocol2DdcAudioPort = 1028; static const quint16 kProtocol2DucIqPort = 1029; static const quint16 kProtocol2DdcBasePort = 1035; static const int kProtocol2GeneralPacketSize = 60; +static const int kProtocol2DucSpecificPacketSize = 60; static const int kProtocol2HighPriorityPacketSize = 1444; static const int kProtocol2StatusPacketMinSize = 31; +QString hexSlice(const QByteArray &datagram, int offset, int length) { + + QStringList bytes; + for (int i = 0; i < length && offset + i < datagram.size(); ++i) + bytes << QString("%1").arg((quint8)datagram.at(offset + i), 2, 16, QLatin1Char('0')).toUpper(); + return bytes.join(' '); +} + int protocol2ReceiverCount(Settings *set) { const TNetworkDevicecard device = set->getCurrentMetisCard(); @@ -37,6 +51,25 @@ int protocol2ReceiverCount(Settings *set) { return requestedReceivers; } +QList protocol2ActiveDdcIndexes(Settings *set) { + + QList ddcIndexes; + if (!set) + return ddcIndexes; + + const TNetworkDevicecard device = set->getCurrentMetisCard(); + const int receivers = protocol2ReceiverCount(set); + const bool useHighEndMapping = + device.protocolVersion >= 2 && + (device.boardID == 3 || device.boardID == 4 || device.boardID == 5 || device.boardID == 10); + const int baseDdc = useHighEndMapping ? 2 : 0; + + for (int rx = 0; rx < receivers; ++rx) + ddcIndexes.append(baseDdc + rx); + + return ddcIndexes; +} + quint32 alexFilterWordForFrequency(Settings *set, long frequency, int currentBand) { if (!set || !set->getAlexPresence()) @@ -114,13 +147,92 @@ Protocol2DataPath::Protocol2DataPath(Settings *settings, THPSDRParameter *ioData , io(ioData) , m_commandSocket(0) , m_statusSocket(0) + , m_widebandSocket(0) , m_heartbeatTimer(0) , m_running(false) + , m_collectWideband(false) + , m_widebandSequence(0) + , m_widebandSequencePrevious((quint32)-1) + , m_widebandPacketCount(0) , m_generalSequence(0) , m_ddcSequence(0) + , m_ducSequence(0) , m_highPrioritySequence(0) + , m_heartbeatTick(0) + , m_ddcDatagramsReceived(0) + , m_ddcSamplesReceived(0) + , m_legacyFramesEnqueued(0) + , m_legacyFramesQueued(0) + , m_legacyFramesDropped(0) + , m_statusPacketsReceived(0) + , m_highPriorityPacketsSent(0) + , m_logConfigPackets(true) + , m_lastStatusByte4(0) + , m_lastStatusByte5(0) + , m_loggedFirstDdcDatagram(false) { m_legacyControlBytes = QByteArray(5, 0x00); + + CHECKED_CONNECT( + set, + SIGNAL(numberOfRXChanged(QObject *, int)), + this, + SLOT(handleNumberOfRxChanged(QObject *, int))); + CHECKED_CONNECT( + set, + SIGNAL(sampleRateChanged(QObject *, int)), + this, + SLOT(handleSampleRateChanged(QObject *, int))); + CHECKED_CONNECT( + set, + SIGNAL(ditherChanged(QObject *, int)), + this, + SLOT(handleDitherChanged(QObject *, int))); + CHECKED_CONNECT( + set, + SIGNAL(randomChanged(QObject *, int)), + this, + SLOT(handleRandomChanged(QObject *, int))); + CHECKED_CONNECT( + set, + SIGNAL(ctrFrequencyChanged(QObject *, int, int, long)), + this, + SLOT(handleCtrFrequencyChanged(QObject *, int, int, long))); + CHECKED_CONNECT( + set, + SIGNAL(vfoFrequencyChanged(QObject *, int, int, long)), + this, + SLOT(handleVfoFrequencyChanged(QObject *, int, int, long))); + CHECKED_CONNECT( + set, + SIGNAL(currentReceiverChanged(QObject *, int)), + this, + SLOT(handleCurrentReceiverChanged(QObject *, int))); + CHECKED_CONNECT( + set, + SIGNAL(hamBandChanged(QObject *, int, bool, HamBand)), + this, + SLOT(handleHamBandChanged(QObject *, int, bool, HamBand))); + CHECKED_CONNECT( + set, + SIGNAL(alexConfigurationChanged(quint16)), + this, + SLOT(handleAlexConfigurationChanged(quint16))); + CHECKED_CONNECT( + set, + SIGNAL(alexStateChanged(HamBand, const QList &)), + this, + SLOT(handleAlexStateChanged(HamBand, const QList &))); + CHECKED_CONNECT( + set, + SIGNAL(alexPresenceChanged(bool)), + this, + SLOT(handleAlexPresenceChanged(bool))); + CHECKED_CONNECT( + set, + SIGNAL(widebandDataChanged(QObject *, bool)), + this, + SLOT(handleWidebandDataChanged(QObject *, bool))); } Protocol2DataPath::~Protocol2DataPath() { @@ -140,7 +252,7 @@ bool Protocol2DataPath::initSockets() { const QHostAddress localAddress(set->getHPSDRDeviceLocalAddr()); const quint16 discoveryPort = set->getMetisPort(); - const int receivers = protocol2ReceiverCount(set); + const QList ddcIndexes = activeDdcIndexes(); m_commandSocket = new QUdpSocket(this); if (!m_commandSocket->bind(localAddress, discoveryPort, QUdpSocket::DontShareAddress)) { @@ -148,6 +260,11 @@ bool Protocol2DataPath::initSockets() { closeSockets(); return false; } + CHECKED_CONNECT( + m_commandSocket, + SIGNAL(readyRead()), + this, + SLOT(readCommandData())); m_statusSocket = new QUdpSocket(this); if (!m_statusSocket->bind(localAddress, kProtocol2HighPriorityToPcPort, QUdpSocket::DontShareAddress)) { @@ -161,12 +278,26 @@ bool Protocol2DataPath::initSockets() { this, SLOT(readStatusData())); + if (set->getWidebandData()) { + m_widebandSocket = new QUdpSocket(this); + if (!m_widebandSocket->bind(localAddress, kProtocol2WidebandBasePort, QUdpSocket::DontShareAddress)) { + PROTOCOL2_DEBUG << "wideband socket bind failed on port " << kProtocol2WidebandBasePort; + closeSockets(); + return false; + } + CHECKED_CONNECT( + m_widebandSocket, + SIGNAL(readyRead()), + this, + SLOT(readWidebandData())); + } + m_ddcSampleBuffers.clear(); m_ddcSockets.clear(); - for (int rx = 0; rx < receivers; ++rx) { + for (int rx = 0; rx < ddcIndexes.size(); ++rx) { QUdpSocket *socket = new QUdpSocket(this); - const quint16 port = kProtocol2DdcBasePort + rx; + const quint16 port = kProtocol2DdcBasePort + ddcIndexes.at(rx); if (!socket->bind(localAddress, port, QUdpSocket::DontShareAddress)) { PROTOCOL2_DEBUG << "DDC socket bind failed on port " << port; delete socket; @@ -195,9 +326,28 @@ bool Protocol2DataPath::initSockets() { m_partialLegacyFrame.clear(); m_partialLegacyFrame.reserve(BUFFER_SIZE); m_legacyControlBytes.fill(0x00, 5); + m_widebandDatagram.clear(); m_running = false; + m_collectWideband = false; + m_widebandSequence = 0; + m_widebandSequencePrevious = (quint32)-1; + m_widebandPacketCount = 0; + m_heartbeatTick = 0; + m_ddcDatagramsReceived = 0; + m_ddcSamplesReceived = 0; + m_legacyFramesEnqueued = 0; + m_legacyFramesQueued = 0; + m_legacyFramesDropped = 0; + m_statusPacketsReceived = 0; + m_highPriorityPacketsSent = 0; + m_commandPortCounters.clear(); + m_loggedFirstSourcePorts.clear(); + m_logConfigPackets = true; + m_lastStatusByte4 = 0; + m_lastStatusByte5 = 0; + m_loggedFirstDdcDatagram = false; - PROTOCOL2_DEBUG << "sockets initialized for " << receivers << " receiver(s)."; + PROTOCOL2_DEBUG << "sockets initialized for DDC indexes " << ddcIndexes; return true; } @@ -229,21 +379,95 @@ void Protocol2DataPath::networkDeviceStartStop(char value) { return; m_running = false; + m_heartbeatTick = 0; if (m_heartbeatTimer) m_heartbeatTimer->stop(); sendHighPriorityPacket(false); return; } + m_running = false; + m_generalSequence = 0; + m_ddcSequence = 0; + m_ducSequence = 0; + m_highPrioritySequence = 0; + m_heartbeatTick = 0; + m_ddcDatagramsReceived = 0; + m_ddcSamplesReceived = 0; + m_legacyFramesEnqueued = 0; + m_legacyFramesQueued = 0; + m_legacyFramesDropped = 0; + m_statusPacketsReceived = 0; + m_highPriorityPacketsSent = 0; + m_commandPortCounters.clear(); + m_loggedFirstSourcePorts.clear(); + m_logConfigPackets = true; + m_partialLegacyFrame.clear(); + for (int rx = 0; rx < m_ddcSampleBuffers.size(); ++rx) + m_ddcSampleBuffers[rx].clear(); sendGeneralPacket(); + sendDucSpecificPacket(); sendDdcSpecificPacket(); + m_running = true; sendHighPriorityPacket(true); - m_running = true; if (m_heartbeatTimer) m_heartbeatTimer->start(); } +void Protocol2DataPath::readCommandData() { + + bool receivedDdcData = false; + + while (m_commandSocket && m_commandSocket->hasPendingDatagrams()) { + + QByteArray datagram; + datagram.resize(m_commandSocket->pendingDatagramSize()); + QHostAddress senderAddress; + quint16 senderPort = 0; + m_commandSocket->readDatagram(datagram.data(), datagram.size(), &senderAddress, &senderPort); + + Q_UNUSED(senderAddress) + ++m_commandPortCounters[senderPort]; + if (!m_loggedFirstSourcePorts.contains(senderPort)) { + PROTOCOL2_DEBUG + << "first src port " << senderPort + << ": len=" << datagram.size() + << " head=" << hexSlice(datagram, 0, qMin(16, datagram.size())); + m_loggedFirstSourcePorts.insert(senderPort); + } + + if (senderPort == kProtocol2HighPriorityToPcPort) { + if (datagram.size() >= kProtocol2StatusPacketMinSize) { + ++m_statusPacketsReceived; + m_lastStatusByte4 = (uchar)datagram.at(4); + m_lastStatusByte5 = (uchar)datagram.at(5); + updateLegacyControlBytes(datagram); + } + continue; + } + + if (senderPort == kProtocol2MicDataPort) + continue; + + if (senderPort == kProtocol2WidebandBasePort) { + continue; + } + + if (senderPort >= kProtocol2DdcBasePort) { + const int ddc = senderPort - kProtocol2DdcBasePort; + const int rx = activeDdcIndexes().indexOf(ddc); + if (rx >= 0) { + handleDdcDatagram(rx, datagram); + receivedDdcData = true; + } + } + } + + if (receivedDdcData) + tryProduceLegacyFrames(); +} + void Protocol2DataPath::readStatusData() { while (m_statusSocket && m_statusSocket->hasPendingDatagrams()) { @@ -269,25 +493,7 @@ void Protocol2DataPath::readDdcData() { QByteArray datagram; datagram.resize(socket->pendingDatagramSize()); socket->readDatagram(datagram.data(), datagram.size()); - - if (datagram.size() < 16) - continue; - - const int bitsPerSample = ((quint8)datagram.at(12) << 8) | (quint8)datagram.at(13); - const int sampleCount = ((quint8)datagram.at(14) << 8) | (quint8)datagram.at(15); - const int payloadBytes = 16 + sampleCount * 6; - - if (bitsPerSample != 24 || datagram.size() < payloadBytes) - continue; - - for (int i = 0; i < sampleCount; ++i) { - - const char *sample = datagram.constData() + 16 + i * 6; - Protocol2IQSample iqSample; - iqSample.i = read24BitSample(sample); - iqSample.q = read24BitSample(sample + 3); - m_ddcSampleBuffers[rx].append(iqSample); - } + handleDdcDatagram(rx, datagram); } tryProduceLegacyFrames(); @@ -298,7 +504,172 @@ void Protocol2DataPath::sendHeartbeat() { if (!m_running) return; + ++m_heartbeatTick; + const int cycle = ((m_heartbeatTick - 1) % 8) + 1; + sendHighPriorityPacket(true); + + switch (cycle) { + case 1: + case 3: + case 5: + case 7: + sendDucSpecificPacket(); + break; + case 2: + case 4: + case 6: + sendDdcSpecificPacket(); + break; + case 8: + sendDdcSpecificPacket(); + sendGeneralPacket(); + break; + default: + break; + } + + if ((m_heartbeatTick % 10) == 0) { + QStringList fillLevels; + for (int rx = 0; rx < m_ddcSampleBuffers.size(); ++rx) + fillLevels << QString("rx%1=%2").arg(rx + 1).arg(m_ddcSampleBuffers.at(rx).size()); + + QStringList portCounters; + QList ports = m_commandPortCounters.keys(); + std::sort(ports.begin(), ports.end()); + foreach (quint16 port, ports) + portCounters << QString("%1=%2").arg(port).arg(m_commandPortCounters.value(port)); + + PROTOCOL2_DEBUG + << "rx flow: dgrams=" << m_ddcDatagramsReceived + << " samples=" << m_ddcSamplesReceived + << " iqFrames=" << m_legacyFramesEnqueued + << " queued=" << m_legacyFramesQueued + << " dropped=" << m_legacyFramesDropped + << " hpTx=" << m_highPriorityPacketsSent + << " hpRx=" << m_statusPacketsReceived + << " st4=0x" << QString("%1").arg(m_lastStatusByte4, 2, 16, QLatin1Char('0')).toUpper() + << " st5=0x" << QString("%1").arg(m_lastStatusByte5, 2, 16, QLatin1Char('0')).toUpper() + << " flags[ptt=" << ((m_lastStatusByte4 & 0x01) ? 1 : 0) + << " dot=" << ((m_lastStatusByte4 & 0x02) ? 1 : 0) + << " dash=" << ((m_lastStatusByte4 & 0x04) ? 1 : 0) + << " pll=" << ((m_lastStatusByte4 & 0x10) ? 1 : 0) + << " fifoE=" << ((m_lastStatusByte4 & 0x20) ? 1 : 0) + << " fifoF=" << ((m_lastStatusByte4 & 0x40) ? 1 : 0) + << " ovf=" << ((m_lastStatusByte5 & 0x01) ? 1 : 0) + << "]" + << " partial=" << m_partialLegacyFrame.size() + << " queue=" << io->iq_queue.count() + << " buffers[" << fillLevels.join(", ") << "]" + << " ports[" << portCounters.join(", ") << "]"; + } +} + +void Protocol2DataPath::readWidebandData() { + + while (m_widebandSocket && m_widebandSocket->hasPendingDatagrams()) { + + QByteArray datagram; + datagram.resize(m_widebandSocket->pendingDatagramSize()); + m_widebandSocket->readDatagram(datagram.data(), datagram.size()); + handleWidebandDatagram(datagram); + } +} + +void Protocol2DataPath::handleNumberOfRxChanged(QObject *sender, int value) { + Q_UNUSED(sender) + Q_UNUSED(value) + + refreshDdcConfiguration(true); +} + +void Protocol2DataPath::handleSampleRateChanged(QObject *sender, int value) { + Q_UNUSED(sender) + Q_UNUSED(value) + + refreshDdcConfiguration(false); +} + +void Protocol2DataPath::handleDitherChanged(QObject *sender, int value) { + Q_UNUSED(sender) + Q_UNUSED(value) + + refreshDdcConfiguration(false); +} + +void Protocol2DataPath::handleRandomChanged(QObject *sender, int value) { + Q_UNUSED(sender) + Q_UNUSED(value) + + refreshDdcConfiguration(false); +} + +void Protocol2DataPath::handleCtrFrequencyChanged(QObject *sender, int mode, int rx, long frequency) { + Q_UNUSED(sender) + Q_UNUSED(mode) + Q_UNUSED(rx) + Q_UNUSED(frequency) + + refreshHighPriorityState(); +} + +void Protocol2DataPath::handleVfoFrequencyChanged(QObject *sender, int mode, int rx, long frequency) { + Q_UNUSED(sender) + Q_UNUSED(mode) + Q_UNUSED(rx) + Q_UNUSED(frequency) + + refreshHighPriorityState(); +} + +void Protocol2DataPath::handleCurrentReceiverChanged(QObject *sender, int rx) { + Q_UNUSED(sender) + Q_UNUSED(rx) + + refreshHighPriorityState(); +} + +void Protocol2DataPath::handleHamBandChanged(QObject *sender, int rx, bool byButton, HamBand band) { + Q_UNUSED(sender) + Q_UNUSED(rx) + Q_UNUSED(byButton) + Q_UNUSED(band) + + refreshHighPriorityState(); +} + +void Protocol2DataPath::handleAlexConfigurationChanged(quint16 config) { + Q_UNUSED(config) + + if (!m_commandSocket || !isActive()) + return; + + sendGeneralPacket(); + refreshHighPriorityState(); +} + +void Protocol2DataPath::handleAlexStateChanged(HamBand band, const QList &states) { + Q_UNUSED(band) + Q_UNUSED(states) + + refreshHighPriorityState(); +} + +void Protocol2DataPath::handleAlexPresenceChanged(bool value) { + Q_UNUSED(value) + + if (!m_commandSocket || !isActive()) + return; + + sendGeneralPacket(); + refreshHighPriorityState(); +} + +void Protocol2DataPath::handleWidebandDataChanged(QObject *sender, bool value) { + Q_UNUSED(sender) + Q_UNUSED(value) + + refreshWidebandConfiguration(); } void Protocol2DataPath::closeSockets() { @@ -324,6 +695,13 @@ void Protocol2DataPath::closeSockets() { m_statusSocket = 0; } + if (m_widebandSocket) { + disconnect(m_widebandSocket, 0, this, 0); + m_widebandSocket->close(); + delete m_widebandSocket; + m_widebandSocket = 0; + } + if (m_commandSocket) { disconnect(m_commandSocket, 0, this, 0); m_commandSocket->close(); @@ -332,6 +710,81 @@ void Protocol2DataPath::closeSockets() { } m_partialLegacyFrame.clear(); + m_widebandDatagram.clear(); + m_collectWideband = false; + m_widebandPacketCount = 0; + m_widebandSequencePrevious = (quint32)-1; + m_heartbeatTick = 0; +} + +void Protocol2DataPath::refreshDdcConfiguration(bool rebuildSockets) { + + if (!isActive()) + return; + + const bool wasRunning = m_running; + + if (rebuildSockets && (m_commandSocket || m_statusSocket || !m_ddcSockets.isEmpty())) { + m_running = false; + if (m_heartbeatTimer) + m_heartbeatTimer->stop(); + + closeSockets(); + if (!initSockets()) + return; + } + + if (!m_commandSocket) + return; + + sendGeneralPacket(); + sendDdcSpecificPacket(); + sendDucSpecificPacket(); + sendHighPriorityPacket(wasRunning); + + m_running = wasRunning; + if (m_running && m_heartbeatTimer) + m_heartbeatTimer->start(); +} + +void Protocol2DataPath::refreshHighPriorityState() { + + if (!m_commandSocket || !isActive()) + return; + + sendHighPriorityPacket(m_running); +} + +void Protocol2DataPath::refreshWidebandConfiguration() { + + if (!m_commandSocket || !isActive()) + return; + + const bool needWidebandSocket = false; + const bool haveWidebandSocket = (m_widebandSocket != 0); + + if (needWidebandSocket != haveWidebandSocket) { + const bool wasRunning = m_running; + + m_running = false; + if (m_heartbeatTimer) + m_heartbeatTimer->stop(); + + closeSockets(); + if (!initSockets()) + return; + + m_running = wasRunning; + if (m_running && m_heartbeatTimer) + m_heartbeatTimer->start(); + } + + sendGeneralPacket(); + m_collectWideband = false; + m_widebandDatagram.clear(); + m_widebandPacketCount = 0; + m_widebandSequencePrevious = (quint32)-1; + set->resetWidebandSpectrumBuffer(); } void Protocol2DataPath::sendGeneralPacket() { @@ -345,8 +798,8 @@ void Protocol2DataPath::sendGeneralPacket() { datagram[4] = 0x00; datagram[5] = (kProtocol2DdcSpecificPort >> 8) & 0xFF; datagram[6] = kProtocol2DdcSpecificPort & 0xFF; - datagram[7] = (kProtocol2DucIqPort >> 8) & 0xFF; - datagram[8] = kProtocol2DucIqPort & 0xFF; + datagram[7] = (kProtocol2DucSpecificPort >> 8) & 0xFF; + datagram[8] = kProtocol2DucSpecificPort & 0xFF; datagram[9] = (HIGH_PRIORITY_FROM_HOST_PORT >> 8) & 0xFF; datagram[10] = HIGH_PRIORITY_FROM_HOST_PORT & 0xFF; datagram[11] = (kProtocol2HighPriorityToPcPort >> 8) & 0xFF; @@ -357,16 +810,20 @@ void Protocol2DataPath::sendGeneralPacket() { datagram[16] = kProtocol2DucIqPort & 0xFF; datagram[17] = (kProtocol2DdcBasePort >> 8) & 0xFF; datagram[18] = kProtocol2DdcBasePort & 0xFF; - datagram[21] = (HIGH_PRIORITY_FROM_HOST_PORT >> 8) & 0xFF; - datagram[22] = HIGH_PRIORITY_FROM_HOST_PORT & 0xFF; + datagram[19] = (kProtocol2MicDataPort >> 8) & 0xFF; + datagram[20] = kProtocol2MicDataPort & 0xFF; + datagram[21] = (kProtocol2WidebandBasePort >> 8) & 0xFF; + datagram[22] = kProtocol2WidebandBasePort & 0xFF; + datagram[23] = set->getWidebandData() ? 0x01 : 0x00; datagram[24] = 0x02; + datagram[25] = 0x00; datagram[26] = 0x10; - datagram[27] = 20; - datagram[28] = 32; + datagram[23] = 0x00; const TNetworkDevicecard device = set->getCurrentMetisCard(); if (device.phaseWords) datagram[37] = (char)((quint8)datagram.at(37) | 0x08); + datagram[38] = (char)((quint8)datagram.at(38) | 0x01); if ((device.iqFormatFlags & 0x05) == 0x05) datagram[39] = 0x05; @@ -378,18 +835,56 @@ void Protocol2DataPath::sendGeneralPacket() { datagram[59] = (char)((quint8)datagram.at(59) | 0x01); if (device.hasAlex1) datagram[59] = (char)((quint8)datagram.at(59) | 0x02); + datagram[58] = (char)((quint8)datagram.at(58) | 0x01); if (m_commandSocket->writeDatagram(datagram, set->getCurrentMetisCard().ip_address, DEVICE_PORT) >= 0) ++m_generalSequence; else PROTOCOL2_DEBUG << "general packet write failed."; + + if (m_logConfigPackets) { + PROTOCOL2_DEBUG + << "GP bytes[5..28] " << hexSlice(datagram, 5, 24) + << " flags37..39 " << hexSlice(datagram, 37, 3) + << " tail56..59 " << hexSlice(datagram, 56, 4); + } +} + +void Protocol2DataPath::sendDucSpecificPacket() { + + QByteArray datagram(kProtocol2DucSpecificPacketSize, 0x00); + + datagram[0] = (m_ducSequence >> 24) & 0xFF; + datagram[1] = (m_ducSequence >> 16) & 0xFF; + datagram[2] = (m_ducSequence >> 8) & 0xFF; + datagram[3] = m_ducSequence & 0xFF; + datagram[4] = 0x01; + datagram[6] = 50; + datagram[7] = (600 >> 8) & 0xFF; + datagram[8] = 600 & 0xFF; + datagram[9] = 20; + datagram[10] = 50; + datagram[14] = 0x00; + datagram[15] = 192; + datagram[16] = 24; + + if (m_commandSocket->writeDatagram(datagram, set->getCurrentMetisCard().ip_address, kProtocol2DucSpecificPort) >= 0) + ++m_ducSequence; + else + PROTOCOL2_DEBUG << "DUC specific packet write failed."; + + if (m_logConfigPackets) { + PROTOCOL2_DEBUG + << "DUC bytes[4..16] " << hexSlice(datagram, 4, 13) + << " mic/line[50..59] " << hexSlice(datagram, 50, 10); + } } void Protocol2DataPath::sendDdcSpecificPacket() { const TNetworkDevicecard device = set->getCurrentMetisCard(); - const int receivers = protocol2ReceiverCount(set); - QByteArray datagram(17 + receivers * 6, 0x00); + const QList ddcIndexes = activeDdcIndexes(); + QByteArray datagram(kProtocol2HighPriorityPacketSize, 0x00); datagram[0] = (m_ddcSequence >> 24) & 0xFF; datagram[1] = (m_ddcSequence >> 16) & 0xFF; @@ -406,14 +901,17 @@ void Protocol2DataPath::sendDdcSpecificPacket() { datagram[6] = datagram.at(6) | (1 << adc); } - for (int rx = 0; rx < receivers; ++rx) { + for (int rx = 0; rx < ddcIndexes.size(); ++rx) { - datagram[7 + rx / 8] = datagram.at(7 + rx / 8) | (1 << (rx % 8)); + const int ddc = ddcIndexes.at(rx); + const int sampleRateKsps = qMax(48, io->samplerate / 1000); - const int offset = 17 + rx * 6; + datagram[7 + ddc / 8] = datagram.at(7 + ddc / 8) | (1 << (ddc % 8)); + + const int offset = 17 + ddc * 6; datagram[offset + 0] = (adcCount > 1) ? (rx % adcCount) : 0x00; - datagram[offset + 1] = (io->samplerate >> 8) & 0xFF; - datagram[offset + 2] = io->samplerate & 0xFF; + datagram[offset + 1] = (sampleRateKsps >> 8) & 0xFF; + datagram[offset + 2] = sampleRateKsps & 0xFF; datagram[offset + 3] = 0x00; datagram[offset + 4] = 0x00; datagram[offset + 5] = 24; @@ -423,17 +921,29 @@ void Protocol2DataPath::sendDdcSpecificPacket() { ++m_ddcSequence; else PROTOCOL2_DEBUG << "DDC specific packet write failed."; + + if (m_logConfigPackets) { + const QList ddcIndexes = activeDdcIndexes(); + QStringList ddcSlices; + foreach (int ddc, ddcIndexes) + ddcSlices << QString("ddc%1[%2]").arg(ddc).arg(hexSlice(datagram, 17 + ddc * 6, 6)); + + PROTOCOL2_DEBUG + << "DDC enable[7..16] " << hexSlice(datagram, 7, 10) + << " cfg " << ddcSlices.join(' '); + } } void Protocol2DataPath::sendHighPriorityPacket(bool run) { QByteArray datagram(kProtocol2HighPriorityPacketSize, 0x00); const QList frequencies = set->getCtrFrequencies(); - const int receivers = protocol2ReceiverCount(set); + const QList ddcIndexes = activeDdcIndexes(); const int currentReceiver = set->getCurrentReceiver(); const int currentBand = (int)set->getCurrentHamBand(currentReceiver); - const long currentVfoFrequency = set->getVfoFrequency(currentReceiver); - const quint32 alexWord = alexFilterWordForFrequency(set, currentVfoFrequency, currentBand); + const long currentRxFrequency = frequencies.value(currentReceiver, frequencies.value(0, 0)); + const quint32 alexWord = alexFilterWordForFrequency(set, currentRxFrequency, currentBand); + const quint32 encodedDucFrequency = encodeFrequency(currentRxFrequency); datagram[0] = (m_highPrioritySequence >> 24) & 0xFF; datagram[1] = (m_highPrioritySequence >> 16) & 0xFF; @@ -441,10 +951,11 @@ void Protocol2DataPath::sendHighPriorityPacket(bool run) { datagram[3] = m_highPrioritySequence & 0xFF; datagram[4] = run ? 0x01 : 0x00; - for (int rx = 0; rx < receivers; ++rx) { + for (int rx = 0; rx < ddcIndexes.size(); ++rx) { const quint32 encodedFrequency = encodeFrequency(frequencies.value(rx, frequencies.value(0, 0))); - const int offset = 9 + rx * 4; + const int ddc = ddcIndexes.at(rx); + const int offset = 9 + ddc * 4; datagram[offset + 0] = (encodedFrequency >> 24) & 0xFF; datagram[offset + 1] = (encodedFrequency >> 16) & 0xFF; @@ -452,6 +963,16 @@ void Protocol2DataPath::sendHighPriorityPacket(bool run) { datagram[offset + 3] = encodedFrequency & 0xFF; } + datagram[329] = (encodedDucFrequency >> 24) & 0xFF; + datagram[330] = (encodedDucFrequency >> 16) & 0xFF; + datagram[331] = (encodedDucFrequency >> 8) & 0xFF; + datagram[332] = encodedDucFrequency & 0xFF; + datagram[345] = 0x00; + datagram[1400] = 0x00; + datagram[1401] = 0x00; + datagram[1442] = 0x00; + datagram[1443] = 0x00; + if (set->getAlexPresence()) { datagram[1432] = (alexWord >> 24) & 0xFF; @@ -461,9 +982,26 @@ void Protocol2DataPath::sendHighPriorityPacket(bool run) { } if (m_commandSocket->writeDatagram(datagram, set->getCurrentMetisCard().ip_address, HIGH_PRIORITY_FROM_HOST_PORT) >= 0) + { ++m_highPrioritySequence; + ++m_highPriorityPacketsSent; + } else PROTOCOL2_DEBUG << "high priority packet write failed."; + + if (m_logConfigPackets) { + const QList ddcIndexes = activeDdcIndexes(); + QStringList hpSlices; + foreach (int ddc, ddcIndexes) + hpSlices << QString("ddc%1[%2]").arg(ddc).arg(hexSlice(datagram, 9 + ddc * 4, 4)); + + PROTOCOL2_DEBUG + << "HP run/freq " << hexSlice(datagram, 4, 1) + << " " << hpSlices.join(' ') + << " duc[329..332] " << hexSlice(datagram, 329, 4) + << " alex[1432..1435] " << hexSlice(datagram, 1432, 4); + m_logConfigPackets = false; + } } void Protocol2DataPath::updateLegacyControlBytes(const QByteArray &statusDatagram) { @@ -483,9 +1021,47 @@ void Protocol2DataPath::updateLegacyControlBytes(const QByteArray &statusDatagra m_legacyControlBytes[4] = (char)(set->getCurrentMetisCard().firmwareVersion & 0xFF); } +void Protocol2DataPath::handleDdcDatagram(int rx, const QByteArray &datagram) { + + if (rx < 0 || rx >= m_ddcSampleBuffers.size() || datagram.size() < 16) + return; + + const int bitsPerSample = ((quint8)datagram.at(12) << 8) | (quint8)datagram.at(13); + const int sampleCount = ((quint8)datagram.at(14) << 8) | (quint8)datagram.at(15); + const int payloadBytes = 16 + sampleCount * 6; + + if (!m_loggedFirstDdcDatagram) { + PROTOCOL2_DEBUG + << "first DDC datagram: len=" << datagram.size() + << " bits=" << bitsPerSample + << " samples=" << sampleCount + << " head=" << hexSlice(datagram, 0, qMin(16, datagram.size())); + m_loggedFirstDdcDatagram = true; + } + + if (bitsPerSample != 24 || datagram.size() < payloadBytes) + return; + + ++m_ddcDatagramsReceived; + m_ddcSamplesReceived += sampleCount; + + for (int i = 0; i < sampleCount; ++i) { + + const char *sample = datagram.constData() + 16 + i * 6; + Protocol2IQSample iqSample; + iqSample.i = read24BitSample(sample); + iqSample.q = read24BitSample(sample + 3); + m_ddcSampleBuffers[rx].append(iqSample); + } +} + +void Protocol2DataPath::handleWidebandDatagram(const QByteArray &datagram) { + Q_UNUSED(datagram) +} + void Protocol2DataPath::tryProduceLegacyFrames() { - const int receivers = qMax(1, set->getNumberOfReceivers()); + const int receivers = qMax(1, protocol2ReceiverCount(set)); const int halfFrameSamples = samplesPerLegacyHalfFrame(); if (halfFrameSamples <= 0) @@ -530,8 +1106,14 @@ void Protocol2DataPath::tryProduceLegacyFrames() { m_partialLegacyFrame += halfFrame; if (m_partialLegacyFrame.size() == BUFFER_SIZE) { - if (!io->iq_queue.isFull()) + if (!io->iq_queue.isFull()) { io->iq_queue.enqueue(m_partialLegacyFrame); + ++m_legacyFramesQueued; + } + else { + ++m_legacyFramesDropped; + } + ++m_legacyFramesEnqueued; m_partialLegacyFrame.clear(); } } @@ -539,7 +1121,7 @@ void Protocol2DataPath::tryProduceLegacyFrames() { int Protocol2DataPath::samplesPerLegacyHalfFrame() const { - const int receivers = qMax(1, set->getNumberOfReceivers()); + const int receivers = qMax(1, protocol2ReceiverCount(set)); const int bytesPerSample = receivers * 6 + 2; return (BUFFER_SIZE / 2 - 8) / bytesPerSample; @@ -566,3 +1148,7 @@ qint32 Protocol2DataPath::read24BitSample(const char *data) const { return value; } + +QList Protocol2DataPath::activeDdcIndexes() const { + return protocol2ActiveDdcIndexes(set); +} diff --git a/Source/src/DataEngine/cusdr_protocol2_io.h b/Source/src/DataEngine/cusdr_protocol2_io.h index 0c38f1b..09e574a 100644 --- a/Source/src/DataEngine/cusdr_protocol2_io.h +++ b/Source/src/DataEngine/cusdr_protocol2_io.h @@ -8,7 +8,9 @@ #include "cusdr_settings.h" +#include #include +#include #include #include @@ -32,16 +34,37 @@ public: void networkDeviceStartStop(char value); private slots: + void readCommandData(); void readStatusData(); void readDdcData(); + void readWidebandData(); void sendHeartbeat(); + void handleNumberOfRxChanged(QObject *sender, int value); + void handleSampleRateChanged(QObject *sender, int value); + void handleDitherChanged(QObject *sender, int value); + void handleRandomChanged(QObject *sender, int value); + void handleCtrFrequencyChanged(QObject *sender, int mode, int rx, long frequency); + void handleVfoFrequencyChanged(QObject *sender, int mode, int rx, long frequency); + void handleCurrentReceiverChanged(QObject *sender, int rx); + void handleHamBandChanged(QObject *sender, int rx, bool byButton, HamBand band); + void handleAlexConfigurationChanged(quint16 config); + void handleAlexStateChanged(HamBand band, const QList &states); + void handleAlexPresenceChanged(bool value); + void handleWidebandDataChanged(QObject *sender, bool value); private: + QList activeDdcIndexes() const; void closeSockets(); void sendGeneralPacket(); void sendDdcSpecificPacket(); + void sendDucSpecificPacket(); void sendHighPriorityPacket(bool run); + void refreshDdcConfiguration(bool rebuildSockets); + void refreshHighPriorityState(); + void refreshWidebandConfiguration(); void updateLegacyControlBytes(const QByteArray &statusDatagram); + void handleDdcDatagram(int rx, const QByteArray &datagram); + void handleWidebandDatagram(const QByteArray &datagram); void tryProduceLegacyFrames(); int samplesPerLegacyHalfFrame() const; quint32 encodeFrequency(long frequency) const; @@ -52,16 +75,37 @@ private: THPSDRParameter* io; QUdpSocket* m_commandSocket; QUdpSocket* m_statusSocket; + QUdpSocket* m_widebandSocket; QList m_ddcSockets; QList > m_ddcSampleBuffers; QTimer* m_heartbeatTimer; QByteArray m_partialLegacyFrame; QByteArray m_statusDatagram; QByteArray m_legacyControlBytes; + QByteArray m_widebandDatagram; bool m_running; + bool m_collectWideband; + quint32 m_widebandSequence; + quint32 m_widebandSequencePrevious; + int m_widebandPacketCount; quint32 m_generalSequence; quint32 m_ddcSequence; + quint32 m_ducSequence; quint32 m_highPrioritySequence; + int m_heartbeatTick; + quint64 m_ddcDatagramsReceived; + quint64 m_ddcSamplesReceived; + quint64 m_legacyFramesEnqueued; + quint64 m_legacyFramesQueued; + quint64 m_legacyFramesDropped; + quint64 m_statusPacketsReceived; + quint64 m_highPriorityPacketsSent; + QHash m_commandPortCounters; + QSet m_loggedFirstSourcePorts; + bool m_logConfigPackets; + uchar m_lastStatusByte4; + uchar m_lastStatusByte5; + bool m_loggedFirstDdcDatagram; }; #endif // _CUSDR_PROTOCOL2_IO_H diff --git a/Source/src/cusdr_mainWidget.cpp b/Source/src/cusdr_mainWidget.cpp index f6f887d..f4ecdb4 100644 --- a/Source/src/cusdr_mainWidget.cpp +++ b/Source/src/cusdr_mainWidget.cpp @@ -368,15 +368,11 @@ void MainWindow::setup() { // set the main window title updateTitle(); - // show the wideband data panel as specified in the settings.ini - if (set->getWidebandData()) { - - wideBandBtn->setEnabled(true); - - if (set->getWidebandStatus()) { - wideBandBtnClickedEvent(); - } - } + // show the wideband data panel as specified in the settings.ini + wideBandBtn->setEnabled(m_serverMode != QSDR::ChirpWSPR); + if (set->getWidebandStatus()) { + wideBandBtnClickedEvent(); + } // get the network interfaces getNetworkInterfaces(); @@ -1555,29 +1551,34 @@ void MainWindow::startButtonClickedEvent() { /*! \brief implements the Show/Hide functionality of the wide band data widget. */ -void MainWindow::wideBandBtnClickedEvent() { - - if (wideBandBtn->btnState() == AeroButton::OFF) { - - wideBandBtn->setBtnState(AeroButton::ON); - set->setWidebandStatus(this, true); - widebandDock->show(); - //showMessage("[server]: wide band data on."); - } - else if (wideBandBtn->btnState() == AeroButton::ON) { - - wideBandBtn->setBtnState(AeroButton::OFF); - set->setWidebandStatus(this, false); - widebandDock->hide(); - //showMessage("[server]: wide band data off."); - } -} - -void MainWindow::widebandVisibilityChanged(bool value) { - - if (value) - wideBandBtn->setBtnState(AeroButton::ON); - else +void MainWindow::wideBandBtnClickedEvent() { + + if (wideBandBtn->btnState() == AeroButton::OFF) { + + wideBandBtn->setBtnState(AeroButton::ON); + set->setWidebandData(this, true); + set->setWidebandStatus(this, true); + widebandDock->show(); + //showMessage("[server]: wide band data on."); + } + else if (wideBandBtn->btnState() == AeroButton::ON) { + + wideBandBtn->setBtnState(AeroButton::OFF); + set->setWidebandData(this, false); + set->setWidebandStatus(this, false); + widebandDock->hide(); + //showMessage("[server]: wide band data off."); + } +} + +void MainWindow::widebandVisibilityChanged(bool value) { + + set->setWidebandData(this, value); + set->setWidebandStatus(this, value); + + if (value) + wideBandBtn->setBtnState(AeroButton::ON); + else wideBandBtn->setBtnState(AeroButton::OFF); wideBandBtn->update(); diff --git a/Source/src/cusdr_settings.cpp b/Source/src/cusdr_settings.cpp index e45a1d2..05f0142 100644 --- a/Source/src/cusdr_settings.cpp +++ b/Source/src/cusdr_settings.cpp @@ -642,7 +642,7 @@ int Settings::loadSettings() { //****************************************************************** // wideband settings - str = settings->value("wideband/widebandData", "on").toString(); + str = settings->value("wideband/widebandData", "off").toString(); if (str.toLower() == "on") m_widebandOptions.wideBandData = true; else if (str.toLower() == "off") @@ -658,7 +658,10 @@ int Settings::loadSettings() { else m_widebandOptions.wideBandDisplayStatus = false; - if (!m_widebandOptions.wideBandData) m_widebandOptions.wideBandDisplayStatus = false; + if (!m_widebandOptions.wideBandData) + m_widebandOptions.wideBandDisplayStatus = false; + if (!m_widebandOptions.wideBandDisplayStatus) + m_widebandOptions.wideBandData = false; str = settings->value("wideband/averaging", "on").toString(); if (str.toLower() == "on")