aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2018-04-24 17:48:52 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2018-04-24 18:46:48 +0200
commit0fc20d14b31c116b758dbfb9a1988b619270a034 (patch)
treeff698cfcc48ef527c50ad323e565ecdbcabfbe7f
parenta4316ee4c5d2f097823616f1ca3fa82b2f25204c (diff)
Move device specific code out of radioInterface
This way code of radioInterface is independent of the device and doesn't need to be rebuild for each device. Change-Id: Id104e1edef02f863b6465ced5b4241050dc188f9
-rw-r--r--Transceiver52M/device/radioDevice.h3
-rw-r--r--Transceiver52M/device/uhd/UHDDevice.cpp7
-rw-r--r--Transceiver52M/device/usrp1/USRPDevice.cpp4
-rw-r--r--Transceiver52M/device/usrp1/USRPDevice.h3
-rw-r--r--Transceiver52M/radioInterface.cpp39
-rw-r--r--Transceiver52M/radioInterface.h8
6 files changed, 36 insertions, 28 deletions
diff --git a/Transceiver52M/device/radioDevice.h b/Transceiver52M/device/radioDevice.h
index 9913de0..8915b17 100644
--- a/Transceiver52M/device/radioDevice.h
+++ b/Transceiver52M/device/radioDevice.h
@@ -148,6 +148,9 @@ class RadioDevice {
/** return the used RX path */
virtual std::string getTxAntenna(size_t chan = 0) = 0;
+ /** return whether user drives synchronization of Tx/Rx of USRP */
+ virtual bool requiresRadioAlign() = 0;
+
/** Return internal status values */
virtual double getTxFreq(size_t chan = 0) = 0;
virtual double getRxFreq(size_t chan = 0) = 0;
diff --git a/Transceiver52M/device/uhd/UHDDevice.cpp b/Transceiver52M/device/uhd/UHDDevice.cpp
index 4466da4..ecdebe1 100644
--- a/Transceiver52M/device/uhd/UHDDevice.cpp
+++ b/Transceiver52M/device/uhd/UHDDevice.cpp
@@ -255,6 +255,8 @@ public:
bool setTxAntenna(const std::string &ant, size_t chan);
std::string getTxAntenna(size_t chan);
+ bool requiresRadioAlign();
+
inline double getSampleRate() { return tx_rate; }
inline double numberRead() { return rx_pkt_cnt; }
inline double numberWritten() { return 0; }
@@ -1282,6 +1284,11 @@ std::string uhd_device::getTxAntenna(size_t chan)
return usrp_dev->get_tx_antenna(chan);
}
+bool uhd_device::requiresRadioAlign()
+{
+ return false;
+}
+
/*
* Only allow sampling the Rx path lower than Tx and not vice-versa.
* Using Tx with 4 SPS and Rx at 1 SPS is the only allowed mixed
diff --git a/Transceiver52M/device/usrp1/USRPDevice.cpp b/Transceiver52M/device/usrp1/USRPDevice.cpp
index f7f24e9..455528a 100644
--- a/Transceiver52M/device/usrp1/USRPDevice.cpp
+++ b/Transceiver52M/device/usrp1/USRPDevice.cpp
@@ -353,6 +353,10 @@ std::string USRPDevice::getTxAntenna(size_t chan)
return "";
}
+bool USRPDevice::requiresRadioAlign()
+{
+ return true;
+}
// NOTE: Assumes sequential reads
int USRPDevice::readSamples(std::vector<short *> &bufs, int len, bool *overrun,
diff --git a/Transceiver52M/device/usrp1/USRPDevice.h b/Transceiver52M/device/usrp1/USRPDevice.h
index f981643..9091dea 100644
--- a/Transceiver52M/device/usrp1/USRPDevice.h
+++ b/Transceiver52M/device/usrp1/USRPDevice.h
@@ -191,6 +191,9 @@ private:
/* return the used RX path */
std::string getTxAntenna(size_t chan = 0);
+ /** return whether user drives synchronization of Tx/Rx of USRP */
+ bool requiresRadioAlign();
+
/** Return internal status values */
inline double getTxFreq(size_t chan = 0) { return 0; }
inline double getRxFreq(size_t chan = 0) { return 0; }
diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp
index c3063ff..a377436 100644
--- a/Transceiver52M/radioInterface.cpp
+++ b/Transceiver52M/radioInterface.cpp
@@ -145,16 +145,31 @@ bool RadioInterface::tuneRx(double freq, size_t chan)
return mRadio->setRxFreq(freq, chan);
}
+/** synchronization thread loop */
+void *AlignRadioServiceLoopAdapter(RadioInterface *radioInterface)
+{
+ while (1) {
+ sleep(60);
+ radioInterface->alignRadio();
+ pthread_testcancel();
+ }
+ return NULL;
+}
+
+void RadioInterface::alignRadio() {
+ mRadio->updateAlignment(writeTimestamp+ (TIMESTAMP) 10000);
+}
+
bool RadioInterface::start()
{
if (mOn)
return true;
LOG(INFO) << "Starting radio device";
-#ifdef DEVICE_USRP1
- mAlignRadioServiceLoopThread.start((void * (*)(void*))AlignRadioServiceLoopAdapter,
- (void*)this);
-#endif
+ if (mRadio->requiresRadioAlign())
+ mAlignRadioServiceLoopThread.start(
+ (void * (*)(void*))AlignRadioServiceLoopAdapter,
+ (void*)this);
if (!mRadio->start())
return false;
@@ -191,22 +206,6 @@ bool RadioInterface::stop()
return true;
}
-#ifdef DEVICE_USRP1
-void *AlignRadioServiceLoopAdapter(RadioInterface *radioInterface)
-{
- while (1) {
- radioInterface->alignRadio();
- pthread_testcancel();
- }
- return NULL;
-}
-
-void RadioInterface::alignRadio() {
- sleep(60);
- mRadio->updateAlignment(writeTimestamp+ (TIMESTAMP) 10000);
-}
-#endif
-
void RadioInterface::driveTransmitRadio(std::vector<signalVector *> &bursts,
std::vector<bool> &zeros)
{
diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h
index e05d871..6b482d1 100644
--- a/Transceiver52M/radioInterface.h
+++ b/Transceiver52M/radioInterface.h
@@ -133,21 +133,13 @@ public:
/** get transport window type of attached device */
enum RadioDevice::TxWindowType getWindowType() { return mRadio->getWindowType(); }
-#if DEVICE_USRP1
protected:
-
/** drive synchronization of Tx/Rx of USRP */
void alignRadio();
friend void *AlignRadioServiceLoopAdapter(RadioInterface*);
-#endif
};
-#if DEVICE_USRP1
-/** synchronization thread loop */
-void *AlignRadioServiceLoopAdapter(RadioInterface*);
-#endif
-
class RadioInterfaceResamp : public RadioInterface {
private:
signalVector *outerSendBuffer;