mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-30 12:30:20 -04:00 
			
		
		
		
	Removed main LimeRFE support
This commit is contained in:
		
							parent
							
								
									c057c86ef9
								
							
						
					
					
						commit
						d0c2b24694
					
				| @ -31,19 +31,6 @@ else(FFTW3F_FOUND) | |||||||
|     add_definitions(-DUSE_KISSFFT) |     add_definitions(-DUSE_KISSFFT) | ||||||
| endif(FFTW3F_FOUND) | endif(FFTW3F_FOUND) | ||||||
| 
 | 
 | ||||||
| if (LIMESUITE_FOUND) |  | ||||||
|     set(sdrbase_SOURCES |  | ||||||
|         ${sdrbase_SOURCES} |  | ||||||
|         limerfe/limerfecontroller.cpp |  | ||||||
|     ) |  | ||||||
|     set(sdrbase_HEADERS |  | ||||||
|         ${sdrbase_HEADERS} |  | ||||||
|         limerfe/limerfecontroller.h |  | ||||||
|     ) |  | ||||||
|     include_directories(${LIMESUITE_INCLUDE_DIR}) |  | ||||||
|     set(sdrbase_LIMERFE_LIB ${LIMESUITE_LIBRARY}) |  | ||||||
| endif (LIMESUITE_FOUND) |  | ||||||
| 
 |  | ||||||
