diff options
-rw-r--r-- | Transceiver52M/Transceiver.cpp | 7 | ||||
-rw-r--r-- | Transceiver52M/UHDDevice.cpp | 82 | ||||
-rw-r--r-- | Transceiver52M/radioDevice.h | 10 | ||||
-rw-r--r-- | Transceiver52M/radioInterface.cpp | 12 | ||||
-rw-r--r-- | Transceiver52M/radioInterface.h | 6 |
5 files changed, 66 insertions, 51 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp index 7551faa..67f6822 100644 --- a/Transceiver52M/Transceiver.cpp +++ b/Transceiver52M/Transceiver.cpp @@ -408,10 +408,8 @@ void Transceiver::driveControl() //set expected maximum time-of-arrival int newGain; sscanf(buffer,"%3s %s %d",cmdcheck,command,&newGain); - newGain = mRadioInterface->setRxGain(newGain); mEnergyThreshold = INIT_ENERGY_THRSHD; - if (mPrimary) - newGain = mRadioInterface->setRxGain(newGain); + newGain = mRadioInterface->setRxGain(newGain, mChannel); sprintf(response,"RSP SETRXGAIN 0 %d",newGain); } else if (strcmp(command,"NOISELEV")==0) { @@ -431,8 +429,7 @@ void Transceiver::driveControl() sprintf(response,"RSP SETPOWER 1 %d",dbPwr); else { mPower = dbPwr; - if (mPrimary) - mRadioInterface->setPowerAttenuation(dbPwr); + mRadioInterface->setPowerAttenuation(dbPwr, mChannel); sprintf(response,"RSP SETPOWER 0 %d",dbPwr); } } diff --git a/Transceiver52M/UHDDevice.cpp b/Transceiver52M/UHDDevice.cpp index fc31231..df17ff6 100644 --- a/Transceiver52M/UHDDevice.cpp +++ b/Transceiver52M/UHDDevice.cpp @@ -242,12 +242,12 @@ public: inline double fullScaleInputValue() { return 32000 * TX_AMPL; } inline double fullScaleOutputValue() { return 32000; } - double setRxGain(double db); - double getRxGain(void) { return rx_gain; } + double setRxGain(double db, int chan); + double getRxGain(int chan) { return !chan ? rx_gain[0] : tx_gain[1]; } double maxRxGain(void) { return rx_gain_max; } double minRxGain(void) { return rx_gain_min; } - double setTxGain(double db); + double setTxGain(double db, int chan); double maxTxGain(void) { return tx_gain_max; } double minTxGain(void) { return tx_gain_min; } void setTxAntenna(std::string &name); @@ -255,8 +255,8 @@ public: std::string getRxAntenna(); std::string getTxAntenna(); - double getTxFreq() { return tx_freq; } - double getRxFreq() { return rx_freq; } + double getTxFreq(int chan) { return !chan ? tx_freq[0] : tx_freq[1]; } + double getRxFreq(int chan) { return !chan ? rx_freq[0] : rx_freq[1]; } inline double getSampleRate() { return actual_smpl_rt; } inline double numberRead() { return rx_pkt_cnt; } @@ -284,10 +284,10 @@ private: int sps; double desired_smpl_rt, actual_smpl_rt; - double tx_gain, tx_gain_min, tx_gain_max; - double rx_gain, rx_gain_min, rx_gain_max; + double tx_gain[NUM_TX_CHANS], tx_gain_min, tx_gain_max; + double rx_gain[NUM_RX_CHANS], rx_gain_min, rx_gain_max; - double tx_freq, rx_freq; + double tx_freq[NUM_TX_CHANS], rx_freq[NUM_RX_CHANS]; size_t tx_spp, rx_spp; bool started; @@ -346,17 +346,25 @@ void uhd_msg_handler(uhd::msg::type_t type, const std::string &msg) } uhd_device::uhd_device(int sps, bool skip_rx) - : tx_gain(0.0), tx_gain_min(0.0), tx_gain_max(0.0), - rx_gain(0.0), rx_gain_min(0.0), rx_gain_max(0.0), - tx_freq(0.0), rx_freq(0.0), tx_spp(0), rx_spp(0), - started(false), aligned(false), rx_pkt_cnt(0), drop_cnt(0), - prev_ts(0,0), ts_offset(0), async_event_thrd(NULL) + : tx_gain_min(0.0), tx_gain_max(0.0), + rx_gain_min(0.0), rx_gain_max(0.0), + tx_spp(0), rx_spp(0), started(false), aligned(false), + rx_pkt_cnt(0), drop_cnt(0), prev_ts(0,0), ts_offset(0), + async_event_thrd(NULL) { this->sps = sps; this->skip_rx = skip_rx; - for (int i = 0; i < NUM_RX_CHANS; i++) + for (int i = 0; i < NUM_TX_CHANS; i++) { + tx_freq[i] = 0.0f; + tx_gain[i] = 0.0f; + } + + for (int i = 0; i < NUM_RX_CHANS; i++) { rx_smpl_buf[i] = NULL; + rx_freq[i] = 0.0f; + rx_gain[i] = 0.0f; + } } uhd_device::~uhd_device() @@ -381,11 +389,15 @@ void uhd_device::init_gains() rx_gain_min = range.start(); rx_gain_max = range.stop(); - usrp_dev->set_tx_gain((tx_gain_min + tx_gain_max) / 2); - usrp_dev->set_rx_gain((rx_gain_min + rx_gain_max) / 2); + for (int i = 0; i < NUM_TX_CHANS; i++) { + usrp_dev->set_tx_gain((tx_gain_min + tx_gain_max) / 2, i); + tx_gain[i] = usrp_dev->get_tx_gain(i); + } - tx_gain = usrp_dev->get_tx_gain(); - rx_gain = usrp_dev->get_rx_gain(); + for (int i = 0; i < NUM_RX_CHANS; i++) { + usrp_dev->set_rx_gain((rx_gain_min + rx_gain_max) / 2, i); + rx_gain[i] = usrp_dev->get_rx_gain(i); + } return; } @@ -455,26 +467,32 @@ int uhd_device::set_rates(double rate) return 0; } -double uhd_device::setTxGain(double db) +double uhd_device::setTxGain(double db, int chan) { - for (int i = 0; i < NUM_TX_CHANS; i++) { - usrp_dev->set_tx_gain(db, i); - tx_gain = usrp_dev->get_tx_gain(i); - LOG(INFO) << "Set TX gain to " << tx_gain << "dB"; + if (chan >= NUM_TX_CHANS) { + LOG(ALERT) << "Attempting to set gain on non-existent channel"; + return 0.0f; } - return tx_gain; + usrp_dev->set_tx_gain(db, chan); + tx_gain[chan] = usrp_dev->get_tx_gain(chan); + LOG(INFO) << "Set TX gain to " << tx_gain[chan] << "dB"; + + return tx_gain[chan]; } -double uhd_device::setRxGain(double db) +double uhd_device::setRxGain(double db, int chan) { - for (int i = 0; i < NUM_RX_CHANS; i++) { - usrp_dev->set_rx_gain(db); - rx_gain = usrp_dev->get_rx_gain(); - LOG(INFO) << "Set RX gain to " << rx_gain << "dB"; + if (chan >= NUM_RX_CHANS) { + LOG(ALERT) << "Attempting to read gain non-existent channel"; + return 0.0f; } - return rx_gain; + usrp_dev->set_rx_gain(db, chan); + rx_gain[chan] = usrp_dev->get_rx_gain(chan); + LOG(INFO) << "Set RX gain to " << rx_gain[chan] << "dB"; + + return rx_gain[chan]; } void uhd_device::setTxAntenna(std::string &name) @@ -911,7 +929,7 @@ bool uhd_device::setTxFreq(double wFreq, int chan) uhd::tune_result_t tr = usrp_dev->set_tx_freq(wFreq, chan); LOG(INFO) << "\n" << tr.to_pp_string(); - tx_freq = usrp_dev->get_tx_freq(chan); + tx_freq[chan] = usrp_dev->get_tx_freq(chan); return true; } @@ -925,7 +943,7 @@ bool uhd_device::setRxFreq(double wFreq, int chan) uhd::tune_result_t tr = usrp_dev->set_rx_freq(wFreq, chan); LOG(INFO) << "\n" << tr.to_pp_string(); - rx_freq = usrp_dev->get_rx_freq(chan); + rx_freq[chan] = usrp_dev->get_rx_freq(chan); return true; } diff --git a/Transceiver52M/radioDevice.h b/Transceiver52M/radioDevice.h index 35cc82b..3e33297 100644 --- a/Transceiver52M/radioDevice.h +++ b/Transceiver52M/radioDevice.h @@ -102,10 +102,10 @@ class RadioDevice { virtual double fullScaleOutputValue()=0; /** sets the receive chan gain, returns the gain setting **/ - virtual double setRxGain(double dB)=0; + virtual double setRxGain(double dB, int chan = 0)=0; /** gets the current receive gain **/ - virtual double getRxGain(void)=0; + virtual double getRxGain(int chan = 0)=0; /** return maximum Rx Gain **/ virtual double maxRxGain(void) = 0; @@ -114,7 +114,7 @@ class RadioDevice { virtual double minRxGain(void) = 0; /** sets the transmit chan gain, returns the gain setting **/ - virtual double setTxGain(double dB)=0; + virtual double setTxGain(double dB, int chan = 0)=0; /** return maximum Tx Gain **/ virtual double maxTxGain(void) = 0; @@ -129,8 +129,8 @@ class RadioDevice { virtual std::string getTxAntenna() = 0; /** Return internal status values */ - virtual double getTxFreq()=0; - virtual double getRxFreq()=0; + virtual double getTxFreq(int chan = 0)=0; + virtual double getRxFreq(int chan = 0)=0; virtual double getSampleRate()=0; virtual double numberRead()=0; virtual double numberWritten()=0; diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp index 40826e9..719a8ff 100644 --- a/Transceiver52M/radioInterface.cpp +++ b/Transceiver52M/radioInterface.cpp @@ -87,11 +87,11 @@ double RadioInterface::fullScaleOutputValue(void) { } -void RadioInterface::setPowerAttenuation(double atten) +void RadioInterface::setPowerAttenuation(double atten, int chan) { double rfGain, digAtten; - rfGain = mRadio->setTxGain(mRadio->maxTxGain() - atten); + rfGain = mRadio->setTxGain(mRadio->maxTxGain() - atten, chan); digAtten = atten - mRadio->maxTxGain() + rfGain; if (digAtten < 1.0) @@ -285,18 +285,18 @@ void RadioInterface::driveReceiveRadio() } } -double RadioInterface::setRxGain(double dB) +double RadioInterface::setRxGain(double dB, int chan) { if (mRadio) - return mRadio->setRxGain(dB); + return mRadio->setRxGain(dB, chan); else return -1; } -double RadioInterface::getRxGain() +double RadioInterface::getRxGain(int chan) { if (mRadio) - return mRadio->getRxGain(); + return mRadio->getRxGain(chan); else return -1; } diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h index b02cadc..05ac299 100644 --- a/Transceiver52M/radioInterface.h +++ b/Transceiver52M/radioInterface.h @@ -127,10 +127,10 @@ public: bool tuneRx(double freq, int chan = 0); /** set receive gain */ - double setRxGain(double dB); + double setRxGain(double dB, int chan = 0); /** get receive gain */ - double getRxGain(void); + double getRxGain(int chan = 0); /** drive transmission of GSM bursts */ void driveTransmitRadio(signalVector **radioBurst, bool *zeroBurst); @@ -138,7 +138,7 @@ public: /** drive reception of GSM bursts */ void driveReceiveRadio(); - void setPowerAttenuation(double atten); + void setPowerAttenuation(double atten, int chan = 0); /** returns the full-scale transmit amplitude **/ double fullScaleInputValue(); |