133 lines
4.0 KiB
C++
133 lines
4.0 KiB
C++
/*
|
|
* 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;}
|
|
|
|
};
|
|
|