soft, unpacked and packed bits

## Files

file | bits.h
| Osmocom bit level support code.
file | bits.c
| Osmocom bit level support code.

## Typedefs

typedef int8_t | sbit_t
| soft bit (-127...127)
typedef uint8_t | ubit_t
| unpacked bit (0 or 1)
typedef uint8_t | pbit_t
| packed bis (8 bits in a byte)

## Enumerations

enum | osmo_br_mode { OSMO_BR_BITS_IN_DWORD = 31, OSMO_BR_BYTES_IN_DWORD = 24, OSMO_BR_BITS_IN_BYTE = 7, OSMO_BR_WORD_SWAP = 16 }
| bit-reversal mode for osmo_bit_reversal() More...

## Functions

static unsigned int | osmo_pbit_bytesize (unsigned int num_bits)
| determine how many bytes we would need for num_bits packed bits More...
int | osmo_ubit2pbit (pbit_t *out, const ubit_t *in, unsigned int num_bits)
| convert unpacked bits to packed bits, return length in bytes More...
int | osmo_pbit2ubit (ubit_t *out, const pbit_t *in, unsigned int num_bits)
| convert packed bits to unpacked bits, return length in bytes More...
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)
| convert unpacked bits to packed bits (extended options) More...
int | osmo_pbit2ubit_ext (ubit_t *out, unsigned int out_ofs, const pbit_t *in, unsigned int in_ofs, unsigned int num_bits, int lsb_mode)
| convert packed bits to unpacked bits (extended options) More...
uint32_t | osmo_bit_reversal (uint32_t x, enum osmo_br_mode k)
| generic bit reversal function More...
uint32_t | osmo_revbytebits_32 (uint32_t x)
| reverse the bit-order in each byte of a dword More...
uint32_t | osmo_revbytebits_8 (uint8_t x)
| reverse the bit order in a byte More...
void | osmo_revbytebits_buf (uint8_t *buf, int len)
| reverse bit-order of each byte in a buffer More...
static uint16_t | osmo_rol16 (uint16_t in, unsigned shift)
| left circular shift More...

## Detailed Description

## Enumeration Type Documentation

## osmo_br_mode

enum osmo_br_mode

bit-reversal mode for osmo_bit_reversal()

Enumerator
OSMO_BR_BITS_IN_DWORD | reverse all bits in a 32bit dword
OSMO_BR_BYTES_IN_DWORD | reverse byte order in a 32bit dword
OSMO_BR_BITS_IN_BYTE | reverse bits of each byte in a 32bit dword
OSMO_BR_WORD_SWAP | swap the two 16bit words in a 32bit dword

## Function Documentation

## osmo_bit_reversal()

uint32_t osmo_bit_reversal | ( | uint32_t | x,
|  | enum osmo_br_mode | k
| ) |  |

generic bit reversal function

generalized bit reversal function

Parameters

  [in] | x | the 32bit value to be reversed
  [in] | k | the type of reversal requested

Returns
  the reversed 32bit dword

This function reverses the bit order within a 32bit word. Depending on "k", it either reverses all bits in a 32bit dword, or the bytes in the dword, or the bits in each byte of a dword, or simply swaps the two 16bit words in a dword. See Chapter 7 "Hackers Delight"

## osmo_pbit2ubit()

int osmo_pbit2ubit | ( | ubit_t * | out,
|  | const pbit_t * | in,
|  | unsigned int | num_bits
| ) |  |

convert packed bits to unpacked bits, return length in bytes

Parameters

  [out] | out | output buffer of unpacked bits
  [in] | in | input buffer of packed bits
  [in] | num_bits | number of bits

Referenced by osmo_pbit_bytesize().

## osmo_pbit2ubit_ext()

int osmo_pbit2ubit_ext | ( | ubit_t * | out,
|  | unsigned int | out_ofs,
|  | const pbit_t * | in,
|  | unsigned int | in_ofs,
|  | unsigned int | num_bits,
|  | int | lsb_mode
| ) |  |

convert packed bits to unpacked bits (extended options)

Parameters

  [out] | out | output buffer of unpacked bits
  [in] | out_ofs | offset into output buffer
  [in] | in | input buffer of packed bits
  [in] | in_ofs | offset into input buffer
  [in] | num_bits | number of bits
  [in] | lsb_mode | Encode bits in LSB orde instead of MSB

Returns
  length in bytes (max written offset of output buffer + 1)

Referenced by osmo_pbit_bytesize().

## osmo_pbit_bytesize()

static unsigned int osmo_pbit_bytesize | ( | unsigned int | num_bits | ) |

inline static

determine how many bytes we would need for num_bits packed bits

Parameters

  [in] | num_bits | Number of packed bits

References osmo_pbit2ubit(), osmo_pbit2ubit_ext(), osmo_ubit2pbit(), and osmo_ubit2pbit_ext().

## osmo_revbytebits_32()

uint32_t osmo_revbytebits_32 | ( | uint32_t | x | ) |

reverse the bit-order in each byte of a dword

Parameters

  [in] | x | 32bit input value

Returns
  32bit value where bits of each byte have been reversed

See Chapter 7 "Hackers Delight"

Referenced by osmo_revbytebits_buf().

## osmo_revbytebits_8()

uint32_t osmo_revbytebits_8 | ( | uint8_t | x | ) |

reverse the bit order in a byte

Parameters

  [in] | x | 8bit input value

Returns
  8bit value where bits order has been reversed

See Chapter 7 "Hackers Delight"

Referenced by osmo_revbytebits_buf().

## osmo_revbytebits_buf()

void osmo_revbytebits_buf | ( | uint8_t * | buf,
|  | int | len
| ) |  |

reverse bit-order of each byte in a buffer

Parameters

  [in] | buf | buffer containing bytes to be bit-reversed
  [in] | len | length of buffer in bytes

This function reverses the bits in each byte of the buffer

References osmo_revbytebits_32(), and osmo_revbytebits_8().

## osmo_rol16()

static uint16_t osmo_rol16 | ( | uint16_t | in,
|  | unsigned | shift
| ) |  |

inline static

left circular shift

Parameters

  [in] | in | The 16 bit unsigned integer to be rotated
  [in] | shift | Number of bits to shift in to, [0;16] bits

Returns
  shifted value

## osmo_ubit2pbit()

int osmo_ubit2pbit | ( | pbit_t * | out,
|  | const ubit_t * | in,
|  | unsigned int | num_bits
| ) |  |

convert unpacked bits to packed bits, return length in bytes

Parameters

  [out] | out | output buffer of packed bits
  [in] | in | input buffer of unpacked bits
  [in] | num_bits | number of bits

Referenced by osmo_pbit_bytesize().

## osmo_ubit2pbit_ext()

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
| ) |  |

convert unpacked bits to packed bits (extended options)

Parameters

  [out] | out | output buffer of packed bits
  [in] | out_ofs | offset into output buffer
  [in] | in | input buffer of unpacked bits
  [in] | in_ofs | offset into input buffer
  [in] | num_bits | number of bits
  [in] | lsb_mode | Encode bits in LSB orde instead of MSB

Returns
  length in bytes (max written offset of output buffer + 1)

Referenced by osmo_pbit_bytesize().