aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/encoding.cpp30
-rw-r--r--src/encoding.h3
-rw-r--r--src/tbf_dl.cpp2
3 files changed, 26 insertions, 9 deletions
diff --git a/src/encoding.cpp b/src/encoding.cpp
index eb424cb7..4c0ecf98 100644
--- a/src/encoding.cpp
+++ b/src/encoding.cpp
@@ -752,7 +752,7 @@ unsigned int Encoding::rlc_copy_from_aligned_buffer(
return rdbi->data_len;
}
-Encoding::AppendResult Encoding::rlc_data_to_dl_append(
+static Encoding::AppendResult rlc_data_to_dl_append_gprs(
struct gprs_rlc_data_block_info *rdbi,
gprs_llc *llc, int *offset, int *num_chunks,
uint8_t *data_block,
@@ -784,7 +784,7 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
/* return data block as message */
*offset = rdbi->data_len;
(*num_chunks)++;
- return AR_NEED_MORE_BLOCKS;
+ return Encoding::AR_NEED_MORE_BLOCKS;
}
/* if FINAL chunk would fit precisely in space left */
if (chunk == space && is_final)
@@ -801,7 +801,7 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
*offset = rdbi->data_len;
(*num_chunks)++;
rdbi->cv = 0;
- return AR_COMPLETED_BLOCK_FILLED;
+ return Encoding::AR_COMPLETED_BLOCK_FILLED;
}
/* if chunk would fit exactly in space left */
if (chunk == space) {
@@ -828,7 +828,7 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
/* return data block as message */
*offset = rdbi->data_len;
(*num_chunks)++;
- return AR_NEED_MORE_BLOCKS;
+ return Encoding::AR_NEED_MORE_BLOCKS;
}
LOGP(DRLCMACDL, LOGL_DEBUG, "-- Chunk with length %d is less "
@@ -856,7 +856,7 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
/* if we have more data and we have space left */
if (space > 0 && !is_final) {
li->m = 1; /* we indicate more frames to follow */
- return AR_COMPLETED_SPACE_LEFT;
+ return Encoding::AR_COMPLETED_SPACE_LEFT;
}
/* if we don't have more LLC frames */
if (is_final) {
@@ -864,11 +864,27 @@ Encoding::AppendResult Encoding::rlc_data_to_dl_append(
"done.\n");
li->e = 1; /* we cannot extend */
rdbi->cv = 0;
- return AR_COMPLETED_BLOCK_FILLED;
+ return Encoding::AR_COMPLETED_BLOCK_FILLED;
}
/* we have no space left */
LOGP(DRLCMACDL, LOGL_DEBUG, "-- No space left, so we are "
"done.\n");
li->e = 1; /* we cannot extend */
- return AR_COMPLETED_BLOCK_FILLED;
+ return Encoding::AR_COMPLETED_BLOCK_FILLED;
+}
+
+Encoding::AppendResult Encoding::rlc_data_to_dl_append(
+ struct gprs_rlc_data_block_info *rdbi, GprsCodingScheme cs,
+ gprs_llc *llc, int *offset, int *num_chunks,
+ uint8_t *data_block,
+ bool is_final)
+{
+ if (cs.isGprs())
+ return rlc_data_to_dl_append_gprs(rdbi,
+ llc, offset, num_chunks, data_block, is_final);
+
+ LOGP(DRLCMACDL, LOGL_ERROR, "%s data block encoding not implemented\n",
+ cs.name());
+
+ return AR_NEED_MORE_BLOCKS;
}
diff --git a/src/encoding.h b/src/encoding.h
index 9b4b09ee..4c357578 100644
--- a/src/encoding.h
+++ b/src/encoding.h
@@ -22,6 +22,7 @@
#include <stdint.h>
#include <gsm_rlcmac.h>
+#include <gprs_coding_scheme.h>
struct gprs_rlcmac_bts;
struct gprs_rlcmac_tbf;
@@ -86,7 +87,7 @@ public:
};
static AppendResult rlc_data_to_dl_append(
- struct gprs_rlc_data_block_info *rdbi,
+ struct gprs_rlc_data_block_info *rdbi, GprsCodingScheme cs,
gprs_llc *llc, int *offset, int *num_chunks,
uint8_t *data,
bool is_final);
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 35c3ccb6..5607e9e3 100644
--- a/src/tbf_dl.cpp
+++ b/src/tbf_dl.cpp
@@ -484,7 +484,7 @@ struct msgb *gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, const uint8_t
is_final = llc_queue()->size() == 0 && !keep_open(fn);
- ar = Encoding::rlc_data_to_dl_append(rdbi,
+ ar = Encoding::rlc_data_to_dl_append(rdbi, cs,
&m_llc, &write_offset, &num_chunks, data, is_final);
if (ar == Encoding::AR_NEED_MORE_BLOCKS)