laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/33063 )

Change subject: coding: gsm0503_tch_{fr,hr}_encode(): add ability to emit BFI
......................................................................

coding: gsm0503_tch_{fr,hr}_encode(): add ability to emit BFI

Every BTS needs to have some graceful handling for the scenario
where it is time to send out a speech frame on TCH DL, but there is
no frame to be sent.  One possible solution is to transmit dummy
FACCH, but this option is unattractive for TCH/HS where FACCH
displaces two speech frames rather than one.  A more elegant
solution is to emit a speech frame with inverted CRC3, causing
the MS receiver to declare a BFI condition to its Rx DTX handler.
Setting all u(k) bits to 0 is one way to produce such an inverted-CRC
speech frame (normal TCH FR/HR CRC3 for an all-zeros frame would be
111), and this method is in fact what sysmoBTS PHY is observed to do.
Add the same ability to gsm0503_tch_{fr,hr}_encode() functions,
indicated by payload length of 0.

Change-Id: Iade3310e16b906efb6892d28f474a0d15204e861
---
M src/coding/gsm0503_coding.c
1 file changed, 43 insertions(+), 1 deletion(-)

Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved




diff --git a/src/coding/gsm0503_coding.c b/src/coding/gsm0503_coding.c
index 724bea2..80286f7 100644
--- a/src/coding/gsm0503_coding.c
+++ b/src/coding/gsm0503_coding.c
@@ -1941,6 +1941,20 @@
                osmo_conv_encode(&gsm0503_tch_fr, conv, cB);
                h = 0;
                break;
+       case 0:                 /* no data, induce BFI in the receiver */
+               /* Do the same thing that sysmoBTS PHY does when fed a 0-length
+                * payload for DL: set all u(k) bits to 0, and do the same
+                * with all class 2 bits.  This operation is NOT the same as
+                * an FR codec frame of all zero bits: with all-zeros d(k) input
+                * the CRC3 function will produce 111 output, whereas we
+                * transmit 000 in those parity bits too.  The result will be
+                * an induced BFI (bad frame indication) condition in the
+                * receiver, for both TCH/FS and TCH/EFS decoders. */
+               memset(conv, 0, sizeof(conv));
+               memset(cB + 378, 0, 78);
+               osmo_conv_encode(&gsm0503_tch_fr, conv, cB);
+               h = 0;
+               break;
        case GSM_MACBLOCK_LEN: /* FACCH */
                _xcch_encode_cB(cB, tch_data);
                h = 1;
@@ -2084,8 +2098,9 @@
                tch_hr_b_to_d(d, b);
                osmo_crc8gen_set_bits(&gsm0503_tch_fr_crc3, d + 73, 22, p);
                tch_hr_reorder(conv, d, p);
-               osmo_conv_encode(&gsm0503_tch_hr, conv, cB);
                memcpy(cB + 211, d + 95, 17);
+hr_conv_coding:
+               osmo_conv_encode(&gsm0503_tch_hr, conv, cB);
                h = 0;
                gsm0503_tch_hr_interleave(cB, iB);
                for (i = 0; i < 4; i++) {
@@ -2093,6 +2108,11 @@
                                &bursts[i * 116], &h, i >> 1);
                }
                break;
+       case 0:                 /* no data, induce BFI in the receiver */
+               /* see comments in gsm0503_tch_fr_encode() - same deal here */
+               memset(conv, 0, sizeof(conv));
+               memset(cB + 211, 0, 17);
+               goto hr_conv_coding;
        case GSM_MACBLOCK_LEN: /* FACCH */
                _xcch_encode_cB(cB, tch_data);
                h = 1;

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/33063
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Iade3310e16b906efb6892d28f474a0d15204e861
Gerrit-Change-Number: 33063
Gerrit-PatchSet: 2
Gerrit-Owner: falconia <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-MessageType: merged

Reply via email to