Define new data structure with respect to TS 44.060
10.4.8a.3.1, 10.4.8a.2.1, 10.4.8a.1.1 for puncturing scheme values
and initialize the variable introduced
---
src/rlc.cpp | 3 +++
src/rlc.h | 24 ++++++++++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/src/rlc.cpp b/src/rlc.cpp
index 79d8f48..0e16ee8 100644
--- a/src/rlc.cpp
+++ b/src/rlc.cpp
@@ -33,6 +33,9 @@ uint8_t *gprs_rlc_data::prepare(size_t block_data_len)
memset(block, 0x0, sizeof(block));
memset(block, 0x2b, block_data_len);
+ /* Initial value of puncturing scheme */
+ next_ps = EGPRS_PS_1;
+
return block;
}
diff --git a/src/rlc.h b/src/rlc.h
index 3f10f8c..19dccbe 100644
--- a/src/rlc.h
+++ b/src/rlc.h
@@ -56,6 +56,27 @@ enum gprs_rlc_dl_bsn_state {
GPRS_RLC_DL_BSN_MAX,
};
+/*
+ * Valid puncturing scheme values
+ * TS 44.060 10.4.8a.3.1, 10.4.8a.2.1, 10.4.8a.1.1
+ */
+enum egprs_puncturing_values {
+ EGPRS_PS_1,
+ EGPRS_PS_2,
+ EGPRS_PS_3,
+ EGPRS_PS_INVALID,
+};
+
+/*
+ * EGPRS_MAX_PS_NUM_2 is valid for MCS 1,2,5,6.
+ * And EGPRS_MAX_PS_NUM_3 is valid for MCS 3,4,7,8,9
+ * TS 44.060 10.4.8a.3.1, 10.4.8a.2.1, 10.4.8a.1.1
+ */
+enum egprs_puncturing_types {
+ EGPRS_MAX_PS_NUM_2 = 2,
+ EGPRS_MAX_PS_NUM_3,
+ EGPRS_MAX_PS_NUM_INVALID,
+};
static inline uint16_t mod_sns_half()
{
@@ -100,6 +121,9 @@ struct gprs_rlc_data {
struct gprs_rlc_data_block_info block_info;
GprsCodingScheme cs;
+
+ /* puncturing scheme value to be used for next transmission*/
+ enum egprs_puncturing_values next_ps;
};
void gprs_rlc_data_info_init_dl(struct gprs_rlc_data_info *rlc,
--
1.7.9.5