aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/Transceiver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Transceiver52M/Transceiver.cpp')
-rw-r--r--Transceiver52M/Transceiver.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 1e76ec0..2d1690f 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -113,6 +113,9 @@ Transceiver::Transceiver(int wBasePort,
txFullScale = mRadioInterface->fullScaleInputValue();
rxFullScale = mRadioInterface->fullScaleOutputValue();
+
+ for (int i = 0; i < 8; i++)
+ mRxSlotMask[i] = 0;
}
Transceiver::~Transceiver()
@@ -310,6 +313,18 @@ Transceiver::CorrType Transceiver::expectedCorrType(GSM::Time currTime,
unsigned burstTN = currTime.TN();
unsigned burstFN = currTime.FN();
+ if (state->mode == TRX_MODE_MS_TRACK) {
+ /* 102 modulus case currently unhandled */
+ if (state->fillerModulus[burstTN] > 52)
+ return OFF;
+
+ int modFN = burstFN % state->fillerModulus[burstTN];
+ if ((1 << modFN) & mRxSlotMask[burstTN])
+ return TSC;
+ else
+ return OFF;
+ }
+
switch (state->chanType[burstTN]) {
case NONE:
return OFF;
@@ -874,6 +889,17 @@ void Transceiver::driveControl(size_t chan)
setModulus(timeslot, chan);
sprintf(response,"RSP SETSLOT 0 %d %d",timeslot,corrCode);
}
+ else if (!strcmp(command,"SETRXMASK")) {
+ int slot;
+ unsigned long long mask;
+ sscanf(buffer,"%3s %s %d %llu", cmdcheck, command, &slot, &mask);
+ if ((slot < 0) || (slot > 7)) {
+ sprintf(response, "RSP SETRXMASK 1");
+ } else {
+ mRxSlotMask[slot] = mask;
+ sprintf(response, "RSP SETRXMASK 0 %d %llu", slot, mask);
+ }
+ }
else if (!strcmp(command, "SYNC")) {
mStates[0].mode = TRX_MODE_MS_ACQUIRE;
sprintf(response,"RSP SYNC 0");