| if (LIBSIGMF_FOUND AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | if (LIBSIGMF_FOUND AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | ||||||
|     set(sdrbase_SOURCES |     set(sdrbase_SOURCES | ||||||
|         ${sdrbase_SOURCES} |         ${sdrbase_SOURCES} | ||||||
| @ -165,8 +152,6 @@ set(sdrbase_SOURCES | |||||||
|     feature/featureutils.cpp |     feature/featureutils.cpp | ||||||
|     feature/featurewebapiutils.cpp |     feature/featurewebapiutils.cpp | ||||||
| 
 | 
 | ||||||
|     limerfe/limerfeusbcalib.cpp |  | ||||||
| 
 |  | ||||||
|     pipes/datafifostore.cpp |     pipes/datafifostore.cpp | ||||||
|     pipes/datapipes.cpp |     pipes/datapipes.cpp | ||||||
|     pipes/datapipesgcworker.cpp |     pipes/datapipesgcworker.cpp | ||||||
| @ -373,8 +358,6 @@ set(sdrbase_HEADERS | |||||||
|     feature/featureutils.h |     feature/featureutils.h | ||||||
|     feature/featurewebapiutils.h |     feature/featurewebapiutils.h | ||||||
| 
 | 
 | ||||||
|     limerfe/limerfeusbcalib.h |  | ||||||
| 
 |  | ||||||
|     pipes/datafifostore.h |     pipes/datafifostore.h | ||||||
|     pipes/datapipes.h |     pipes/datapipes.h | ||||||
|     pipes/datapipesgcworker.h |     pipes/datapipesgcworker.h | ||||||
|  | |||||||
| @ -1,567 +0,0 @@ | |||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| // Copyright (C) 2020 Edouard Griffiths, F4EXB                                   //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is free software; you can redistribute it and/or modify          //
 |  | ||||||
| // it under the terms of the GNU General Public License as published by          //
 |  | ||||||
| // the Free Software Foundation as version 3 of the License, or                  //
 |  | ||||||
| // (at your option) any later version.                                           //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is distributed in the hope that it will be useful,               //
 |  | ||||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 |  | ||||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 |  | ||||||
| // GNU General Public License V3 for more details.                               //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // You should have received a copy of the GNU General Public License             //
 |  | ||||||
| // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 |  | ||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| 
 |  | ||||||
| #include <QDebug> |  | ||||||
| 
 |  | ||||||
| #include "limerfecontroller.h" |  | ||||||
| 
 |  | ||||||
| const std::map<int, std::string> LimeRFEController::m_errorCodesMap = { |  | ||||||
|     { 0, "OK"}, |  | ||||||
|     {-4, "Error synchronizing communication"}, |  | ||||||
|     {-3, "Non-configurable GPIO pin specified. Only pins 4 and 5 are configurable."}, |  | ||||||
|     {-2, "Problem with .ini configuration file"}, |  | ||||||
|     {-1, "Communication error"}, |  | ||||||
|     { 1, "Wrong TX connector - not possible to route TX of the selecrted channel to the specified port"}, |  | ||||||
|     { 2, "Wrong RX connector - not possible to route RX of the selecrted channel to the specified port"}, |  | ||||||
|     { 3, "Mode TXRX not allowed - when the same port is selected for RX and TX, it is not allowed to use mode RX & TX"}, |  | ||||||
|     { 4, "Wrong mode for cellular channel - Cellular FDD bands (1, 2, 3, and 7) are only allowed mode RX & TX, while TDD band 38 is allowed only RX or TX mode"}, |  | ||||||
|     { 5, "Cellular channels must be the same both for RX and TX"}, |  | ||||||
|     { 6, "Requested channel code is wrong"} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| LimeRFEController::LimeRFESettings::LimeRFESettings() |  | ||||||
| { |  | ||||||
|     m_rxChannels = ChannelsWideband; |  | ||||||
|     m_rxWidebandChannel = WidebandLow; |  | ||||||
|     m_rxHAMChannel = HAM_144_146MHz; |  | ||||||
|     m_rxCellularChannel = CellularBand38; |  | ||||||
|     m_rxPort = RxPortJ3; |  | ||||||
|     m_amfmNotch = false; |  | ||||||
|     m_attenuationFactor = 0; |  | ||||||
|     m_txChannels = ChannelsWideband; |  | ||||||
|     m_txWidebandChannel = WidebandLow; |  | ||||||
|     m_txHAMChannel = HAM_144_146MHz; |  | ||||||
|     m_txCellularChannel = CellularBand38; |  | ||||||
|     m_txPort = TxPortJ3; |  | ||||||
|     m_swrEnable = false; |  | ||||||
|     m_swrSource = SWRExternal; |  | ||||||
|     m_txRxDriven = false; |  | ||||||
|     m_rxOn = false; |  | ||||||
|     m_txOn = false; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| LimeRFEController::LimeRFEController() : |  | ||||||
|     m_rfeDevice(nullptr) |  | ||||||
| {} |  | ||||||
| 
 |  | ||||||
| LimeRFEController::~LimeRFEController() |  | ||||||
| { |  | ||||||
|     closeDevice(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int LimeRFEController::openDevice(const std::string& serialDeviceName) |  | ||||||
| { |  | ||||||
|     closeDevice(); |  | ||||||
| 
 |  | ||||||
|     rfe_dev_t *rfeDevice = RFE_Open(serialDeviceName.c_str(), nullptr); |  | ||||||
| 
 |  | ||||||
|     if (rfeDevice != (void *) -1) { |  | ||||||
|         m_rfeDevice = rfeDevice; |  | ||||||
|         return 0; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEController::closeDevice() |  | ||||||
| { |  | ||||||
|     if (m_rfeDevice) |  | ||||||
|     { |  | ||||||
|         RFE_Close(m_rfeDevice); |  | ||||||
|         m_rfeDevice = nullptr; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int LimeRFEController::configure() |  | ||||||
| { |  | ||||||
|     if (!m_rfeDevice) { |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     qDebug() << "LimeRFEController::configure: " |  | ||||||
|         << "attValue: " << (int) m_rfeBoardState.attValue |  | ||||||
|         << "channelIDRX: " << (int) m_rfeBoardState.channelIDRX |  | ||||||
|         << "channelIDTX: " << (int) m_rfeBoardState.channelIDTX |  | ||||||
|         << "mode: " << (int) m_rfeBoardState.mode |  | ||||||
|         << "notchOnOff: " << (int) m_rfeBoardState.notchOnOff |  | ||||||
|         << "selPortRX: " << (int) m_rfeBoardState.selPortRX |  | ||||||
|         << "selPortTX: " << (int) m_rfeBoardState.selPortTX |  | ||||||
|         << "enableSWR: " << (int) m_rfeBoardState.enableSWR |  | ||||||
|         << "sourceSWR: " << (int) m_rfeBoardState.sourceSWR; |  | ||||||
| 
 |  | ||||||
|     int rc = RFE_ConfigureState(m_rfeDevice, m_rfeBoardState); |  | ||||||
| 
 |  | ||||||
|     if (rc != 0) { |  | ||||||
|         qInfo("LimeRFEController::configure: %s", getError(rc).c_str()); |  | ||||||
|     } else { |  | ||||||
|         qDebug() << "LimeRFEController::configure: done"; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return rc; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int LimeRFEController::getState() |  | ||||||
| { |  | ||||||
|     if (!m_rfeDevice) { |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     int rc = RFE_GetState(m_rfeDevice, &m_rfeBoardState); |  | ||||||
| 
 |  | ||||||
|     qDebug() << "LimeRFEController::getState: " |  | ||||||
|         << "attValue: " << (int) m_rfeBoardState.attValue |  | ||||||
|         << "channelIDRX: " << (int) m_rfeBoardState.channelIDRX |  | ||||||
|         << "channelIDTX: " << (int) m_rfeBoardState.channelIDTX |  | ||||||
|         << "mode: " << (int) m_rfeBoardState.mode |  | ||||||
|         << "notchOnOff: " << (int) m_rfeBoardState.notchOnOff |  | ||||||
|         << "selPortRX: " << (int) m_rfeBoardState.selPortRX |  | ||||||
|         << "selPortTX: " << (int) m_rfeBoardState.selPortTX |  | ||||||
|         << "enableSWR: " << (int) m_rfeBoardState.enableSWR |  | ||||||
|         << "sourceSWR: " << (int) m_rfeBoardState.sourceSWR; |  | ||||||
| 
 |  | ||||||
|     if (rc != 0) { |  | ||||||
|         qInfo("LimeRFEController::getState: %s", getError(rc).c_str()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return rc; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| std::string LimeRFEController::getError(int errorCode) |  | ||||||
| { |  | ||||||
|     std::map<int, std::string>::const_iterator it = m_errorCodesMap.find(errorCode); |  | ||||||
| 
 |  | ||||||
|     if (it == m_errorCodesMap.end()) { |  | ||||||
|         return "Unknown error"; |  | ||||||
|     } else { |  | ||||||
|         return it->second; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int LimeRFEController::setRx(LimeRFESettings& settings, bool rxOn) |  | ||||||
| { |  | ||||||
|     if (!m_rfeDevice) { |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     int mode = rxOn && settings.m_txOn ? |  | ||||||
|         RFE_MODE_TXRX : rxOn ? |  | ||||||
|             RFE_MODE_RX : settings.m_txOn ? |  | ||||||
|                 RFE_MODE_TX :  RFE_MODE_NONE; |  | ||||||
| 
 |  | ||||||
|     int rc = RFE_Mode(m_rfeDevice, mode); |  | ||||||
| 
 |  | ||||||
|     if (rc == 0) { |  | ||||||
|         settings.m_rxOn = rxOn; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return rc; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int LimeRFEController::setTx(LimeRFESettings& settings, bool txOn) |  | ||||||
| { |  | ||||||
|     if (!m_rfeDevice) { |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     int mode = txOn && settings.m_rxOn ? |  | ||||||
|         RFE_MODE_TXRX : txOn ? |  | ||||||
|             RFE_MODE_TX : settings.m_rxOn ? |  | ||||||
|                 RFE_MODE_RX :  RFE_MODE_NONE; |  | ||||||
| 
 |  | ||||||
|     int rc = RFE_Mode(m_rfeDevice, mode); |  | ||||||
| 
 |  | ||||||
|     if (rc == 0) { |  | ||||||
|         settings.m_txOn = txOn; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return rc; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int LimeRFEController::getFwdPower(int& powerDB) |  | ||||||
| { |  | ||||||
|     if (!m_rfeDevice) { |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     int power; |  | ||||||
|     int rc = RFE_ReadADC(m_rfeDevice, RFE_ADC1, &power); |  | ||||||
| 
 |  | ||||||
|     if (rc == 0) { |  | ||||||
|         powerDB = power; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return rc; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int LimeRFEController::getRefPower(int& powerDB) |  | ||||||
| { |  | ||||||
|     if (!m_rfeDevice) { |  | ||||||
|         return -1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     int power; |  | ||||||
|     int rc = RFE_ReadADC(m_rfeDevice, RFE_ADC2, &power); |  | ||||||
| 
 |  | ||||||
|     if (rc == 0) { |  | ||||||
|         powerDB = power; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return rc; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEController::settingsToState(const LimeRFESettings& settings) |  | ||||||
| { |  | ||||||
|     if (settings.m_rxChannels == ChannelsCellular) |  | ||||||
|     { |  | ||||||
|         if (settings.m_rxCellularChannel == CellularBand1) |  | ||||||
|         { |  | ||||||
|             m_rfeBoardState.channelIDRX = RFE_CID_CELL_BAND01; |  | ||||||
|             m_rfeBoardState.mode = RFE_MODE_TXRX; |  | ||||||
|         } |  | ||||||
|         else if (settings.m_rxCellularChannel == CellularBand2) |  | ||||||
|         { |  | ||||||
|             m_rfeBoardState.channelIDRX = RFE_CID_CELL_BAND02; |  | ||||||
|             m_rfeBoardState.mode = RFE_MODE_TXRX; |  | ||||||
|         } |  | ||||||
|         else if (settings.m_rxCellularChannel == CellularBand3) |  | ||||||
|         { |  | ||||||
|             m_rfeBoardState.channelIDRX = RFE_CID_CELL_BAND03; |  | ||||||
|             m_rfeBoardState.mode = RFE_MODE_TXRX; |  | ||||||
|         } |  | ||||||
|         else if (settings.m_rxCellularChannel == CellularBand38) |  | ||||||
|         { |  | ||||||
|             m_rfeBoardState.channelIDRX = RFE_CID_CELL_BAND38; |  | ||||||
|         } |  | ||||||
|         else if (settings.m_rxCellularChannel == CellularBand7) |  | ||||||
|         { |  | ||||||
|             m_rfeBoardState.channelIDRX = RFE_CID_CELL_BAND07; |  | ||||||
|             m_rfeBoardState.mode = RFE_MODE_TXRX; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         m_rfeBoardState.selPortRX = RFE_PORT_1; |  | ||||||
|         m_rfeBoardState.selPortTX = RFE_PORT_1; |  | ||||||
|         m_rfeBoardState.channelIDTX = m_rfeBoardState.channelIDRX; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         m_rfeBoardState.mode = settings.m_rxOn && settings.m_txOn ? |  | ||||||
|             RFE_MODE_TXRX : settings.m_rxOn ? |  | ||||||
|                 RFE_MODE_RX : settings.m_txOn ? |  | ||||||
|                     RFE_MODE_TX :  RFE_MODE_NONE; |  | ||||||
| 
 |  | ||||||
|         if (settings.m_rxChannels == ChannelsWideband) |  | ||||||
|         { |  | ||||||
|             if (settings.m_rxWidebandChannel == WidebandLow) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_WB_1000; |  | ||||||
|             } else if (settings.m_rxWidebandChannel == WidebandHigh) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_WB_4000; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         else if (settings.m_rxChannels == ChannelsHAM) |  | ||||||
|         { |  | ||||||
|             if (settings.m_rxHAMChannel == HAM_30M) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_0030; |  | ||||||
|             } else if (settings.m_rxHAMChannel == HAM_50_70MHz) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_0070; |  | ||||||
|             } else if (settings.m_rxHAMChannel == HAM_144_146MHz) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_0145; |  | ||||||
|             } else if (settings.m_rxHAMChannel == HAM_220_225MHz) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_0220; |  | ||||||
|             } else if (settings.m_rxHAMChannel == HAM_430_440MHz) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_0435; |  | ||||||
|             } else if (settings.m_rxHAMChannel == HAM_902_928MHz) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_0920; |  | ||||||
|             } else if (settings.m_rxHAMChannel == HAM_1240_1325MHz) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_1280; |  | ||||||
|             } else if (settings.m_rxHAMChannel == HAM_2300_2450MHz) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_2400; |  | ||||||
|             } else if (settings.m_rxHAMChannel == HAM_3300_3500MHz) { |  | ||||||
|                 m_rfeBoardState.channelIDRX = RFE_CID_HAM_3500; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (settings.m_rxPort == RxPortJ3) { |  | ||||||
|             m_rfeBoardState.selPortRX = RFE_PORT_1; |  | ||||||
|         } else if (settings.m_rxPort == RxPortJ5) { |  | ||||||
|             m_rfeBoardState.selPortRX = RFE_PORT_3; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (settings.m_txRxDriven) |  | ||||||
|         { |  | ||||||
|             m_rfeBoardState.channelIDTX = m_rfeBoardState.channelIDRX; |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             if (settings.m_txChannels == ChannelsWideband) |  | ||||||
|             { |  | ||||||
|                 if (settings.m_txWidebandChannel == WidebandLow) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_WB_1000; |  | ||||||
|                 } else if (settings.m_txWidebandChannel == WidebandHigh) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_WB_4000; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             else if (settings.m_txChannels == ChannelsHAM) |  | ||||||
|             { |  | ||||||
|                 if (settings.m_txHAMChannel == HAM_30M) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_0030; |  | ||||||
|                 } else if (settings.m_txHAMChannel == HAM_50_70MHz) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_0070; |  | ||||||
|                 } else if (settings.m_txHAMChannel == HAM_144_146MHz) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_0145; |  | ||||||
|                 } else if (settings.m_txHAMChannel == HAM_220_225MHz) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_0220; |  | ||||||
|                 } else if (settings.m_txHAMChannel == HAM_430_440MHz) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_0435; |  | ||||||
|                 } else if (settings.m_txHAMChannel == HAM_902_928MHz) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_0920; |  | ||||||
|                 } else if (settings.m_txHAMChannel == HAM_1240_1325MHz) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_1280; |  | ||||||
|                 } else if (settings.m_txHAMChannel == HAM_2300_2450MHz) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_2400; |  | ||||||
|                 } else if (settings.m_txHAMChannel == HAM_3300_3500MHz) { |  | ||||||
|                     m_rfeBoardState.channelIDTX = RFE_CID_HAM_3500; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         if (settings.m_txPort == TxPortJ3) { |  | ||||||
|             m_rfeBoardState.selPortTX = RFE_PORT_1; |  | ||||||
|         } else if (settings.m_txPort == TxPortJ4) { |  | ||||||
|             m_rfeBoardState.selPortTX = RFE_PORT_2; |  | ||||||
|         } else if (settings.m_txPort == TxPortJ5) { |  | ||||||
|             m_rfeBoardState.selPortTX = RFE_PORT_3; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     m_rfeBoardState.attValue = settings.m_attenuationFactor > 7 ? 7 : settings.m_attenuationFactor; |  | ||||||
|     m_rfeBoardState.notchOnOff = settings.m_amfmNotch; |  | ||||||
|     m_rfeBoardState.enableSWR = settings.m_swrEnable ? RFE_SWR_ENABLE : RFE_SWR_DISABLE; |  | ||||||
| 
 |  | ||||||
|     if (settings.m_swrSource == SWRExternal) { |  | ||||||
|         m_rfeBoardState.sourceSWR = RFE_SWR_SRC_EXT; |  | ||||||
|     } else if (settings.m_swrSource == SWRCellular) { |  | ||||||
|         m_rfeBoardState.sourceSWR = RFE_SWR_SRC_CELL; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEController::stateToSettings(LimeRFESettings& settings) |  | ||||||
| { |  | ||||||
|     if (m_rfeBoardState.channelIDRX == RFE_CID_CELL_BAND01) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsCellular; |  | ||||||
|         settings.m_rxCellularChannel = CellularBand1; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_CELL_BAND02) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsCellular; |  | ||||||
|         settings.m_rxCellularChannel = CellularBand2; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_CELL_BAND03) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsCellular; |  | ||||||
|         settings.m_rxCellularChannel = CellularBand3; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_CELL_BAND07) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsCellular; |  | ||||||
|         settings.m_rxCellularChannel = CellularBand7; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_CELL_BAND38) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsCellular; |  | ||||||
|         settings.m_rxCellularChannel = CellularBand38; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_WB_1000) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsWideband; |  | ||||||
|         settings.m_rxWidebandChannel = WidebandLow; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_WB_4000) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsWideband; |  | ||||||
|         settings.m_rxWidebandChannel = WidebandHigh; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_0030) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_30M; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_0070) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_50_70MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_0145) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_144_146MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_0220) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_220_225MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_0435) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_430_440MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_0920) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_902_928MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_1280) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_1240_1325MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_2400) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_2300_2450MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDRX == RFE_CID_HAM_3500) |  | ||||||
|     { |  | ||||||
|         settings.m_rxChannels = ChannelsHAM; |  | ||||||
|         settings.m_rxHAMChannel = HAM_3300_3500MHz; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (m_rfeBoardState.selPortRX == RFE_PORT_1) { |  | ||||||
|         settings.m_rxPort = RxPortJ3; |  | ||||||
|     } else if (m_rfeBoardState.selPortRX == RFE_PORT_3) { |  | ||||||
|         settings.m_rxPort = RxPortJ5; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (m_rfeBoardState.channelIDTX == RFE_CID_CELL_BAND01) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsCellular; |  | ||||||
|         settings.m_txCellularChannel = CellularBand1; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_CELL_BAND02) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsCellular; |  | ||||||
|         settings.m_txCellularChannel = CellularBand2; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_CELL_BAND03) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsCellular; |  | ||||||
|         settings.m_txCellularChannel = CellularBand3; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_CELL_BAND07) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsCellular; |  | ||||||
|         settings.m_txCellularChannel = CellularBand7; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_CELL_BAND38) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsCellular; |  | ||||||
|         settings.m_txCellularChannel = CellularBand38; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_WB_1000) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsWideband; |  | ||||||
|         settings.m_txWidebandChannel = WidebandLow; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_WB_4000) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsWideband; |  | ||||||
|         settings.m_txWidebandChannel = WidebandHigh; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_0030) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_30M; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_0070) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_50_70MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_0145) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_144_146MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_0220) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_220_225MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_0435) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_430_440MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_0920) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_902_928MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_1280) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_1240_1325MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_2400) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_2300_2450MHz; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.channelIDTX == RFE_CID_HAM_3500) |  | ||||||
|     { |  | ||||||
|         settings.m_txChannels = ChannelsHAM; |  | ||||||
|         settings.m_txHAMChannel = HAM_3300_3500MHz; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (m_rfeBoardState.selPortTX == RFE_PORT_1) { |  | ||||||
|         settings.m_txPort = TxPortJ3; |  | ||||||
|     } else if (m_rfeBoardState.selPortTX == RFE_PORT_2) { |  | ||||||
|         settings.m_txPort = TxPortJ4; |  | ||||||
|     } else if (m_rfeBoardState.selPortTX == RFE_PORT_3) { |  | ||||||
|         settings.m_txPort = TxPortJ5; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     settings.m_attenuationFactor = m_rfeBoardState.attValue; |  | ||||||
|     settings.m_amfmNotch =  m_rfeBoardState.notchOnOff == RFE_NOTCH_ON; |  | ||||||
| 
 |  | ||||||
|     if (m_rfeBoardState.mode == RFE_MODE_RX) |  | ||||||
|     { |  | ||||||
|         settings.m_rxOn = true; |  | ||||||
|         settings.m_txOn = false; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.mode == RFE_MODE_TX) |  | ||||||
|     { |  | ||||||
|         settings.m_rxOn = false; |  | ||||||
|         settings.m_txOn = true; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.mode == RFE_MODE_NONE) |  | ||||||
|     { |  | ||||||
|         settings.m_rxOn = false; |  | ||||||
|         settings.m_txOn = false; |  | ||||||
|     } |  | ||||||
|     else if (m_rfeBoardState.mode == RFE_MODE_TXRX) |  | ||||||
|     { |  | ||||||
|         settings.m_rxOn = true; |  | ||||||
|         settings.m_txOn = true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     settings.m_swrEnable = m_rfeBoardState.enableSWR == RFE_SWR_ENABLE; |  | ||||||
|     settings.m_swrSource = m_rfeBoardState.sourceSWR == RFE_SWR_SRC_CELL ? SWRCellular : SWRExternal; |  | ||||||
| } |  | ||||||
| @ -1,130 +0,0 @@ | |||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| // Copyright (C) 2020 Edouard Griffiths, F4EXB                                   //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is free software; you can redistribute it and/or modify          //
 |  | ||||||
| // it under the terms of the GNU General Public License as published by          //
 |  | ||||||
| // the Free Software Foundation as version 3 of the License, or                  //
 |  | ||||||
| // (at your option) any later version.                                           //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is distributed in the hope that it will be useful,               //
 |  | ||||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 |  | ||||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 |  | ||||||
| // GNU General Public License V3 for more details.                               //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // You should have received a copy of the GNU General Public License             //
 |  | ||||||
| // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 |  | ||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| 
 |  | ||||||
| #ifndef SDRBASE_LIMERFE_LIMERFECONTROLLER_H_ |  | ||||||
| #define SDRBASE_LIMERFE_LIMERFECONTROLLER_H_ |  | ||||||
| 
 |  | ||||||
| #include <string> |  | ||||||
| #include <map> |  | ||||||
| #include "lime/limeRFE.h" |  | ||||||
| #include "export.h" |  | ||||||
| 
 |  | ||||||
| class SDRBASE_API LimeRFEController |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     enum ChannelGroups |  | ||||||
|     { |  | ||||||
|         ChannelsWideband, |  | ||||||
|         ChannelsHAM, |  | ||||||
|         ChannelsCellular |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     enum WidebandChannel |  | ||||||
|     { |  | ||||||
|         WidebandLow, //!< 1 - 1000 MHz
 |  | ||||||
|         WidebandHigh //!< 1000 - 4000 MHz
 |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     enum HAMChannel |  | ||||||
|     { |  | ||||||
|         HAM_30M, |  | ||||||
|         HAM_50_70MHz, |  | ||||||
|         HAM_144_146MHz, |  | ||||||
|         HAM_220_225MHz, |  | ||||||
|         HAM_430_440MHz, |  | ||||||
|         HAM_902_928MHz, |  | ||||||
|         HAM_1240_1325MHz, |  | ||||||
|         HAM_2300_2450MHz, |  | ||||||
|         HAM_3300_3500MHz |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     enum CellularChannel |  | ||||||
|     { |  | ||||||
|         CellularBand1, |  | ||||||
|         CellularBand2, |  | ||||||
|         CellularBand3, |  | ||||||
|         CellularBand7, |  | ||||||
|         CellularBand38 |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     enum RxPort |  | ||||||
|     { |  | ||||||
|         RxPortJ3, //!< Rx/Tx
 |  | ||||||
|         RxPortJ5  //!< Rx/Tx HF
 |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     enum TxPort |  | ||||||
|     { |  | ||||||
|         TxPortJ3, //!< Rx/Tx
 |  | ||||||
|         TxPortJ4, //!< Tx
 |  | ||||||
|         TxPortJ5  //!< Rx/Tx HF
 |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     enum SWRSource |  | ||||||
|     { |  | ||||||
|         SWRExternal, |  | ||||||
|         SWRCellular |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     struct SDRBASE_API LimeRFESettings |  | ||||||
|     { |  | ||||||
|         LimeRFESettings(); |  | ||||||
|         // Rx
 |  | ||||||
|         LimeRFEController::ChannelGroups m_rxChannels; |  | ||||||
|         LimeRFEController::WidebandChannel m_rxWidebandChannel; |  | ||||||
|         LimeRFEController::HAMChannel m_rxHAMChannel; |  | ||||||
|         LimeRFEController::CellularChannel m_rxCellularChannel; |  | ||||||
|         LimeRFEController::RxPort m_rxPort; |  | ||||||
|         unsigned int m_attenuationFactor; //!< Attenuation is 2 times this factor in dB (0..7 => 0..14dB)
 |  | ||||||
|         bool m_amfmNotch; |  | ||||||
|         // Tx
 |  | ||||||
|         LimeRFEController::ChannelGroups m_txChannels; |  | ||||||
|         LimeRFEController::WidebandChannel m_txWidebandChannel; |  | ||||||
|         LimeRFEController::HAMChannel m_txHAMChannel; |  | ||||||
|         LimeRFEController::CellularChannel m_txCellularChannel; |  | ||||||
|         LimeRFEController::TxPort m_txPort; |  | ||||||
|         bool m_swrEnable; |  | ||||||
|         LimeRFEController::SWRSource m_swrSource; |  | ||||||
|         // Rx/Tx
 |  | ||||||
|         bool m_txRxDriven; //!< Tx settings set according to Rx settings
 |  | ||||||
|         bool m_rxOn; |  | ||||||
|         bool m_txOn; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     LimeRFEController(); |  | ||||||
|     ~LimeRFEController(); |  | ||||||
| 
 |  | ||||||
|     int openDevice(const std::string& serialDeviceName); |  | ||||||
|     void closeDevice(); |  | ||||||
|     int configure(); |  | ||||||
|     int getState(); |  | ||||||
|     static std::string getError(int errorCode); |  | ||||||
|     int setRx(LimeRFESettings& settings, bool rxOn); |  | ||||||
|     int setTx(LimeRFESettings& settings, bool txOn); |  | ||||||
|     int getFwdPower(int& powerDB); |  | ||||||
|     int getRefPower(int& powerDB); |  | ||||||
| 
 |  | ||||||
|     void settingsToState(const LimeRFESettings& settings); |  | ||||||
|     void stateToSettings(LimeRFESettings& settings); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     rfe_dev_t *m_rfeDevice; |  | ||||||
|     rfe_boardState m_rfeBoardState; |  | ||||||
|     static const std::map<int, std::string> m_errorCodesMap; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| #endif // SDRBASE_LIMERFE_LIMERFECONTROLLER_H_
 |  | ||||||
| @ -1,71 +0,0 @@ | |||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| // Copyright (C) 2020 Edouard Griffiths, F4EXB                                   //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is free software; you can redistribute it and/or modify          //
 |  | ||||||
| // it under the terms of the GNU General Public License as published by          //
 |  | ||||||
| // the Free Software Foundation as version 3 of the License, or                  //
 |  | ||||||
| // (at your option) any later version.                                           //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is distributed in the hope that it will be useful,               //
 |  | ||||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 |  | ||||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 |  | ||||||
| // GNU General Public License V3 for more details.                               //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // You should have received a copy of the GNU General Public License             //
 |  | ||||||
| // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 |  | ||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| 
 |  | ||||||
| #include <QByteArray> |  | ||||||
| #include <QDataStream> |  | ||||||
| #include <QIODevice> |  | ||||||
| 
 |  | ||||||
| #include "util/simpleserializer.h" |  | ||||||
| 
 |  | ||||||
| #include "limerfeusbcalib.h" |  | ||||||
| 
 |  | ||||||
| QByteArray LimeRFEUSBCalib::serialize() const |  | ||||||
| { |  | ||||||
|     SimpleSerializer s(1); |  | ||||||
|     QByteArray data; |  | ||||||
| 
 |  | ||||||
|     serializeCalibMap(data); |  | ||||||
|     s.writeBlob(1, data); |  | ||||||
| 
 |  | ||||||
|     return s.final(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool LimeRFEUSBCalib::deserialize(const QByteArray& data) |  | ||||||
| { |  | ||||||
|     SimpleDeserializer d(data); |  | ||||||
| 
 |  | ||||||
|     if (!d.isValid()) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (d.getVersion() == 1) |  | ||||||
|     { |  | ||||||
|         QByteArray data; |  | ||||||
| 
 |  | ||||||
|         d.readBlob(1, &data); |  | ||||||
|         deserializeCalibMap(data); |  | ||||||
| 
 |  | ||||||
|          return true; |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBCalib::serializeCalibMap(QByteArray& data) const |  | ||||||
| { |  | ||||||
|     QDataStream *stream = new QDataStream(&data, QIODevice::WriteOnly); |  | ||||||
|     *stream << m_calibrations; |  | ||||||
|     delete stream; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBCalib::deserializeCalibMap(QByteArray& data) |  | ||||||
| { |  | ||||||
|     QDataStream readStream(&data, QIODevice::ReadOnly); |  | ||||||
|     readStream >> m_calibrations; |  | ||||||
| } |  | ||||||
| @ -1,59 +0,0 @@ | |||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| // Copyright (C) 2020 Edouard Griffiths, F4EXB                                   //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is free software; you can redistribute it and/or modify          //
 |  | ||||||
| // it under the terms of the GNU General Public License as published by          //
 |  | ||||||
| // the Free Software Foundation as version 3 of the License, or                  //
 |  | ||||||
| // (at your option) any later version.                                           //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is distributed in the hope that it will be useful,               //
 |  | ||||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 |  | ||||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 |  | ||||||
| // GNU General Public License V3 for more details.                               //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // You should have received a copy of the GNU General Public License             //
 |  | ||||||
| // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 |  | ||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| 
 |  | ||||||
| #ifndef SDRBASE_LIMERFE_LIMERFEUSBCALIB_H_ |  | ||||||
| #define SDRBASE_LIMERFE_LIMERFEUSBCALIB_H_ |  | ||||||
| 
 |  | ||||||
| #include <QMap> |  | ||||||
| #include "export.h" |  | ||||||
| 
 |  | ||||||
| class QByteArray; |  | ||||||
| 
 |  | ||||||
| class SDRBASE_API LimeRFEUSBCalib |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     QByteArray serialize() const; |  | ||||||
|     bool deserialize(const QByteArray& data); |  | ||||||
| 
 |  | ||||||
|     enum ChannelRange |  | ||||||
|     { |  | ||||||
|         WidebandLow,  //!< 1 - 1000 MHz
 |  | ||||||
|         WidebandHigh, //!< 1000 - 4000 MHz
 |  | ||||||
|         HAM_30MHz,    //!< Up to 30 MHz
 |  | ||||||
|         HAM_50_70MHz, |  | ||||||
|         HAM_144_146MHz, |  | ||||||
|         HAM_220_225MHz, |  | ||||||
|         HAM_430_440MHz, |  | ||||||
|         HAM_902_928MHz, |  | ||||||
|         HAM_1240_1325MHz, |  | ||||||
|         HAM_2300_2450MHz, |  | ||||||
|         HAM_3300_3500MHz, |  | ||||||
|         CellularBand1, |  | ||||||
|         CellularBand2, |  | ||||||
|         CellularBand3, |  | ||||||
|         CellularBand7, |  | ||||||
|         CellularBand38 |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     QMap<int, double> m_calibrations; //!< Channel range to calibration value in floating point decibels
 |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     void serializeCalibMap(QByteArray& data) const; |  | ||||||
|     void deserializeCalibMap(QByteArray& data); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| #endif // SDRBASE_LIMERFE_LIMERFEUSBCALIB_H_
 |  | ||||||
| @ -135,7 +135,6 @@ void MainSettings::load() | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|     m_hardwareDeviceUserArgs.deserialize(qUncompress(QByteArray::fromBase64(s.value("hwDeviceUserArgs").toByteArray()))); |     m_hardwareDeviceUserArgs.deserialize(qUncompress(QByteArray::fromBase64(s.value("hwDeviceUserArgs").toByteArray()))); | ||||||
|     m_limeRFEUSBCalib.deserialize(qUncompress(QByteArray::fromBase64(s.value("limeRFEUSBCalib").toByteArray()))); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MainSettings::save() const | void MainSettings::save() const | ||||||
| @ -196,7 +195,6 @@ void MainSettings::save() const | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|     s.setValue("hwDeviceUserArgs", qCompress(m_hardwareDeviceUserArgs.serialize()).toBase64()); |     s.setValue("hwDeviceUserArgs", qCompress(m_hardwareDeviceUserArgs.serialize()).toBase64()); | ||||||
|     s.setValue("limeRFEUSBCalib", qCompress(m_limeRFEUSBCalib.serialize()).toBase64()); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MainSettings::initialize() | void MainSettings::initialize() | ||||||
|  | |||||||
| @ -4,7 +4,6 @@ | |||||||
| #include <QObject> | #include <QObject> | ||||||
| #include <QString> | #include <QString> | ||||||
| #include "device/deviceuserargs.h" | #include "device/deviceuserargs.h" | ||||||
| #include "limerfe/limerfeusbcalib.h" |  | ||||||
| #include "preferences.h" | #include "preferences.h" | ||||||
| #include "preset.h" | #include "preset.h" | ||||||
| #include "featuresetpreset.h" | #include "featuresetpreset.h" | ||||||
| @ -182,7 +181,6 @@ public: | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	DeviceUserArgs& getDeviceUserArgs() { return m_hardwareDeviceUserArgs; } | 	DeviceUserArgs& getDeviceUserArgs() { return m_hardwareDeviceUserArgs; } | ||||||
| 	LimeRFEUSBCalib& getLimeRFEUSBCalib() { return m_limeRFEUSBCalib; } |  | ||||||
| 	const AudioDeviceManager *getAudioDeviceManager() const { return m_audioDeviceManager; } | 	const AudioDeviceManager *getAudioDeviceManager() const { return m_audioDeviceManager; } | ||||||
| 	void setAudioDeviceManager(AudioDeviceManager *audioDeviceManager) { m_audioDeviceManager = audioDeviceManager; } | 	void setAudioDeviceManager(AudioDeviceManager *audioDeviceManager) { m_audioDeviceManager = audioDeviceManager; } | ||||||
|     void setAMBEEngine(AMBEEngine *ambeEngine) { m_ambeEngine = ambeEngine; } |     void setAMBEEngine(AMBEEngine *ambeEngine) { m_ambeEngine = ambeEngine; } | ||||||
| @ -205,7 +203,6 @@ protected: | |||||||
|     typedef QList<Configuration*> Configurations; |     typedef QList<Configuration*> Configurations; | ||||||
|     Configurations m_configurations; |     Configurations m_configurations; | ||||||
| 	DeviceUserArgs m_hardwareDeviceUserArgs; | 	DeviceUserArgs m_hardwareDeviceUserArgs; | ||||||
| 	LimeRFEUSBCalib m_limeRFEUSBCalib; |  | ||||||
|     AMBEEngine *m_ambeEngine; |     AMBEEngine *m_ambeEngine; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -246,23 +246,6 @@ set(sdrgui_FORMS | |||||||
|     soapygui/arginfogui.ui |     soapygui/arginfogui.ui | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| if (LIMESUITE_FOUND) |  | ||||||
|   set(sdrgui_SOURCES |  | ||||||
|     ${sdrgui_SOURCES} |  | ||||||
|     limerfegui/limerfeusbdialog.cpp |  | ||||||
|   ) |  | ||||||
|   set(sdrgui_HEADERS |  | ||||||
|     ${sdrgui_HEADERS} |  | ||||||
|     limerfegui/limerfeusbdialog.h |  | ||||||
|   ) |  | ||||||
|   set(sdrgui_FORMS |  | ||||||
|     ${sdrgui_FORMS} |  | ||||||
|     limerfegui/limerfeusbdialog.ui |  | ||||||
|   ) |  | ||||||
|   include_directories(${LIMESUITE_INCLUDE_DIR}) |  | ||||||
|   set(sdrgui_LIMERFE_LIB ${LIMESUITE_LIBRARY}) |  | ||||||
| endif (LIMESUITE_FOUND) |  | ||||||
| 
 |  | ||||||
| qt5_wrap_ui(sdrgui_FORMS_HEADERS ${sdrgui_FORMS}) | qt5_wrap_ui(sdrgui_FORMS_HEADERS ${sdrgui_FORMS}) | ||||||
| 
 | 
 | ||||||
| include_directories( | include_directories( | ||||||
|  | |||||||
| @ -1,881 +0,0 @@ | |||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| // Copyright (C) 2020 F4EXB                                                      //
 |  | ||||||
| // written by Edouard Griffiths                                                  //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is free software; you can redistribute it and/or modify          //
 |  | ||||||
| // it under the terms of the GNU General Public License as published by          //
 |  | ||||||
| // the Free Software Foundation as version 3 of the License, or                  //
 |  | ||||||
| // (at your option) any later version.                                           //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is distributed in the hope that it will be useful,               //
 |  | ||||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 |  | ||||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 |  | ||||||
| // GNU General Public License V3 for more details.                               //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // You should have received a copy of the GNU General Public License             //
 |  | ||||||
| // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 |  | ||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| 
 |  | ||||||
| #include <vector> |  | ||||||
| #include "util/serialutil.h" |  | ||||||
| #include "util/db.h" |  | ||||||
| #include "dsp/dspengine.h" |  | ||||||
| #include "dsp/dspdevicesourceengine.h" |  | ||||||
| #include "dsp/dspdevicesinkengine.h" |  | ||||||
| #include "mainwindow.h" |  | ||||||
| #include "device/deviceuiset.h" |  | ||||||
| #include "gui/doublevalidator.h" |  | ||||||
| 
 |  | ||||||
| #include "limerfeusbdialog.h" |  | ||||||
| #include "ui_limerfeusbdialog.h" |  | ||||||
| 
 |  | ||||||
| LimeRFEUSBDialog::LimeRFEUSBDialog(LimeRFEUSBCalib& limeRFEUSBCalib, MainWindow* mainWindow) : |  | ||||||
|     QDialog(mainWindow), |  | ||||||
|     ui(new Ui::LimeRFEUSBDialog), |  | ||||||
|     m_limeRFEUSBCalib(limeRFEUSBCalib), |  | ||||||
|     m_rxTxToggle(false), |  | ||||||
|     m_currentPowerCorrection(0.0), |  | ||||||
|     m_avgPower(false), |  | ||||||
|     m_deviceSetSync(false) |  | ||||||
| { |  | ||||||
|     ui->setupUi(this); |  | ||||||
|     m_mainWindow = mainWindow; |  | ||||||
|     ui->powerCorrValue->setValidator(new DoubleValidator(-99.9, 99.9, 1, ui->powerCorrValue)); |  | ||||||
|     std::vector<std::string> comPorts; |  | ||||||
|     SerialUtil::getComPorts(comPorts, "ttyUSB[0-9]+"); // regex is for Linux only
 |  | ||||||
| 
 |  | ||||||
|     for (std::vector<std::string>::const_iterator it = comPorts.begin(); it != comPorts.end(); ++it) { |  | ||||||
|         ui->device->addItem(QString(it->c_str())); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     updateDeviceSetList(); |  | ||||||
|     displaySettings(); // default values
 |  | ||||||
|     highlightApplyButton(false); |  | ||||||
|     m_timer.setInterval(500); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| LimeRFEUSBDialog::~LimeRFEUSBDialog() |  | ||||||
| { |  | ||||||
|     delete ui; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::displaySettings() |  | ||||||
| { |  | ||||||
|     setRxChannels(); |  | ||||||
|     ui->rxPort->setCurrentIndex(m_settings.m_rxPort); |  | ||||||
|     ui->attenuation->setCurrentIndex(m_settings.m_attenuationFactor); |  | ||||||
|     ui->amFmNotchFilter->setChecked(m_settings.m_amfmNotch); |  | ||||||
|     setTxChannels(); |  | ||||||
|     ui->txPort->setCurrentIndex(m_settings.m_txPort); |  | ||||||
|     ui->txFollowsRx->setChecked(m_settings.m_txRxDriven); |  | ||||||
|     ui->rxTxToggle->setChecked(m_rxTxToggle); |  | ||||||
|     displayMode(); |  | ||||||
|     displayPower(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::displayMode() |  | ||||||
| { |  | ||||||
|     QString s; |  | ||||||
| 
 |  | ||||||
|     if (m_settings.m_rxOn) |  | ||||||
|     { |  | ||||||
|         if (m_settings.m_txOn) { |  | ||||||
|             s = "Rx/Tx"; |  | ||||||
|         } else { |  | ||||||
|             s = "Rx"; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         if (m_settings.m_txOn) { |  | ||||||
|             s = "Tx"; |  | ||||||
|         } else { |  | ||||||
|             s = "None"; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     ui->modeText->setText(s); |  | ||||||
| 
 |  | ||||||
|     ui->modeRx->blockSignals(true); |  | ||||||
|     ui->modeTx->blockSignals(true); |  | ||||||
| 
 |  | ||||||
|     if (m_settings.m_rxOn) { |  | ||||||
| 		ui->modeRx->setStyleSheet("QToolButton { background-color : green; }"); |  | ||||||
|     } else { |  | ||||||
| 		ui->modeRx->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (m_settings.m_txOn) { |  | ||||||
|         ui->modeTx->setStyleSheet("QToolButton { background-color : red; }"); |  | ||||||
|     } else { |  | ||||||
| 		ui->modeTx->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     ui->modeRx->setChecked(m_settings.m_rxOn); |  | ||||||
|     ui->modeTx->setChecked(m_settings.m_txOn); |  | ||||||
| 
 |  | ||||||
|     ui->modeRx->blockSignals(false); |  | ||||||
|     ui->modeTx->blockSignals(false); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::displayPower() |  | ||||||
| { |  | ||||||
|     ui->powerEnable->blockSignals(true); |  | ||||||
|     ui->powerSource->blockSignals(true); |  | ||||||
| 
 |  | ||||||
|     ui->powerEnable->setChecked(m_settings.m_swrEnable); |  | ||||||
|     ui->powerSource->setCurrentIndex((int) m_settings.m_swrSource); |  | ||||||
| 
 |  | ||||||
|     ui->powerEnable->blockSignals(false); |  | ||||||
|     ui->powerSource->blockSignals(false); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::refreshPower() |  | ||||||
| { |  | ||||||
|     int fwdPower, refPower; |  | ||||||
|     int rc = m_controller.getFwdPower(fwdPower); |  | ||||||
| 
 |  | ||||||
|     if (rc != 0) |  | ||||||
|     { |  | ||||||
|         ui->statusText->setText(m_controller.getError(rc).c_str()); |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     rc = m_controller.getRefPower(refPower); |  | ||||||
| 
 |  | ||||||
|     if (rc != 0) |  | ||||||
|     { |  | ||||||
|         ui->statusText->setText(m_controller.getError(rc).c_str()); |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     double fwdPowerDB = fwdPower / 10.0; |  | ||||||
|     double refPowerDB = refPower / 10.0; |  | ||||||
|     double retLossDB = fwdPowerDB - refPowerDB; |  | ||||||
| 
 |  | ||||||
|     ui->powerFwdText->setText(QString::number(fwdPowerDB, 'f', 1)); |  | ||||||
|     ui->powerRefText->setText(QString::number(refPowerDB, 'f', 1)); |  | ||||||
|     ui->returnLossText->setText(QString::number(retLossDB, 'f', 1)); |  | ||||||
| 
 |  | ||||||
|     double denom = CalcDb::powerFromdB(retLossDB/2.0) - 1.0; |  | ||||||
| 
 |  | ||||||
|     if (denom == 0.0) |  | ||||||
|     { |  | ||||||
|         ui->swrText->setText("---"); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         double vswr = (CalcDb::powerFromdB(retLossDB/2.0) + 1.0) / denom; |  | ||||||
|         vswr = vswr < 0.0 ? 0.0 : vswr > 99.999 ? 99.999 : vswr; |  | ||||||
|         ui->swrText->setText(QString::number(vswr, 'f', 3)); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     updateAbsPower(m_currentPowerCorrection); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::setRxChannels() |  | ||||||
| { |  | ||||||
|     ui->rxChannel->blockSignals(true); |  | ||||||
|     ui->rxPort->blockSignals(true); |  | ||||||
|     ui->rxChannel->clear(); |  | ||||||
|     ui->rxPort->clear(); |  | ||||||
| 
 |  | ||||||
|     if (m_settings.m_rxChannels == LimeRFEController::ChannelsWideband) |  | ||||||
|     { |  | ||||||
|         ui->rxChannel->addItem("1-1000MHz"); |  | ||||||
|         ui->rxChannel->addItem("1-4GHz"); |  | ||||||
|         ui->rxChannel->setCurrentIndex((int) m_settings.m_rxWidebandChannel); |  | ||||||
|         ui->rxPort->addItem("TX/RX (J3)"); |  | ||||||
|         ui->rxPort->addItem("TX/RX 30M (J5)"); |  | ||||||
|         ui->rxPort->setCurrentIndex((int) m_settings.m_rxPort); |  | ||||||
|         ui->txFollowsRx->setEnabled(true); |  | ||||||
|         ui->rxPort->setEnabled(true); |  | ||||||
|     } |  | ||||||
|     else if (m_settings.m_rxChannels == LimeRFEController::ChannelsHAM) |  | ||||||
|     { |  | ||||||
|         ui->rxChannel->addItem("<30MHz"); |  | ||||||
|         ui->rxChannel->addItem("50-70MHz"); |  | ||||||
|         ui->rxChannel->addItem("144-146MHz"); |  | ||||||
|         ui->rxChannel->addItem("220-225MHz"); |  | ||||||
|         ui->rxChannel->addItem("430-440MHz"); |  | ||||||
|         ui->rxChannel->addItem("902-928MHz"); |  | ||||||
|         ui->rxChannel->addItem("1240-1325MHz"); |  | ||||||
|         ui->rxChannel->addItem("2300-2450MHz"); |  | ||||||
|         ui->rxChannel->addItem("3300-3500MHz"); |  | ||||||
|         ui->rxChannel->setCurrentIndex((int) m_settings.m_rxHAMChannel); |  | ||||||
|         ui->txFollowsRx->setEnabled(true); |  | ||||||
| 
 |  | ||||||
|         switch(m_settings.m_rxHAMChannel) |  | ||||||
|         { |  | ||||||
|             case LimeRFEController::HAM_30M: |  | ||||||
|             case LimeRFEController::HAM_50_70MHz: |  | ||||||
|             case LimeRFEController::HAM_144_146MHz: |  | ||||||
|             case LimeRFEController::HAM_220_225MHz: |  | ||||||
|             case LimeRFEController::HAM_430_440MHz: |  | ||||||
|                 ui->rxPort->addItem("TX/RX (J3)"); |  | ||||||
|                 ui->rxPort->addItem("TX/RX 30M (J5)"); |  | ||||||
|                 ui->rxPort->setEnabled(true); |  | ||||||
|                 ui->rxPort->setCurrentIndex((int) m_settings.m_rxPort); |  | ||||||
|                 break; |  | ||||||
|             case LimeRFEController::HAM_902_928MHz: |  | ||||||
|             case LimeRFEController::HAM_1240_1325MHz: |  | ||||||
|             case LimeRFEController::HAM_2300_2450MHz: |  | ||||||
|             case LimeRFEController::HAM_3300_3500MHz: |  | ||||||
|                 ui->rxPort->addItem("TX/RX (J3)"); |  | ||||||
|                 ui->rxPort->setEnabled(false); |  | ||||||
|                 m_settings.m_rxPort = LimeRFEController::RxPortJ3; |  | ||||||
|                 ui->rxPort->setCurrentIndex((int) m_settings.m_rxPort); |  | ||||||
|                 break; |  | ||||||
|             default: |  | ||||||
|                 break; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else if (m_settings.m_rxChannels == LimeRFEController::ChannelsCellular) |  | ||||||
|     { |  | ||||||
|         ui->rxChannel->addItem("Band1"); |  | ||||||
|         ui->rxChannel->addItem("Band2"); |  | ||||||
|         ui->rxChannel->addItem("Band3"); |  | ||||||
|         ui->rxChannel->addItem("Band7"); |  | ||||||
|         ui->rxChannel->addItem("Band38"); |  | ||||||
|         ui->rxChannel->setCurrentIndex((int) m_settings.m_rxCellularChannel); |  | ||||||
|         ui->rxPort->addItem("TX/RX (J3)"); |  | ||||||
|         ui->rxPort->setEnabled(false); |  | ||||||
|         m_settings.m_rxPort = LimeRFEController::RxPortJ3; |  | ||||||
|         ui->rxPort->setCurrentIndex((int) m_settings.m_rxPort); |  | ||||||
|         m_settings.m_txRxDriven = true; |  | ||||||
|         ui->txFollowsRx->setEnabled(false); |  | ||||||
|         ui->txFollowsRx->setChecked(m_settings.m_txRxDriven); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     ui->rxChannelGroup->setCurrentIndex((int) m_settings.m_rxChannels); |  | ||||||
|     ui->rxPort->blockSignals(false); |  | ||||||
|     ui->rxChannel->blockSignals(false); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::setTxChannels() |  | ||||||
| { |  | ||||||
|     ui->txChannel->blockSignals(true); |  | ||||||
|     ui->txPort->blockSignals(true); |  | ||||||
|     ui->powerCorrValue->blockSignals(true); |  | ||||||
| 
 |  | ||||||
|     ui->txChannel->clear(); |  | ||||||
|     ui->txPort->clear(); |  | ||||||
| 
 |  | ||||||
|     if (m_settings.m_txChannels == LimeRFEController::ChannelsWideband) |  | ||||||
|     { |  | ||||||
|         ui->txChannel->addItem("1-1000MHz"); |  | ||||||
|         ui->txChannel->addItem("1-4GHz"); |  | ||||||
|         ui->txChannel->setCurrentIndex((int) m_settings.m_txWidebandChannel); |  | ||||||
|         ui->txPort->addItem("TX/RX (J3)"); |  | ||||||
|         ui->txPort->addItem("TX (J4)"); |  | ||||||
|         ui->txPort->setCurrentIndex((int) m_settings.m_txPort); |  | ||||||
|         ui->txPort->setEnabled(true); |  | ||||||
|     } |  | ||||||
|     else if (m_settings.m_txChannels == LimeRFEController::ChannelsHAM) |  | ||||||
|     { |  | ||||||
|         ui->txChannel->addItem("<30MHz"); |  | ||||||
|         ui->txChannel->addItem("50-70MHz"); |  | ||||||
|         ui->txChannel->addItem("144-146MHz"); |  | ||||||
|         ui->txChannel->addItem("220-225MHz"); |  | ||||||
|         ui->txChannel->addItem("430-440MHz"); |  | ||||||
|         ui->txChannel->addItem("902-928MHz"); |  | ||||||
|         ui->txChannel->addItem("1240-1325MHz"); |  | ||||||
|         ui->txChannel->addItem("2300-2450MHz"); |  | ||||||
|         ui->txChannel->addItem("3300-3500MHz"); |  | ||||||
|         ui->txChannel->setCurrentIndex((int) m_settings.m_txHAMChannel); |  | ||||||
| 
 |  | ||||||
|         switch(m_settings.m_txHAMChannel) |  | ||||||
|         { |  | ||||||
|             case LimeRFEController::HAM_30M: |  | ||||||
|             case LimeRFEController::HAM_50_70MHz: |  | ||||||
|                 ui->txPort->addItem("TX/RX (J3)"); |  | ||||||
|                 ui->txPort->addItem("TX (J4)"); |  | ||||||
|                 ui->txPort->addItem("TX/RX 30M (J5)"); |  | ||||||
|                 ui->txPort->setEnabled(false); |  | ||||||
|                 m_settings.m_txPort = LimeRFEController::TxPortJ5; |  | ||||||
|                 ui->txPort->setCurrentIndex((int) m_settings.m_txPort); |  | ||||||
|                 break; |  | ||||||
|             case LimeRFEController::HAM_144_146MHz: |  | ||||||
|             case LimeRFEController::HAM_220_225MHz: |  | ||||||
|             case LimeRFEController::HAM_430_440MHz: |  | ||||||
|             case LimeRFEController::HAM_902_928MHz: |  | ||||||
|             case LimeRFEController::HAM_1240_1325MHz: |  | ||||||
|             case LimeRFEController::HAM_2300_2450MHz: |  | ||||||
|             case LimeRFEController::HAM_3300_3500MHz: |  | ||||||
|                 ui->txPort->addItem("TX/RX (J3)"); |  | ||||||
|                 ui->txPort->addItem("TX (J4)"); |  | ||||||
|                 ui->txPort->setCurrentIndex(m_settings.m_txPort < 2 ? m_settings.m_txPort : 1); |  | ||||||
|                 ui->txPort->setEnabled(true); |  | ||||||
|                 break; |  | ||||||
|             default: |  | ||||||
|                 break; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else if (m_settings.m_txChannels == LimeRFEController::ChannelsCellular) |  | ||||||
|     { |  | ||||||
|         ui->txChannel->addItem("Band1"); |  | ||||||
|         ui->txChannel->addItem("Band2"); |  | ||||||
|         ui->txChannel->addItem("Band3"); |  | ||||||
|         ui->txChannel->addItem("Band7"); |  | ||||||
|         ui->txChannel->addItem("Band38"); |  | ||||||
|         ui->txChannel->setCurrentIndex((int) m_settings.m_txCellularChannel); |  | ||||||
|         ui->txPort->addItem("TX/RX (J3)"); |  | ||||||
|         m_settings.m_txPort = LimeRFEController::TxPortJ3; |  | ||||||
|         ui->txPort->setEnabled(false); |  | ||||||
|         ui->txPort->setCurrentIndex((int) m_settings.m_txPort); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     ui->txChannelGroup->setCurrentIndex((int) m_settings.m_txChannels); |  | ||||||
|     m_currentPowerCorrection = getPowerCorrection(); |  | ||||||
|     ui->powerCorrValue->setText(QString::number(m_currentPowerCorrection, 'f', 1)); |  | ||||||
|     updateAbsPower(m_currentPowerCorrection); |  | ||||||
| 
 |  | ||||||
|     ui->powerCorrValue->blockSignals(false); |  | ||||||
|     ui->txPort->blockSignals(false); |  | ||||||
|     ui->txChannel->blockSignals(false); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int LimeRFEUSBDialog::getPowerCorectionIndex() |  | ||||||
| { |  | ||||||
|     LimeRFEUSBCalib::ChannelRange range; |  | ||||||
| 
 |  | ||||||
|     switch (m_settings.m_txChannels) |  | ||||||
|     { |  | ||||||
|         case LimeRFEController::ChannelsWideband: |  | ||||||
|         { |  | ||||||
|             switch (m_settings.m_txWidebandChannel) |  | ||||||
|             { |  | ||||||
|                 case LimeRFEController::WidebandLow: |  | ||||||
|                     range = LimeRFEUSBCalib::WidebandLow; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::WidebandHigh: |  | ||||||
|                     range = LimeRFEUSBCalib::WidebandHigh; |  | ||||||
|                     break; |  | ||||||
|                 default: |  | ||||||
|                     return -1; |  | ||||||
|                     break; |  | ||||||
|             } |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         case LimeRFEController::ChannelsHAM: |  | ||||||
|         { |  | ||||||
|             switch (m_settings.m_txHAMChannel) |  | ||||||
|             { |  | ||||||
|                 case LimeRFEController::HAM_30M: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_30MHz; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::HAM_50_70MHz: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_50_70MHz; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::HAM_144_146MHz: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_144_146MHz; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::HAM_220_225MHz: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_220_225MHz; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::HAM_430_440MHz: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_430_440MHz; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::HAM_902_928MHz: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_902_928MHz; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::HAM_1240_1325MHz: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_1240_1325MHz; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::HAM_2300_2450MHz: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_2300_2450MHz; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::HAM_3300_3500MHz: |  | ||||||
|                     range = LimeRFEUSBCalib::HAM_3300_3500MHz; |  | ||||||
|                     break; |  | ||||||
|                 default: |  | ||||||
|                     return -1; |  | ||||||
|                     break; |  | ||||||
|             } |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         case LimeRFEController::ChannelsCellular: |  | ||||||
|         { |  | ||||||
|             switch (m_settings.m_txCellularChannel) |  | ||||||
|             { |  | ||||||
|                 case LimeRFEController::CellularBand1: |  | ||||||
|                     range = LimeRFEUSBCalib::CellularBand1; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::CellularBand2: |  | ||||||
|                     range = LimeRFEUSBCalib::CellularBand2; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::CellularBand3: |  | ||||||
|                     range = LimeRFEUSBCalib::CellularBand3; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::CellularBand7: |  | ||||||
|                     range = LimeRFEUSBCalib::CellularBand7; |  | ||||||
|                     break; |  | ||||||
|                 case LimeRFEController::CellularBand38: |  | ||||||
|                     range = LimeRFEUSBCalib::CellularBand38; |  | ||||||
|                     break; |  | ||||||
|                 default: |  | ||||||
|                     return -1; |  | ||||||
|                     break; |  | ||||||
|             } |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         default: |  | ||||||
|             return -1; |  | ||||||
|             break; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return (int) range; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| double LimeRFEUSBDialog::getPowerCorrection() |  | ||||||
| { |  | ||||||
|     int index = getPowerCorectionIndex(); |  | ||||||
| 
 |  | ||||||
|     QMap<int, double>::const_iterator it = m_limeRFEUSBCalib.m_calibrations.find(index); |  | ||||||
| 
 |  | ||||||
|     if (it != m_limeRFEUSBCalib.m_calibrations.end()) { |  | ||||||
|         return it.value(); |  | ||||||
|     } else { |  | ||||||
|         return 0.0; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::setPowerCorrection(double dbValue) |  | ||||||
| { |  | ||||||
|     int index = getPowerCorectionIndex(); |  | ||||||
| 
 |  | ||||||
|     if (index < 0) { |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     m_limeRFEUSBCalib.m_calibrations[index] = dbValue; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_openDevice_clicked() |  | ||||||
| { |  | ||||||
|     int rc = m_controller.openDevice(ui->device->currentText().toStdString()); |  | ||||||
|     ui->statusText->append(QString("Open %1: %2").arg(ui->device->currentText()).arg(m_controller.getError(rc).c_str())); |  | ||||||
| 
 |  | ||||||
|     if (rc != 0) { |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     rc = m_controller.getState(); |  | ||||||
|     ui->statusText->append(QString("Get state: %1").arg(m_controller.getError(rc).c_str())); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_closeDevice_clicked() |  | ||||||
| { |  | ||||||
|     ui->statusText->clear(); |  | ||||||
|     m_controller.closeDevice(); |  | ||||||
|     ui->statusText->setText("Closed"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_deviceToGUI_clicked() |  | ||||||
| { |  | ||||||
|     int rc = m_controller.getState(); |  | ||||||
| 
 |  | ||||||
|     if (rc != 0) |  | ||||||
|     { |  | ||||||
|         ui->statusText->setText(m_controller.getError(rc).c_str()); |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     m_controller.stateToSettings(m_settings); |  | ||||||
|     displaySettings(); |  | ||||||
|     highlightApplyButton(false); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_rxChannelGroup_currentIndexChanged(int index) |  | ||||||
| { |  | ||||||
|     m_settings.m_rxChannels = (LimeRFEController::ChannelGroups) index; |  | ||||||
|     setRxChannels(); |  | ||||||
| 
 |  | ||||||
|     if (m_settings.m_txRxDriven) |  | ||||||
|     { |  | ||||||
|         m_settings.m_txChannels = m_settings.m_rxChannels; |  | ||||||
|         ui->txChannelGroup->setCurrentIndex((int) m_settings.m_txChannels); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_rxChannel_currentIndexChanged(int index) |  | ||||||
| { |  | ||||||
|     if (m_settings.m_rxChannels == LimeRFEController::ChannelsWideband) { |  | ||||||
|         m_settings.m_rxWidebandChannel = (LimeRFEController::WidebandChannel) index; |  | ||||||
|     } else if (m_settings.m_rxChannels == LimeRFEController::ChannelsHAM) { |  | ||||||
|         m_settings.m_rxHAMChannel = (LimeRFEController::HAMChannel) index; |  | ||||||
|     } else if (m_settings.m_rxChannels == LimeRFEController::ChannelsCellular) { |  | ||||||
|         m_settings.m_rxCellularChannel = (LimeRFEController::CellularChannel) index; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     setRxChannels(); |  | ||||||
| 
 |  | ||||||
|     if (m_settings.m_txRxDriven) |  | ||||||
|     { |  | ||||||
|         m_settings.m_txWidebandChannel = m_settings.m_rxWidebandChannel; |  | ||||||
|         m_settings.m_txHAMChannel = m_settings.m_rxHAMChannel; |  | ||||||
|         m_settings.m_txCellularChannel = m_settings.m_rxCellularChannel; |  | ||||||
|         setTxChannels(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_rxPort_currentIndexChanged(int index) |  | ||||||
| { |  | ||||||
|     m_settings.m_rxPort = (LimeRFEController::RxPort) index; |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_txFollowsRx_clicked() |  | ||||||
| { |  | ||||||
|     bool checked = ui->txFollowsRx->isChecked(); |  | ||||||
|     m_settings.m_txRxDriven = checked; |  | ||||||
|     ui->txChannelGroup->setEnabled(!checked); |  | ||||||
|     ui->txChannel->setEnabled(!checked); |  | ||||||
|     m_settings.m_txChannels = m_settings.m_rxChannels; |  | ||||||
|     m_settings.m_txWidebandChannel = m_settings.m_rxWidebandChannel; |  | ||||||
|     m_settings.m_txHAMChannel = m_settings.m_rxHAMChannel; |  | ||||||
|     m_settings.m_txCellularChannel = m_settings.m_rxCellularChannel; |  | ||||||
|     ui->txChannelGroup->setCurrentIndex((int) m_settings.m_txChannels); |  | ||||||
| 
 |  | ||||||
|     if (checked) { |  | ||||||
|         highlightApplyButton(true); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_txChannelGroup_currentIndexChanged(int index) |  | ||||||
| { |  | ||||||
|     m_settings.m_txChannels = (LimeRFEController::ChannelGroups) index; |  | ||||||
|     setTxChannels(); |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_txChannel_currentIndexChanged(int index) |  | ||||||
| { |  | ||||||
|     if (m_settings.m_txChannels == LimeRFEController::ChannelsWideband) { |  | ||||||
|         m_settings.m_txWidebandChannel = (LimeRFEController::WidebandChannel) index; |  | ||||||
|     } else if (m_settings.m_txChannels == LimeRFEController::ChannelsHAM) { |  | ||||||
|         m_settings.m_txHAMChannel = (LimeRFEController::HAMChannel) index; |  | ||||||
|     } else if (m_settings.m_txChannels == LimeRFEController::ChannelsCellular) { |  | ||||||
|         m_settings.m_txCellularChannel = (LimeRFEController::CellularChannel) index; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     setTxChannels(); |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_txPort_currentIndexChanged(int index) |  | ||||||
| { |  | ||||||
|     m_settings.m_txPort = (LimeRFEController::TxPort) index; |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_powerEnable_clicked() |  | ||||||
| { |  | ||||||
|     m_settings.m_swrEnable = ui->powerEnable->isChecked(); |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_powerSource_currentIndexChanged(int index) |  | ||||||
| { |  | ||||||
|     m_settings.m_swrSource = (LimeRFEController::SWRSource) index; |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_powerRefresh_clicked() |  | ||||||
| { |  | ||||||
|     refreshPower(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_powerAutoRefresh_toggled(bool checked) |  | ||||||
| { |  | ||||||
|     if (checked) |  | ||||||
|     { |  | ||||||
|         connect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); |  | ||||||
|         m_timer.start(); |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         m_timer.stop(); |  | ||||||
|         disconnect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_powerAbsAvg_clicked() |  | ||||||
| { |  | ||||||
|     m_avgPower = ui->powerAbsAvg->isChecked(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_powerCorrValue_textEdited(const QString &text) |  | ||||||
| { |  | ||||||
|     bool ok; |  | ||||||
|     double powerCorrection = text.toDouble(&ok); |  | ||||||
| 
 |  | ||||||
|     if (ok) |  | ||||||
|     { |  | ||||||
|         setPowerCorrection(powerCorrection); |  | ||||||
|         m_currentPowerCorrection = powerCorrection; |  | ||||||
|         updateAbsPower(powerCorrection); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_deviceSetRefresh_clicked() |  | ||||||
| { |  | ||||||
|     updateDeviceSetList(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_deviceSetSync_clicked() |  | ||||||
| { |  | ||||||
|     m_deviceSetSync = ui->deviceSetSync->isChecked(); |  | ||||||
| 
 |  | ||||||
|     if (m_deviceSetSync) { |  | ||||||
|         syncRxTx(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::syncRxTx() |  | ||||||
| { |  | ||||||
|     if (!m_settings.m_txOn) { |  | ||||||
|         stopStartTx(m_settings.m_txOn); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     stopStartRx(m_settings.m_rxOn); |  | ||||||
| 
 |  | ||||||
|     if (m_settings.m_txOn) { |  | ||||||
|         stopStartTx(m_settings.m_txOn); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::stopStartRx(bool start) |  | ||||||
| { |  | ||||||
|     unsigned int rxDeviceSetSequence = ui->deviceSetRx->currentIndex(); |  | ||||||
| 
 |  | ||||||
|     if (rxDeviceSetSequence >= m_sourceEngines.size()) { |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     DSPDeviceSourceEngine *deviceSourceEngine = m_sourceEngines[rxDeviceSetSequence]; |  | ||||||
| 
 |  | ||||||
|     if (start) |  | ||||||
|     { |  | ||||||
|         if (deviceSourceEngine->initAcquisition()) { |  | ||||||
|             deviceSourceEngine->startAcquisition(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         deviceSourceEngine->stopAcquistion(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::stopStartTx(bool start) |  | ||||||
| { |  | ||||||
|     unsigned int txDeviceSetSequence = ui->deviceSetTx->currentIndex(); |  | ||||||
| 
 |  | ||||||
|     if (txDeviceSetSequence >= m_sinkEngines.size()) { |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     DSPDeviceSinkEngine *deviceSinkEngine = m_sinkEngines[txDeviceSetSequence]; |  | ||||||
| 
 |  | ||||||
|     if (start) |  | ||||||
|     { |  | ||||||
|         if (deviceSinkEngine->initGeneration()) { |  | ||||||
|             deviceSinkEngine->startGeneration(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         deviceSinkEngine->stopGeneration(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::updateAbsPower(double powerCorrDB) |  | ||||||
| { |  | ||||||
|     bool ok; |  | ||||||
|     double power = ui->powerFwdText->text().toDouble(&ok); |  | ||||||
| 
 |  | ||||||
|     if (ok) |  | ||||||
|     { |  | ||||||
|         double powerCorrected = power + powerCorrDB; |  | ||||||
|         double powerDisplayed = powerCorrected; |  | ||||||
| 
 |  | ||||||
|         if (m_avgPower) |  | ||||||
|         { |  | ||||||
|             m_powerMovingAverage(powerCorrected); |  | ||||||
|             powerDisplayed = m_powerMovingAverage.asDouble(); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         ui->powerAbsDbText->setText(tr("%1 dBm").arg(QString::number(powerDisplayed, 'f', 1))); |  | ||||||
|         double powerWatts = CalcDb::powerFromdB(powerDisplayed - 30.0); |  | ||||||
|         powerWatts = powerWatts > 8.0 ? 8.0 : powerWatts; |  | ||||||
|         ui->powerAbsWText->setText(tr("%1 W").arg(QString::number(powerWatts, 'f', 3))); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::updateDeviceSetList() |  | ||||||
| { |  | ||||||
|     std::vector<DeviceUISet*>& deviceUISets = m_mainWindow->getDeviceUISets(); |  | ||||||
|     std::vector<DeviceUISet*>::const_iterator it = deviceUISets.begin(); |  | ||||||
|     m_sourceEngines.clear(); |  | ||||||
|     m_rxDeviceSetIndex.clear(); |  | ||||||
|     m_sinkEngines.clear(); |  | ||||||
|     m_txDeviceSetIndex.clear(); |  | ||||||
|     ui->deviceSetRx->clear(); |  | ||||||
|     ui->deviceSetTx->clear(); |  | ||||||
|     unsigned int deviceIndex = 0; |  | ||||||
|     unsigned int rxIndex = 0; |  | ||||||
|     unsigned int txIndex = 0; |  | ||||||
| 
 |  | ||||||
|     for (; it != deviceUISets.end(); ++it, deviceIndex++) |  | ||||||
|     { |  | ||||||
|         DSPDeviceSourceEngine *deviceSourceEngine =  (*it)->m_deviceSourceEngine; |  | ||||||
|         DSPDeviceSinkEngine *deviceSinkEngine = (*it)->m_deviceSinkEngine; |  | ||||||
| 
 |  | ||||||
|         if (deviceSourceEngine) |  | ||||||
|         { |  | ||||||
|             m_sourceEngines.push_back(deviceSourceEngine); |  | ||||||
|             m_rxDeviceSetIndex.push_back(deviceIndex); |  | ||||||
|             ui->deviceSetRx->addItem(QString("%1").arg(deviceIndex)); |  | ||||||
|             rxIndex++; |  | ||||||
|         } |  | ||||||
|         else if (deviceSinkEngine) |  | ||||||
|         { |  | ||||||
|             m_sinkEngines.push_back(deviceSinkEngine); |  | ||||||
|             m_txDeviceSetIndex.push_back(deviceIndex); |  | ||||||
|             ui->deviceSetTx->addItem(QString("%1").arg(deviceIndex)); |  | ||||||
|             txIndex++; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::highlightApplyButton(bool highlight) |  | ||||||
| { |  | ||||||
|     if (highlight) { |  | ||||||
|         ui->apply->setStyleSheet("QPushButton { background-color : green; }"); |  | ||||||
|     } else { |  | ||||||
|         ui->apply->setStyleSheet("QPushButton { background:rgb(79,79,79); }"); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_modeRx_toggled(bool checked) |  | ||||||
| { |  | ||||||
|     int rc; |  | ||||||
|     ui->statusText->clear(); |  | ||||||
|     m_settings.m_rxOn = checked; |  | ||||||
| 
 |  | ||||||
|     if (m_rxTxToggle) |  | ||||||
|     { |  | ||||||
|         m_settings.m_txOn = !checked; |  | ||||||
| 
 |  | ||||||
|         if (checked) // Rx on
 |  | ||||||
|         { |  | ||||||
|             rc = m_controller.setTx(m_settings, false); // stop Tx first
 |  | ||||||
|             ui->statusText->append(QString("Stop TX: %1").arg(m_controller.getError(rc).c_str())); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         rc = m_controller.setRx(m_settings, m_settings.m_rxOn); // Rx on or off
 |  | ||||||
|         ui->statusText->append(QString("RX: %1").arg(m_controller.getError(rc).c_str())); |  | ||||||
| 
 |  | ||||||
|         if (!checked) // Rx off
 |  | ||||||
|         { |  | ||||||
|             rc = m_controller.setTx(m_settings, true); // start Tx next
 |  | ||||||
|             ui->statusText->append(QString("Start TX: %1").arg(m_controller.getError(rc).c_str())); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         rc = m_controller.setRx(m_settings, m_settings.m_rxOn); |  | ||||||
|         ui->statusText->setText(m_controller.getError(rc).c_str()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (m_deviceSetSync) { |  | ||||||
|         syncRxTx(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     displayMode(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_modeTx_toggled(bool checked) |  | ||||||
| { |  | ||||||
|     int rc; |  | ||||||
|     ui->statusText->clear(); |  | ||||||
|     m_settings.m_txOn = checked; |  | ||||||
| 
 |  | ||||||
|     if (m_rxTxToggle) |  | ||||||
|     { |  | ||||||
|         m_settings.m_rxOn = !checked; |  | ||||||
| 
 |  | ||||||
|         if (checked) // Tx on
 |  | ||||||
|         { |  | ||||||
|             rc = m_controller.setRx(m_settings, false); // stop Rx first
 |  | ||||||
|             ui->statusText->append(QString("Stop RX: %1").arg(m_controller.getError(rc).c_str())); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         rc = m_controller.setTx(m_settings, m_settings.m_txOn); // Tx on or off
 |  | ||||||
|         ui->statusText->append(QString("TX: %1").arg(m_controller.getError(rc).c_str())); |  | ||||||
| 
 |  | ||||||
|         if (!checked) // Tx off
 |  | ||||||
|         { |  | ||||||
|             rc = m_controller.setRx(m_settings, true); // start Rx next
 |  | ||||||
|             ui->statusText->append(QString("Start RX: %1").arg(m_controller.getError(rc).c_str())); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|     else |  | ||||||
|     { |  | ||||||
|         rc = m_controller.setTx(m_settings, m_settings.m_txOn); |  | ||||||
|         ui->statusText->setText(m_controller.getError(rc).c_str()); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (m_deviceSetSync) { |  | ||||||
|         syncRxTx(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     displayMode(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_rxTxToggle_clicked() |  | ||||||
| { |  | ||||||
|     m_rxTxToggle = ui->rxTxToggle->isChecked(); |  | ||||||
| 
 |  | ||||||
|     if (m_rxTxToggle && m_settings.m_rxOn && m_settings.m_txOn) |  | ||||||
|     { |  | ||||||
|         m_settings.m_txOn = false; |  | ||||||
|         int rc = m_controller.setTx(m_settings, m_settings.m_txOn); |  | ||||||
|         ui->statusText->setText(m_controller.getError(rc).c_str()); |  | ||||||
|         displayMode(); |  | ||||||
| 
 |  | ||||||
|         if (m_deviceSetSync) { |  | ||||||
|             syncRxTx(); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_attenuation_currentIndexChanged(int index) |  | ||||||
| { |  | ||||||
|     m_settings.m_attenuationFactor = index; |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_amFmNotchFilter_clicked() |  | ||||||
| { |  | ||||||
|     m_settings.m_amfmNotch = ui->amFmNotchFilter->isChecked(); |  | ||||||
|     highlightApplyButton(true); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::on_apply_clicked() |  | ||||||
| { |  | ||||||
|     ui->statusText->clear(); |  | ||||||
|     m_controller.settingsToState(m_settings); |  | ||||||
|     int rc = m_controller.configure(); |  | ||||||
|     ui->statusText->setText(m_controller.getError(rc).c_str()); |  | ||||||
|     highlightApplyButton(false); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void LimeRFEUSBDialog::tick() |  | ||||||
| { |  | ||||||
|     refreshPower(); |  | ||||||
| } |  | ||||||
| @ -1,110 +0,0 @@ | |||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| // Copyright (C) 2020 F4EXB                                                      //
 |  | ||||||
| // written by Edouard Griffiths                                                  //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is free software; you can redistribute it and/or modify          //
 |  | ||||||
| // it under the terms of the GNU General Public License as published by          //
 |  | ||||||
| // the Free Software Foundation as version 3 of the License, or                  //
 |  | ||||||
| // (at your option) any later version.                                           //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // This program is distributed in the hope that it will be useful,               //
 |  | ||||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 |  | ||||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 |  | ||||||
| // GNU General Public License V3 for more details.                               //
 |  | ||||||
| //                                                                               //
 |  | ||||||
| // You should have received a copy of the GNU General Public License             //
 |  | ||||||
| // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 |  | ||||||
| ///////////////////////////////////////////////////////////////////////////////////
 |  | ||||||
| 
 |  | ||||||
| #ifndef SDRGUI_LIMERFEGUI_LIMERFEUSBDIALOG_H_ |  | ||||||
| #define SDRGUI_LIMERFEGUI_LIMERFEUSBDIALOG_H_ |  | ||||||
| 
 |  | ||||||
| #include <vector> |  | ||||||
| 
 |  | ||||||
| #include <QDialog> |  | ||||||
| #include <QTimer> |  | ||||||
| 
 |  | ||||||
| #include "util/movingaverage.h" |  | ||||||
| #include "limerfe/limerfecontroller.h" |  | ||||||
| #include "limerfe/limerfeusbcalib.h" |  | ||||||
| #include "export.h" |  | ||||||
| 
 |  | ||||||
| class DSPDeviceSourceEngine; |  | ||||||
| class DSPDeviceSinkEngine; |  | ||||||
| class MainWindow; |  | ||||||
| 
 |  | ||||||
| namespace Ui { |  | ||||||
|     class LimeRFEUSBDialog; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class SDRGUI_API LimeRFEUSBDialog : public QDialog { |  | ||||||
|     Q_OBJECT |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
|     explicit LimeRFEUSBDialog(LimeRFEUSBCalib& limeRFEUSBCalib, MainWindow* mainWindow); |  | ||||||
|     ~LimeRFEUSBDialog(); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     void displaySettings(); |  | ||||||
|     void displayMode(); |  | ||||||
|     void displayPower(); |  | ||||||
|     void refreshPower(); |  | ||||||
|     void setRxChannels(); |  | ||||||
|     void setTxChannels(); |  | ||||||
|     int getPowerCorectionIndex(); |  | ||||||
|     double getPowerCorrection(); |  | ||||||
|     void setPowerCorrection(double dbValue); |  | ||||||
|     void updateAbsPower(double powerCorrDB); |  | ||||||
|     void updateDeviceSetList(); |  | ||||||
|     void stopStartRx(bool start); |  | ||||||
|     void stopStartTx(bool start); |  | ||||||
|     void syncRxTx(); |  | ||||||
|     void highlightApplyButton(bool highlight); |  | ||||||
| 
 |  | ||||||
|     Ui::LimeRFEUSBDialog* ui; |  | ||||||
|     MainWindow *m_mainWindow; |  | ||||||
|     LimeRFEController m_controller; |  | ||||||
|     LimeRFEController::LimeRFESettings m_settings; |  | ||||||
|     LimeRFEUSBCalib& m_limeRFEUSBCalib; |  | ||||||
|     bool m_rxTxToggle; |  | ||||||
|     QTimer m_timer; |  | ||||||
|     double m_currentPowerCorrection; |  | ||||||
|     bool m_avgPower; |  | ||||||
|     MovingAverageUtil<double, double, 10> m_powerMovingAverage; |  | ||||||
|     bool m_deviceSetSync; |  | ||||||
|     int m_rxDeviceSetSequence; |  | ||||||
|     int m_txDeviceSetSequence; |  | ||||||
|     std::vector<DSPDeviceSourceEngine*> m_sourceEngines; |  | ||||||
|     std::vector<int> m_rxDeviceSetIndex; |  | ||||||
|     std::vector<DSPDeviceSinkEngine*> m_sinkEngines; |  | ||||||
|     std::vector<int> m_txDeviceSetIndex; |  | ||||||
| 
 |  | ||||||
| private slots: |  | ||||||
|     void on_openDevice_clicked(); |  | ||||||
|     void on_closeDevice_clicked(); |  | ||||||
|     void on_deviceToGUI_clicked(); |  | ||||||
|     void on_rxChannelGroup_currentIndexChanged(int index); |  | ||||||
|     void on_rxChannel_currentIndexChanged(int index); |  | ||||||
|     void on_rxPort_currentIndexChanged(int index); |  | ||||||
|     void on_attenuation_currentIndexChanged(int index); |  | ||||||
|     void on_amFmNotchFilter_clicked(); |  | ||||||
|     void on_txFollowsRx_clicked(); |  | ||||||
|     void on_txChannelGroup_currentIndexChanged(int index); |  | ||||||
|     void on_txChannel_currentIndexChanged(int index); |  | ||||||
|     void on_txPort_currentIndexChanged(int index); |  | ||||||
|     void on_powerEnable_clicked(); |  | ||||||
|     void on_powerSource_currentIndexChanged(int index); |  | ||||||
|     void on_powerRefresh_clicked(); |  | ||||||
|     void on_powerAutoRefresh_toggled(bool checked); |  | ||||||
|     void on_powerAbsAvg_clicked(); |  | ||||||
|     void on_powerCorrValue_textEdited(const QString &text); |  | ||||||
|     void on_modeRx_toggled(bool checked); |  | ||||||
|     void on_modeTx_toggled(bool checked); |  | ||||||
|     void on_rxTxToggle_clicked(); |  | ||||||
|     void on_deviceSetRefresh_clicked(); |  | ||||||
|     void on_deviceSetSync_clicked(); |  | ||||||
|     void on_apply_clicked(); |  | ||||||
|     void tick(); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| #endif // SDRGUI_LIMERFEGUI_LIMERFEUSBDIALOG_H_
 |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -97,10 +97,6 @@ | |||||||
| #include <QSplashScreen> | #include <QSplashScreen> | ||||||
| #include <QProgressDialog> | #include <QProgressDialog> | ||||||
| 
 | 
 | ||||||
| #if defined(HAS_LIMERFEUSB) |  | ||||||
| #include "limerfegui/limerfeusbdialog.h" |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| MainWindow *MainWindow::m_instance = 0; | MainWindow *MainWindow::m_instance = 0; | ||||||
| 
 | 
 | ||||||
| MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parser, QWidget* parent) : | MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parser, QWidget* parent) : | ||||||
| @ -1474,11 +1470,6 @@ void MainWindow::createMenuBar() | |||||||
|     QAction *ambeAction = preferencesMenu->addAction("A&MBE..."); |     QAction *ambeAction = preferencesMenu->addAction("A&MBE..."); | ||||||
|     ambeAction->setToolTip("AMBE options"); |     ambeAction->setToolTip("AMBE options"); | ||||||
|     QObject::connect(ambeAction, &QAction::triggered, this, &MainWindow::on_action_AMBE_triggered); |     QObject::connect(ambeAction, &QAction::triggered, this, &MainWindow::on_action_AMBE_triggered); | ||||||
| #endif |  | ||||||
| #if defined(HAS_LIMERFEUSB) |  | ||||||
|     QAction *limeRFEAction = preferencesMenu->addAction("Lime &RFE..."); |  | ||||||
|     limeRFEAction->setToolTip("Lime RFE options"); |  | ||||||
|     QObject::connect(limeRFEAction, &QAction::triggered, this, &MainWindow::on_action_LimeRFE_triggered); |  | ||||||
| #endif | #endif | ||||||
|     QMenu *devicesMenu = preferencesMenu->addMenu("&Devices"); |     QMenu *devicesMenu = preferencesMenu->addMenu("&Devices"); | ||||||
|     QAction *userArgumentsAction = devicesMenu->addAction("&User arguments..."); |     QAction *userArgumentsAction = devicesMenu->addAction("&User arguments..."); | ||||||
| @ -2136,17 +2127,6 @@ void MainWindow::on_action_AMBE_triggered() | |||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MainWindow::on_action_LimeRFE_triggered() |  | ||||||
| { |  | ||||||
|     qDebug("MainWindow::on_action_LimeRFE_triggered"); |  | ||||||
| #if defined(HAS_LIMERFEUSB) |  | ||||||
|     qDebug("MainWindow::on_action_LimeRFE_triggered: activated"); |  | ||||||
|     LimeRFEUSBDialog *limeRFEUSBDialog = new LimeRFEUSBDialog(m_mainCore->m_settings.getLimeRFEUSBCalib(), this); |  | ||||||
|     limeRFEUSBDialog->setModal(false); |  | ||||||
|     limeRFEUSBDialog->show(); |  | ||||||
| #endif |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void MainWindow::samplingDeviceChangeHandler(DeviceGUI *deviceGUI, int newDeviceIndex) | void MainWindow::samplingDeviceChangeHandler(DeviceGUI *deviceGUI, int newDeviceIndex) | ||||||
| { | { | ||||||
|     int deviceType = (int) deviceGUI->getDeviceType(); |     int deviceType = (int) deviceGUI->getDeviceType(); | ||||||
|  | |||||||
| @ -182,7 +182,6 @@ private slots: | |||||||
|     void on_action_Logging_triggered(); |     void on_action_Logging_triggered(); | ||||||
| 	void on_action_FFT_triggered(); | 	void on_action_FFT_triggered(); | ||||||
|     void on_action_AMBE_triggered(); |     void on_action_AMBE_triggered(); | ||||||
|     void on_action_LimeRFE_triggered(); |  | ||||||
| 	void on_action_My_Position_triggered(); | 	void on_action_My_Position_triggered(); | ||||||
|     void on_action_DeviceUserArguments_triggered(); |     void on_action_DeviceUserArguments_triggered(); | ||||||
|     void on_action_commands_triggered(); |     void on_action_commands_triggered(); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user