diff options
Diffstat (limited to 'Transceiver52M/runTransceiver.cpp')
-rw-r--r-- | Transceiver52M/runTransceiver.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/Transceiver52M/runTransceiver.cpp b/Transceiver52M/runTransceiver.cpp new file mode 100644 index 0000000..d51720c --- /dev/null +++ b/Transceiver52M/runTransceiver.cpp @@ -0,0 +1,123 @@ +/* +* Copyright 2008, 2009, 2010 Free Software Foundation, Inc. +* Copyright 2010 Kestrel Signal Processing, Inc. +* +* This software is distributed under the terms of the GNU Affero 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 Affero 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +*/ + + + +#include "Transceiver.h" +#include "USRPDevice.h" +#include "DummyLoad.h" + +#include <time.h> +#include <signal.h> + +#include <GSMCommon.h> +#include <Logger.h> +#include <Configuration.h> + +using namespace std; + +ConfigurationTable gConfig("/etc/OpenBTS/OpenBTS.db"); + + +volatile bool gbShutdown = false; +static void ctrlCHandler(int signo) +{ + cout << "Received shutdown signal" << endl;; + gbShutdown = true; +} + + +int main(int argc, char *argv[]) +{ + if ( signal( SIGINT, ctrlCHandler ) == SIG_ERR ) + { + cerr << "Couldn't install signal handler for SIGINT" << endl; + exit(1); + } + + if ( signal( SIGTERM, ctrlCHandler ) == SIG_ERR ) + { + cerr << "Couldn't install signal handler for SIGTERM" << endl; + exit(1); + } + // Configure logger. + gLogInit("transceiver",gConfig.getStr("Log.Level").c_str(),LOG_LOCAL7); + + int numARFCN=1; + + LOG(NOTICE) << "starting transceiver with " << numARFCN << " ARFCNs (argc=" << argc << ")"; + + srandom(time(NULL)); + + int mOversamplingRate = numARFCN/2 + numARFCN; + //DYNDevice *usrp = new DYNDevice(mOversamplingRate*1625.0e3/6.0); + USRPDevice *usrp = new USRPDevice(mOversamplingRate*1625.0e3/6.0); + //DummyLoad *usrp = new DummyLoad(mOversamplingRate*1625.0e3/6.0); + usrp->make(); + + RadioInterface* radio = new RadioInterface(usrp,3,SAMPSPERSYM,mOversamplingRate,false); + Transceiver *trx = new Transceiver(5700,"127.0.0.1",SAMPSPERSYM,GSM::Time(2,0),radio); + trx->receiveFIFO(radio->receiveFIFO()); +/* + signalVector *gsmPulse = generateGSMPulse(2,1); + BitVector normalBurstSeg = "0000101010100111110010101010010110101110011000111001101010000"; + BitVector normalBurst(BitVector(normalBurstSeg,gTrainingSequence[0]),normalBurstSeg); + signalVector *modBurst = modulateBurst(normalBurst,*gsmPulse,8,1); + signalVector *modBurst9 = modulateBurst(normalBurst,*gsmPulse,9,1); + signalVector *interpolationFilter = createLPF(0.6/mOversamplingRate,6*mOversamplingRate,1); + signalVector totalBurst1(*modBurst,*modBurst9); + signalVector totalBurst2(*modBurst,*modBurst); + signalVector totalBurst(totalBurst1,totalBurst2); + scaleVector(totalBurst,usrp->fullScaleInputValue()); + double beaconFreq = -1.0*(numARFCN-1)*200e3; + signalVector finalVec(625*mOversamplingRate); + for (int j = 0; j < numARFCN; j++) { + signalVector *frequencyShifter = new signalVector(625*mOversamplingRate); + frequencyShifter->fill(1.0); + frequencyShift(frequencyShifter,frequencyShifter,2.0*M_PI*(beaconFreq+j*400e3)/(1625.0e3/6.0*mOversamplingRate)); + signalVector *interpVec = polyphaseResampleVector(totalBurst,mOversamplingRate,1,interpolationFilter); + multVector(*interpVec,*frequencyShifter); + addVector(finalVec,*interpVec); + } + signalVector::iterator itr = finalVec.begin(); + short finalVecShort[2*finalVec.size()]; + short *shortItr = finalVecShort; + while (itr < finalVec.end()) { + *shortItr++ = (short) (itr->real()); + *shortItr++ = (short) (itr->imag()); + itr++; + } + usrp->loadBurst(finalVecShort,finalVec.size()); +*/ + trx->start(); + //int i = 0; + while(!gbShutdown) { sleep(1); }//i++; if (i==60) break;} + + cout << "Shutting down transceiver..." << endl; + +// trx->stop(); + delete trx; +// delete radio; +} |