view libutil/osmo_bits.h @ 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 source

/*
 * This include file has been put together from Osmocom (specifically
 * libosmocore) header files, containing definitions for bit vector
 * manipulation and CRC functions.
 */

/* from bits.h */

/*! unpacked bit (0 or 1): 1 bit per byte */
typedef uint8_t ubit_t;

/* from crc8gen.h */

/*! structure describing a given CRC code of max 8 bits */
struct osmo_crc8gen_code {
	int bits;          /*!< Actual number of bits of the CRC */
	uint8_t poly;      /*!< Polynom (normal representation, MSB omitted */
	uint8_t init;      /*!< Initialization value of the CRC state */
	uint8_t remainder; /*!< Remainder of the CRC (final XOR) */
};

uint8_t osmo_crc8gen_compute_bits(const struct osmo_crc8gen_code *code,
                                  const ubit_t *in, int len);
int osmo_crc8gen_check_bits(const struct osmo_crc8gen_code *code,
                            const ubit_t *in, int len, const ubit_t *crc_bits);
void osmo_crc8gen_set_bits(const struct osmo_crc8gen_code *code,
                           const ubit_t *in, int len, ubit_t *crc_bits);

/*
 * Themyscira-added (not Osmocom-originating) functions
 * that use the ubit_t defined type that (to our knowledge)
 * was invented by Osmocom.
 */

void uint16_to_bits(uint16_t word, ubit_t *out, unsigned nbits);