diff options
Diffstat (limited to 'Transceiver52M/DummyLoad.h')
-rw-r--r-- | Transceiver52M/DummyLoad.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/Transceiver52M/DummyLoad.h b/Transceiver52M/DummyLoad.h new file mode 100644 index 0000000..74a962d --- /dev/null +++ b/Transceiver52M/DummyLoad.h @@ -0,0 +1,132 @@ +/* +* 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 <http://www.gnu.org/licenses/>. + +*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "radioDevice.h" + + +#include <sys/time.h> +#include <math.h> +#include <string> +#include <iostream> + + +/** 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;} + +}; + |