/* * (C) 2013 by Andreas Eversberg * (C) 2015-2017 by Harald Welte * Contributions by sysmocom - s.f.m.c. GmbH * * 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 . * */ #include #include #include #include #include #include #include #include #include #include #include /* obtain a to-be-transmitted FCCH (frequency correction channel) burst */ int tx_fcch_fn(struct l1sched_ts *l1ts, struct trx_dl_burst_req *br) { LOGL1SB(DL1P, LOGL_DEBUG, l1ts, br, "Transmitting FCCH\n"); /* A frequency correction burst is basically a sequence of zeros */ memset(br->burst, 0x00, GSM_BURST_LEN); br->burst_len = GSM_BURST_LEN; return 0; } /* obtain a to-be-transmitted SCH (synchronization channel) burst */ int tx_sch_fn(struct l1sched_ts *l1ts, struct trx_dl_burst_req *br) { ubit_t burst[78]; uint8_t sb_info[4]; struct gsm_time t; uint8_t t3p, bsic; LOGL1SB(DL1P, LOGL_DEBUG, l1ts, br, "Transmitting SCH\n"); /* BURST BYPASS */ /* create SB info from GSM time and BSIC */ gsm_fn2gsmtime(&t, br->fn); t3p = t.t3 / 10; bsic = l1ts->ts->trx->bts->bsic; sb_info[0] = ((bsic & 0x3f) << 2) | ((t.t1 & 0x600) >> 9); sb_info[1] = ((t.t1 & 0x1fe) >> 1); sb_info[2] = ((t.t1 & 0x001) << 7) | ((t.t2 & 0x1f) << 2) | ((t3p & 0x6) >> 1); sb_info[3] = (t3p & 0x1); /* encode bursts */ gsm0503_sch_encode(burst, sb_info); /* compose burst */ memcpy(br->burst + 3, burst, 39); memcpy(br->burst + 42, _sched_train_seq_gmsk_sb, 64); memcpy(br->burst + 106, burst + 39, 39); br->burst_len = GSM_BURST_LEN; return 0; }