RLCMAC_EncDEc.cc: Support decoding Egprs Ul Data HeaderType2
Change-Id: I4dfc994beb7d0ee5522770651150c77701c573fe
diff --git a/library/RLCMAC_EncDec.cc b/library/RLCMAC_EncDec.cc
index f5564d8..8f3ff2f 100644
--- a/library/RLCMAC_EncDec.cc
+++ b/library/RLCMAC_EncDec.cc
@@ -673,10 +673,30 @@
static
EgprsUlMacDataHeader dec__EgprsUlMacDataHeader_type3(const OCTETSTRING& stream)
{
+ TTCN_Buffer ttcn_buffer(stream);
EgprsUlMacDataHeader ret_val;
+ const struct gprs_rlc_ul_header_egprs_3 *egprs3;
+ uint8_t tmp;
- fprintf(stderr, "FIXME: Not implemented! %s (%s:%u)\n", __func__, __FILE__, __LINE__);
+ egprs3 = static_cast<const struct gprs_rlc_ul_header_egprs_3 *>
+ ((const void *)ttcn_buffer.get_data());
+ ret_val.header__type() = EgprsHeaderType::RLCMAC__HDR__TYPE__3;
+ ret_val.tfi() = egprs3->tfi_lo << 2 | egprs3->tfi_hi << 0;
+ ret_val.countdown() = egprs3->cv;
+ tmp = egprs3->si;
+ ret_val.foi__si() = BITSTRING(1, &tmp);
+ tmp = egprs3->r;
+ ret_val.r__ri() = BITSTRING(1, &tmp);
+ ret_val.bsn1() = egprs3->bsn1_lo << 5 | egprs3->bsn1_hi << 0;
+ ret_val.cps() = egprs3->cps_lo << 2 | egprs3->cps_hi << 0;
+ ret_val.pfi__ind() = egprs3->pi;
+ tmp = egprs3->rsb;
+ ret_val.rsb() = BITSTRING(1, &tmp);
+ tmp = egprs3->spb;
+ ret_val.spb() = BITSTRING(2, &tmp);
+
+ ttcn_buffer.increase_pos(sizeof(*egprs3));
return ret_val;
}