2017-07-04 12:38:50 +00:00
|
|
|
/*
|
|
|
|
* OsmocomBB <-> SDR connection bridge
|
|
|
|
* TDMA scheduler: logical channels, RX / TX handlers
|
|
|
|
*
|
|
|
|
* (C) 2013 by Andreas Eversberg <jolly@eversberg.eu>
|
|
|
|
* (C) 2015 by Alexander Chemeris <Alexander.Chemeris@fairwaves.co>
|
|
|
|
* (C) 2015 by Harald Welte <laforge@gnumonks.org>
|
|
|
|
*
|
|
|
|
* All Rights Reserved
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "sched_trx.h"
|
|
|
|
|
|
|
|
/* TODO: implement */
|
|
|
|
#define tx_pdtch_fn NULL
|
|
|
|
#define rx_pdtch_fn NULL
|
|
|
|
|
2017-07-06 06:17:24 +00:00
|
|
|
/* Forward declaration of handlers */
|
|
|
|
int rx_data_fn(struct trx_instance *trx, struct trx_ts *ts,
|
2017-07-31 07:27:30 +00:00
|
|
|
struct trx_lchan_state *lchan, uint32_t fn, uint8_t bid,
|
2018-03-02 14:24:57 +00:00
|
|
|
sbit_t *bits, int8_t rssi, int16_t toa256);
|
2017-07-06 06:17:24 +00:00
|
|
|
|
2017-07-15 15:46:54 +00:00
|
|
|
int tx_data_fn(struct trx_instance *trx, struct trx_ts *ts,
|
2017-07-31 08:03:51 +00:00
|
|
|
struct trx_lchan_state *lchan, uint32_t fn, uint8_t bid);
|
2017-07-15 15:46:54 +00:00
|
|
|
|
2017-07-07 00:11:26 +00:00
|
|
|
int rx_sch_fn(struct trx_instance *trx, struct trx_ts *ts,
|
2017-07-31 07:27:30 +00:00
|
|
|
struct trx_lchan_state *lchan, uint32_t fn, uint8_t bid,
|
2018-03-02 14:24:57 +00:00
|
|
|
sbit_t *bits, int8_t rssi, int16_t toa256);
|
2017-07-07 00:11:26 +00:00
|
|
|
|
2017-07-13 18:38:48 +00:00
|
|
|
int tx_rach_fn(struct trx_instance *trx, struct trx_ts *ts,
|
2017-07-31 08:03:51 +00:00
|
|
|
struct trx_lchan_state *lchan, uint32_t fn, uint8_t bid);
|
2017-07-13 18:38:48 +00:00
|
|
|
|
2017-08-07 08:24:18 +00:00
|
|
|
int rx_tchf_fn(struct trx_instance *trx, struct trx_ts *ts,
|
|
|
|
struct trx_lchan_state *lchan, uint32_t fn, uint8_t bid,
|
2018-03-02 14:24:57 +00:00
|
|
|
sbit_t *bits, int8_t rssi, int16_t toa256);
|
2017-08-07 08:24:18 +00:00
|
|
|
|
|
|
|
int tx_tchf_fn(struct trx_instance *trx, struct trx_ts *ts,
|
|
|
|
struct trx_lchan_state *lchan, uint32_t fn, uint8_t bid);
|
|
|
|
|
2018-08-12 21:48:14 +00:00
|
|
|
int rx_tchh_fn(struct trx_instance *trx, struct trx_ts *ts,
|
|
|
|
struct trx_lchan_state *lchan, uint32_t fn, uint8_t bid,
|
|
|
|
sbit_t *bits, int8_t rssi, int16_t toa256);
|
|
|
|
|
|
|
|
int tx_tchh_fn(struct trx_instance *trx, struct trx_ts *ts,
|
|
|
|
struct trx_lchan_state *lchan, uint32_t fn, uint8_t bid);
|
|
|
|
|
|
|
|
|
2017-07-04 12:38:50 +00:00
|
|
|
const struct trx_lchan_desc trx_lchan_desc[_TRX_CHAN_MAX] = {
|
|
|
|
{
|
|
|
|
TRXC_IDLE, "IDLE",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x00, TRX_CH_LID_DEDIC,
|
2017-07-04 12:38:50 +00:00
|
|
|
0x00, 0x00,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* MS: do nothing, save power...
|
|
|
|
* BTS: send dummy burst on C0
|
|
|
|
*/
|
|
|
|
NULL, NULL,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_FCCH, "FCCH",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x00, TRX_CH_LID_DEDIC,
|
2017-07-04 12:38:50 +00:00
|
|
|
0x00, 0x00,
|
|
|
|
|
|
|
|
/* FCCH is handled by transceiver */
|
|
|
|
NULL, NULL,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SCH, "SCH",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x00, TRX_CH_LID_DEDIC,
|
2017-07-08 13:28:09 +00:00
|
|
|
0x00, TRX_CH_FLAG_AUTO,
|
2017-07-04 12:38:50 +00:00
|
|
|
|
2017-07-07 00:11:26 +00:00
|
|
|
/**
|
|
|
|
* We already have clock indications from TRX,
|
|
|
|
* but we also need BSIC (BCC / NCC) value.
|
|
|
|
*/
|
|
|
|
rx_sch_fn, NULL,
|
2017-07-04 12:38:50 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_BCCH, "BCCH",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x80, TRX_CH_LID_DEDIC,
|
2017-07-04 12:38:50 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_AUTO,
|
|
|
|
rx_data_fn, NULL,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_RACH, "RACH",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x88, TRX_CH_LID_DEDIC,
|
2017-07-04 12:38:50 +00:00
|
|
|
0x00, TRX_CH_FLAG_AUTO,
|
|
|
|
NULL, tx_rach_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_CCCH, "CCCH",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x90, TRX_CH_LID_DEDIC,
|
2017-07-04 12:38:50 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_AUTO,
|
|
|
|
rx_data_fn, NULL,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_TCHF, "TCH/F",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x08, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
8 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_tchf_fn, tx_tchf_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_TCHH_0, "TCH/H(0)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x10, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
6 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_tchh_fn, tx_tchh_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_TCHH_1, "TCH/H(1)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x18, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
6 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_tchh_fn, tx_tchh_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH4_0, "SDCCH/4(0)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x20, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH4_1, "SDCCH/4(1)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x28, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH4_2, "SDCCH/4(2)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x30, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH4_3, "SDCCH/4(3)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x38, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH8_0, "SDCCH/8(0)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x40, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH8_1, "SDCCH/8(1)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x48, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH8_2, "SDCCH/8(2)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x50, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH8_3, "SDCCH/8(3)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x58, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH8_4, "SDCCH/8(4)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x60, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH8_5, "SDCCH/8(5)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x68, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH8_6, "SDCCH/8(6)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x70, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SDCCH8_7, "SDCCH/8(7)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x78, TRX_CH_LID_DEDIC,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCHTF, "SACCH/TF",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x08, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCHTH_0, "SACCH/TH(0)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x10, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCHTH_1, "SACCH/TH(1)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x18, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH4_0, "SACCH/4(0)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x20, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH4_1, "SACCH/4(1)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x28, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH4_2, "SACCH/4(2)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x30, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH4_3, "SACCH/4(3)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x38, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH8_0, "SACCH/8(0)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x40, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH8_1, "SACCH/8(1)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x48, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH8_2, "SACCH/8(2)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x50, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH8_3, "SACCH/8(3)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x58, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH8_4, "SACCH/8(4)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x60, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH8_5, "SACCH/8(5)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x68, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH8_6, "SACCH/8(6)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x70, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_SACCH8_7, "SACCH/8(7)",
|
2018-03-22 16:02:25 +00:00
|
|
|
0x78, TRX_CH_LID_SACCH,
|
2018-03-10 20:19:33 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_CBTX,
|
2017-07-04 12:38:50 +00:00
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_PDTCH, "PDTCH",
|
2018-10-01 15:27:08 +00:00
|
|
|
0xc0, TRX_CH_LID_DEDIC,
|
2017-07-04 12:38:50 +00:00
|
|
|
12 * GSM_BURST_PL_LEN, TRX_CH_FLAG_PDCH,
|
|
|
|
rx_pdtch_fn, tx_pdtch_fn,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
TRXC_PTCCH, "PTCCH",
|
2018-10-01 15:27:08 +00:00
|
|
|
0xc0, TRX_CH_LID_DEDIC,
|
2017-07-04 12:38:50 +00:00
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_PDCH,
|
|
|
|
rx_data_fn, tx_data_fn,
|
|
|
|
},
|
trxcon/scheduler: add CCCH/SDCCH mframe layouts with CBCH
According to GSM TS 05.02, section 3.3.5, Cell Broadcast Channel
(CBCH) is a downlink only channel, which is used to carry the
short message service cell broadcast (SMSCB). CBCH is optional,
and uses the same physical channel as SDCCH. More precisely,
CBCH replaces sub-slot number 2 of SDCCH channels when enabled.
This change introduces the CBCH enabled multi-frame layouts,
and two separate logical channel types:
- GSM_PCHAN_CCCH_SDCCH4_CBCH (lchan TRXC_SDCCH4_CBCH),
- GSM_PCHAN_SDCCH8_SACCH8C_CBCH (lchan TRXC_SDCCH8_CBCH).
Both logical channels are separately identified using
the following Osmocom specific cbits:
- TRXC_SDCCH4_CBCH - 0x18 (0b11000),
- TRXC_SDCCH8_CBCH - 0x19 (0b11001).
The reason of this separation is that we somehow need to
distinguish between CBCH on C0/TS0, and CBCH on CX/TS0.
Unlike TRXC_SDCCH8_CBCH, TRXC_SDCCH4_CBCH is enabled
automatically (TRX_CH_FLAG_AUTO), so CBCH messages
can be decoded on C0 while being in idle mode.
Change-Id: Iad9905fc3a8a012ff1ada26ff95af384816f9873
2018-09-15 14:34:41 +00:00
|
|
|
[TRXC_SDCCH4_CBCH] = {
|
|
|
|
TRXC_SDCCH4_CBCH, "SDCCH/4(CBCH)",
|
|
|
|
0xc0, TRX_CH_LID_DEDIC,
|
|
|
|
4 * GSM_BURST_PL_LEN, TRX_CH_FLAG_AUTO,
|
|
|
|
rx_data_fn, NULL,
|
|
|
|
},
|
|
|
|
[TRXC_SDCCH8_CBCH] = {
|
|
|
|
TRXC_SDCCH8_CBCH, "SDCCH/8(CBCH)",
|
|
|
|
0xc8, TRX_CH_LID_DEDIC,
|
|
|
|
4 * GSM_BURST_PL_LEN, 0x00,
|
|
|
|
rx_data_fn, NULL,
|
|
|
|
},
|
2017-07-04 12:38:50 +00:00
|
|
|
};
|