libosmoisdn 1.9.0.209-e0c63
Osmocom ISDN library
i460_mux.c File Reference

ITU-T I.460 sub-channel multiplexer + demultiplexer. More...

#include <errno.h>
#include <osmocom/core/bits.h>
#include <osmocom/core/utils.h>
#include <osmocom/core/msgb.h>
#include <osmocom/isdn/i460_mux.h>

Functions

int osmo_i460_subchan_count (struct osmo_i460_timeslot *ts)
 count the number of sub-channels in this I.460 slot. More...
 
static bool osmo_i460_has_single_64k_schan (struct osmo_i460_timeslot *ts)
 
static void demux_subchan_append_bit (struct osmo_i460_subchan *schan, uint8_t bit)
 
static void demux_subchan_extract_bits (struct osmo_i460_subchan *schan, const uint8_t *data, size_t data_len)
 
void osmo_i460_demux_in (struct osmo_i460_timeslot *ts, const uint8_t *data, size_t data_len)
 Feed multiplexed data (from an E1 timeslot) into de-multiplexer. More...
 
void osmo_i460_mux_enqueue (struct osmo_i460_subchan *schan, struct msgb *msg)
 enqueue a to-be-transmitted message buffer containing unpacked bits More...
 
static ubit_t mux_schan_provide_bit (struct osmo_i460_subchan *schan)
 
static uint8_t mux_subchan_provide_bits (struct osmo_i460_subchan *schan, uint8_t *mask)
 provide one byte with the subchan-specific bits of given sub-channel. More...
 
static uint8_t mux_timeslot_provide_bits (struct osmo_i460_timeslot *ts)
 
int osmo_i460_mux_out (struct osmo_i460_timeslot *ts, uint8_t *out, size_t out_len)
 Get multiplexed data from de-multiplexer (for feeding it into an E1 timeslot). More...
 
static int alloc_bitbuf (void *ctx, struct osmo_i460_subchan *schan, size_t num_bits)
 
static int find_unused_subchan_idx (const struct osmo_i460_timeslot *ts)
 
static void subchan_reset (struct osmo_i460_subchan *schan, bool first_time)
 
void osmo_i460_ts_init (struct osmo_i460_timeslot *ts)
 initialize an I.460 timeslot More...
 
struct osmo_i460_subchanosmo_i460_subchan_add (void *ctx, struct osmo_i460_timeslot *ts, const struct osmo_i460_schan_desc *chd)
 add a new sub-channel to the given timeslot More...
 
void osmo_i460_subchan_del (struct osmo_i460_subchan *schan)
 

Detailed Description

ITU-T I.460 sub-channel multiplexer + demultiplexer.

Function Documentation

◆ alloc_bitbuf()

static int alloc_bitbuf ( void *  ctx,
struct osmo_i460_subchan schan,
size_t  num_bits 
)
static

◆ demux_subchan_append_bit()

◆ demux_subchan_extract_bits()

static void demux_subchan_extract_bits ( struct osmo_i460_subchan schan,
const uint8_t *  data,
size_t  data_len 
)
static

◆ find_unused_subchan_idx()

static int find_unused_subchan_idx ( const struct osmo_i460_timeslot ts)
static

◆ mux_schan_provide_bit()

◆ mux_subchan_provide_bits()

static uint8_t mux_subchan_provide_bits ( struct osmo_i460_subchan schan,
uint8_t *  mask 
)
static

provide one byte with the subchan-specific bits of given sub-channel.

Parameters
[in]schansub-channel that is to provide bits
[out]maskbitmask of those bits filled in
Returns
bits of given sub-channel

References osmo_i460_subchan::bit_offset, mux_schan_provide_bit(), OSMO_ASSERT, OSMO_I460_RATE_16k, OSMO_I460_RATE_32k, OSMO_I460_RATE_64k, OSMO_I460_RATE_8k, and osmo_i460_subchan::rate.

Referenced by mux_timeslot_provide_bits().

◆ mux_timeslot_provide_bits()

static uint8_t mux_timeslot_provide_bits ( struct osmo_i460_timeslot ts)
static

◆ osmo_i460_demux_in()

void osmo_i460_demux_in ( struct osmo_i460_timeslot ts,
const uint8_t *  data,
size_t  data_len 
)

Feed multiplexed data (from an E1 timeslot) into de-multiplexer.

Parameters
[in]tstimeslot state.
[in]datainput data bytes as received from E1/T1.
[in]data_lenlength of data in bytes.

References ARRAY_SIZE, data, osmo_i460_subchan::demux, demux_subchan_extract_bits(), osmo_i460_has_single_64k_schan(), OSMO_I460_RATE_NONE, osmo_pbit2ubit(), osmo_i460_subchan_demux::out_cb_bits, osmo_i460_subchan_demux::out_cb_bytes, osmo_i460_subchan::rate, ts, and osmo_i460_subchan_demux::user_data.

◆ osmo_i460_has_single_64k_schan()

static bool osmo_i460_has_single_64k_schan ( struct osmo_i460_timeslot ts)
static

◆ osmo_i460_mux_enqueue()

void osmo_i460_mux_enqueue ( struct osmo_i460_subchan schan,
struct msgb msg 
)

enqueue a to-be-transmitted message buffer containing unpacked bits

References msgb_enqueue(), msgb_length(), osmo_i460_subchan::mux, OSMO_ASSERT, and osmo_i460_subchan_mux::tx_queue.

◆ osmo_i460_mux_out()

int osmo_i460_mux_out ( struct osmo_i460_timeslot ts,
uint8_t *  out,
size_t  out_len 
)

Get multiplexed data from de-multiplexer (for feeding it into an E1 timeslot).

Parameters
[in]tstimeslot state.
[out]outcaller-provided buffer where to store generated output bytes.
[in]out_lennumber of bytes to be stored at out.

References mux_timeslot_provide_bits(), and osmo_i460_subchan::ts.

◆ osmo_i460_subchan_add()

◆ osmo_i460_subchan_count()

int osmo_i460_subchan_count ( struct osmo_i460_timeslot ts)

count the number of sub-channels in this I.460 slot.

Parameters
[in]tstimeslot that holds the I.460 subchannels.
Returns
number of subchannels.

References ARRAY_SIZE, OSMO_I460_RATE_NONE, and ts.

Referenced by osmo_i460_has_single_64k_schan().

◆ osmo_i460_subchan_del()

void osmo_i460_subchan_del ( struct osmo_i460_subchan schan)

References subchan_reset().

◆ osmo_i460_ts_init()

void osmo_i460_ts_init ( struct osmo_i460_timeslot ts)

initialize an I.460 timeslot

References ARRAY_SIZE, osmo_i460_timeslot::schan, subchan_reset(), and osmo_i460_subchan::ts.

◆ subchan_reset()