diff options
author | Aravind Sirsikar <Arvind.sirsikar@radisys.com> | 2016-05-19 21:12:29 +0530 |
---|---|---|
committer | Aravind Sirsikar <Arvind.sirsikar@radisys.com> | 2016-05-19 21:12:29 +0530 |
commit | 5974ec7609f2a8c8c7c2ec0a578d69040f31007f (patch) | |
tree | 1ce7f42fdd8192f651b27a2e47ef3ace54d9cb89 | |
parent | 58b664675013b948a37ce151948cabe9fe17d386 (diff) |
Add data structure for ARQ-II in EGPRS DL
Modify the existing data structure to support ARQ-II for Retx in EGPRS DL.
-rw-r--r-- | src/gprs_coding_scheme.cpp | 36 | ||||
-rw-r--r-- | src/gprs_coding_scheme.h | 8 | ||||
-rw-r--r-- | src/rlc.h | 9 |
3 files changed, 53 insertions, 0 deletions
diff --git a/src/gprs_coding_scheme.cpp b/src/gprs_coding_scheme.cpp index 8601d4f..4b47c0b 100644 --- a/src/gprs_coding_scheme.cpp +++ b/src/gprs_coding_scheme.cpp @@ -21,6 +21,42 @@ #include "gprs_coding_scheme.h" +/* + * 44.060 Table 8.1.1.1 and Table 8.1.1.2 + * In has 3 level indexing. 0th level is ARQ type + * 1st level is Original MCS( index 0 corresponds to MCS1 and so on) + * 2nd level is MS MCS (index 0 corresponds to MCS1 and so on) + * in 0th level indexing only ARQ type 2 is supported i.e index 1 for + * incremental redundancy + */ + +/* TODO: Need to support ARQ type 1 */ +enum GprsCodingScheme::Scheme GprsCodingScheme::egprs_mcs_retx_tbl[MAX_NUM_ARQ] + [MAX_NUM_MCS][MAX_NUM_MCS] = { + { + {MCS1, MCS1, MCS1, MCS1, MCS1, MCS1, MCS1, MCS1, MCS1}, + {MCS2, MCS2, MCS2, MCS2, MCS2, MCS2, MCS2, MCS2, MCS2}, + {MCS3, MCS3, MCS3, MCS3, MCS3, MCS3, MCS3, MCS3, MCS3}, + {MCS1, MCS1, MCS1, MCS4, MCS4, MCS4, MCS4, MCS4, MCS4}, + {MCS2, MCS2, MCS2, MCS2, MCS5, MCS5, MCS7, MCS7, MCS7}, + {MCS3, MCS3, MCS3, MCS3, MCS3, MCS6, MCS6, MCS6, MCS9}, + {MCS2, MCS2, MCS2, MCS2, MCS5, MCS5, MCS7, MCS7, MCS7}, + {MCS3, MCS3, MCS3, MCS3, MCS3, MCS6, MCS6, MCS8, MCS8}, + {MCS3, MCS3, MCS3, MCS3, MCS3, MCS6, MCS6, MCS6, MCS9} + }, + { + {MCS1, MCS1, MCS1, MCS1, MCS1, MCS1, MCS1, MCS1, MCS1}, + {MCS2, MCS2, MCS2, MCS2, MCS2, MCS2, MCS2, MCS2, MCS2}, + {MCS3, MCS3, MCS3, MCS3, MCS3, MCS3, MCS3, MCS3, MCS3}, + {MCS4, MCS4, MCS4, MCS4, MCS4, MCS4, MCS4, MCS4, MCS4}, + {MCS5, MCS5, MCS5, MCS5, MCS5, MCS5, MCS7, MCS7, MCS7}, + {MCS6, MCS6, MCS6, MCS6, MCS6, MCS6, MCS6, MCS6, MCS9}, + {MCS5, MCS5, MCS5, MCS5, MCS5, MCS5, MCS7, MCS7, MCS7}, + {MCS6, MCS6, MCS6, MCS6, MCS6, MCS6, MCS6, MCS8, MCS8}, + {MCS6, MCS6, MCS6, MCS6, MCS6, MCS6, MCS6, MCS6, MCS9} + } + }; + static struct { struct { unsigned int bytes; diff --git a/src/gprs_coding_scheme.h b/src/gprs_coding_scheme.h index aec3762..bb0bad4 100644 --- a/src/gprs_coding_scheme.h +++ b/src/gprs_coding_scheme.h @@ -26,6 +26,12 @@ class GprsCodingScheme { public: + +#define MAX_NUM_ARQ 2 /* max. number of ARQ */ +#define MAX_NUM_MCS 9 /* max. number of MCS */ +#define EGPRS_ARQ1 0x0 +#define EGPRS_ARQ2 0x1 + enum Scheme { UNKNOWN, CS1, CS2, CS3, CS4, @@ -105,6 +111,8 @@ public: static GprsCodingScheme getEgprsByNum(unsigned num); static const char *modeName(Mode mode); + static enum Scheme egprs_mcs_retx_tbl[MAX_NUM_ARQ] + [MAX_NUM_MCS][MAX_NUM_MCS]; private: GprsCodingScheme(int s); /* fail on use */ GprsCodingScheme& operator =(int s); /* fail on use */ @@ -120,6 +120,15 @@ struct gprs_rlc_data { uint8_t len; struct gprs_rlc_data_block_info block_info; + /* + * cs_current_trans is variable to hold the cs value for + * current transmission. cs_current_trans is same as cs during + * transmission case. during retransmission cs_current_trans is + * fetched from egprs_mcs_retx_tbl table based on + * cs and demanded cs.reference is 44.060 Table + * 8.1.1.1 and Table 8.1.1.2 + */ + GprsCodingScheme cs_current_trans; GprsCodingScheme cs; /* puncturing scheme value to be used for next transmission*/ |