aboutsummaryrefslogtreecommitdiffstats
path: root/src/rlc.cpp
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-02 11:48:37 +0100
committerJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-02 17:06:39 +0100
commit1a880da4f9548145dfc8cbe54fd7f6c3eb9edc1b (patch)
tree2b32fc38ca57b87e96ac0dd1a6ea9719b33742cf /src/rlc.cpp
parent205a943205ac2c65e14c012bac8c936a6a642c44 (diff)
rlc: Support encoding of EGPRS header type 1 + 2
Currently only header type 3 (MCS-1 to MCS-4) is supported. Add header structs to rlc.h and extend Encoding::rlc_write_dl_data_header accordingly. Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/rlc.cpp')
-rw-r--r--src/rlc.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/rlc.cpp b/src/rlc.cpp
index e4a9563a..31cea4c8 100644
--- a/src/rlc.cpp
+++ b/src/rlc.cpp
@@ -327,7 +327,8 @@ void gprs_rlc_data_block_info_init(struct gprs_rlc_data_block_info *rdbi,
rdbi->spb = 0;
}
-unsigned int gprs_rlc_mcs_cps(GprsCodingScheme cs, int punct, int with_padding)
+unsigned int gprs_rlc_mcs_cps(GprsCodingScheme cs, int punct, int punct2,
+ int with_padding)
{
switch (GprsCodingScheme::Scheme(cs)) {
case GprsCodingScheme::MCS1: return 0b1011 + punct % 2;
@@ -335,7 +336,12 @@ unsigned int gprs_rlc_mcs_cps(GprsCodingScheme cs, int punct, int with_padding)
case GprsCodingScheme::MCS3: return (with_padding ? 0b0110 : 0b0011) +
punct % 3;
case GprsCodingScheme::MCS4: return 0b0000 + punct % 3;
- /* TODO: Add missing MCS */
+ case GprsCodingScheme::MCS5: return 0b100 + punct % 2;
+ case GprsCodingScheme::MCS6: return (with_padding ? 0b010 : 0b000) +
+ punct % 2;
+ case GprsCodingScheme::MCS7: return 0b10100 + 3 * (punct % 3) + punct2 % 3;
+ case GprsCodingScheme::MCS8: return 0b01011 + 3 * (punct % 3) + punct2 % 3;
+ case GprsCodingScheme::MCS9: return 0b00000 + 3 * (punct % 3) + punct2 % 3;
default: ;
}