aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/runTransceiver.cpp
diff options
context:
space:
mode:
authordburgess <dburgess@19bc5d8c-e614-43d4-8b26-e1612bc8e597>2011-10-12 07:44:40 +0000
committerdburgess <dburgess@19bc5d8c-e614-43d4-8b26-e1612bc8e597>2011-10-12 07:44:40 +0000
commitb3a0ca42db0bd08c58b9370a1398528016e6953f (patch)
tree1e81558498b765f0faac4c8588c18fbc4bfc8dfb /Transceiver52M/runTransceiver.cpp
parentec3d77d0eaa12c102893490766557dd4d4efd029 (diff)
Adding in the missing Transceiver52M directory
git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@2307 19bc5d8c-e614-43d4-8b26-e1612bc8e597
Diffstat (limited to 'Transceiver52M/runTransceiver.cpp')
-rw-r--r--Transceiver52M/runTransceiver.cpp123
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;
+}