aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M
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 /Transceiver52M
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
Diffstat (limited to 'Transceiver52M')
-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;