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,