214 lines
6.2 KiB
C
214 lines
6.2 KiB
C
// $Id: burst_types.h,v 1.5 2007/03/14 05:44:53 jl Exp $
|
|
|
|
#pragma once
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "gsm_constants.h"
|
|
|
|
static const int TB_LEN = 3;
|
|
static const int TB_OS1 = 0;
|
|
static const int TB_OS2 = 145;
|
|
static const unsigned char tail_bits[] = {0, 0, 0};
|
|
|
|
/*
|
|
* The normal burst is used to carry information on traffic and control
|
|
* channels.
|
|
*/
|
|
static const int N_TSC_NUM = 8; // number of training sequence codes
|
|
static const int N_TSC_CODE_LEN = 26; // length of tsc
|
|
static const int N_TSC_OS = 61; // tsc offset
|
|
static const int N_EDATA_LEN_1 = 58; // length of first data section
|
|
static const int N_EDATA_OS_1 = 3; // offset of first data section
|
|
static const int N_EDATA_LEN_2 = 58; // length of second data section
|
|
static const int N_EDATA_OS_2 = 87; // offset of second data section
|
|
#if 0
|
|
static const unsigned char n_tsc[][N_TSC_CODE_LEN] = {
|
|
/* 0 */ {
|
|
0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0,
|
|
0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1
|
|
},
|
|
/* 1 */ {
|
|
0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1,
|
|
1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1
|
|
},
|
|
/* 2 */ {
|
|
0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1,
|
|
0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0
|
|
},
|
|
/* 3 */ {
|
|
0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0,
|
|
1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0
|
|
},
|
|
/* 4 */ {
|
|
0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0,
|
|
1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1
|
|
},
|
|
/* 5 */ {
|
|
0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0
|
|
},
|
|
/* 6 */ {
|
|
1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1,
|
|
0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1
|
|
},
|
|
/* 7 */ {
|
|
1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0,
|
|
0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0
|
|
}
|
|
};
|
|
|
|
#endif
|
|
|
|
/*
|
|
* The frequency correction burst is used for frequency synchronization
|
|
* of the mobile. This is broadcast in TS0 together with the SCH and
|
|
* BCCH.
|
|
*
|
|
* Modulating the bits below causes a spike at 62.5kHz above (below for
|
|
* COMPACT) the center frequency. One can use this spike with a narrow
|
|
* band filter to accurately determine the center of the channel.
|
|
*/
|
|
static const int FC_CODE_LEN = 142;
|
|
static const int FC_OS = 3;
|
|
static const unsigned char fc_fb[] = {
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
};
|
|
|
|
static const unsigned char fc_compact_fb[] = {
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0
|
|
};
|
|
|
|
|
|
/*
|
|
* The synchronization burst is used for time synchronization of the
|
|
* mobile. The bits given below were chosen for their correlation
|
|
* properties. The synchronization channel (SCH) contains a long
|
|
* training sequence (given below) and carries the TDMA frame number and
|
|
* base station identity code. It is broadcast in TS0 in the frame
|
|
* following the frequency correction burst.
|
|
*/
|
|
static const int SB_CODE_LEN = 64;
|
|
static const int SB_ETS_OS = 42;
|
|
static const int SB_EDATA_LEN_1 = 39;
|
|
static const int SB_EDATA_OS_1 = 3;
|
|
static const int SB_EDATA_LEN_2 = 39;
|
|
static const int SB_EDATA_OS_2 = 106;
|
|
static const unsigned char sb_etsc[] = {
|
|
1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0,
|
|
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
|
|
0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1,
|
|
0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1
|
|
};
|
|
|
|
static const unsigned char sb_cts_etsc[] = {
|
|
1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1,
|
|
0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
|
|
1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,
|
|
1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1
|
|
};
|
|
|
|
static const unsigned char sb_compact_etsc[] = {
|
|
1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1,
|
|
0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0,
|
|
0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
|
|
0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0
|
|
};
|
|
|
|
|
|
/*
|
|
* A base tranceiver station must transmit a burst in every timeslot of
|
|
* every TDMA frame in channel C0. The dummy burst will be transmitted
|
|
* on all timeslots of all TDMA frames for which no other channel
|
|
* requires a burst to be transmitted.
|
|
*/
|
|
static const int D_CODE_LEN = 142;
|
|
static const int D_MB_OS = 3;
|
|
static const unsigned char d_mb[] = {
|
|
1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0,
|
|
0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0,
|
|
0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
|
|
0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0,
|
|
0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0,
|
|
0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0,
|
|
0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1,
|
|
1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1,
|
|
0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0
|
|
};
|
|
|
|
|
|
/*
|
|
* The access burst is used for random access from a mobile.
|
|
*/
|
|
static const int AB_ETB_CODE_LEN = 8;
|
|
static const int AB_ETB_OS = 0;
|
|
static const unsigned char ab_etb[] = {
|
|
0, 0, 1, 1, 1, 0, 1, 0
|
|
};
|
|
|
|
static const int AB_SSB_CODE_LEN = 41;
|
|
static const int AB_SSB_OS = 8;
|
|
static const unsigned char ab_ssb[] = {
|
|
0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0,
|
|
0, 0, 1, 1, 1, 1, 0, 0, 0
|
|
};
|
|
|
|
static const unsigned char ab_ts1_ssb[] = {
|
|
0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1,
|
|
0, 0, 1, 0, 0, 1, 1, 0, 1
|
|
};
|
|
|
|
static const unsigned char ab_ts2_ssb[] = {
|
|
1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1,
|
|
0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1,
|
|
1, 0, 1, 1, 1, 0, 1, 1, 1
|
|
};
|
|
|
|
|
|
typedef enum {
|
|
burst_n_0,
|
|
burst_n_1,
|
|
burst_n_2,
|
|
burst_n_3,
|
|
burst_n_4,
|
|
burst_n_5,
|
|
burst_n_6,
|
|
burst_n_7,
|
|
burst_fc,
|
|
burst_fc_c,
|
|
burst_s,
|
|
burst_s_cts,
|
|
burst_s_c,
|
|
burst_d,
|
|
burst_a,
|
|
burst_a_ts1,
|
|
burst_a_ts2,
|
|
burst_not_a_burst
|
|
} burst_t;
|
|
|
|
static const int N_BURST_TYPES = ((int)(burst_not_a_burst) + 1);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|