aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-04-06 16:13:00 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2016-04-12 10:10:44 -0400
commitd8fb14226f798c9daf948d374a982583cd4ee202 (patch)
tree063f7c4d851a1d4d0cf40e0b6b0b47f88c1f1500
parent93bc64f99ddef02a39c03dfd0725bb41dc93e287 (diff)
Add ubit <-> sbit convertors
Move functions for conversion between soft and unpacked bits to main library as they are generally useful.
-rw-r--r--include/osmocom/core/bits.h3
-rw-r--r--src/bits.c24
-rw-r--r--tests/conv/conv_test.c23
3 files changed, 29 insertions, 21 deletions
diff --git a/include/osmocom/core/bits.h b/include/osmocom/core/bits.h
index 46f0c8b8..e082313a 100644
--- a/include/osmocom/core/bits.h
+++ b/include/osmocom/core/bits.h
@@ -42,6 +42,9 @@ int osmo_ubit2pbit(pbit_t *out, const ubit_t *in, unsigned int num_bits);
int osmo_pbit2ubit(ubit_t *out, const pbit_t *in, unsigned int num_bits);
+void osmo_ubit2sbit(sbit_t *out, const ubit_t *in, unsigned int num_bits);
+void osmo_sbit2ubit(ubit_t *out, const sbit_t *in, unsigned int num_bits);
+
int osmo_ubit2pbit_ext(pbit_t *out, unsigned int out_ofs,
const ubit_t *in, unsigned int in_ofs,
unsigned int num_bits, int lsb_mode);
diff --git a/src/bits.c b/src/bits.c
index a0a9d9e8..48314af4 100644
--- a/src/bits.c
+++ b/src/bits.c
@@ -61,6 +61,30 @@ int osmo_ubit2pbit(pbit_t *out, const ubit_t *in, unsigned int num_bits)
return outptr - out;
}
+/*! \brief convert unpacked bits to soft bits
+ * \param[out] out output buffer of soft bits
+ * \param[in] in input buffer of unpacked bits
+ * \param[in] num_bits number of bits
+ */
+void osmo_ubit2sbit(sbit_t *out, const ubit_t *in, unsigned int num_bits)
+{
+ unsigned int i;
+ for (i = 0; i < num_bits; i++)
+ out[i] = in[i] ? -127 : 127;
+}
+
+/*! \brief convert soft bits to unpacked bits
+ * \param[out] out output buffer of unpacked bits
+ * \param[in] in input buffer of soft bits
+ * \param[in] num_bits number of bits
+ */
+void osmo_sbit2ubit(ubit_t *out, const sbit_t *in, unsigned int num_bits)
+{
+ unsigned int i;
+ for (i = 0; i < num_bits; i++)
+ out[i] = in[i] < 0;
+}
+
/*! \brief convert packed bits to unpacked bits, return length in bytes
* \param[out] out output buffer of unpacked bits
* \param[in] in input buffer of packed bits
diff --git a/tests/conv/conv_test.c b/tests/conv/conv_test.c
index d9440f95..de62f238 100644
--- a/tests/conv/conv_test.c
+++ b/tests/conv/conv_test.c
@@ -339,25 +339,6 @@ fill_random(ubit_t *b, int n)
b[i] = random() & 1;
}
-static void
-ubit_to_sbit(sbit_t *dst, ubit_t *src, int n)
-{
- int i;
- for (i=0; i<n; i++)
- dst[i] = src[i] ? -127 : 127;
-}
-
-static void sbit_to_ubit(ubit_t *dst, sbit_t *src, int n) __attribute__((unused));
-
-static void
-sbit_to_ubit(ubit_t *dst, sbit_t *src, int n)
-{
- int i;
- for (i=0; i<n; i++)
- dst[i] = src[i] < 0;
-}
-
-
int main(int argc, char *argv[])
{
const struct conv_test_vector *tst;
@@ -424,7 +405,7 @@ int main(int argc, char *argv[])
printf("[..] Decoding: ");
- ubit_to_sbit(bs, bu0, l);
+ osmo_ubit2sbit(bs, bu0, l);
l = osmo_conv_decode(tst->code, bs, bu1);
if (l != 0) {
@@ -459,7 +440,7 @@ int main(int argc, char *argv[])
return -1;
}
- ubit_to_sbit(bs, bu1, l);
+ osmo_ubit2sbit(bs, bu1, l);
l = osmo_conv_decode(tst->code, bs, bu1);
if (l != 0) {