On Jun 29, 2016 10:04 PM, "Tom Tsou" <tom@tsou.cc> wrote:
>
> On Wed, Jun 29, 2016 at 8:31 AM, Neels Hofmeyr <nhofmeyr@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