diff libutil/tfo_msg_enc.c @ 194:05d01e810217

libutil: add TFO message gen function based on Osmocom crc8gen
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 17 Mar 2023 16:52:21 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libutil/tfo_msg_enc.c	Fri Mar 17 16:52:21 2023 -0800
@@ -0,0 +1,33 @@
+/*
+ * The function implemented in this module encodes a GSM 08.62 Extension_Block.
+ */
+
+#include <stdint.h>
+#include "osmo_bits.h"
+
+/*
+ * EFR TRAU parity
+ *
+ * g(x) = x^3 + x^1 + 1
+ */
+static const struct osmo_crc8gen_code gsm0860_efr_crc3 = {
+	.bits = 3,
+	.poly = 0x3,
+	.init = 0x0,
+	.remainder = 0x7,
+};
+
+void
+encode_tfo_ext_words(bits_2_10, bits_12_15, ex, out)
+	unsigned bits_2_10, bits_12_15, ex;
+	uint16_t *out;
+{
+	ubit_t crc_in[13];
+	uint8_t crc;
+
+	uint16_to_bits(bits_2_10, crc_in, 9);
+	uint16_to_bits(bits_12_15, crc_in + 9, 4);
+	crc = osmo_crc8gen_compute_bits(&gsm0860_efr_crc3, crc_in, 13);
+	out[0] = bits_2_10;
+	out[1] = (bits_12_15 << 5) | (crc << 2) | ex;
+}