libosmogsm 1.9.0.196-9975
Osmocom GSM library
gsm0502.c File Reference

Paging helper code. More...

#include <stdint.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <osmocom/gsm/gsm0502.h>
#include <osmocom/gsm/gsm48.h>
#include <osmocom/gsm/rsl.h>
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/core/logging.h>
#include <inttypes.h>

Data Structures

struct  fn_remap_table
 

Macros

#define TCH_REPEAT_LENGTH   13
 
#define FACCH_F_REPEAT_LENGTH   13
 
#define FACCH_H_REPEAT_LENGTH   26
 
#define fn_remap_table_from_traffic_block_map(table, map, rows, cols, repeat)
 
#define CB_FCCH   -1
 
#define CB_SCH   -2
 
#define CB_BCCH   -3
 
#define CB_IDLE   -4
 

Functions

unsigned int gsm0502_calc_paging_group (const struct gsm48_control_channel_descr *chan_desc, uint64_t imsi)
 
static __attribute__ ((constructor))
 
uint32_t gsm0502_fn_remap (uint32_t fn, enum gsm0502_fn_remap_channel channel)
 Calculate the frame number of the beginning of a block. More...
 
uint16_t gsm0502_hop_seq_gen (const struct gsm_time *t, uint8_t hsn, uint8_t maio, size_t n, const uint16_t *ma)
 Hopping sequence generation as per 3GPP TS 45.002, section 6.2.3. More...
 
int gsm0502_fn2ccch_block (uint32_t fn)
 Calculate CCCH block number from the given TDMA frame number. More...
 

Variables

static const uint8_t gsm0502_tch_f_traffic_block_map [3][8]
 
static const uint8_t gsm0502_tch_h0_traffic_block_map [3][4]
 
static const uint8_t gsm0502_tch_h1_traffic_block_map [3][4]
 
static const uint8_t gsm0502_tch_f_facch_block_map [3][8]
 
static const uint8_t gsm0502_tch_h0_facch_block_map [3][6]
 
static const uint8_t gsm0502_tch_h1_facch_block_map [3][6]
 
static struct fn_remap_table tch_f_remap_table
 
static struct fn_remap_table tch_h0_remap_table
 
static struct fn_remap_table tch_h1_remap_table
 
static struct fn_remap_table facch_f_remap_table
 
static struct fn_remap_table facch_h0_remap_table
 
static struct fn_remap_table facch_h1_remap_table
 
static struct fn_remap_tablefn_remap_table_ptr [FN_REMAP_MAX]
 
static const uint8_t rn_table [114]
 
static const int ccch_block_table [51]
 

Detailed Description

Paging helper code.

Macro Definition Documentation

◆ CB_BCCH

#define CB_BCCH   -3

◆ CB_FCCH

#define CB_FCCH   -1

◆ CB_IDLE

#define CB_IDLE   -4

◆ CB_SCH

#define CB_SCH   -2

◆ FACCH_F_REPEAT_LENGTH

#define FACCH_F_REPEAT_LENGTH   13

◆ FACCH_H_REPEAT_LENGTH

#define FACCH_H_REPEAT_LENGTH   26

◆ fn_remap_table_from_traffic_block_map

#define fn_remap_table_from_traffic_block_map (   table,
  map,
  rows,
  cols,
  repeat 
)
Value:
for(i=0;i<rows;i++) { \
table.blockend[i] = map[i][cols-1]; \
if(map[i][0] <= map[i][cols-1]) \
table.distance[i] = map[i][cols-1] - map[i][0]; \
else \
table.distance[i] = repeat - map[i][0] + map[i][cols-1]; \
} \
table.cycle = repeat; \
table.len = rows;

◆ TCH_REPEAT_LENGTH

#define TCH_REPEAT_LENGTH   13

Function Documentation

◆ __attribute__()

Variable Documentation

◆ ccch_block_table

const int ccch_block_table[51]
static
Initial value:
= {
0, 0, 0, 0,
1, 1, 1, 1,
2, 2, 2, 2,
3, 3, 3, 3,
4, 4, 4, 4,
5, 5, 5, 5,
6, 6, 6, 6,
7, 7, 7, 7,
8, 8, 8, 8,
}
#define CB_IDLE
Definition: gsm0502.c:267
#define CB_BCCH
Definition: gsm0502.c:266
#define CB_SCH
Definition: gsm0502.c:265
#define CB_FCCH
Definition: gsm0502.c:264

