Make TX Path selectable #5

Closed
opened 2024-02-07 09:31:31 +00:00 by jupfi · 2 comments
jupfi commented 2024-02-07 09:31:31 +00:00 (Migrated from github.com)

For the LimeSDR USB we have different options for the TX path. This should be selectable by the user.
This is currently implemented by executing different binaries in the nqrduck-spectrometer-limenqr contrib folder.
This is obviously not very nice and the TX path should probably be part of the LimeCFG struct. Therefore the user should be able to select the TX path based on the given arguments or modification of the LimeCFG struct.

For the LimeSDR USB we have different options for the TX path. This should be selectable by the user. This is currently implemented by executing different binaries in the [nqrduck-spectrometer-limenqr contrib](https://github.com/nqrduck/nqrduck-spectrometer-limenqr/tree/main/src/nqrduck_spectrometer_limenqr/contrib) folder. This is obviously not very nice and the TX path should probably be part of the LimeCFG struct. Therefore the user should be able to select the TX path based on the given arguments or modification of the LimeCFG struct.
kumitterer commented 2024-02-07 09:38:47 +00:00 (Migrated from github.com)

Here's a diff between the two versions:

323,324c323,324
<       LimeCfg.TX_QcorrGain    = 2039;         // Q Gain corr of TX mixer
<       LimeCfg.TX_IQcorrPhase  = 10;           // Phase corr of TX mixer
---
>       LimeCfg.TX_QcorrGain    = 2047;         // Q Gain corr of TX mixer
>       LimeCfg.TX_IQcorrPhase  = 0;            // Phase corr of TX mixer
654a655,656
>       int chn=1;
> 
664c666
<       if (LMS_GetLOFrequency(device, LMS_CH_RX, 0, &frq_read) != 0) error(); 
---
>       if (LMS_GetLOFrequency(device, LMS_CH_RX, chn, &frq_read) != 0) error(); 
667c669
<       if (LMS_GetSampleRate(device, LMS_CH_RX, 0, &srate_read, &rf_rate) != 0) error();
---
>       if (LMS_GetSampleRate(device, LMS_CH_RX, chn, &srate_read, &rf_rate) != 0) error();
675a678,680
> 
> 
> 
714c719
<               if (LMS_SetGaindB(device, LMS_CH_TX, 0, 0)!= 0) {
---
>               if (LMS_SetGaindB(device, LMS_CH_TX, chn, 0)!= 0) {
722c727
<                       if (LMS_SetGaindB(device, LMS_CH_TX, 0, 0) != 0) error();
---
>                       if (LMS_SetGaindB(device, LMS_CH_TX, chn, 0) != 0) error();
724,725c729,731
<               if (LMS_SetNormalizedGain(device, LMS_CH_TX, 0, 0.0) != 0) error();
< 
---
>               if (LMS_SetNormalizedGain(device, LMS_CH_TX, chn, 0.0) != 0) error();
>               if (LMS_SetNormalizedGain(device, LMS_CH_TX, chn, 0.0) != 0) error();
> 
727c733
<               if (LMS_SetLOFrequency(device, LMS_CH_RX, 0, LimeCfg.frq) != 0) error(); 
---
>               if (LMS_SetLOFrequency(device, LMS_CH_RX, chn, LimeCfg.frq) != 0) error(); 
730c736
<               if (LMS_SetLOFrequency(device, LMS_CH_TX, 0, LimeCfg.frq) != 0) error();
---
>               if (LMS_SetLOFrequency(device, LMS_CH_TX, chn, LimeCfg.frq) != 0) error();
733c739
<               if (LMS_GetLOFrequency(device, LMS_CH_RX, 0, &frq_read) != 0) error(); 
---
>               if (LMS_GetLOFrequency(device, LMS_CH_RX, chn, &frq_read) != 0) error(); 
740a747,753
>               if (LMS_EnableChannel(device, LMS_CH_RX, chn, true) != 0) error();
>               //Enable TX channels
>               if (LMS_EnableChannel(device, LMS_CH_TX, chn, true) != 0) error();
> 
>               // fwd the TX1 LO to TX2
>               if (LMS_WriteParam(device, LMS7_EN_NEXTTX_TRF, true) != 0) error();
>               if (LMS_WriteParam(device, LMS7_EN_NEXTRX_RFE, true) != 0) error();
742a756,757
>               if (LMS_WriteParam(device, LMS7_MAC, chn+1) != 0) error();
>               //if (LMS_WriteParam(device, LMS7_MAC, chn) != 0) error();
744a760
> 
756c772
< 
---
> 
758c774,777
<               if (LMS_WriteParam(device, LMS7_MAC, 1) != 0) error();
---
>               if (LMS_WriteParam(device, LMS7_MAC, chn+1) != 0) error();
> 
>               //if (LMS_WriteParam(device, LMS7_MAC, 1) != 0) error();
> 
772c791
<               if ((n = LMS_GetAntennaList(device, LMS_CH_RX, 0, antenna_list)) < 0) error();
---
>               if ((n = LMS_GetAntennaList(device, LMS_CH_RX, chn, antenna_list)) < 0) error();
778c797
<               if ((n = LMS_GetAntenna(device, LMS_CH_RX, 0)) < 0) error();
---
>               if ((n = LMS_GetAntenna(device, LMS_CH_RX, chn)) < 0) error();
782c801
<               if (LMS_SetAntenna(device, LMS_CH_RX, 0, LMS_PATH_LNAL) != 0) error();
---
>               if (LMS_SetAntenna(device, LMS_CH_RX, chn, LMS_PATH_LNAL) != 0) error();
785,786c804,805
<               if ((n = LMS_GetAntenna(device, LMS_CH_RX, 0)) < 0) error();
<               cout << "Manually selected RX LNA: " << n << ": " << antenna_list[n] << endl;
---
>               //if ((n = LMS_GetAntenna(device, LMS_CH_RX, 0)) < 0) error();
>               //cout << "Manually selected RX LNA: " << n << ": " << antenna_list[n] << endl;
790c809
<               if ((n = LMS_GetAntennaList(device, LMS_CH_TX, 0, antenna_list)) < 0) error();
---
>               if ((n = LMS_GetAntennaList(device, LMS_CH_TX, chn, antenna_list)) < 0) error();
797c816
<               if ((n = LMS_GetAntenna(device, LMS_CH_TX, 0)) < 0) 
---
>               if ((n = LMS_GetAntenna(device, LMS_CH_TX, chn)) < 0) 
802c821
<               int mychoice = LMS_PATH_TX1;
---
>               int mychoice = LMS_PATH_TX2;
804,805c823,824
<               mychoice = LMS_PATH_TX1; // HACK: hardcode TX2 pathway
<               if (LMS_SetAntenna(device, LMS_CH_TX, 0, mychoice) != 0) error();
---
>               //mychoice = LMS_PATH_TX2; // HACK: hardcode TX2 pathway
>               if (LMS_SetAntenna(device, LMS_CH_TX, chn, LMS_PATH_TX1) != 0) error();
808c827
<               if ((n = LMS_GetAntenna(device, LMS_CH_TX, 0)) < 0) error();
---
>               if ((n = LMS_GetAntenna(device, LMS_CH_TX, chn)) < 0) error();
813a833,836
> 
>               //if (LMS_WriteParam(device, LMS7_MAC, chn) != 0) error();
>               if (LMS_WriteParam(device, LMS7_MAC, chn+1) != 0) error();
> 
827,828c850,851
<               if (LMS_SetGaindB(device, LMS_CH_TX, 0, LimeCfg.TX_gain) != 0) error();
<               if (LMS_SetGaindB(device, LMS_CH_RX, 0, LimeCfg.RX_gain) != 0) error();
---
>               if (LMS_SetGaindB(device, LMS_CH_TX, chn, LimeCfg.TX_gain) != 0) error();
>               if (LMS_SetGaindB(device, LMS_CH_RX, chn, LimeCfg.RX_gain) != 0) error();
861,862c884,885
<               if (LMS_SetLPFBW(device,LMS_CH_RX,0, LimeCfg.RX_LPF)!=0) error();
<               if (LMS_SetLPFBW(device,LMS_CH_TX,0, LimeCfg.TX_LPF)!=0) error();
---
>               if (LMS_SetLPFBW(device,LMS_CH_RX,chn, LimeCfg.RX_LPF)!=0) error();
>               if (LMS_SetLPFBW(device,LMS_CH_TX,chn, LimeCfg.TX_LPF)!=0) error();
866c889
<               if (LMS_GetLPFBW(device, LMS_CH_RX, 0, &LPFBW) != 0) error();
---
>               if (LMS_GetLPFBW(device, LMS_CH_RX, chn, &LPFBW) != 0) error();
868c891
<               if (LMS_GetLPFBW(device, LMS_CH_TX, 0, &LPFBW) != 0) error();
---
>               if (LMS_GetLPFBW(device, LMS_CH_TX, chn, &LPFBW) != 0) error();
918c941
<               rx_streams[ii].channel = ii; //channel number
---
>               rx_streams[ii].channel = chn; //channel number
926c949
<               tx_streams[ii].channel = ii; //channel number
---
>               tx_streams[ii].channel = chn; //channel number
1403,1406c1426
<                                               if (ii_TXrep == LimeCfg.repetitions){
<                                                TXFIFO_slots = 0;
<                                                break;
<                                               }
---
>                                               if (ii_TXrep == LimeCfg.repetitions) break;
1418,1421c1438
<                                               if (ii_TXrep == LimeCfg.repetitions){
<                                                TXFIFO_slots = 0;
<                                                break;
<                                               }
---
>                                               if (ii_TXrep == LimeCfg.repetitions) break;
1430c1447
<       /*
---
> 
1434c1451
<       */
---
> 
Here's a diff between the two versions: ```diff 323,324c323,324 < LimeCfg.TX_QcorrGain = 2039; // Q Gain corr of TX mixer < LimeCfg.TX_IQcorrPhase = 10; // Phase corr of TX mixer --- > LimeCfg.TX_QcorrGain = 2047; // Q Gain corr of TX mixer > LimeCfg.TX_IQcorrPhase = 0; // Phase corr of TX mixer 654a655,656 > int chn=1; > 664c666 < if (LMS_GetLOFrequency(device, LMS_CH_RX, 0, &frq_read) != 0) error(); --- > if (LMS_GetLOFrequency(device, LMS_CH_RX, chn, &frq_read) != 0) error(); 667c669 < if (LMS_GetSampleRate(device, LMS_CH_RX, 0, &srate_read, &rf_rate) != 0) error(); --- > if (LMS_GetSampleRate(device, LMS_CH_RX, chn, &srate_read, &rf_rate) != 0) error(); 675a678,680 > > > 714c719 < if (LMS_SetGaindB(device, LMS_CH_TX, 0, 0)!= 0) { --- > if (LMS_SetGaindB(device, LMS_CH_TX, chn, 0)!= 0) { 722c727 < if (LMS_SetGaindB(device, LMS_CH_TX, 0, 0) != 0) error(); --- > if (LMS_SetGaindB(device, LMS_CH_TX, chn, 0) != 0) error(); 724,725c729,731 < if (LMS_SetNormalizedGain(device, LMS_CH_TX, 0, 0.0) != 0) error(); < --- > if (LMS_SetNormalizedGain(device, LMS_CH_TX, chn, 0.0) != 0) error(); > if (LMS_SetNormalizedGain(device, LMS_CH_TX, chn, 0.0) != 0) error(); > 727c733 < if (LMS_SetLOFrequency(device, LMS_CH_RX, 0, LimeCfg.frq) != 0) error(); --- > if (LMS_SetLOFrequency(device, LMS_CH_RX, chn, LimeCfg.frq) != 0) error(); 730c736 < if (LMS_SetLOFrequency(device, LMS_CH_TX, 0, LimeCfg.frq) != 0) error(); --- > if (LMS_SetLOFrequency(device, LMS_CH_TX, chn, LimeCfg.frq) != 0) error(); 733c739 < if (LMS_GetLOFrequency(device, LMS_CH_RX, 0, &frq_read) != 0) error(); --- > if (LMS_GetLOFrequency(device, LMS_CH_RX, chn, &frq_read) != 0) error(); 740a747,753 > if (LMS_EnableChannel(device, LMS_CH_RX, chn, true) != 0) error(); > //Enable TX channels > if (LMS_EnableChannel(device, LMS_CH_TX, chn, true) != 0) error(); > > // fwd the TX1 LO to TX2 > if (LMS_WriteParam(device, LMS7_EN_NEXTTX_TRF, true) != 0) error(); > if (LMS_WriteParam(device, LMS7_EN_NEXTRX_RFE, true) != 0) error(); 742a756,757 > if (LMS_WriteParam(device, LMS7_MAC, chn+1) != 0) error(); > //if (LMS_WriteParam(device, LMS7_MAC, chn) != 0) error(); 744a760 > 756c772 < --- > 758c774,777 < if (LMS_WriteParam(device, LMS7_MAC, 1) != 0) error(); --- > if (LMS_WriteParam(device, LMS7_MAC, chn+1) != 0) error(); > > //if (LMS_WriteParam(device, LMS7_MAC, 1) != 0) error(); > 772c791 < if ((n = LMS_GetAntennaList(device, LMS_CH_RX, 0, antenna_list)) < 0) error(); --- > if ((n = LMS_GetAntennaList(device, LMS_CH_RX, chn, antenna_list)) < 0) error(); 778c797 < if ((n = LMS_GetAntenna(device, LMS_CH_RX, 0)) < 0) error(); --- > if ((n = LMS_GetAntenna(device, LMS_CH_RX, chn)) < 0) error(); 782c801 < if (LMS_SetAntenna(device, LMS_CH_RX, 0, LMS_PATH_LNAL) != 0) error(); --- > if (LMS_SetAntenna(device, LMS_CH_RX, chn, LMS_PATH_LNAL) != 0) error(); 785,786c804,805 < if ((n = LMS_GetAntenna(device, LMS_CH_RX, 0)) < 0) error(); < cout << "Manually selected RX LNA: " << n << ": " << antenna_list[n] << endl; --- > //if ((n = LMS_GetAntenna(device, LMS_CH_RX, 0)) < 0) error(); > //cout << "Manually selected RX LNA: " << n << ": " << antenna_list[n] << endl; 790c809 < if ((n = LMS_GetAntennaList(device, LMS_CH_TX, 0, antenna_list)) < 0) error(); --- > if ((n = LMS_GetAntennaList(device, LMS_CH_TX, chn, antenna_list)) < 0) error(); 797c816 < if ((n = LMS_GetAntenna(device, LMS_CH_TX, 0)) < 0) --- > if ((n = LMS_GetAntenna(device, LMS_CH_TX, chn)) < 0) 802c821 < int mychoice = LMS_PATH_TX1; --- > int mychoice = LMS_PATH_TX2; 804,805c823,824 < mychoice = LMS_PATH_TX1; // HACK: hardcode TX2 pathway < if (LMS_SetAntenna(device, LMS_CH_TX, 0, mychoice) != 0) error(); --- > //mychoice = LMS_PATH_TX2; // HACK: hardcode TX2 pathway > if (LMS_SetAntenna(device, LMS_CH_TX, chn, LMS_PATH_TX1) != 0) error(); 808c827 < if ((n = LMS_GetAntenna(device, LMS_CH_TX, 0)) < 0) error(); --- > if ((n = LMS_GetAntenna(device, LMS_CH_TX, chn)) < 0) error(); 813a833,836 > > //if (LMS_WriteParam(device, LMS7_MAC, chn) != 0) error(); > if (LMS_WriteParam(device, LMS7_MAC, chn+1) != 0) error(); > 827,828c850,851 < if (LMS_SetGaindB(device, LMS_CH_TX, 0, LimeCfg.TX_gain) != 0) error(); < if (LMS_SetGaindB(device, LMS_CH_RX, 0, LimeCfg.RX_gain) != 0) error(); --- > if (LMS_SetGaindB(device, LMS_CH_TX, chn, LimeCfg.TX_gain) != 0) error(); > if (LMS_SetGaindB(device, LMS_CH_RX, chn, LimeCfg.RX_gain) != 0) error(); 861,862c884,885 < if (LMS_SetLPFBW(device,LMS_CH_RX,0, LimeCfg.RX_LPF)!=0) error(); < if (LMS_SetLPFBW(device,LMS_CH_TX,0, LimeCfg.TX_LPF)!=0) error(); --- > if (LMS_SetLPFBW(device,LMS_CH_RX,chn, LimeCfg.RX_LPF)!=0) error(); > if (LMS_SetLPFBW(device,LMS_CH_TX,chn, LimeCfg.TX_LPF)!=0) error(); 866c889 < if (LMS_GetLPFBW(device, LMS_CH_RX, 0, &LPFBW) != 0) error(); --- > if (LMS_GetLPFBW(device, LMS_CH_RX, chn, &LPFBW) != 0) error(); 868c891 < if (LMS_GetLPFBW(device, LMS_CH_TX, 0, &LPFBW) != 0) error(); --- > if (LMS_GetLPFBW(device, LMS_CH_TX, chn, &LPFBW) != 0) error(); 918c941 < rx_streams[ii].channel = ii; //channel number --- > rx_streams[ii].channel = chn; //channel number 926c949 < tx_streams[ii].channel = ii; //channel number --- > tx_streams[ii].channel = chn; //channel number 1403,1406c1426 < if (ii_TXrep == LimeCfg.repetitions){ < TXFIFO_slots = 0; < break; < } --- > if (ii_TXrep == LimeCfg.repetitions) break; 1418,1421c1438 < if (ii_TXrep == LimeCfg.repetitions){ < TXFIFO_slots = 0; < break; < } --- > if (ii_TXrep == LimeCfg.repetitions) break; 1430c1447 < /* --- > 1434c1451 < */ --- > ```
jupfi commented 2024-02-07 09:50:50 +00:00 (Migrated from github.com)

The LimeMini2.0 only has one TX path, so we need to check for that...
The information is in the LMS_GetDeviceList()

The LimeMini2.0 only has one TX path, so we need to check for that... The information is in the LMS_GetDeviceList()
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: nqrduck/limedriver#5
No description provided.