Change in osmo-pcu[master]: Rewrite Packet Uplink Assignment

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Max gerrit-no-reply at lists.osmocom.org
Tue Feb 19 09:58:29 UTC 2019


Max has uploaded this change for review. ( https://gerrit.osmocom.org/12955


Change subject: Rewrite Packet Uplink Assignment
......................................................................

Rewrite Packet Uplink Assignment

Use bitvec_set_*() directly without external write pointer tracking to
simplify the code. This is part of IA Rest Octets (3GPP TS 44.018
§10.5.2.16) which is the last part of the message so it should not
interfere with the rest of encoding functions.

That's updated version of reverted commit.

Change-Id: I97d53c27c1ca9e032d431b3aa7f915027d63ddc0
Related: OS#3014
---
M src/encoding.cpp
1 file changed, 47 insertions(+), 47 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/55/12955/1

diff --git a/src/encoding.cpp b/src/encoding.cpp
index b9375ea..927defd 100644
--- a/src/encoding.cpp
+++ b/src/encoding.cpp
@@ -230,50 +230,51 @@
 	return 0;
 }
 
-static int write_ia_rest_uplink(
-	gprs_rlcmac_ul_tbf *tbf,
-	bitvec * dest, unsigned& wp,
-	uint8_t usf, uint32_t fn,
-	uint8_t alpha, uint8_t gamma, int8_t ta_idx)
+/* 3GPP TS 44.018 §10.5.2.16 IA Rest Octets ::= Packet Uplink Assignment */
+static inline int write_ia_rest_uplink(const gprs_rlcmac_ul_tbf *tbf, bitvec * dest,
+				       uint8_t usf, uint32_t fn, uint8_t alpha, uint8_t gamma, int8_t ta_idx)
 {
-	OSMO_ASSERT(!tbf || !tbf->is_egprs_enabled());
+	int rc;
 
-	// GMS 04.08 10.5.2.37b 10.5.2.16
-	bitvec_write_field(dest, &wp, 3, 2);    // "HH"
-	bitvec_write_field(dest, &wp, 0, 2);    // "0" Packet Uplink Assignment
-	if (tbf == NULL) {
-		bitvec_write_field(dest, &wp, 0, 1);    // Block Allocation : Single Block Allocation
-		if (alpha) {
-			bitvec_write_field(dest, &wp,0x1,1);   // ALPHA = present
-			bitvec_write_field(dest, &wp,alpha,4);   // ALPHA = present
-		} else
-			bitvec_write_field(dest, &wp,0x0,1);   // ALPHA = not present
-		bitvec_write_field(dest, &wp,gamma,5);   // GAMMA power control parameter
-		write_tai(dest, wp, ta_idx);
-		bitvec_write_field(dest, &wp, 1, 1);    // TBF_STARTING_TIME_FLAG
-		bitvec_write_field(dest, &wp,(fn / (26 * 51)) % 32,5); // T1'
-		bitvec_write_field(dest, &wp,fn % 51,6);               // T3
-		bitvec_write_field(dest, &wp,fn % 26,5);               // T2
+	set_H(dest); set_H(dest);
+	set_0(dest); set_0(dest); /* 00 Packet Uplink Assignment */
+
+	if (tbf) {
+		set_1(dest); /* Multi Block Allocation */
+
+		rc = write_tfi_usf(dest, tbf, usf);
+		check(rc);
+
+		/* 3GPP TS 44.060 Table 11.2.28.2 Channel Coding Indicator */
+		rc = bitvec_set_u64(dest, tbf->current_cs().to_num() - 1, 2, false); /* CHANNEL_CODING_COMMAND */
+		check(rc);
+
+		rc = bitvec_set_bit(dest, (bit_value)tbf->tlli());                   /* TLLI_BLOCK_CHANNEL_CODING */
+		check(rc);
+
+		rc = write_alpha_gamma(dest, alpha, gamma);
+		check(rc);
+
+		set_0(dest); /* No TIMING_ADVANCE_INDEX */
+		set_0(dest); /* No TBF_STARTING_TIME */
 	} else {
-		bitvec_write_field(dest, &wp, 1, 1);    // Block Allocation : Not Single Block Allocation
-		bitvec_write_field(dest, &wp, tbf->tfi(), 5);  // TFI_ASSIGNMENT Temporary Flow Identity
-		bitvec_write_field(dest, &wp, 0, 1);    // POLLING
-		bitvec_write_field(dest, &wp, 0, 1);    // ALLOCATION_TYPE: dynamic
-		bitvec_write_field(dest, &wp, usf, 3);    // USF
-		bitvec_write_field(dest, &wp, 0, 1);    // USF_GRANULARITY
-		bitvec_write_field(dest, &wp, 0, 1);   // "0" power control: Not Present
-		bitvec_write_field(dest, &wp, tbf->current_cs().to_num()-1, 2);    // CHANNEL_CODING_COMMAND
-		bitvec_write_field(dest, &wp, 1, 1);    // TLLI_BLOCK_CHANNEL_CODING
-		if (alpha) {
-			bitvec_write_field(dest, &wp,0x1,1);   // ALPHA = present
-			bitvec_write_field(dest, &wp,alpha,4);   // ALPHA
-		} else
-			bitvec_write_field(dest, &wp,0x0,1);   // ALPHA = not present
-		bitvec_write_field(dest, &wp,gamma,5);   // GAMMA power control parameter
-		/* note: there is no choise for TAI and no starting time */
-		bitvec_write_field(dest, &wp, 0, 1);   // switch TIMING_ADVANCE_INDEX = off
-		bitvec_write_field(dest, &wp, 0, 1);    // TBF_STARTING_TIME_FLAG
+		set_0(dest); /* Single Block Allocation */
+		rc = write_alpha_gamma(dest, alpha, gamma);
+		check(rc);
+
+		/* A 'Timing Advance index' shall not be allocated at a Single Block allocation.
+		   A 'TBF Starting Time' shall be allocated at a Single Block allocation. */
+		set_0(dest);
+		set_1(dest);
+
+		rc = write_tbf_start_time(dest, fn);	/* TBF_STARTING_TIME */
+		check(rc);
+
+		set_L(dest); /* No P0 nor PR_MODE */
+		set_L(dest); /* No Additions for R99 */
+		set_L(dest); /* No Additions for Rel-6 */
 	}
+
 	return 0;
 }
 
@@ -481,22 +482,21 @@
 
 	plen = wp / 8;
 
+	dest->cur_bit = wp;
 	if (downlink) {
 		if (!as_dl_tbf(tbf)) {
 			LOGP(DRLCMACDL, LOGL_ERROR, "Cannot encode DL IMMEDIATE ASSIGNMENT without TBF\n");
 			return -EINVAL;
 		}
-		dest->cur_bit = wp;
 		rc = write_ia_rest_downlink(as_dl_tbf(tbf), dest, polling, gsm48_ta_is_valid(ta), fn,
 					    alpha, gamma, ta_idx);
 	} else if (((burst_type == GSM_L1_BURST_TYPE_ACCESS_1) ||
-		  (burst_type == GSM_L1_BURST_TYPE_ACCESS_2))) {
-		dest->cur_bit = wp;
+		    (burst_type == GSM_L1_BURST_TYPE_ACCESS_2)))
 		rc = write_ia_rest_egprs_uplink(as_ul_tbf(tbf), dest, usf, fn, alpha, gamma, ta_idx, burst_type, ra);
-	} else
-		rc = write_ia_rest_uplink(as_ul_tbf(tbf), dest, wp,
-			usf, fn,
-			alpha, gamma, ta_idx);
+	else {
+		OSMO_ASSERT(!as_ul_tbf(tbf) || !as_ul_tbf(tbf)->is_egprs_enabled());
+		rc = write_ia_rest_uplink(as_ul_tbf(tbf), dest, usf, fn, alpha, gamma, ta_idx);
+	}
 
 	if (rc < 0) {
 		LOGP(DRLCMAC, LOGL_ERROR,

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

Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I97d53c27c1ca9e032d431b3aa7f915027d63ddc0
Gerrit-Change-Number: 12955
Gerrit-PatchSet: 1
Gerrit-Owner: Max <msuraev at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190219/6c15dfca/attachment.htm>


More information about the gerrit-log mailing list