RLCMAC_EncDec: Provide decoded (m)cs in (E)GPRS data blocks

Let's provide this information to higher layer since CS is mostly
discovered by original bitstring size which is available during
decoding.

Call the size2mcs converter in each function to avoid having to pass it
as a parameter and have it selfcontained, meaning one can simply call
decode(bitstring) from TTCN3 code and be done with it.

Change-Id: I80ed44e575cc0a11510832e5bbfc07173e7b75b8
diff --git a/library/RLCMAC_EncDec.cc b/library/RLCMAC_EncDec.cc
index d25a7e0..6b78064 100644
--- a/library/RLCMAC_EncDec.cc
+++ b/library/RLCMAC_EncDec.cc
@@ -450,6 +450,8 @@
 	TTCN_Buffer ttcn_buffer(stream);
 	int num_llc_blocks = 0;
 
+	ret_val.cs() = payload_len_2_coding_scheme(stream.lengthof());
+
 	/* use automatic/generated decoder for header */
 	ret_val.mac__hdr().decode(DlMacDataHeader_descr_, ttcn_buffer, TTCN_EncDec::CT_RAW);
 
@@ -541,7 +543,7 @@
 }
 
 static
-RlcmacDlEgprsDataBlock dec__RlcmacDlEgprsDataBlock(const OCTETSTRING& stream, CodingScheme::enum_type mcs)
+RlcmacDlEgprsDataBlock dec__RlcmacDlEgprsDataBlock(const OCTETSTRING& stream)
 {
 	RlcmacDlEgprsDataBlock ret_val;
 	TTCN_Buffer ttcn_buffer(stream);
@@ -551,7 +553,8 @@
 	unsigned int num_calls;
 	const uint8_t *ti_e;
 
-	switch (mcs) {
+	ret_val.mcs() = payload_len_2_coding_scheme(stream.lengthof());
+	switch (ret_val.mcs()) {
 	case CodingScheme::MCS__0:
 	case CodingScheme::MCS__1:
 	case CodingScheme::MCS__2:
@@ -569,7 +572,7 @@
 		ret_val.mac__hdr() = dec__EgprsDlMacDataHeader_type1(stream);
 		break;
 	}
-	setup_rlc_mac_priv(mcs, ret_val.mac__hdr().header__type(), false,
+	setup_rlc_mac_priv(ret_val.mcs(), ret_val.mac__hdr().header__type(), false,
 			   &num_calls, &data_block_bits, data_block_offsets);
 	get_egprs_data_block(ttcn_buffer, data_block_offsets[0], data_block_bits, aligned_buffer);
 
@@ -611,10 +614,10 @@
 {
 	RlcmacDlBlock ret_val;
 	size_t stream_len = stream.lengthof();
-	CodingScheme::enum_type mcs = payload_len_2_coding_scheme(stream_len);
+	CodingScheme::enum_type cs_mcs = payload_len_2_coding_scheme(stream_len);
 	unsigned char pt;
 
-	switch (mcs) {
+	switch (cs_mcs) {
 	case CodingScheme::CS__1:
 	case CodingScheme::CS__2:
 	case CodingScheme::CS__3:
@@ -635,7 +638,7 @@
 	case CodingScheme::MCS__7:
 	case CodingScheme::MCS__8:
 	case CodingScheme::MCS__9:
-		ret_val.data__egprs() = dec__RlcmacDlEgprsDataBlock(stream, mcs);
+		ret_val.data__egprs() = dec__RlcmacDlEgprsDataBlock(stream);
 		break;
 	}
 	return ret_val;
@@ -655,6 +658,8 @@
 	stream.log();
 	TTCN_Logger::end_event();
 
+	ret_val.cs() = payload_len_2_coding_scheme(stream.lengthof());
+
 	/* use automatic/generated decoder for header */
 	ret_val.mac__hdr().decode(UlMacDataHeader_descr_, ttcn_buffer, TTCN_EncDec::CT_RAW);
 
@@ -792,7 +797,7 @@
 	return ret_val;
 }
 
-RlcmacUlEgprsDataBlock dec__RlcmacUlEgprsDataBlock(const OCTETSTRING& stream, CodingScheme::enum_type mcs)
+RlcmacUlEgprsDataBlock dec__RlcmacUlEgprsDataBlock(const OCTETSTRING& stream)
 {
 	RlcmacUlEgprsDataBlock ret_val;
 	TTCN_Buffer ttcn_buffer(stream);
@@ -802,7 +807,8 @@
 	unsigned int num_calls;
 	const uint8_t *ti_e;
 
-	switch (mcs) {
+	ret_val.mcs() = payload_len_2_coding_scheme(stream.lengthof());
+	switch (ret_val.mcs()) {
 	case CodingScheme::MCS__1:
 	case CodingScheme::MCS__2:
 	case CodingScheme::MCS__3:
@@ -819,7 +825,7 @@
 		ret_val.mac__hdr() = dec__EgprsUlMacDataHeader_type1(stream);
 		break;
 	}
-	setup_rlc_mac_priv(mcs, ret_val.mac__hdr().header__type(), true,
+	setup_rlc_mac_priv(ret_val.mcs(), ret_val.mac__hdr().header__type(), true,
 			   &num_calls, &data_block_bits, data_block_offsets);
 	get_egprs_data_block(ttcn_buffer, data_block_offsets[0], data_block_bits, aligned_buffer);
 
@@ -889,10 +895,10 @@
 {
 	RlcmacUlBlock ret_val;
 	size_t stream_len = stream.lengthof();
-	CodingScheme::enum_type mcs = payload_len_2_coding_scheme(stream_len);
+	CodingScheme::enum_type cs_mcs = payload_len_2_coding_scheme(stream_len);
 	unsigned char pt;
 
-	switch (mcs) {
+	switch (cs_mcs) {
 	case CodingScheme::CS__1:
 	case CodingScheme::CS__2:
 	case CodingScheme::CS__3:
@@ -912,7 +918,7 @@
 	case CodingScheme::MCS__7:
 	case CodingScheme::MCS__8:
 	case CodingScheme::MCS__9:
-		ret_val.data__egprs() = dec__RlcmacUlEgprsDataBlock(stream, mcs);
+		ret_val.data__egprs() = dec__RlcmacUlEgprsDataBlock(stream);
 		break;
 	}