RLCMAC_EncDec: Implement decoding of Egprs Dl Data block HeaderType 2 and 1

Change-Id: I3b8199711e08bc128821e02c626ded1bc6aa30d7
This commit is contained in:
Pau Espin 2020-11-12 21:00:44 +01:00
parent cca530fbf4
commit 68a7a49354
1 changed files with 41 additions and 3 deletions

View File

@ -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 struct gprs_rlc_dl_header_egprs_1 *>
((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 struct gprs_rlc_dl_header_egprs_2 *>
((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;
}