aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Tsou <ttsou@vt.edu>2012-03-13 18:06:10 -0400
committerAlexander Chemeris <Alexander.Chemeris@gmail.com>2013-06-24 01:51:02 +0400
commit7c6f58af7a9685c50f33ea72c7bddc884b85de2f (patch)
treee8d7cd8d85c09cae64c146e9c6203c4544fbfe5e
parent996f426c16d7cf804fc6692e4eb4c59589e82691 (diff)
multi-arfcn, trx: add and modify transceiver main for new interfaces
Add a transceiver main() for multi-arfcn use and modify single channel transceiver for use with updated interfaces. Setup multiTRX with 3 channels for default case. Signed-off-by: Thomas Tsou <ttsou@vt.edu>
-rw-r--r--Transceiver52M/multiTRX.cpp116
-rw-r--r--Transceiver52M/runTransceiver.cpp15
2 files changed, 126 insertions, 5 deletions
diff --git a/Transceiver52M/multiTRX.cpp b/Transceiver52M/multiTRX.cpp
new file mode 100644
index 0000000..a68f234
--- /dev/null
+++ b/Transceiver52M/multiTRX.cpp
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2012 Thomas Tsou <ttsou@vt.edu>
+ *
+ * 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/>.
+ * See the COPYING file in the main directory for details.
+ */
+
+#include <time.h>
+#include <signal.h>
+
+#include <GSMCommon.h>
+#include <Logger.h>
+#include <Configuration.h>
+
+#include "Transceiver.h"
+#include "radioDevice.h"
+
+#define DEVICERATE (400e3 * CHAN_M)
+
+ConfigurationTable gConfig("/etc/OpenBTS/OpenBTS.db");
+
+volatile bool gbShutdown = false;
+
+static void sigHandler(int signum)
+{
+ LOG(NOTICE) << "Received shutdown signal";
+ gbShutdown = true;
+}
+
+static int setupSignals()
+{
+ struct sigaction action;
+
+ action.sa_handler = sigHandler;
+ sigemptyset(&action.sa_mask);
+ action.sa_flags = 0;
+
+ if (sigaction(SIGINT, &action, NULL) < 0)
+ return -1;
+
+ if (sigaction(SIGTERM, &action, NULL) < 0)
+ return -1;
+
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ RadioDevice *usrp;
+ RadioInterface* radio;
+ DriveLoop *drive;
+ Transceiver *trx0, *trx1, *trx2;
+
+ gLogInit("transceiver", gConfig.getStr("Log.Level").c_str(), LOG_LOCAL7);
+
+ if (setupSignals() < 0) {
+ LOG(ERR) << "Failed to setup signal handlers, exiting...";
+ exit(-1);
+ }
+
+ srandom(time(NULL));
+
+ usrp = RadioDevice::make(DEVICERATE);
+ if (!usrp->open()) {
+ LOG(ALERT) << "Failed to open device, exiting...";
+ return EXIT_FAILURE;
+ }
+
+ radio = new RadioInterface(usrp, 3, SAMPSPERSYM, 0, false);
+ drive = new DriveLoop(SAMPSPERSYM, GSM::Time(3,0), radio);
+
+ LOG(NOTICE) << "Creating TRX0";
+ trx0 = new Transceiver(5700, "127.0.0.1", SAMPSPERSYM, radio, drive, 0);
+ trx0->receiveFIFO(radio->receiveFIFO(0));
+ trx0->transmitQueue(drive->priorityQueue(0));
+ radio->activateChan(0);
+ trx0->start();
+
+ LOG(NOTICE) << "Creating TRX1";
+ trx1 = new Transceiver(6700, "127.0.0.1", SAMPSPERSYM, radio, drive, 1);
+ trx1->receiveFIFO(radio->receiveFIFO(1));
+ trx1->transmitQueue(drive->priorityQueue(1));
+ radio->activateChan(1);
+ trx1->start();
+
+ LOG(NOTICE) << "Creating TRX2";
+ trx2 = new Transceiver(7700, "127.0.0.1", SAMPSPERSYM, radio, drive, 4);
+ trx2->receiveFIFO(radio->receiveFIFO(4));
+ trx2->transmitQueue(drive->priorityQueue(4));
+ radio->activateChan(4);
+ trx2->start();
+
+ while (!gbShutdown) {
+ sleep(1);
+ }
+
+ LOG(NOTICE) << "Shutting down transceiver...";
+
+ delete trx0;
+ delete trx1;
+ delete trx2;
+ delete drive;
+ delete radio;
+ delete usrp;
+}
diff --git a/Transceiver52M/runTransceiver.cpp b/Transceiver52M/runTransceiver.cpp
index e61ba34..c750f96 100644
--- a/Transceiver52M/runTransceiver.cpp
+++ b/Transceiver52M/runTransceiver.cpp
@@ -116,8 +116,13 @@ int main(int argc, char *argv[])
return EXIT_FAILURE;
}
- Transceiver *trx = new Transceiver(gConfig.getNum("TRX.Port"),gConfig.getStr("TRX.IP").c_str(),SAMPSPERSYM,GSM::Time(3,0),radio);
- trx->receiveFIFO(radio->receiveFIFO());
+ int port = gConfig.getNum("TRX.Port");
+ const char *addr = gConfig.getStr("TRX.IP").c_str();
+ DriveLoop *drive = new DriveLoop(SAMPSPERSYM,GSM::Time(3,0),radio);
+ Transceiver *trx = new Transceiver(port, addr, SAMPSPERSYM, radio, drive, 0);
+ trx->receiveFIFO(radio->receiveFIFO(0));
+ trx->transmitQueue(drive->priorityQueue(0));
+ radio->activateChan(0);
/*
signalVector *gsmPulse = generateGSMPulse(2,1);
@@ -151,12 +156,12 @@ int main(int argc, char *argv[])
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;
+ delete drive;
+ delete radio;
}