aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Transceiver52M/Transceiver.cpp7
-rw-r--r--Transceiver52M/UHDDevice.cpp82
-rw-r--r--Transceiver52M/radioDevice.h10
-rw-r--r--Transceiver52M/radioInterface.cpp12
-rw-r--r--Transceiver52M/radioInterface.h6
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();