protocol 2 fix

This commit is contained in:
2026-04-14 22:06:31 +03:00
parent dde80e5696
commit 6ca18411cf
13 changed files with 1135 additions and 1024 deletions
+22 -2
View File
@@ -3,8 +3,8 @@
## Priority ## Priority
1. Investigate Protocol 2 stop handling. 1. Investigate Protocol 2 stop handling.
2. Complete Protocol 2 Alex support for boards with `Alex1`. 2. Validate Protocol 2 wideband behavior on real hardware.
3. Continue UI cleanup for Protocol 2 specific hardware presentation. 3. Complete Protocol 2 Alex support for boards with `Alex1`.
## Immediate Issues To Debug ## Immediate Issues To Debug
@@ -40,6 +40,21 @@
## Protocol 2 Functional Work ## 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: - Implement proper `Alex1/BPF2/RX2` handling for boards that support a second Alex register:
- Orion MkII - Orion MkII
- SATURN / ANAN-G2 - SATURN / ANAN-G2
@@ -50,6 +65,11 @@
## UI Work ## UI Work
- Review UI areas that still assume `Metis/Hermes` semantics internally. - 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: - Make Protocol 2 model/capability presentation more explicit where useful:
- selected model, - selected model,
- protocol version, - protocol version,
+179
View File
@@ -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.
+75
View File
@@ -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` - `doc/openHPSDR Ethernet Protocol v4.3.docx`
- Highest value next task: - Highest value next task:
- implement proper `Alex1/BPF2/RX2` handling for Protocol 2 boards that support a second Alex register. - 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.
+108
View File
@@ -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-канал продолжает жить.
+11 -11
View File
@@ -1,7 +1,7 @@
[General] [General]
cudaSDR%20BETA=v0.3.2.13+ cudaSDR%20BETA=v0.3.2.13+
cudaSDR%20BETA%20=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] [ChirpWSPR]
chirpAmplitude=75 chirpAmplitude=75
@@ -112,9 +112,9 @@ pennylane=false
[network] [network]
audio_port=15000 audio_port=15000
hpsdr_local_ipAddress=192.168.122.1 hpsdr_local_ipAddress=172.16.2.99
listen_port=11000 listen_port=11000
metis_port=48349 metis_port=42421
server_ipAddress=192.168.122.1 server_ipAddress=192.168.122.1
server_port=52685 server_port=52685
socketBufferSize=32 socketBufferSize=32
@@ -202,7 +202,7 @@ attenuatorGen=off
audioVolume=73 audioVolume=73
averaging=on averaging=on
averagingCnt=5 averagingCnt=5
centerFrequency=7055083 centerFrequency=7117391
clickVFO=on clickVFO=on
dBmPanScaleMax10cm=-10 dBmPanScaleMax10cm=-10
dBmPanScaleMax10m=-30 dBmPanScaleMax10m=-30
@@ -292,14 +292,14 @@ lastCenterFrequency23cm=902000000
lastCenterFrequency2m=144000000 lastCenterFrequency2m=144000000
lastCenterFrequency30m=10100000 lastCenterFrequency30m=10100000
lastCenterFrequency33cm=902000000 lastCenterFrequency33cm=902000000
lastCenterFrequency40m=7055083 lastCenterFrequency40m=7117391
lastCenterFrequency5cm=902000000 lastCenterFrequency5cm=902000000
lastCenterFrequency60m=5260000 lastCenterFrequency60m=5260000
lastCenterFrequency630m=472000 lastCenterFrequency630m=472000
lastCenterFrequency6m=50000000 lastCenterFrequency6m=50000000
lastCenterFrequency70cm=420000000 lastCenterFrequency70cm=420000000
lastCenterFrequency80m=3713673 lastCenterFrequency80m=3713673
lastCenterFrequencyGen=22830500 lastCenterFrequencyGen=25159002
lastVfoFrequency10cm=902000000 lastVfoFrequency10cm=902000000
lastVfoFrequency10m=28676442 lastVfoFrequency10m=28676442
lastVfoFrequency125cm=222000000 lastVfoFrequency125cm=222000000
@@ -314,18 +314,18 @@ lastVfoFrequency23cm=902000000
lastVfoFrequency2m=144000000 lastVfoFrequency2m=144000000
lastVfoFrequency30m=10100000 lastVfoFrequency30m=10100000
lastVfoFrequency33cm=902000000 lastVfoFrequency33cm=902000000
lastVfoFrequency40m=7087913 lastVfoFrequency40m=7178865
lastVfoFrequency5cm=902000000 lastVfoFrequency5cm=902000000
lastVfoFrequency60m=5260000 lastVfoFrequency60m=5260000
lastVfoFrequency630m=472000 lastVfoFrequency630m=472000
lastVfoFrequency6m=50000000 lastVfoFrequency6m=50000000
lastVfoFrequency70cm=420000000 lastVfoFrequency70cm=420000000
lastVfoFrequency80m=3669000 lastVfoFrequency80m=3669000
lastVfoFrequencyGen=22875900 lastVfoFrequencyGen=25188000
mouseWheelFreqStep=100 mouseWheelFreqStep=100
panLocked=off panLocked=off
panMode=FILLEDLINE panMode=FILLEDLINE
vfoFrequency=7087913 vfoFrequency=7178865
waterfallMode=ENHANCED waterfallMode=ENHANCED
waterfallOffsetHi=20 waterfallOffsetHi=20
waterfallOffsetLo=-5 waterfallOffsetLo=-5
@@ -3466,8 +3466,8 @@ averagingCnt=5
dBmWideBandScaleMax=-42 dBmWideBandScaleMax=-42
dBmWideBandScaleMin=-152 dBmWideBandScaleMin=-152
panMode=LINE panMode=LINE
widebandData=on widebandData=off
widebandDisplay=on widebandDisplay=off
[window] [window]
minimumGroupBoxWidth=230 minimumGroupBoxWidth=230
+2 -2
View File
@@ -1,3 +1,3 @@
[General] [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) 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\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) 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)
-925
View File
@@ -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.
@@ -338,6 +338,12 @@ void DataEngine::setupConnections() {
this, this,
SLOT(searchHpsdrNetworkDevices())); SLOT(searchHpsdrNetworkDevices()));
CHECKED_CONNECT(
set,
SIGNAL(widebandDataChanged(QObject *, bool)),
this,
SLOT(setWidebandData(QObject *, bool)));
/*CHECKED_CONNECT( /*CHECKED_CONNECT(
set, set,
SIGNAL(spectrumAveragingChanged(QObject*, int, bool)), 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; 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) { void DataEngine::loadWavFile(const QString &fileName) {
if (m_audioEngine->loadFile(fileName)) if (m_audioEngine->loadFile(fileName))
+1
View File
@@ -144,6 +144,7 @@ public slots:
void setMercuryTiming(QObject* sender, int value); void setMercuryTiming(QObject* sender, int value);
void setHamBand(QObject *sender, int rx, bool byBtn, HamBand band); void setHamBand(QObject *sender, int rx, bool byBtn, HamBand band);
void setFrequency(QObject* sender, int mode, int rx, long frequency); void setFrequency(QObject* sender, int mode, int rx, long frequency);
void setWidebandData(QObject *sender, bool value);
void loadWavFile(const QString &fileName); void loadWavFile(const QString &fileName);
void suspend(); void suspend();
+631 -45
View File
@@ -8,6 +8,8 @@
#include "cusdr_protocol2_io.h" #include "cusdr_protocol2_io.h"
#include "cusdr_protocol2_profile.h" #include "cusdr_protocol2_profile.h"
#include <algorithm>
#ifdef LOG_DATAIO #ifdef LOG_DATAIO
# define PROTOCOL2_DEBUG qDebug().nospace() << "Protocol2::\t" # define PROTOCOL2_DEBUG qDebug().nospace() << "Protocol2::\t"
#else #else
@@ -18,14 +20,26 @@
namespace { namespace {
static const quint16 kProtocol2DdcSpecificPort = 1025; 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 kProtocol2HighPriorityToPcPort = 1025;
static const quint16 kProtocol2DdcAudioPort = 1028; static const quint16 kProtocol2DdcAudioPort = 1028;
static const quint16 kProtocol2DucIqPort = 1029; static const quint16 kProtocol2DucIqPort = 1029;
static const quint16 kProtocol2DdcBasePort = 1035; static const quint16 kProtocol2DdcBasePort = 1035;
static const int kProtocol2GeneralPacketSize = 60; static const int kProtocol2GeneralPacketSize = 60;
static const int kProtocol2DucSpecificPacketSize = 60;
static const int kProtocol2HighPriorityPacketSize = 1444; static const int kProtocol2HighPriorityPacketSize = 1444;
static const int kProtocol2StatusPacketMinSize = 31; 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) { int protocol2ReceiverCount(Settings *set) {
const TNetworkDevicecard device = set->getCurrentMetisCard(); const TNetworkDevicecard device = set->getCurrentMetisCard();
@@ -37,6 +51,25 @@ int protocol2ReceiverCount(Settings *set) {
return requestedReceivers; return requestedReceivers;
} }
QList<int> protocol2ActiveDdcIndexes(Settings *set) {
QList<int> 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) { quint32 alexFilterWordForFrequency(Settings *set, long frequency, int currentBand) {
if (!set || !set->getAlexPresence()) if (!set || !set->getAlexPresence())
@@ -114,13 +147,92 @@ Protocol2DataPath::Protocol2DataPath(Settings *settings, THPSDRParameter *ioData
, io(ioData) , io(ioData)
, m_commandSocket(0) , m_commandSocket(0)
, m_statusSocket(0) , m_statusSocket(0)
, m_widebandSocket(0)
, m_heartbeatTimer(0) , m_heartbeatTimer(0)
, m_running(false) , m_running(false)
, m_collectWideband(false)
, m_widebandSequence(0)
, m_widebandSequencePrevious((quint32)-1)
, m_widebandPacketCount(0)
, m_generalSequence(0) , m_generalSequence(0)
, m_ddcSequence(0) , m_ddcSequence(0)
, m_ducSequence(0)
, m_highPrioritySequence(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); 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<int> &)),
this,
SLOT(handleAlexStateChanged(HamBand, const QList<int> &)));
CHECKED_CONNECT(
set,
SIGNAL(alexPresenceChanged(bool)),
this,
SLOT(handleAlexPresenceChanged(bool)));
CHECKED_CONNECT(
set,
SIGNAL(widebandDataChanged(QObject *, bool)),
this,
SLOT(handleWidebandDataChanged(QObject *, bool)));
} }
Protocol2DataPath::~Protocol2DataPath() { Protocol2DataPath::~Protocol2DataPath() {
@@ -140,7 +252,7 @@ bool Protocol2DataPath::initSockets() {
const QHostAddress localAddress(set->getHPSDRDeviceLocalAddr()); const QHostAddress localAddress(set->getHPSDRDeviceLocalAddr());
const quint16 discoveryPort = set->getMetisPort(); const quint16 discoveryPort = set->getMetisPort();
const int receivers = protocol2ReceiverCount(set); const QList<int> ddcIndexes = activeDdcIndexes();
m_commandSocket = new QUdpSocket(this); m_commandSocket = new QUdpSocket(this);
if (!m_commandSocket->bind(localAddress, discoveryPort, QUdpSocket::DontShareAddress)) { if (!m_commandSocket->bind(localAddress, discoveryPort, QUdpSocket::DontShareAddress)) {
@@ -148,6 +260,11 @@ bool Protocol2DataPath::initSockets() {
closeSockets(); closeSockets();
return false; return false;
} }
CHECKED_CONNECT(
m_commandSocket,
SIGNAL(readyRead()),
this,
SLOT(readCommandData()));
m_statusSocket = new QUdpSocket(this); m_statusSocket = new QUdpSocket(this);
if (!m_statusSocket->bind(localAddress, kProtocol2HighPriorityToPcPort, QUdpSocket::DontShareAddress)) { if (!m_statusSocket->bind(localAddress, kProtocol2HighPriorityToPcPort, QUdpSocket::DontShareAddress)) {
@@ -161,12 +278,26 @@ bool Protocol2DataPath::initSockets() {
this, this,
SLOT(readStatusData())); 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_ddcSampleBuffers.clear();
m_ddcSockets.clear(); m_ddcSockets.clear();
for (int rx = 0; rx < receivers; ++rx) { for (int rx = 0; rx < ddcIndexes.size(); ++rx) {
QUdpSocket *socket = new QUdpSocket(this); QUdpSocket *socket = new QUdpSocket(this);
const quint16 port = kProtocol2DdcBasePort + rx; const quint16 port = kProtocol2DdcBasePort + ddcIndexes.at(rx);
if (!socket->bind(localAddress, port, QUdpSocket::DontShareAddress)) { if (!socket->bind(localAddress, port, QUdpSocket::DontShareAddress)) {
PROTOCOL2_DEBUG << "DDC socket bind failed on port " << port; PROTOCOL2_DEBUG << "DDC socket bind failed on port " << port;
delete socket; delete socket;
@@ -195,9 +326,28 @@ bool Protocol2DataPath::initSockets() {
m_partialLegacyFrame.clear(); m_partialLegacyFrame.clear();
m_partialLegacyFrame.reserve(BUFFER_SIZE); m_partialLegacyFrame.reserve(BUFFER_SIZE);
m_legacyControlBytes.fill(0x00, 5); m_legacyControlBytes.fill(0x00, 5);
m_widebandDatagram.clear();
m_running = false; 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; return true;
} }
@@ -229,21 +379,95 @@ void Protocol2DataPath::networkDeviceStartStop(char value) {
return; return;
m_running = false; m_running = false;
m_heartbeatTick = 0;
if (m_heartbeatTimer) if (m_heartbeatTimer)
m_heartbeatTimer->stop(); m_heartbeatTimer->stop();
sendHighPriorityPacket(false); sendHighPriorityPacket(false);
return; 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(); sendGeneralPacket();
sendDucSpecificPacket();
sendDdcSpecificPacket(); sendDdcSpecificPacket();
m_running = true;
sendHighPriorityPacket(true); sendHighPriorityPacket(true);
m_running = true;
if (m_heartbeatTimer) if (m_heartbeatTimer)
m_heartbeatTimer->start(); 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() { void Protocol2DataPath::readStatusData() {
while (m_statusSocket && m_statusSocket->hasPendingDatagrams()) { while (m_statusSocket && m_statusSocket->hasPendingDatagrams()) {
@@ -269,25 +493,7 @@ void Protocol2DataPath::readDdcData() {
QByteArray datagram; QByteArray datagram;
datagram.resize(socket->pendingDatagramSize()); datagram.resize(socket->pendingDatagramSize());
socket->readDatagram(datagram.data(), datagram.size()); socket->readDatagram(datagram.data(), datagram.size());
handleDdcDatagram(rx, datagram);
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);
}
} }
tryProduceLegacyFrames(); tryProduceLegacyFrames();
@@ -298,7 +504,172 @@ void Protocol2DataPath::sendHeartbeat() {
if (!m_running) if (!m_running)
return; return;
++m_heartbeatTick;
const int cycle = ((m_heartbeatTick - 1) % 8) + 1;
sendHighPriorityPacket(true); 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<quint16> 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<int> &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() { void Protocol2DataPath::closeSockets() {
@@ -324,6 +695,13 @@ void Protocol2DataPath::closeSockets() {
m_statusSocket = 0; m_statusSocket = 0;
} }
if (m_widebandSocket) {
disconnect(m_widebandSocket, 0, this, 0);
m_widebandSocket->close();
delete m_widebandSocket;
m_widebandSocket = 0;
}
if (m_commandSocket) { if (m_commandSocket) {
disconnect(m_commandSocket, 0, this, 0); disconnect(m_commandSocket, 0, this, 0);
m_commandSocket->close(); m_commandSocket->close();
@@ -332,6 +710,81 @@ void Protocol2DataPath::closeSockets() {
} }
m_partialLegacyFrame.clear(); 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() { void Protocol2DataPath::sendGeneralPacket() {
@@ -345,8 +798,8 @@ void Protocol2DataPath::sendGeneralPacket() {
datagram[4] = 0x00; datagram[4] = 0x00;
datagram[5] = (kProtocol2DdcSpecificPort >> 8) & 0xFF; datagram[5] = (kProtocol2DdcSpecificPort >> 8) & 0xFF;
datagram[6] = kProtocol2DdcSpecificPort & 0xFF; datagram[6] = kProtocol2DdcSpecificPort & 0xFF;
datagram[7] = (kProtocol2DucIqPort >> 8) & 0xFF; datagram[7] = (kProtocol2DucSpecificPort >> 8) & 0xFF;
datagram[8] = kProtocol2DucIqPort & 0xFF; datagram[8] = kProtocol2DucSpecificPort & 0xFF;
datagram[9] = (HIGH_PRIORITY_FROM_HOST_PORT >> 8) & 0xFF; datagram[9] = (HIGH_PRIORITY_FROM_HOST_PORT >> 8) & 0xFF;
datagram[10] = HIGH_PRIORITY_FROM_HOST_PORT & 0xFF; datagram[10] = HIGH_PRIORITY_FROM_HOST_PORT & 0xFF;
datagram[11] = (kProtocol2HighPriorityToPcPort >> 8) & 0xFF; datagram[11] = (kProtocol2HighPriorityToPcPort >> 8) & 0xFF;
@@ -357,16 +810,20 @@ void Protocol2DataPath::sendGeneralPacket() {
datagram[16] = kProtocol2DucIqPort & 0xFF; datagram[16] = kProtocol2DucIqPort & 0xFF;
datagram[17] = (kProtocol2DdcBasePort >> 8) & 0xFF; datagram[17] = (kProtocol2DdcBasePort >> 8) & 0xFF;
datagram[18] = kProtocol2DdcBasePort & 0xFF; datagram[18] = kProtocol2DdcBasePort & 0xFF;
datagram[21] = (HIGH_PRIORITY_FROM_HOST_PORT >> 8) & 0xFF; datagram[19] = (kProtocol2MicDataPort >> 8) & 0xFF;
datagram[22] = HIGH_PRIORITY_FROM_HOST_PORT & 0xFF; datagram[20] = kProtocol2MicDataPort & 0xFF;
datagram[21] = (kProtocol2WidebandBasePort >> 8) & 0xFF;
datagram[22] = kProtocol2WidebandBasePort & 0xFF;
datagram[23] = set->getWidebandData() ? 0x01 : 0x00;
datagram[24] = 0x02; datagram[24] = 0x02;
datagram[25] = 0x00;
datagram[26] = 0x10; datagram[26] = 0x10;
datagram[27] = 20; datagram[23] = 0x00;
datagram[28] = 32;
const TNetworkDevicecard device = set->getCurrentMetisCard(); const TNetworkDevicecard device = set->getCurrentMetisCard();
if (device.phaseWords) if (device.phaseWords)
datagram[37] = (char)((quint8)datagram.at(37) | 0x08); datagram[37] = (char)((quint8)datagram.at(37) | 0x08);
datagram[38] = (char)((quint8)datagram.at(38) | 0x01);
if ((device.iqFormatFlags & 0x05) == 0x05) if ((device.iqFormatFlags & 0x05) == 0x05)
datagram[39] = 0x05; datagram[39] = 0x05;
@@ -378,18 +835,56 @@ void Protocol2DataPath::sendGeneralPacket() {
datagram[59] = (char)((quint8)datagram.at(59) | 0x01); datagram[59] = (char)((quint8)datagram.at(59) | 0x01);
if (device.hasAlex1) if (device.hasAlex1)
datagram[59] = (char)((quint8)datagram.at(59) | 0x02); 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) if (m_commandSocket->writeDatagram(datagram, set->getCurrentMetisCard().ip_address, DEVICE_PORT) >= 0)
++m_generalSequence; ++m_generalSequence;
else else
PROTOCOL2_DEBUG << "general packet write failed."; 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() { void Protocol2DataPath::sendDdcSpecificPacket() {
const TNetworkDevicecard device = set->getCurrentMetisCard(); const TNetworkDevicecard device = set->getCurrentMetisCard();
const int receivers = protocol2ReceiverCount(set); const QList<int> ddcIndexes = activeDdcIndexes();
QByteArray datagram(17 + receivers * 6, 0x00); QByteArray datagram(kProtocol2HighPriorityPacketSize, 0x00);
datagram[0] = (m_ddcSequence >> 24) & 0xFF; datagram[0] = (m_ddcSequence >> 24) & 0xFF;
datagram[1] = (m_ddcSequence >> 16) & 0xFF; datagram[1] = (m_ddcSequence >> 16) & 0xFF;
@@ -406,14 +901,17 @@ void Protocol2DataPath::sendDdcSpecificPacket() {
datagram[6] = datagram.at(6) | (1 << adc); 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 + 0] = (adcCount > 1) ? (rx % adcCount) : 0x00;
datagram[offset + 1] = (io->samplerate >> 8) & 0xFF; datagram[offset + 1] = (sampleRateKsps >> 8) & 0xFF;
datagram[offset + 2] = io->samplerate & 0xFF; datagram[offset + 2] = sampleRateKsps & 0xFF;
datagram[offset + 3] = 0x00; datagram[offset + 3] = 0x00;
datagram[offset + 4] = 0x00; datagram[offset + 4] = 0x00;
datagram[offset + 5] = 24; datagram[offset + 5] = 24;
@@ -423,17 +921,29 @@ void Protocol2DataPath::sendDdcSpecificPacket() {
++m_ddcSequence; ++m_ddcSequence;
else else
PROTOCOL2_DEBUG << "DDC specific packet write failed."; PROTOCOL2_DEBUG << "DDC specific packet write failed.";
if (m_logConfigPackets) {
const QList<int> 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) { void Protocol2DataPath::sendHighPriorityPacket(bool run) {
QByteArray datagram(kProtocol2HighPriorityPacketSize, 0x00); QByteArray datagram(kProtocol2HighPriorityPacketSize, 0x00);
const QList<long> frequencies = set->getCtrFrequencies(); const QList<long> frequencies = set->getCtrFrequencies();
const int receivers = protocol2ReceiverCount(set); const QList<int> ddcIndexes = activeDdcIndexes();
const int currentReceiver = set->getCurrentReceiver(); const int currentReceiver = set->getCurrentReceiver();
const int currentBand = (int)set->getCurrentHamBand(currentReceiver); const int currentBand = (int)set->getCurrentHamBand(currentReceiver);
const long currentVfoFrequency = set->getVfoFrequency(currentReceiver); const long currentRxFrequency = frequencies.value(currentReceiver, frequencies.value(0, 0));
const quint32 alexWord = alexFilterWordForFrequency(set, currentVfoFrequency, currentBand); const quint32 alexWord = alexFilterWordForFrequency(set, currentRxFrequency, currentBand);
const quint32 encodedDucFrequency = encodeFrequency(currentRxFrequency);
datagram[0] = (m_highPrioritySequence >> 24) & 0xFF; datagram[0] = (m_highPrioritySequence >> 24) & 0xFF;
datagram[1] = (m_highPrioritySequence >> 16) & 0xFF; datagram[1] = (m_highPrioritySequence >> 16) & 0xFF;
@@ -441,10 +951,11 @@ void Protocol2DataPath::sendHighPriorityPacket(bool run) {
datagram[3] = m_highPrioritySequence & 0xFF; datagram[3] = m_highPrioritySequence & 0xFF;
datagram[4] = run ? 0x01 : 0x00; 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 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 + 0] = (encodedFrequency >> 24) & 0xFF;
datagram[offset + 1] = (encodedFrequency >> 16) & 0xFF; datagram[offset + 1] = (encodedFrequency >> 16) & 0xFF;
@@ -452,6 +963,16 @@ void Protocol2DataPath::sendHighPriorityPacket(bool run) {
datagram[offset + 3] = encodedFrequency & 0xFF; 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()) { if (set->getAlexPresence()) {
datagram[1432] = (alexWord >> 24) & 0xFF; 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) if (m_commandSocket->writeDatagram(datagram, set->getCurrentMetisCard().ip_address, HIGH_PRIORITY_FROM_HOST_PORT) >= 0)
{
++m_highPrioritySequence; ++m_highPrioritySequence;
++m_highPriorityPacketsSent;
}
else else
PROTOCOL2_DEBUG << "high priority packet write failed."; PROTOCOL2_DEBUG << "high priority packet write failed.";
if (m_logConfigPackets) {
const QList<int> 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) { void Protocol2DataPath::updateLegacyControlBytes(const QByteArray &statusDatagram) {
@@ -483,9 +1021,47 @@ void Protocol2DataPath::updateLegacyControlBytes(const QByteArray &statusDatagra
m_legacyControlBytes[4] = (char)(set->getCurrentMetisCard().firmwareVersion & 0xFF); 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() { void Protocol2DataPath::tryProduceLegacyFrames() {
const int receivers = qMax(1, set->getNumberOfReceivers()); const int receivers = qMax(1, protocol2ReceiverCount(set));
const int halfFrameSamples = samplesPerLegacyHalfFrame(); const int halfFrameSamples = samplesPerLegacyHalfFrame();
if (halfFrameSamples <= 0) if (halfFrameSamples <= 0)
@@ -530,8 +1106,14 @@ void Protocol2DataPath::tryProduceLegacyFrames() {
m_partialLegacyFrame += halfFrame; m_partialLegacyFrame += halfFrame;
if (m_partialLegacyFrame.size() == BUFFER_SIZE) { if (m_partialLegacyFrame.size() == BUFFER_SIZE) {
if (!io->iq_queue.isFull()) if (!io->iq_queue.isFull()) {
io->iq_queue.enqueue(m_partialLegacyFrame); io->iq_queue.enqueue(m_partialLegacyFrame);
++m_legacyFramesQueued;
}
else {
++m_legacyFramesDropped;
}
++m_legacyFramesEnqueued;
m_partialLegacyFrame.clear(); m_partialLegacyFrame.clear();
} }
} }
@@ -539,7 +1121,7 @@ void Protocol2DataPath::tryProduceLegacyFrames() {
int Protocol2DataPath::samplesPerLegacyHalfFrame() const { int Protocol2DataPath::samplesPerLegacyHalfFrame() const {
const int receivers = qMax(1, set->getNumberOfReceivers()); const int receivers = qMax(1, protocol2ReceiverCount(set));
const int bytesPerSample = receivers * 6 + 2; const int bytesPerSample = receivers * 6 + 2;
return (BUFFER_SIZE / 2 - 8) / bytesPerSample; return (BUFFER_SIZE / 2 - 8) / bytesPerSample;
@@ -566,3 +1148,7 @@ qint32 Protocol2DataPath::read24BitSample(const char *data) const {
return value; return value;
} }
QList<int> Protocol2DataPath::activeDdcIndexes() const {
return protocol2ActiveDdcIndexes(set);
}
@@ -8,7 +8,9 @@
#include "cusdr_settings.h" #include "cusdr_settings.h"
#include <QHash>
#include <QList> #include <QList>
#include <QSet>
#include <QTimer> #include <QTimer>
#include <QUdpSocket> #include <QUdpSocket>
@@ -32,16 +34,37 @@ public:
void networkDeviceStartStop(char value); void networkDeviceStartStop(char value);
private slots: private slots:
void readCommandData();
void readStatusData(); void readStatusData();
void readDdcData(); void readDdcData();
void readWidebandData();
void sendHeartbeat(); 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<int> &states);
void handleAlexPresenceChanged(bool value);
void handleWidebandDataChanged(QObject *sender, bool value);
private: private:
QList<int> activeDdcIndexes() const;
void closeSockets(); void closeSockets();
void sendGeneralPacket(); void sendGeneralPacket();
void sendDdcSpecificPacket(); void sendDdcSpecificPacket();
void sendDucSpecificPacket();
void sendHighPriorityPacket(bool run); void sendHighPriorityPacket(bool run);
void refreshDdcConfiguration(bool rebuildSockets);
void refreshHighPriorityState();
void refreshWidebandConfiguration();
void updateLegacyControlBytes(const QByteArray &statusDatagram); void updateLegacyControlBytes(const QByteArray &statusDatagram);
void handleDdcDatagram(int rx, const QByteArray &datagram);
void handleWidebandDatagram(const QByteArray &datagram);
void tryProduceLegacyFrames(); void tryProduceLegacyFrames();
int samplesPerLegacyHalfFrame() const; int samplesPerLegacyHalfFrame() const;
quint32 encodeFrequency(long frequency) const; quint32 encodeFrequency(long frequency) const;
@@ -52,16 +75,37 @@ private:
THPSDRParameter* io; THPSDRParameter* io;
QUdpSocket* m_commandSocket; QUdpSocket* m_commandSocket;
QUdpSocket* m_statusSocket; QUdpSocket* m_statusSocket;
QUdpSocket* m_widebandSocket;
QList<QUdpSocket*> m_ddcSockets; QList<QUdpSocket*> m_ddcSockets;
QList<QList<Protocol2IQSample> > m_ddcSampleBuffers; QList<QList<Protocol2IQSample> > m_ddcSampleBuffers;
QTimer* m_heartbeatTimer; QTimer* m_heartbeatTimer;
QByteArray m_partialLegacyFrame; QByteArray m_partialLegacyFrame;
QByteArray m_statusDatagram; QByteArray m_statusDatagram;
QByteArray m_legacyControlBytes; QByteArray m_legacyControlBytes;
QByteArray m_widebandDatagram;
bool m_running; bool m_running;
bool m_collectWideband;
quint32 m_widebandSequence;
quint32 m_widebandSequencePrevious;
int m_widebandPacketCount;
quint32 m_generalSequence; quint32 m_generalSequence;
quint32 m_ddcSequence; quint32 m_ddcSequence;
quint32 m_ducSequence;
quint32 m_highPrioritySequence; 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<quint16, quint64> m_commandPortCounters;
QSet<quint16> m_loggedFirstSourcePorts;
bool m_logConfigPackets;
uchar m_lastStatusByte4;
uchar m_lastStatusByte5;
bool m_loggedFirstDdcDatagram;
}; };
#endif // _CUSDR_PROTOCOL2_IO_H #endif // _CUSDR_PROTOCOL2_IO_H
+8 -7
View File
@@ -369,13 +369,9 @@ void MainWindow::setup() {
updateTitle(); updateTitle();
// show the wideband data panel as specified in the settings.ini // show the wideband data panel as specified in the settings.ini
if (set->getWidebandData()) { wideBandBtn->setEnabled(m_serverMode != QSDR::ChirpWSPR);
if (set->getWidebandStatus()) {
wideBandBtn->setEnabled(true); wideBandBtnClickedEvent();
if (set->getWidebandStatus()) {
wideBandBtnClickedEvent();
}
} }
// get the network interfaces // get the network interfaces
@@ -1560,6 +1556,7 @@ void MainWindow::wideBandBtnClickedEvent() {
if (wideBandBtn->btnState() == AeroButton::OFF) { if (wideBandBtn->btnState() == AeroButton::OFF) {
wideBandBtn->setBtnState(AeroButton::ON); wideBandBtn->setBtnState(AeroButton::ON);
set->setWidebandData(this, true);
set->setWidebandStatus(this, true); set->setWidebandStatus(this, true);
widebandDock->show(); widebandDock->show();
//showMessage("[server]: wide band data on."); //showMessage("[server]: wide band data on.");
@@ -1567,6 +1564,7 @@ void MainWindow::wideBandBtnClickedEvent() {
else if (wideBandBtn->btnState() == AeroButton::ON) { else if (wideBandBtn->btnState() == AeroButton::ON) {
wideBandBtn->setBtnState(AeroButton::OFF); wideBandBtn->setBtnState(AeroButton::OFF);
set->setWidebandData(this, false);
set->setWidebandStatus(this, false); set->setWidebandStatus(this, false);
widebandDock->hide(); widebandDock->hide();
//showMessage("[server]: wide band data off."); //showMessage("[server]: wide band data off.");
@@ -1575,6 +1573,9 @@ void MainWindow::wideBandBtnClickedEvent() {
void MainWindow::widebandVisibilityChanged(bool value) { void MainWindow::widebandVisibilityChanged(bool value) {
set->setWidebandData(this, value);
set->setWidebandStatus(this, value);
if (value) if (value)
wideBandBtn->setBtnState(AeroButton::ON); wideBandBtn->setBtnState(AeroButton::ON);
else else
+5 -2
View File
@@ -642,7 +642,7 @@ int Settings::loadSettings() {
//****************************************************************** //******************************************************************
// wideband settings // wideband settings
str = settings->value("wideband/widebandData", "on").toString(); str = settings->value("wideband/widebandData", "off").toString();
if (str.toLower() == "on") if (str.toLower() == "on")
m_widebandOptions.wideBandData = true; m_widebandOptions.wideBandData = true;
else if (str.toLower() == "off") else if (str.toLower() == "off")
@@ -658,7 +658,10 @@ int Settings::loadSettings() {
else else
m_widebandOptions.wideBandDisplayStatus = false; 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(); str = settings->value("wideband/averaging", "on").toString();
if (str.toLower() == "on") if (str.toLower() == "on")