From efde2f1a1fadd19270150134f00dd6be95f2d2d7 Mon Sep 17 00:00:00 2001 From: mh Date: Sat, 13 Jan 2018 08:07:56 -0500 Subject: [PATCH] Added ability to select ADC1 or ADC2 from the floating rcvr widget. --- Source/bin/settings.ini | 96 +++++++++++++--------- Source/bin/windowsSettings.ini | 4 +- Source/src/DataEngine/cusdr_dataEngine.cpp | 50 +++++++++-- Source/src/DataEngine/cusdr_receiver.cpp | 19 +++++ Source/src/DataEngine/cusdr_receiver.h | 3 + Source/src/GL/cusdr_oglReceiverPanel.cpp | 36 ++++++++ Source/src/GL/cusdr_oglReceiverPanel.h | 3 + Source/src/cusdr_hamDatabase.cpp | 2 +- Source/src/cusdr_hamDatabase.h | 8 ++ Source/src/cusdr_mainWidget.cpp | 15 ++++ Source/src/cusdr_mainWidget.h | 2 + Source/src/cusdr_radioPopupWidget.cpp | 74 +++++++++++++++++ Source/src/cusdr_radioPopupWidget.h | 10 +++ Source/src/cusdr_radioWidget.h | 5 ++ Source/src/cusdr_settings.cpp | 44 ++++++++++ Source/src/cusdr_settings.h | 6 ++ 16 files changed, 328 insertions(+), 49 deletions(-) diff --git a/Source/bin/settings.ini b/Source/bin/settings.ini index 4f27d6d..56f9575 100644 --- a/Source/bin/settings.ini +++ b/Source/bin/settings.ini @@ -1,7 +1,7 @@ [General] -cudaSDR%20BETA%20=v0.3.2.13 +cudaSDR%20BETA=v0.3.2.13+ cudaSDR%20BETA%20=v0.3.2.13+ -saved=Friday 29 December 2017 10:07:10 +saved=Saturday 13 January 2018 08:01:05 [ChirpWSPR] chirpAmplitude=75 @@ -114,8 +114,8 @@ pennylane=false audio_port=15000 hpsdr_local_ipAddress=192.168.1.1 listen_port=11000 -metis_port=49359 -server_ipAddress=192.168.15.1 +metis_port=50792 +server_ipAddress=192.168.1.1 server_port=52685 socketBufferSize=32 @@ -167,6 +167,7 @@ txState80m=0 txStateGen=0 [receiver0] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -201,7 +202,7 @@ attenuatorGen=off audioVolume=34 averaging=on averagingCnt=5 -centerFrequency=3716500 +centerFrequency=3713673 clickVFO=on dBmPanScaleMax10cm=-10 dBmPanScaleMax10m=-30 @@ -297,8 +298,8 @@ lastCenterFrequency60m=5260000 lastCenterFrequency630m=472000 lastCenterFrequency6m=50000000 lastCenterFrequency70cm=420000000 -lastCenterFrequency80m=3716500 -lastCenterFrequencyGen=1375098 +lastCenterFrequency80m=3713673 +lastCenterFrequencyGen=1374997 lastVfoFrequency10cm=902000000 lastVfoFrequency10m=28676442 lastVfoFrequency125cm=222000000 @@ -319,17 +320,18 @@ lastVfoFrequency60m=5260000 lastVfoFrequency630m=472000 lastVfoFrequency6m=50000000 lastVfoFrequency70cm=420000000 -lastVfoFrequency80m=3740100 -lastVfoFrequencyGen=13959500 +lastVfoFrequency80m=3793000 +lastVfoFrequencyGen=1371299 mouseWheelFreqStep=100 panLocked=off panMode=FILLEDLINE -vfoFrequency=3740100 +vfoFrequency=3793000 waterfallMode=ENHANCED waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver1] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -364,7 +366,7 @@ attenuatorGen=off audioVolume=40 averaging=on averagingCnt=5 -centerFrequency=28000000 +centerFrequency=14209365 clickVFO=on dBmPanScaleMax10cm=-10 dBmPanScaleMax10m=-53 @@ -374,7 +376,7 @@ dBmPanScaleMax13cm=-10 dBmPanScaleMax15m=-10 dBmPanScaleMax160m=-19 dBmPanScaleMax17m=-10 -dBmPanScaleMax20m=-34 +dBmPanScaleMax20m=-15 dBmPanScaleMax2200m=-10 dBmPanScaleMax23cm=-10 dBmPanScaleMax2m=-10 @@ -386,7 +388,7 @@ dBmPanScaleMax60m=-10 dBmPanScaleMax630m=-10 dBmPanScaleMax6m=-10 dBmPanScaleMax70cm=-10 -dBmPanScaleMax80m=-44 +dBmPanScaleMax80m=-49 dBmPanScaleMaxGen=-10 dBmPanScaleMin10cm=-120 dBmPanScaleMin10m=-163 @@ -396,7 +398,7 @@ dBmPanScaleMin13cm=-120 dBmPanScaleMin15m=-120 dBmPanScaleMin160m=-129 dBmPanScaleMin17m=-120 -dBmPanScaleMin20m=-144 +dBmPanScaleMin20m=-125 dBmPanScaleMin2200m=-120 dBmPanScaleMin23cm=-120 dBmPanScaleMin2m=-120 @@ -408,7 +410,7 @@ dBmPanScaleMin60m=-120 dBmPanScaleMin630m=-120 dBmPanScaleMin6m=-120 dBmPanScaleMin70cm=-120 -dBmPanScaleMin80m=-154 +dBmPanScaleMin80m=-159 dBmPanScaleMinGen=-120 dspCore=qtdsp dspMode10cm=LSB @@ -434,8 +436,8 @@ dspMode70cm=LSB dspMode80m=LSB dspModeGen=LSB fftAuto=off -filterHi=-150 -filterLo=-3050 +filterHi=3050 +filterLo=150 framesPerSecond=25 freqRulerPosition=5 grid=on @@ -461,16 +463,16 @@ lastCenterFrequency630m=472000 lastCenterFrequency6m=50000000 lastCenterFrequency70cm=420000000 lastCenterFrequency80m=3673284 -lastCenterFrequencyGen=7201153 +lastCenterFrequencyGen=27998784 lastVfoFrequency10cm=902000000 -lastVfoFrequency10m=28000000 +lastVfoFrequency10m=28025492 lastVfoFrequency125cm=222000000 lastVfoFrequency12m=24890000 lastVfoFrequency13cm=902000000 lastVfoFrequency15m=21000000 lastVfoFrequency160m=1864900 lastVfoFrequency17m=18068000 -lastVfoFrequency20m=14255000 +lastVfoFrequency20m=14219200 lastVfoFrequency2200m=135700 lastVfoFrequency23cm=902000000 lastVfoFrequency2m=144000000 @@ -483,16 +485,17 @@ lastVfoFrequency630m=472000 lastVfoFrequency6m=50000000 lastVfoFrequency70cm=420000000 lastVfoFrequency80m=3680200 -lastVfoFrequencyGen=27958000 +lastVfoFrequencyGen=27980600 mouseWheelFreqStep=100 panLocked=off panMode=FILLEDLINE -vfoFrequency=28000000 +vfoFrequency=14219200 waterfallMode=ENHANCED waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver10] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -656,6 +659,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver11] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -700,7 +704,7 @@ dBmPanScaleMax13cm=-10 dBmPanScaleMax15m=-10 dBmPanScaleMax160m=-19 dBmPanScaleMax17m=-10 -dBmPanScaleMax20m=-10 +dBmPanScaleMax20m=-23 dBmPanScaleMax2200m=-10 dBmPanScaleMax23cm=-10 dBmPanScaleMax2m=-10 @@ -722,7 +726,7 @@ dBmPanScaleMin13cm=-120 dBmPanScaleMin15m=-120 dBmPanScaleMin160m=-129 dBmPanScaleMin17m=-120 -dBmPanScaleMin20m=-120 +dBmPanScaleMin20m=-133 dBmPanScaleMin2200m=-120 dBmPanScaleMin23cm=-120 dBmPanScaleMin2m=-120 @@ -819,6 +823,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver12] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -853,7 +858,7 @@ attenuatorGen=off audioVolume=23 averaging=on averagingCnt=5 -centerFrequency=7000000 +centerFrequency=7012632 clickVFO=on dBmPanScaleMax10cm=-10 dBmPanScaleMax10m=-10 @@ -869,7 +874,7 @@ dBmPanScaleMax23cm=-10 dBmPanScaleMax2m=-10 dBmPanScaleMax30m=-10 dBmPanScaleMax33cm=-10 -dBmPanScaleMax40m=-10 +dBmPanScaleMax40m=-23 dBmPanScaleMax5cm=-10 dBmPanScaleMax60m=-10 dBmPanScaleMax630m=-10 @@ -891,7 +896,7 @@ dBmPanScaleMin23cm=-120 dBmPanScaleMin2m=-120 dBmPanScaleMin30m=-120 dBmPanScaleMin33cm=-120 -dBmPanScaleMin40m=-120 +dBmPanScaleMin40m=-133 dBmPanScaleMin5cm=-120 dBmPanScaleMin60m=-120 dBmPanScaleMin630m=-120 @@ -943,7 +948,7 @@ lastCenterFrequency23cm=902000000 lastCenterFrequency2m=144000000 lastCenterFrequency30m=10100000 lastCenterFrequency33cm=902000000 -lastCenterFrequency40m=7000000 +lastCenterFrequency40m=7012632 lastCenterFrequency5cm=902000000 lastCenterFrequency60m=5260000 lastCenterFrequency630m=472000 @@ -965,7 +970,7 @@ lastVfoFrequency23cm=902000000 lastVfoFrequency2m=144000000 lastVfoFrequency30m=10117200 lastVfoFrequency33cm=902000000 -lastVfoFrequency40m=7000000 +lastVfoFrequency40m=7019532 lastVfoFrequency5cm=902000000 lastVfoFrequency60m=5260000 lastVfoFrequency630m=472000 @@ -976,12 +981,13 @@ lastVfoFrequencyGen=10051000 mouseWheelFreqStep=100 panLocked=off panMode=FILLEDLINE -vfoFrequency=7000000 +vfoFrequency=7019532 waterfallMode=ENHANCED waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver13] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -1145,6 +1151,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver14] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -1308,6 +1315,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver15] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -1365,7 +1373,7 @@ dBmPanScaleMax630m=-10 dBmPanScaleMax6m=-5 dBmPanScaleMax70cm=-10 dBmPanScaleMax80m=-9 -dBmPanScaleMaxGen=-3 +dBmPanScaleMaxGen=-30 dBmPanScaleMin10cm=-120 dBmPanScaleMin10m=-136 dBmPanScaleMin125cm=-120 @@ -1387,7 +1395,7 @@ dBmPanScaleMin630m=-120 dBmPanScaleMin6m=-115 dBmPanScaleMin70cm=-120 dBmPanScaleMin80m=-119 -dBmPanScaleMinGen=-113 +dBmPanScaleMinGen=-140 dspCore=qtdsp dspMode10cm=LSB dspMode10m=LSB @@ -1471,6 +1479,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver16] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -1634,6 +1643,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver17] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -1797,6 +1807,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver18] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -1960,6 +1971,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver19] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -2123,6 +2135,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver2] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -2157,7 +2170,7 @@ attenuatorGen=off audioVolume=23 averaging=on averagingCnt=5 -centerFrequency=10100000 +centerFrequency=10099616 clickVFO=on dBmPanScaleMax10cm=-10 dBmPanScaleMax10m=-10 @@ -2254,7 +2267,7 @@ lastCenterFrequency630m=472000 lastCenterFrequency6m=50000000 lastCenterFrequency70cm=420000000 lastCenterFrequency80m=3672000 -lastCenterFrequencyGen=1800000 +lastCenterFrequencyGen=10099616 lastVfoFrequency10cm=902000000 lastVfoFrequency10m=28000000 lastVfoFrequency125cm=222000000 @@ -2267,7 +2280,7 @@ lastVfoFrequency20m=14000000 lastVfoFrequency2200m=135700 lastVfoFrequency23cm=902000000 lastVfoFrequency2m=144000000 -lastVfoFrequency30m=10117200 +lastVfoFrequency30m=10116816 lastVfoFrequency33cm=902000000 lastVfoFrequency40m=7000000 lastVfoFrequency5cm=902000000 @@ -2280,12 +2293,13 @@ lastVfoFrequencyGen=10051000 mouseWheelFreqStep=100 panLocked=off panMode=FILLEDLINE -vfoFrequency=10117200 +vfoFrequency=10116816 waterfallMode=ENHANCED waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver3] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -2432,7 +2446,7 @@ lastVfoFrequency23cm=902000000 lastVfoFrequency2m=144000000 lastVfoFrequency30m=10117200 lastVfoFrequency33cm=902000000 -lastVfoFrequency40m=7067548 +lastVfoFrequency40m=7122200 lastVfoFrequency5cm=902000000 lastVfoFrequency60m=5260000 lastVfoFrequency630m=472000 @@ -2443,12 +2457,13 @@ lastVfoFrequencyGen=10051000 mouseWheelFreqStep=100 panLocked=off panMode=FILLEDLINE -vfoFrequency=7067548 +vfoFrequency=7122200 waterfallMode=ENHANCED waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver4] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -2612,6 +2627,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver5] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -2775,6 +2791,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver6] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -2938,6 +2955,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver7] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -3101,6 +3119,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver8] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 @@ -3264,6 +3283,7 @@ waterfallOffsetHi=20 waterfallOffsetLo=-5 [receiver9] +adcMode=ADC1 agcAttacktime=1 agcDecaytime=250 agcFixedGain=30 diff --git a/Source/bin/windowsSettings.ini b/Source/bin/windowsSettings.ini index 36bff54..bf9e013 100644 --- a/Source/bin/windowsSettings.ini +++ b/Source/bin/windowsSettings.ini @@ -1,3 +1,3 @@ [General] -geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\0\0\x3\x97\0\0\0\x33\0\0\f(\0\0\x6\x1\0\0\x3\x97\0\0\0X\0\0\f(\0\0\x6\x1\0\0\0\0\0\0\0\0\xf\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\x4\xdc\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\x34\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\x34\0\xff\xff\xff\xfb\0\0\0\x12\0H\0P\0S\0\x44\0R\0\x43\0t\0r\0l\x1\0\0\0\xb3\0\0\x4\xdc\0\0\x4\xdc\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\x34\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\x34\0\xff\xff\xff\0\0\a\x97\0\0\x4\xdc\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0U\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x44\0i\0s\0p\0l\0\x61\0y\0P\0\x61\0n\0\x65\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0\x42\0u\0t\0t\0o\0n\0s\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\0\0\x2[\0\0\x2\xae\0\0\t\xae\0\0\a_\0\0\x2[\0\0\x2\xd3\0\0\t\xae\0\0\a_\0\0\0\0\0\0\0\0\xf\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\x3\xc3\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\x32\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\x32\0\xff\xff\xff\xfb\0\0\0\x12\0H\0P\0S\0\x44\0R\0\x43\0t\0r\0l\x1\0\0\0\xb1\0\0\x3\xc3\0\0\x3\xc3\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\x32\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\x32\0\xff\xff\xff\0\0\x6Y\0\0\x3\xc3\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x93\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x44\0i\0s\0p\0l\0\x61\0y\0P\0\x61\0n\0\x65\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0\x42\0u\0t\0t\0o\0n\0s\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) diff --git a/Source/src/DataEngine/cusdr_dataEngine.cpp b/Source/src/DataEngine/cusdr_dataEngine.cpp index c134e14..8fae53f 100644 --- a/Source/src/DataEngine/cusdr_dataEngine.cpp +++ b/Source/src/DataEngine/cusdr_dataEngine.cpp @@ -59,6 +59,8 @@ */ static int firstTimeRxInit; +static quint8 adc_rx1_4, adc_rx5_8, adc_rx9_16; +static quint8 new_adc_rx1_4, new_adc_rx5_8, new_adc_rx9_16; DataEngine::DataEngine(QObject *parent) : QObject(parent) @@ -532,7 +534,6 @@ bool DataEngine::getFirmwareVersions() { if (!initReceivers(rcvrs)) return false; - if (!m_dataIO) createDataIO(); if (!m_dataProcessor) createDataProcessor(); @@ -3358,7 +3359,7 @@ void DataProcessor::encodeCCBytes() { if (de->io.tx_freq_change >= 0) { - de->io.output_buffer[4] = de->RX.at(de->io.tx_freq_change)->getCtrFrequency() >> 24; + de->io.output_buffer[4] = de->RX.at(de->io.tx_freq_change)->getCtrFrequency() >> 24; de->io.output_buffer[5] = de->RX.at(de->io.tx_freq_change)->getCtrFrequency() >> 16; de->io.output_buffer[6] = de->RX.at(de->io.tx_freq_change)->getCtrFrequency() >> 8; de->io.output_buffer[7] = de->RX.at(de->io.tx_freq_change)->getCtrFrequency(); @@ -3380,13 +3381,13 @@ void DataProcessor::encodeCCBytes() { // C0 = 0 0 0 1 0 0 0 x C1, C2, C3, C4 NCO Frequency in Hz for Receiver _7 // C0 = 0 0 1 0 0 1 0 x C1, C2, C3, C4 NCO Frequency in Hz for Receiver _8 // Was 0 0 0 1 0 0 1 x // C0 = 0 0 1 1 0 1 0 x C1, C2, C3, C4 NCO Frequency in Hz for Receiver _16 - // C0 = 0 0 1 1 0 1 0 x C1, C2, C3, C4 NCO Frequency in Hz for Receiver _16 + // C0 = 0 1 0 1 0 1 0 x C1, C2, C3, C4 NCO Frequency in Hz for Receiver _32 - // RRK, workaround for gige timing bug, make sure all rx freq's are sent on init. - if (firstTimeRxInit) { - firstTimeRxInit -= 1; - de->io.rx_freq_change = firstTimeRxInit; - } + // RRK, workaround for gige timing bug, make sure all rx freq's are sent on init. + if (firstTimeRxInit) { + firstTimeRxInit -= 1; + de->io.rx_freq_change = firstTimeRxInit; + } if (de->io.rx_freq_change >= 0) { @@ -3526,9 +3527,42 @@ void DataProcessor::encodeCCBytes() { for (int i = 0; i < 5; i++) de->io.output_buffer[i+3] = de->io.control_out[i]; + // check if we need to update ADC C&C's + new_adc_rx1_4 = new_adc_rx5_8 = new_adc_rx9_16 = 0; + for (int i = 0; i < set->getNumberOfReceivers(); i++) { + if (i < 4) new_adc_rx1_4 |= de->RX.at(i)->getADCMode() << (i * 2); + else if (i < 8) new_adc_rx5_8 |= de->RX.at(i)->getADCMode() << ((i-4) * 2); + else if (i < 16) new_adc_rx9_16 |= de->RX.at(i)->getADCMode() << (i-8); + } + + if ((new_adc_rx1_4 != adc_rx1_4) || (new_adc_rx5_8 != adc_rx5_8) || (new_adc_rx9_16 != adc_rx9_16)) + m_sendState = 4; + else + m_sendState = 0; + break; + + case 4: + // setup data for ADC c&c's + adc_rx1_4 = new_adc_rx1_4; + adc_rx5_8 = new_adc_rx5_8; + adc_rx9_16 = new_adc_rx9_16; + + de->io.control_out[0] = 0x1C; // 0 0 0 1 1 1 0 x + de->io.control_out[1] = adc_rx1_4; // C1 + de->io.control_out[2] = adc_rx5_8; // C2 + de->io.control_out[3] = 0x0; // C3, ADC Input Attenuator Tx (0-31dB) [4:0] + de->io.control_out[4] = adc_rx9_16; // C4 + + // fill the out buffer with the C&C bytes + for (int i = 0; i < 5; i++) + de->io.output_buffer[i+3] = de->io.control_out[i]; + + //DATA_PROCESSOR_DEBUG << "rx_adc_change rcvr: " << hex << new_adc_rx1_4 << "," << hex << new_adc_rx5_8 << "," << hex << new_adc_rx9_16; + // round finished m_sendState = 0; break; + } de->io.mutex.unlock(); diff --git a/Source/src/DataEngine/cusdr_receiver.cpp b/Source/src/DataEngine/cusdr_receiver.cpp index cdee767..a511ebc 100644 --- a/Source/src/DataEngine/cusdr_receiver.cpp +++ b/Source/src/DataEngine/cusdr_receiver.cpp @@ -119,6 +119,12 @@ void Receiver::setupConnections() { this, SLOT(setHamBand(QObject *, int, bool, HamBand))); + CHECKED_CONNECT( + set, + SIGNAL(adcModeChanged(QObject *, int, ADCMode)), + this, + SLOT(setADCMode(QObject *, int, ADCMode))); + CHECKED_CONNECT( set, SIGNAL(agcModeChanged(QObject *, int, AGCMode, bool)), @@ -220,6 +226,7 @@ void Receiver::setReceiverData(TReceiver data) { m_hamBand = m_receiverData.hamBand; m_dspMode = m_receiverData.dspMode; m_dspModeList = m_receiverData.dspModeList; + m_adcMode = m_receiverData.adcMode; m_agcMode = m_receiverData.agcMode; m_agcGain = m_receiverData.acgGain; m_agcFixedGain_dB = m_receiverData.agcFixedGain_dB; @@ -478,6 +485,18 @@ void Receiver::setDspMode(QObject *sender, int rx, DSPMode mode) { //emit messageEvent(msg.arg(rx).arg(set->getDSPModeString(m_dspMode))); } +void Receiver::setADCMode(QObject *sender, int rx, ADCMode mode) { + + Q_UNUSED(sender) + + if (m_receiver != rx) return; + if (m_adcMode == mode) return; + + m_adcMode = mode; + + //RECEIVER_DEBUG << "RRK setADCMode = " << m_adcMode; +} + void Receiver::setAGCMode(QObject *sender, int rx, AGCMode mode, bool hang) { Q_UNUSED(sender) diff --git a/Source/src/DataEngine/cusdr_receiver.h b/Source/src/DataEngine/cusdr_receiver.h index d5c62bd..486329e 100644 --- a/Source/src/DataEngine/cusdr_receiver.h +++ b/Source/src/DataEngine/cusdr_receiver.h @@ -62,6 +62,7 @@ public: QSDR::_DSPCore getDSPCoreMode() const; QHostAddress getPeerAddress() { return m_peerAddress; } HamBand getHamBand() { return m_hamBand; } + ADCMode getADCMode() { return m_adcMode; } AGCMode getAGCMode() { return m_agcMode; } QList getMercuryAttenuators() { return m_mercuryAttenuators; } QList getDSPModeList() { return m_dspModeList; } @@ -116,6 +117,7 @@ public slots: void setSampleRate(int value); void setHamBand(QObject* sender, int rx, bool byBtn, HamBand band); void setDspMode(QObject* sender, int rx, DSPMode mode); + void setADCMode(QObject* sender, int rx, ADCMode mode); void setAGCMode(QObject* sender, int rx, AGCMode mode, bool hang); void setAGCGain(QObject* sender, int rx, int value); void setAudioVolume(QObject* sender, int rx, float value); @@ -171,6 +173,7 @@ private: HamBand m_hamBand; DSPMode m_dspMode; AGCMode m_agcMode; + ADCMode m_adcMode; TDefaultFilterMode m_filterMode; QList m_lastCtrFrequencyList; diff --git a/Source/src/GL/cusdr_oglReceiverPanel.cpp b/Source/src/GL/cusdr_oglReceiverPanel.cpp index 499ec3f..b51961c 100644 --- a/Source/src/GL/cusdr_oglReceiverPanel.cpp +++ b/Source/src/GL/cusdr_oglReceiverPanel.cpp @@ -163,6 +163,9 @@ QGLReceiverPanel::QGLReceiverPanel(QWidget *parent, int rx) m_mouseWheelFreqStep = m_rxDataList.at(m_receiver).mouseWheelFreqStep; + m_adcMode = m_rxDataList.at(m_receiver).adcMode; + m_adcModeString = set->getADCModeString(m_receiver); + m_agcMode = m_rxDataList.at(m_receiver).agcMode; m_agcModeString = set->getAGCModeString(m_receiver); m_agcFixedGain = m_rxDataList.at(m_receiver).agcFixedGain_dB; @@ -545,6 +548,12 @@ void QGLReceiverPanel::setupConnections() { this, SLOT(setAGCLinesStatus(QObject *, bool, int))); + CHECKED_CONNECT( + set, + SIGNAL(adcModeChanged(QObject *, int, ADCMode)), + this, + SLOT(setADCMode(QObject *, int, ADCMode))); + CHECKED_CONNECT( set, SIGNAL(dspModeChanged(QObject *, int, DSPMode)), @@ -1976,6 +1985,7 @@ void QGLReceiverPanel::drawReceiverInfo() { int alpha; QColor colFlt; + QColor colADC; QColor colAGC; QColor colDSP; QRect rect; @@ -1986,6 +1996,7 @@ void QGLReceiverPanel::drawReceiverInfo() { colDSP = QColor(1, 190, 180, 180); colFlt = QColor(200, 190, 50, 180); + colADC = QColor(215, 130, 50, 180); if (m_showAGCLines) colAGC = QColor(255, 170, 90, 180); else @@ -1999,12 +2010,14 @@ void QGLReceiverPanel::drawReceiverInfo() { colFlt = QColor(110, 100, 1, 180); colDSP = QColor(1, 100, 90, 180); colAGC = QColor(165, 80, 1); + colADC = QColor(165, 80, 1); } } else { alpha = 100; colFlt = m_darkColor; + colADC = m_darkColor; colAGC = m_darkColor; colDSP = m_darkColor; } @@ -2044,6 +2057,17 @@ void QGLReceiverPanel::drawReceiverInfo() { qglColor(QColor(0, 0, 0)); m_oglTextSmall->renderText(x1+1, y1-2, 3.0f, str); + // ADC mode + x1 += m_fonts.smallFontMetrics->width(str) + 4; + + str = "%1"; + str = str.arg(m_adcModeString); + + rect = QRect(x1, y1, m_fonts.smallFontMetrics->width(str) + 4, m_fonts.fontHeightSmallFont + 2); + drawGLRect(rect, colADC, 2.0f); + qglColor(QColor(0, 0, 0)); + m_oglTextSmall->renderText(x1+1, y1-2, 3.0f, str); + // VFO frequency TFrequency f; f.freqMHz = (int)(m_vfoFrequency / 1000); @@ -4474,6 +4498,18 @@ void QGLReceiverPanel::setAGCLineFixedLevel(QObject *sender, int rx, qreal value //GRAPHICS_DEBUG << "m_agcFixedGain = " << m_agcFixedGain; } +void QGLReceiverPanel::setADCMode(QObject *sender, int rx, ADCMode mode) { + + Q_UNUSED(sender) + + if (m_receiver != rx) return; + + m_adcMode = mode; + m_adcModeString = set->getADCModeString(m_receiver); + + update(); +} + void QGLReceiverPanel::setAGCMode(QObject *sender, int rx, AGCMode mode, bool hangEnabled) { Q_UNUSED(sender) diff --git a/Source/src/GL/cusdr_oglReceiverPanel.h b/Source/src/GL/cusdr_oglReceiverPanel.h index f234ffa..ad6892a 100644 --- a/Source/src/GL/cusdr_oglReceiverPanel.h +++ b/Source/src/GL/cusdr_oglReceiverPanel.h @@ -91,6 +91,7 @@ private: DualModeAverager* averager; RadioPopupWidget* radioPopup; + ADCMode m_adcMode; AGCMode m_agcMode; DSPMode m_dspMode; PanGraphicsMode m_panMode; @@ -102,6 +103,7 @@ private: QTime peakHoldTimer; QString m_bandText; + QString m_adcModeString; QString m_agcModeString; QString m_dspModeString; QString m_filterWidthString; @@ -416,6 +418,7 @@ private slots: void updateADCStatus(); void setFramesPerSecond(QObject* sender, int rx, int value); void setDSPMode(QObject* sender, int rx, DSPMode mode); + void setADCMode(QObject* sender, int rx, ADCMode mode); void setAGCMode(QObject* sender, int rx, AGCMode mode, bool hangEnabled); void setAGCLineLevels(QObject* sender, int rx, qreal thresh, qreal hang); void setAGCLineFixedLevel(QObject* sender, int rx, qreal value); diff --git a/Source/src/cusdr_hamDatabase.cpp b/Source/src/cusdr_hamDatabase.cpp index d1c23ff..5c022e7 100644 --- a/Source/src/cusdr_hamDatabase.cpp +++ b/Source/src/cusdr_hamDatabase.cpp @@ -22,4 +22,4 @@ * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ \ No newline at end of file + */ diff --git a/Source/src/cusdr_hamDatabase.h b/Source/src/cusdr_hamDatabase.h index 7573842..0c74771 100644 --- a/Source/src/cusdr_hamDatabase.h +++ b/Source/src/cusdr_hamDatabase.h @@ -85,6 +85,13 @@ typedef enum _dspMode { } DSPMode; +typedef enum _adcMode { + + adc1, + adc2 + +} ADCMode; + typedef enum _agcMode { agcOFF, @@ -115,6 +122,7 @@ typedef enum _defaultFilterMode { Q_DECLARE_METATYPE (HamBand) Q_DECLARE_METATYPE (DSPMode) +Q_DECLARE_METATYPE (ADCMode) Q_DECLARE_METATYPE (AGCMode) Q_DECLARE_METATYPE (TDefaultFilterMode) diff --git a/Source/src/cusdr_mainWidget.cpp b/Source/src/cusdr_mainWidget.cpp index d36f614..f6f887d 100644 --- a/Source/src/cusdr_mainWidget.cpp +++ b/Source/src/cusdr_mainWidget.cpp @@ -275,6 +275,12 @@ void MainWindow::setupConnections() { this, SLOT(setTxAllowed(QObject *, bool))); + CHECKED_CONNECT( + set, + SIGNAL(adcModeChanged(QObject *, int, ADCMode)), + this, + SLOT(setADCMode(QObject *, int, ADCMode))); + CHECKED_CONNECT( set, SIGNAL(agcModeChanged(QObject *, int, AGCMode, bool)), @@ -414,6 +420,7 @@ void MainWindow::setup() { setAttenuatorButton(); m_agcMode = set->getAGCMode(0); + m_adcMode = set->getADCMode(0); // initialize all Signal/Slot connections setupConnections(); @@ -1784,6 +1791,14 @@ void MainWindow::setTxAllowed(QObject *sender, bool value) { } } +void MainWindow::setADCMode(QObject *sender, int rx, ADCMode mode) { + + Q_UNUSED(sender) + Q_UNUSED(rx) + + m_adcMode = mode; +} + void MainWindow::setAGCMode(QObject *sender, int rx, AGCMode mode, bool hang) { Q_UNUSED(sender) diff --git a/Source/src/cusdr_mainWidget.h b/Source/src/cusdr_mainWidget.h index b9182d1..b4e3dd7 100644 --- a/Source/src/cusdr_mainWidget.h +++ b/Source/src/cusdr_mainWidget.h @@ -200,6 +200,7 @@ private: QSlider* m_volumeSlider; QSlider* m_agcGainSlider; + ADCMode m_adcMode; AGCMode m_agcMode; DataEngine* m_dataEngine; @@ -318,6 +319,7 @@ private slots: void getNetworkInterfaces(); void setMainVolume(int value); //void setHamBand(QObject *sender, int rx, bool byButton, HamBand band); + void setADCMode(QObject *sender, int rx, ADCMode mode); void setAGCMode(QObject *sender, int rx, AGCMode mode, bool hang); void setAGCGain(int value); //void setAGCGain(QObject *sender, int rx, int value); diff --git a/Source/src/cusdr_radioPopupWidget.cpp b/Source/src/cusdr_radioPopupWidget.cpp index 3fb096f..23cedc3 100644 --- a/Source/src/cusdr_radioPopupWidget.cpp +++ b/Source/src/cusdr_radioPopupWidget.cpp @@ -84,6 +84,7 @@ RadioPopupWidget::RadioPopupWidget(QWidget *parent, int rx) m_hamBand = m_receiverDataList.at(m_receiver).hamBand; //m_dspMode = m_receiverDataList.at(m_receiver).dspMode; m_dspModeList = m_receiverDataList.at(m_receiver).dspModeList; + m_adcMode = m_receiverDataList.at(m_receiver).adcMode; m_agcMode = m_receiverDataList.at(m_receiver).agcMode; m_filterMode = m_receiverDataList.at(m_receiver).defaultFilterMode; m_filterLo = m_receiverDataList.at(m_receiver).filterLo; @@ -119,6 +120,7 @@ RadioPopupWidget::RadioPopupWidget(QWidget *parent, int rx) createOptionsBtnGroup(); createFFTOptionsGroup(); createBandBtnGroup(); + createAdcBtnGroup(); createModeBtnGroup(); createAgcBtnGroup(); createFilterBtnWidgetA(); @@ -156,6 +158,8 @@ RadioPopupWidget::RadioPopupWidget(QWidget *parent, int rx) mainLayout->addSpacing(16); mainLayout->addLayout(bandVBox); mainLayout->addSpacing(8); + mainLayout->addLayout(adcVBox); + mainLayout->addSpacing(8); mainLayout->addLayout(modeVBox); mainLayout->addSpacing(8); mainLayout->addWidget(m_filterStackedWidget); @@ -170,6 +174,7 @@ RadioPopupWidget::RadioPopupWidget(QWidget *parent, int rx) bandBtnList.at(m_hamBand)->update(); dspModeChanged(this, 0, m_dspModeList.at(m_hamBand)); + adcModeChanged(this, m_receiver, m_adcMode); agcModeChanged(this, 0, m_agcMode, false); filterChanged(this, 0, m_filterLo, m_filterHi); @@ -268,6 +273,12 @@ void RadioPopupWidget::setupConnections() { this, SLOT(dspModeChanged(QObject *, int, DSPMode))); + CHECKED_CONNECT( + set, + SIGNAL(adcModeChanged(QObject *, int, ADCMode)), + this, + SLOT(adcModeChanged(QObject *, int, ADCMode))); + CHECKED_CONNECT( set, SIGNAL(agcModeChanged(QObject *, int, AGCMode, bool)), @@ -739,6 +750,34 @@ void RadioPopupWidget::createBandBtnGroup() { } +void RadioPopupWidget::createAdcBtnGroup() { + adc1Btn = new AeroButton("ADC1", this); + adcModeBtnList.append(adc1Btn); + CHECKED_CONNECT(adc1Btn, SIGNAL(clicked()), this, SLOT(adcModeChangedByBtn())); + + adc2Btn = new AeroButton("ADC2", this); + adcModeBtnList.append(adc2Btn); + CHECKED_CONNECT(adc2Btn, SIGNAL(clicked()), this, SLOT(adcModeChangedByBtn())); + + foreach (AeroButton *btn, adcModeBtnList) { + + btn->setRoundness(0); + btn->setFixedHeight(btn_height); + btn->setStyleSheet(set->getMiniButtonStyle()); + btn->update(); + } + + QHBoxLayout *hbox1 = new QHBoxLayout(); + hbox1->setContentsMargins(0, 0, 0, 0); + hbox1->setSpacing(0); + hbox1->addWidget(adc1Btn); + hbox1->addWidget(adc2Btn); + + adcVBox = new QVBoxLayout; + adcVBox->setSpacing(1); + adcVBox->addLayout(hbox1); +} + void RadioPopupWidget::createModeBtnGroup() { lsbBtn = new AeroButton("LSB", this); @@ -2249,6 +2288,41 @@ void RadioPopupWidget::filterChanged(QObject *sender, int rx, qreal low, qreal h } } +void RadioPopupWidget::adcModeChangedByBtn() { + + AeroButton *button = qobject_cast(sender()); + int btn = adcModeBtnList.indexOf(button); + + foreach(AeroButton *btn, adcModeBtnList) { + + btn->setBtnState(AeroButton::OFF); + btn->update(); + } + + set->setADCMode(this, m_receiver, (ADCMode) btn); + m_adcMode = (ADCMode) btn; + + button->setBtnState(AeroButton::ON); + button->update(); +} + +void RadioPopupWidget::adcModeChanged(QObject *sender, int rx, ADCMode mode) { + + Q_UNUSED(sender) + //RADIOPOPUP_DEBUG << "RadioPopupWidget::adcModeChanged rx: " << rx; + if (m_receiver != rx) return; + m_adcMode = mode; + + foreach(AeroButton *btn, adcModeBtnList) { + + btn->setBtnState(AeroButton::OFF); + btn->update(); + } + + adcModeBtnList.at(mode)->setBtnState(AeroButton::ON); + adcModeBtnList.at(mode)->update(); +} + void RadioPopupWidget::agcModeChangedByBtn() { AeroButton *button = qobject_cast(sender()); diff --git a/Source/src/cusdr_radioPopupWidget.h b/Source/src/cusdr_radioPopupWidget.h index 8b26e0a..ada9016 100644 --- a/Source/src/cusdr_radioPopupWidget.h +++ b/Source/src/cusdr_radioPopupWidget.h @@ -95,6 +95,7 @@ private: QVBoxLayout* optionsVBox; QVBoxLayout* fftOptionsVBox; QVBoxLayout* bandVBox; + QVBoxLayout* adcVBox; QVBoxLayout* modeVBox; QVBoxLayout* agcVBox; //QVBoxLayout* mercuryBtnVBox(); @@ -181,6 +182,11 @@ private: QList dspModeBtnList; + AeroButton* adc1Btn; + AeroButton* adc2Btn; + + QList adcModeBtnList; + AeroButton* showAGCLines; AeroButton* agcOFF; AeroButton* agcLONG; @@ -240,6 +246,7 @@ private: HamBand m_hamBand; //DSPMode m_dspMode; + ADCMode m_adcMode; AGCMode m_agcMode; TDefaultFilterMode m_filterMode; @@ -288,6 +295,7 @@ private slots: void createOptionsBtnGroup(); void createFFTOptionsGroup(); void createBandBtnGroup(); + void createAdcBtnGroup(); void createModeBtnGroup(); void createAgcBtnGroup(); void createFilterBtnWidgetA(); @@ -314,6 +322,8 @@ private slots: void bandChanged(QObject *sender, int rx, bool byButton, HamBand band); void dspModeChangedByBtn(); void dspModeChanged(QObject *sender, int rx, DSPMode mode); + void adcModeChangedByBtn(); + void adcModeChanged(QObject *sender, int rx, ADCMode mode); void agcModeChangedByBtn(); void agcModeChanged(QObject *sender, int rx, AGCMode mode, bool hang); void agcShowLinesChanged(); diff --git a/Source/src/cusdr_radioWidget.h b/Source/src/cusdr_radioWidget.h index fc65e0c..afa751a 100644 --- a/Source/src/cusdr_radioWidget.h +++ b/Source/src/cusdr_radioWidget.h @@ -112,6 +112,10 @@ private: AeroButton *samBtn; AeroButton *drmBtn; + QList adcModeBtnList; + AeroButton *adc1Btn; + AeroButton *adc2Btn; + AeroButton *filter1kBtnA; AeroButton *filter1k8BtnA; AeroButton *filter2k1BtnA; @@ -162,6 +166,7 @@ private: QList m_dspModeList; HamBand m_hamBand; //DSPMode m_dspMode; + ADCMode m_adcMode; AGCMode m_agcMode; TDefaultFilterMode m_filterMode; diff --git a/Source/src/cusdr_settings.cpp b/Source/src/cusdr_settings.cpp index 5b0c82d..e45a1d2 100644 --- a/Source/src/cusdr_settings.cpp +++ b/Source/src/cusdr_settings.cpp @@ -58,6 +58,7 @@ Settings::Settings(QObject *parent) qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); + qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); @@ -813,6 +814,14 @@ int Settings::loadSettings() { else m_receiverDataList[i].hangEnabled = true; + cstr = m_rxStringList.at(i); + cstr.append("/adcMode"); + str = settings->value(cstr, "ADC1").toString(); + if (str == "ADC1") + m_receiverDataList[i].adcMode = adc1; + else + m_receiverDataList[i].adcMode = adc2; + cstr = m_rxStringList.at(i); cstr.append("/panMode"); @@ -1873,6 +1882,14 @@ int Settings::saveSettings() { else if (m_receiverDataList[i].agcMode == agcFAST) settings->setValue(str, "FAST"); + str = m_rxStringList.at(i); + str.append("/adcMode"); + + if (m_receiverDataList[i].adcMode == adc1) + settings->setValue(str, "ADC1"); + else if (m_receiverDataList[i].adcMode == adc2) + settings->setValue(str, "ADC2"); + str = m_rxStringList.at(i); str.append("/panMode"); @@ -3627,6 +3644,23 @@ AGCMode Settings::getAGCMode(int rx) { return m_receiverDataList.at(rx).agcMode; } +ADCMode Settings::getADCMode(int rx) { + + return m_receiverDataList.at(rx).adcMode; +} + +QString Settings::getADCModeString(int rx) { + + ADCMode mode = getADCMode(rx); + QString str; + if (mode == adc1) + str = "ADC1"; + else + str = "ADC2"; + + return str; +} + QString Settings::getAGCModeString(int rx) { AGCMode mode = getAGCMode(rx); @@ -3660,6 +3694,16 @@ QString Settings::getAGCModeString(int rx) { return str; } +void Settings::setADCMode(QObject *sender, int rx, ADCMode mode) { + + QMutexLocker locker(&settingsMutex); + + if (m_receiverDataList[rx].adcMode == mode) return; + m_receiverDataList[rx].adcMode = mode; + + emit adcModeChanged(sender, rx, mode); +} + void Settings::setAGCMode(QObject *sender, int rx, AGCMode mode) { QMutexLocker locker(&settingsMutex); diff --git a/Source/src/cusdr_settings.h b/Source/src/cusdr_settings.h index 527310e..3bc2809 100644 --- a/Source/src/cusdr_settings.h +++ b/Source/src/cusdr_settings.h @@ -446,6 +446,7 @@ typedef struct _hpsdrParameter { //int hpsdr_122_88MhzSource; int mic_source; int rxClass; + int rx_adc_change; int rx_freq_change; int tx_freq_change; @@ -506,6 +507,7 @@ typedef struct _receiver { HamBand hamBand; HamBand lastHamBand; DSPMode dspMode; + ADCMode adcMode; AGCMode agcMode; TDefaultFilterMode defaultFilterMode; PanGraphicsMode panMode; @@ -846,6 +848,7 @@ signals: void hamBandChanged(QObject *sender, int rx, bool byButton, HamBand band); void dspModeChanged(QObject *sender, int rx, DSPMode mode); + void adcModeChanged(QObject *sender, int rx, ADCMode mode); void agcModeChanged(QObject *sender, int rx, AGCMode mode, bool hangEnabled); void agcHangEnabledChanged(QObject *sender, int rx, bool hang); void agcGainChanged(QObject *sender, int rx, int value); @@ -1077,7 +1080,9 @@ public: qreal getMainVolume(int rx); qreal getMouseWheelFreqStep(int rx);// { return m_mouseWheelFreqStep; } + ADCMode getADCMode(int rx); AGCMode getAGCMode(int rx); + QString getADCModeString(int rx); QString getAGCModeString(int rx); int getAGCGain(int rx); qreal getAGCMaximumGain_dB(int rx); @@ -1268,6 +1273,7 @@ public slots: void setHamBand(QObject* sender, int rx, bool byButton, HamBand band); void setDSPMode(QObject* sender, int rx, DSPMode mode); + void setADCMode(QObject* sender, int rx, ADCMode mode); void setAGCMode(QObject* sender, int rx, AGCMode mode); void setAGCGain(QObject* sender, int rx, int value); void setAGCMaximumGain_dB(QObject *sender, int rx, qreal value);