aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-12-21 15:31:13 +0100
committerJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-01 13:58:12 +0100
commit5c75480e9075b4f60deb220a09507ee41f2479fb (patch)
tree079da1fb83eefb39d9bf7f9309f1093b4b6b1d00 /src
parentd88bb2e825ec868a9634985fedad7a85f8e77944 (diff)
edge: Move the GPRS UL Ack/Nack encoding into a separate function
Currently the Encoding::write_packet_uplink_ack function only supports GPRS. Split this function into a generic and a GPRS specific part. Sponsored-by: On-Waves ehf
Diffstat (limited to 'src')
-rw-r--r--src/encoding.cpp59
1 files changed, 35 insertions, 24 deletions
diff --git a/src/encoding.cpp b/src/encoding.cpp
index 7f4bf797..1b6e295b 100644
--- a/src/encoding.cpp
+++ b/src/encoding.cpp
@@ -399,6 +399,38 @@ void Encoding::encode_rbb(const char *show_rbb, uint8_t *rbb)
}
}
+static void write_packet_uplink_ack_gprs(struct gprs_rlcmac_bts *bts,
+ PU_AckNack_GPRS_t *acknack, struct gprs_rlcmac_ul_tbf *tbf,
+ int is_final)
+{
+ Common_Uplink_Ack_Nack_Data_t *acknack_data =
+ &acknack->Common_Uplink_Ack_Nack_Data;
+ char rbb[65];
+
+ tbf->m_window.update_rbb(rbb);
+
+ acknack->CHANNEL_CODING_COMMAND = tbf->current_cs() - 1;
+ acknack->Ack_Nack_Description.FINAL_ACK_INDICATION = is_final;
+ acknack->Ack_Nack_Description.STARTING_SEQUENCE_NUMBER = tbf->m_window.ssn();
+
+ Encoding::encode_rbb(rbb, acknack->Ack_Nack_Description.RECEIVED_BLOCK_BITMAP);
+
+ /* rbb is not NULL terminated */
+ rbb[64] = 0;
+ LOGP(DRLCMACUL, LOGL_DEBUG, "- V(N): \"%s\" R=Received "
+ "I=Invalid\n", rbb);
+
+ acknack->UnionType = 0x0; /* Fixed Allocation Dummy = on */
+ acknack->u.FixedAllocationDummy = 0x0; /* Fixed Allocation Dummy */
+ acknack->Exist_AdditionsR99 = 0x0; /* AdditionsR99 = off */
+
+ acknack_data->Exist_CONTENTION_RESOLUTION_TLLI = 0x1;
+ acknack_data->CONTENTION_RESOLUTION_TLLI = tbf->tlli();
+ acknack_data->Exist_Packet_Timing_Advance = 0x0;
+ acknack_data->Exist_Extension_Bits = 0x0;
+ acknack_data->Exist_Power_Control_Parameters = 0x0;
+}
+
/* generate uplink ack */
void Encoding::write_packet_uplink_ack(struct gprs_rlcmac_bts *bts,
RlcMacDownlink_t * block, struct gprs_rlcmac_ul_tbf *tbf,
@@ -406,10 +438,6 @@ void Encoding::write_packet_uplink_ack(struct gprs_rlcmac_bts *bts,
{
// Packet Uplink Ack/Nack TS 44.060 11.2.28
- char rbb[65];
-
- tbf->m_window.update_rbb(rbb);
-
LOGP(DRLCMACUL, LOGL_DEBUG, "Encoding Ack/Nack for %s "
"(final=%d)\n", tbf_name(tbf), final);
@@ -423,26 +451,9 @@ void Encoding::write_packet_uplink_ack(struct gprs_rlcmac_bts *bts,
block->u.Packet_Uplink_Ack_Nack.UPLINK_TFI = tbf->tfi(); // Uplink TFI
block->u.Packet_Uplink_Ack_Nack.UnionType = 0x0; // PU_AckNack_GPRS = on
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.CHANNEL_CODING_COMMAND = tbf->current_cs() - 1; // CS1
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Ack_Nack_Description.FINAL_ACK_INDICATION = final; // FINAL ACK INDICATION
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Ack_Nack_Description.STARTING_SEQUENCE_NUMBER = tbf->m_window.ssn(); // STARTING_SEQUENCE_NUMBER
-
- encode_rbb(rbb, block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Ack_Nack_Description.RECEIVED_BLOCK_BITMAP);
-
- /* rbb is not NULL terminated */
- rbb[64] = 0;
- LOGP(DRLCMACUL, LOGL_DEBUG, "- V(N): \"%s\" R=Received "
- "I=Invalid\n", rbb);
-
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.UnionType = 0x0; // Fixed Allocation Dummy = on
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.u.FixedAllocationDummy = 0x0; // Fixed Allocation Dummy
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Exist_AdditionsR99 = 0x0; // AdditionsR99 = off
-
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Common_Uplink_Ack_Nack_Data.Exist_CONTENTION_RESOLUTION_TLLI = 0x1;
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Common_Uplink_Ack_Nack_Data.CONTENTION_RESOLUTION_TLLI = tbf->tlli();
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Common_Uplink_Ack_Nack_Data.Exist_Packet_Timing_Advance = 0x0;
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Common_Uplink_Ack_Nack_Data.Exist_Extension_Bits = 0x0;
- block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct.Common_Uplink_Ack_Nack_Data.Exist_Power_Control_Parameters = 0x0;
+ write_packet_uplink_ack_gprs(bts,
+ &block->u.Packet_Uplink_Ack_Nack.u.PU_AckNack_GPRS_Struct,
+ tbf, final);
}
unsigned Encoding::write_packet_paging_request(bitvec * dest)