/* * Copyright 2008 Free Software Foundation, Inc. * * This software is distributed under the terms of the GNU Public License. * See the COPYING file in the main directory for details. * * This use of this software may be subject to additional restrictions. * See the LEGAL file in the main directory for details. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "radioDevice.h" #include #include #include #include /** A class to handle a USRP rev 4, with a two RFX900 daughterboards */ class DummyLoad: public RadioDevice { private: double sampleRate; ///< the desired sampling rate unsigned long long samplesRead; ///< number of samples read from USRP unsigned long long samplesWritten; ///< number of samples sent to USRP Mutex underrunLock; struct timeval startTime, currTime; TIMESTAMP currstamp; short *dummyBurst; int dummyBurstSz; int dummyBurstCursor; bool underrun; void updateTime(void); public: /** Object constructor */ DummyLoad (double _desiredSampleRate); int loadBurst(short *wDummyBurst, int len); /** Instantiate the USRP */ bool make(bool skipRx = false); /** Start the USRP */ bool start(); /** Stop the USRP */ bool stop(); /** Read samples from the USRP. @param buf preallocated buf to contain read result @param len number of samples desired @param overrun Set if read buffer has been overrun, e.g. data not being read fast enough @param timestamp The timestamp of the first samples to be read @param underrun Set if USRP does not have data to transmit, e.g. data not being sent fast enough @param RSSI The received signal strength of the read result @return The number of samples actually read */ int readSamples(short *buf, int len, bool *overrun, TIMESTAMP timestamp = 0xffffffff, bool *underrun = NULL, unsigned *RSSI = NULL); /** Write samples to the USRP. @param buf Contains the data to be written. @param len number of samples to write. @param underrun Set if USRP does not have data to transmit, e.g. data not being sent fast enough @param timestamp The timestamp of the first sample of the data buffer. @param isControl Set if data is a control packet, e.g. a ping command @return The number of samples actually written */ int writeSamples(short *buf, int len, bool *underrun, TIMESTAMP timestamp = 0xffffffff, bool isControl = false); /** Update the alignment between the read and write timestamps */ bool updateAlignment(TIMESTAMP timestamp); /** Set the transmitter frequency */ bool setTxFreq(double wFreq); /** Set the receiver frequency */ bool setRxFreq(double wFreq); /** Returns the starting write Timestamp*/ TIMESTAMP initialWriteTimestamp(void) { return 20000;} /** Returns the starting read Timestamp*/ TIMESTAMP initialReadTimestamp(void) { return 20000;} /** returns the full-scale transmit amplitude **/ double fullScaleInputValue() {return 13500.0;} /** returns the full-scale receive amplitude **/ double fullScaleOutputValue() {return 9450.0;} /** Return internal status values */ inline double getTxFreq() { return 0;} inline double getRxFreq() { return 0;} inline double getSampleRate() {return sampleRate;} inline double numberRead() { return samplesRead; } inline double numberWritten() { return samplesWritten;} };