From 68a7a49354cdba25a775fcd4e7741380f4579627 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Thu, 12 Nov 2020 21:00:44 +0100 Subject: RLCMAC_EncDec: Implement decoding of Egprs Dl Data block HeaderType 2 and 1 Change-Id: I3b8199711e08bc128821e02c626ded1bc6aa30d7 --- library/RLCMAC_EncDec.cc | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) (limited to 'library') diff --git a/library/RLCMAC_EncDec.cc b/library/RLCMAC_EncDec.cc index 16291ded..ac60b376 100644 --- a/library/RLCMAC_EncDec.cc +++ b/library/RLCMAC_EncDec.cc @@ -207,17 +207,23 @@ static CodingScheme::enum_type payload_len_2_coding_scheme(size_t payload_len) { return CodingScheme::MCS__3; case 49: return CodingScheme::MCS__4; + case 60: /* fall through */ case 61: return CodingScheme::MCS__5; + case 78: /* fall through */ case 79: return CodingScheme::MCS__6; + case 118: /* fall through */ case 119: return CodingScheme::MCS__7; - case 142: + case 142: /* fall through */ + case 143: return CodingScheme::MCS__8; + case 154: /* fall through */ case 155: return CodingScheme::MCS__9; default: + fprintf(stderr, "ERROR: Unknown CodingSCheme for payload_len=%zu\n", payload_len); return CodingScheme::CS__1; } } @@ -520,20 +526,52 @@ RlcmacDlDataBlock dec__RlcmacDlDataBlock(const OCTETSTRING& stream) static EgprsDlMacDataHeader dec__EgprsDlMacDataHeader_type1(const OCTETSTRING& stream) { + TTCN_Buffer ttcn_buffer(stream); EgprsDlMacDataHeader ret_val; + const struct gprs_rlc_dl_header_egprs_1 *egprs1; + uint8_t tmp; - fprintf(stderr, "FIXME: Not implemented! %s (%s:%u)\n", __func__, __FILE__, __LINE__); + egprs1 = static_cast + ((const void *)ttcn_buffer.get_data()); + ret_val.header__type() = EgprsHeaderType::RLCMAC__HDR__TYPE__1; + ret_val.tfi() = egprs1->tfi_lo << 1 | egprs1->tfi_hi << 0; + ret_val.rrbp() = egprs1->rrbp; + tmp = egprs1->es_p; + ret_val.esp() = BITSTRING(2, &tmp); + ret_val.usf() = egprs1->usf; + ret_val.bsn1() = egprs1->bsn1_lo << 10 | egprs1->bsn1_mid << 2 | egprs1->bsn1_hi; + ret_val.bsn2__offset() = egprs1->bsn2_lo << 7 | egprs1->bsn2_hi; + ret_val.pr() = egprs1->pr; + ret_val.cps() = egprs1->cps; + + ttcn_buffer.increase_pos(sizeof(*egprs1)); return ret_val; } static EgprsDlMacDataHeader dec__EgprsDlMacDataHeader_type2(const OCTETSTRING& stream) { + TTCN_Buffer ttcn_buffer(stream); EgprsDlMacDataHeader ret_val; + const struct gprs_rlc_dl_header_egprs_2 *egprs2; + uint8_t tmp; - fprintf(stderr, "FIXME: Not implemented! %s (%s:%u)\n", __func__, __FILE__, __LINE__); + egprs2 = static_cast + ((const void *)ttcn_buffer.get_data()); + + ret_val.header__type() = EgprsHeaderType::RLCMAC__HDR__TYPE__2; + ret_val.tfi() = egprs2->tfi_lo << 1 | egprs2->tfi_hi << 0; + ret_val.rrbp() = egprs2->rrbp; + tmp = egprs2->es_p; + ret_val.esp() = BITSTRING(2, &tmp); + ret_val.usf() = egprs2->usf; + ret_val.bsn1() = egprs2->bsn1_lo << 10 | egprs2->bsn1_mid << 2 | egprs2->bsn1_hi; + ret_val.bsn2__offset() = 0; /*TODO: mark optional and not set ? */ + ret_val.pr() = egprs2->pr; + ret_val.cps() = egprs2->cps; + ttcn_buffer.increase_pos(sizeof(*egprs2)); return ret_val; } -- cgit v1.2.3