Add RSSI of data blocks to PCU interface

This bumps the PCU API version to 5 and requires osmo-bts >= 0.2.0.
diff --git a/src/gprs_rlcmac.cpp b/src/gprs_rlcmac.cpp
index 8824fd5..ff4cbdd 100644
--- a/src/gprs_rlcmac.cpp
+++ b/src/gprs_rlcmac.cpp
@@ -1145,7 +1145,7 @@
 
 /* received RLC/MAC block from L1 */
 int gprs_rlcmac_rcv_block(uint8_t trx, uint8_t ts, uint8_t *data, uint8_t len,
-	uint32_t fn)
+	uint32_t fn, int8_t rssi)
 {
 	unsigned payload = data[0] >> 6;
 	bitvec *block;
@@ -1154,7 +1154,7 @@
 	switch (payload) {
 	case GPRS_RLCMAC_DATA_BLOCK:
 		rc = gprs_rlcmac_rcv_data_block_acknowledged(trx, ts, data,
-			len);
+			len, rssi);
 		break;
 	case GPRS_RLCMAC_CONTROL_BLOCK:
 		block = bitvec_alloc(len);
diff --git a/src/gprs_rlcmac.h b/src/gprs_rlcmac.h
index a25eeb3..67edca1 100644
--- a/src/gprs_rlcmac.h
+++ b/src/gprs_rlcmac.h
@@ -320,7 +320,7 @@
 };
 
 int gprs_rlcmac_rcv_block(uint8_t trx, uint8_t ts, uint8_t *data, uint8_t len,
-	uint32_t fn);
+	uint32_t fn, int8_t rssi);
 
 int write_immediate_assignment(bitvec * dest, uint8_t downlink, uint8_t ra, 
         uint32_t ref_fn, uint8_t ta, uint16_t arfcn, uint8_t ts, uint8_t tsc, 
@@ -374,7 +374,7 @@
 	uint8_t *identity, uint8_t chan_needed);
 
 int gprs_rlcmac_rcv_data_block_acknowledged(uint8_t trx, uint8_t ts,
-	uint8_t *data, uint8_t len);
+	uint8_t *data, uint8_t len, int8_t rssi);
 
 struct msgb *gprs_rlcmac_send_data_block_acknowledged(
         struct gprs_rlcmac_tbf *tbf, uint32_t fn, uint8_t ts);
diff --git a/src/gprs_rlcmac_data.cpp b/src/gprs_rlcmac_data.cpp
index 77d5a8a..e7b2972 100644
--- a/src/gprs_rlcmac_data.cpp
+++ b/src/gprs_rlcmac_data.cpp
@@ -805,7 +805,7 @@
  * The blocks are defragmented and forwarded as LLC frames, if complete.
  */
 int gprs_rlcmac_rcv_data_block_acknowledged(uint8_t trx, uint8_t ts,
-	uint8_t *data, uint8_t len)
+	uint8_t *data, uint8_t len, int8_t rssi)
 {
 	struct gprs_rlcmac_bts *bts = gprs_rlcmac_bts;
 	struct gprs_rlcmac_tbf *tbf;
diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp
index 8d98c1e..75071f2 100644
--- a/src/pcu_l1_if.cpp
+++ b/src/pcu_l1_if.cpp
@@ -197,9 +197,9 @@
 }
 
 extern "C" int pcu_rx_data_ind_pdtch(uint8_t trx, uint8_t ts, uint8_t *data,
-	uint8_t len, uint32_t fn)
+	uint8_t len, uint32_t fn, int8_t rssi)
 {
-	return gprs_rlcmac_rcv_block(trx, ts, data, len, fn);
+	return gprs_rlcmac_rcv_block(trx, ts, data, len, fn, rssi);
 }
 
 static int pcu_rx_data_ind(struct gsm_pcu_if_data *data_ind)
@@ -214,7 +214,8 @@
 	switch (data_ind->sapi) {
 	case PCU_IF_SAPI_PDTCH:
 		rc = pcu_rx_data_ind_pdtch(data_ind->trx_nr, data_ind->ts_nr,
-			data_ind->data, data_ind->len, data_ind->fn);
+			data_ind->data, data_ind->len, data_ind->fn,
+			data_ind->rssi);
 		break;
 	default:
 		LOGP(DL1IF, LOGL_ERROR, "Received PCU data indication with "
diff --git a/src/pcu_l1_if.h b/src/pcu_l1_if.h
index 6b889e0..715f89f 100644
--- a/src/pcu_l1_if.h
+++ b/src/pcu_l1_if.h
@@ -59,6 +59,6 @@
 extern "C"
 #endif
 int pcu_rx_data_ind_pdtch(uint8_t trx, uint8_t ts, uint8_t *data,
-	uint8_t len, uint32_t fn);
+	uint8_t len, uint32_t fn, int8_t rssi);
 
 #endif // PCU_L1_IF_H
diff --git a/src/pcuif_proto.h b/src/pcuif_proto.h
index c27bb7d..9d740ac 100644
--- a/src/pcuif_proto.h
+++ b/src/pcuif_proto.h
@@ -1,7 +1,7 @@
 #ifndef _PCUIF_PROTO_H
 #define _PCUIF_PROTO_H
 
-#define PCU_IF_VERSION		0x04
+#define PCU_IF_VERSION		0x05
 
 /* msg_type */
 #define PCU_IF_MSG_DATA_REQ	0x00	/* send data to given channel */
@@ -49,6 +49,7 @@
 	uint8_t		trx_nr;
 	uint8_t		ts_nr;
 	uint8_t		block_nr;
+	int8_t		rssi;
 } __attribute__ ((packed));
 
 struct gsm_pcu_if_rts_req {
diff --git a/src/sysmo_l1_if.c b/src/sysmo_l1_if.c
index 2e1cb76..a3a59c9 100644
--- a/src/sysmo_l1_if.c
+++ b/src/sysmo_l1_if.c
@@ -190,7 +190,8 @@
 		pcu_rx_data_ind_pdtch((long)fl1h->priv, data_ind->u8Tn,
 			data_ind->msgUnitParam.u8Buffer + 1,
 			data_ind->msgUnitParam.u8Size - 1,
-			data_ind->u32Fn);
+			data_ind->u32Fn,
+			(int8_t) (data_ind->measParam.fRssi));
 		break;
 	case GsmL1_Sapi_Ptcch:
 		// FIXME