Referenced by gsm0502_fn2ccch_block().

◆ facch_f_remap_table

struct fn_remap_table facch_f_remap_table
static

Referenced by __attribute__().

◆ facch_h0_remap_table

struct fn_remap_table facch_h0_remap_table
static

Referenced by __attribute__().

◆ facch_h1_remap_table

struct fn_remap_table facch_h1_remap_table
static

Referenced by __attribute__().

◆ fn_remap_table_ptr

struct fn_remap_table* fn_remap_table_ptr[FN_REMAP_MAX]
static

Referenced by __attribute__(), and gsm0502_fn_remap().

◆ gsm0502_tch_f_facch_block_map

const uint8_t gsm0502_tch_f_facch_block_map[3][8]
static
Initial value:
= {
{0, 1, 2, 3, 4, 5, 6, 7},
{4, 5, 6, 7, 8, 9, 10, 11},
{8, 9, 10, 11, 0, 1, 2, 3}
}

Referenced by __attribute__().

◆ gsm0502_tch_f_traffic_block_map

const uint8_t gsm0502_tch_f_traffic_block_map[3][8]
static
Initial value:
= {
{0, 1, 2, 3, 4, 5, 6, 7},
{4, 5, 6, 7, 8, 9, 10, 11},
{8, 9, 10, 11, 0, 1, 2, 3}
}

Referenced by __attribute__().

◆ gsm0502_tch_h0_facch_block_map

const uint8_t gsm0502_tch_h0_facch_block_map[3][6]
static
Initial value:
= {
{0, 2, 4, 6, 8, 10},
{8, 10, 13, 15, 17, 19},
{17, 19, 21, 23, 0, 2}
}

Referenced by __attribute__().

◆ gsm0502_tch_h0_traffic_block_map

const uint8_t gsm0502_tch_h0_traffic_block_map[3][4]
static
Initial value:
= {
{0, 2, 4, 6},
{4, 6, 8, 10},
{8, 10, 0, 2}
}

Referenced by __attribute__().

◆ gsm0502_tch_h1_facch_block_map

const uint8_t gsm0502_tch_h1_facch_block_map[3][6]
static
Initial value:
= {
{1, 3, 5, 7, 9, 11},
{9, 11, 14, 16, 18, 20},
{18, 20, 22, 24, 1, 3}
}

Referenced by __attribute__().

◆ gsm0502_tch_h1_traffic_block_map

const uint8_t gsm0502_tch_h1_traffic_block_map[3][4]
static
Initial value:
= {
{1, 3, 5, 7},
{5, 7, 9, 11},
{9, 11, 1, 3}
}

Referenced by __attribute__().

◆ rn_table

const uint8_t rn_table[114]
static
Initial value:
= {
48, 98, 63, 1, 36, 95, 78, 102, 94, 73,
0, 64, 25, 81, 76, 59, 124, 23, 104, 100,
101, 47, 118, 85, 18, 56, 96, 86, 54, 2,
80, 34, 127, 13, 6, 89, 57, 103, 12, 74,
55, 111, 75, 38, 109, 71, 112, 29, 11, 88,
87, 19, 3, 68, 110, 26, 33, 31, 8, 45,
82, 58, 40, 107, 32, 5, 106, 92, 62, 67,
77, 108, 122, 37, 60, 66, 121, 42, 51, 126,
117, 114, 4, 90, 43, 52, 53, 113, 120, 72,
16, 49, 7, 79, 119, 61, 22, 84, 9, 97,
91, 15, 21, 24, 46, 39, 93, 105, 65, 70,
125, 99, 17, 123,
}

Referenced by gsm0502_hop_seq_gen().

◆ tch_f_remap_table

struct fn_remap_table tch_f_remap_table
static

Referenced by __attribute__().

◆ tch_h0_remap_table

struct fn_remap_table tch_h0_remap_table
static

Referenced by __attribute__().

◆ tch_h1_remap_table

struct fn_remap_table tch_h1_remap_table
static

Referenced by __attribute__().