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
This commit is contained in:
parent
a4316ee4c5
commit
0fc20d14b3
|
@ -148,6 +148,9 @@ class RadioDevice {
|
||||||
/** return the used RX path */
|
/** return the used RX path */
|
||||||
virtual std::string getTxAntenna(size_t chan = 0) = 0;
|
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 */
|
/** Return internal status values */
|
||||||
virtual double getTxFreq(size_t chan = 0) = 0;
|
virtual double getTxFreq(size_t chan = 0) = 0;
|
||||||
virtual double getRxFreq(size_t chan = 0) = 0;
|
virtual double getRxFreq(size_t chan = 0) = 0;
|
||||||
|
|
|
@ -255,6 +255,8 @@ public:
|
||||||
bool setTxAntenna(const std::string &ant, size_t chan);
|
bool setTxAntenna(const std::string &ant, size_t chan);
|
||||||
std::string getTxAntenna(size_t chan);
|
std::string getTxAntenna(size_t chan);
|
||||||
|
|
||||||
|
bool requiresRadioAlign();
|
||||||
|
|
||||||
inline double getSampleRate() { return tx_rate; }
|
inline double getSampleRate() { return tx_rate; }
|
||||||
inline double numberRead() { return rx_pkt_cnt; }
|
inline double numberRead() { return rx_pkt_cnt; }
|
||||||
inline double numberWritten() { return 0; }
|
inline double numberWritten() { return 0; }
|
||||||
|
@ -1282,6 +1284,11 @@ std::string uhd_device::getTxAntenna(size_t chan)
|
||||||
return usrp_dev->get_tx_antenna(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.
|
* 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
|
* Using Tx with 4 SPS and Rx at 1 SPS is the only allowed mixed
|
||||||
|
|
|
@ -353,6 +353,10 @@ std::string USRPDevice::getTxAntenna(size_t chan)
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool USRPDevice::requiresRadioAlign()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// NOTE: Assumes sequential reads
|
// NOTE: Assumes sequential reads
|
||||||
int USRPDevice::readSamples(std::vector<short *> &bufs, int len, bool *overrun,
|
int USRPDevice::readSamples(std::vector<short *> &bufs, int len, bool *overrun,
|
||||||
|
|
|
@ -191,6 +191,9 @@ private:
|
||||||
/* return the used RX path */
|
/* return the used RX path */
|
||||||
std::string getTxAntenna(size_t chan = 0);
|
std::string getTxAntenna(size_t chan = 0);
|
||||||
|
|
||||||
|
/** return whether user drives synchronization of Tx/Rx of USRP */
|
||||||
|
bool requiresRadioAlign();
|
||||||
|
|
||||||
/** Return internal status values */
|
/** Return internal status values */
|
||||||
inline double getTxFreq(size_t chan = 0) { return 0; }
|
inline double getTxFreq(size_t chan = 0) { return 0; }
|
||||||
inline double getRxFreq(size_t chan = 0) { return 0; }
|
inline double getRxFreq(size_t chan = 0) { return 0; }
|
||||||
|
|
|
@ -145,16 +145,31 @@ bool RadioInterface::tuneRx(double freq, size_t chan)
|
||||||
return mRadio->setRxFreq(freq, 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()
|
bool RadioInterface::start()
|
||||||
{
|
{
|
||||||
if (mOn)
|
if (mOn)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
LOG(INFO) << "Starting radio device";
|
LOG(INFO) << "Starting radio device";
|
||||||
#ifdef DEVICE_USRP1
|
if (mRadio->requiresRadioAlign())
|
||||||
mAlignRadioServiceLoopThread.start((void * (*)(void*))AlignRadioServiceLoopAdapter,
|
mAlignRadioServiceLoopThread.start(
|
||||||
(void*)this);
|
(void * (*)(void*))AlignRadioServiceLoopAdapter,
|
||||||
#endif
|
(void*)this);
|
||||||
|
|
||||||
if (!mRadio->start())
|
if (!mRadio->start())
|
||||||
return false;
|
return false;
|
||||||
|
@ -191,22 +206,6 @@ bool RadioInterface::stop()
|
||||||
return true;
|
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,
|
void RadioInterface::driveTransmitRadio(std::vector<signalVector *> &bursts,
|
||||||
std::vector<bool> &zeros)
|
std::vector<bool> &zeros)
|
||||||
{
|
{
|
||||||
|
|
|
@ -133,21 +133,13 @@ public:
|
||||||
/** get transport window type of attached device */
|
/** get transport window type of attached device */
|
||||||
enum RadioDevice::TxWindowType getWindowType() { return mRadio->getWindowType(); }
|
enum RadioDevice::TxWindowType getWindowType() { return mRadio->getWindowType(); }
|
||||||
|
|
||||||
#if DEVICE_USRP1
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
/** drive synchronization of Tx/Rx of USRP */
|
/** drive synchronization of Tx/Rx of USRP */
|
||||||
void alignRadio();
|
void alignRadio();
|
||||||
|
|
||||||
friend void *AlignRadioServiceLoopAdapter(RadioInterface*);
|
friend void *AlignRadioServiceLoopAdapter(RadioInterface*);
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DEVICE_USRP1
|
|
||||||
/** synchronization thread loop */
|
|
||||||
void *AlignRadioServiceLoopAdapter(RadioInterface*);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class RadioInterfaceResamp : public RadioInterface {
|
class RadioInterfaceResamp : public RadioInterface {
|
||||||
private:
|
private:
|
||||||
signalVector *outerSendBuffer;
|
signalVector *outerSendBuffer;
|
||||||
|
|
Loading…
Reference in New Issue