protocol 2 fix
This commit is contained in:
+22
-2
@@ -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,
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user