On Jun 29, 2016 10:04 PM, "Tom Tsou" <tom(a)tsou.cc> wrote:
On Wed, Jun 29, 2016 at 8:31 AM, Neels Hofmeyr <nhofmeyr(a)sysmocom.de>
wrote:
Another non-startup error message I found is bad PDTCH
and PTCCH and
blocks under ideal RF signal conditions. It appears that you have seen
this behavior as well.
DL1C <0006> scheduler_trx.c:835 Received bad data frame at fn=372020
(12/104) for PTCCH
DL1C <0006> scheduler_trx.c:918 Received bad PDTCH block ending at
fn=310516 (76/104) for PDTCH
The cause of these errors with excellent signal is the following piece
of code where zero-filled buffers are passed to the decoder. I have no
idea why this is done. Removing the code prevents the bad PDTCH/PTCCH
blocks with no loss of GPRS functionality.
diff --git a/src/common/scheduler.c b/src/common/scheduler.c
@@ -1598,10 +1598,6 @@ int trx_sched_ul_burst()
func(l1t, tn, fn, chan, bid, bits, rssi, toa);
} else if (chan != TRXC_RACH && !l1cs->ho_rach_detect) {
- sbit_t spare[148];
-
- memset(spare, 0, 148);
- func(l1t, tn, fn, chan, bid, spare, -128, 0);
}
Each L2 frame consists of several L1 bursts, so you need to accumulate them
all before you can pass them to Viterbi for decoding.
If I remember this part of the code correctly, this zeroing is required to
make this work when there are lost bursts. E.g. if you need 4 bursts, but
you only received bursts 0, 1 and 2 you should let the device know that
your missing burst 3. If you don't do that, decoder won't run at all and to
will miss what could be a decodable frame.
By disabling this code you essentially start decoding only perfect frames,
which are obviously decoded fine in perfect conditions. I.e. this only
makes the actual problem, whatever it is.
Please excuse typos. Written with a touchscreen keyboard.
--
Regards,
Alexander Chemeris
CEO Fairwaves, Inc.
https://fairwaves.co