aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2019-07-15 23:53:08 +0700
committerPau Espin Pedrol <pespin@sysmocom.de>2019-07-19 14:58:32 +0200
commitb31232537a36073ef863775fc2b53e487a7cc3b5 (patch)
treecdad9f0ba48d59672617aea2bf7f3f5bdf74d65c
parent8d771d24e7fbaa1858a2e5dc1c86e4b11e99858e (diff)
driveTxPriorityQueue(): use trxd_hdr_common for message parsing
-rw-r--r--Transceiver52M/Transceiver.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 1e0339b..368ed3f 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -33,6 +33,7 @@ extern "C" {
#include <osmocom/core/utils.h>
#include <osmocom/core/socket.h>
+#include <osmocom/core/bits.h>
}
#ifdef HAVE_CONFIG_H
@@ -914,6 +915,8 @@ bool Transceiver::driveTxPriorityQueue(size_t chan)
int msgLen;
int burstLen;
char buffer[EDGE_BURST_NBITS + 50];
+ struct trxd_hdr_common *chdr;
+ uint32_t fn;
// check data socket
msgLen = read(mDataSockets[chan], buffer, sizeof(buffer));
@@ -934,12 +937,13 @@ bool Transceiver::driveTxPriorityQueue(size_t chan)
return false;
}
- int timeSlot = (int) buffer[0];
- uint32_t frameNum = 0;
- for (int i = 0; i < 4; i++)
- frameNum = (frameNum << 8) | (0x0ff & buffer[i+1]);
+ /* Common header part: HDR version, TDMA TN & FN */
+ chdr = (struct trxd_hdr_common *) buffer;
- LOG(DEBUG) << "rcvd. burst at: " << GSM::Time(frameNum,timeSlot);
+ /* Convert TDMA FN to the host endianness */
+ fn = osmo_load32be(&chdr->fn);
+
+ LOG(DEBUG) << "rcvd. burst at: " << GSM::Time(fn, chdr->tn);
int RSSI = (int) buffer[5];
BitVector newBurst(burstLen);
@@ -948,7 +952,7 @@ bool Transceiver::driveTxPriorityQueue(size_t chan)
while (itr < newBurst.end())
*itr++ = *bufferItr++;
- GSM::Time currTime = GSM::Time(frameNum,timeSlot);
+ GSM::Time currTime = GSM::Time(fn, chdr->tn);
addRadioVector(chan, newBurst, RSSI, currTime);