Pass paging group instead of imsi where later is not needed

Change-Id: Id0663a81f439f2d0b893b0d34f85a6db1927ef8e
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index bac0e56..1f23c25 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -60,6 +60,28 @@
 
 extern void *tall_pcu_ctx;
 
+#define PAGING_GROUP_LEN 3
+
+/* returns [0,999] on success, > 999 on error */
+uint16_t imsi2paging_group(const char* imsi)
+{
+	uint16_t pgroup = 0;
+	size_t len = strlen(imsi);
+
+	if (!imsi || len < PAGING_GROUP_LEN)
+		return 0xFFFF;
+	imsi += len - PAGING_GROUP_LEN;
+
+	while (*imsi != '\0') {
+		if (!isdigit(*imsi))
+			return 0xFFFF;
+		pgroup *= 10;
+		pgroup += *imsi - '0';
+		imsi++;
+	}
+	return pgroup;
+}
+
 /*
  * PCU messages
  */
@@ -218,19 +240,18 @@
 	pcu_tx_data_req(0, 0, PCU_IF_SAPI_AGCH, 0, 0, 0, data, GSM_MACBLOCK_LEN);
 }
 
-#define PAGING_GROUP_LEN 3
-void pcu_l1if_tx_pch(bitvec * block, int plen, const char *imsi)
+void pcu_l1if_tx_pch(bitvec * block, int plen, uint16_t pgroup)
 {
 	struct gprs_rlcmac_bts *bts = bts_main_data();
 	uint8_t data[PAGING_GROUP_LEN + GSM_MACBLOCK_LEN];
+	int i;
 
 	/* prepend paging group */
-	if (!imsi || strlen(imsi) < PAGING_GROUP_LEN)
-		return;
-	imsi += strlen(imsi) - PAGING_GROUP_LEN;
-	data[0] = imsi[0];
-	data[1] = imsi[1];
-	data[2] = imsi[2];
+	for (i = 0; i < PAGING_GROUP_LEN; i++) {
+		data[PAGING_GROUP_LEN - 1 - i] = '0' + (char)(pgroup % 10);
+		pgroup = pgroup / 10;
+	}
+	OSMO_ASSERT(pgroup == 0);
 
 	/* block provided by upper layer comes without first byte (plen),
 	 * prepend it manually: