VTY: add extended (11-bit) RACH detection toggle
Since I838c21db29c54f1924dd478c2b34b46b70aab2cd we have both TS1 and TS2 synch. sequences, in addition to "default" TS0. Let's finally introduce the VTY configuration parameter, that can be used to toggle optional detection of both TS1 and TS2. Note: we keep this optional because of potentially bad impact on performance. There's no point in paying the performance penalty unless upper levels (BTS, PCU) actually make use of it. Change-Id: I1aee998d83b06692d76a83f79748f9129a2547e8 Related: OS#3054
This commit is contained in:
parent
a3934a11a4
commit
a8b3565246
|
@ -304,6 +304,21 @@ DEFUN(cfg_egprs, cfg_egprs_cmd,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_ext_rach, cfg_ext_rach_cmd,
|
||||
"ext-rach (disable|enable)",
|
||||
"Enable extended (11-bit) RACH (default=disable)\n")
|
||||
{
|
||||
struct trx_ctx *trx = trx_from_vty(vty);
|
||||
|
||||
if (strcmp("disable", argv[0]) == 0)
|
||||
trx->cfg.ext_rach = false;
|
||||
|
||||
if (strcmp("enable", argv[0]) == 0)
|
||||
trx->cfg.ext_rach = true;
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_rt_prio, cfg_rt_prio_cmd,
|
||||
"rt-prio <1-32>",
|
||||
"Set the SCHED_RR real-time priority\n"
|
||||
|
@ -417,6 +432,7 @@ static int config_write_trx(struct vty *vty)
|
|||
vty_out(vty, " rssi-offset %f%s", trx->cfg.rssi_offset, VTY_NEWLINE);
|
||||
vty_out(vty, " swap-channels %s%s", trx->cfg.swap_channels ? "enable" : "disable", VTY_NEWLINE);
|
||||
vty_out(vty, " egprs %s%s", trx->cfg.egprs ? "enable" : "disable", VTY_NEWLINE);
|
||||
vty_out(vty, " ext-rach %s%s", trx->cfg.ext_rach ? "enable" : "disable", VTY_NEWLINE);
|
||||
if (trx->cfg.sched_rr != 0)
|
||||
vty_out(vty, " rt-prio %u%s", trx->cfg.sched_rr, VTY_NEWLINE);
|
||||
|
||||
|
@ -454,6 +470,7 @@ static void trx_dump_vty(struct vty *vty, struct trx_ctx *trx)
|
|||
vty_out(vty, " RSSI to dBm offset: %f%s", trx->cfg.rssi_offset, VTY_NEWLINE);
|
||||
vty_out(vty, " Swap channels: %s%s", trx->cfg.swap_channels ? "Enabled" : "Disabled", VTY_NEWLINE);
|
||||
vty_out(vty, " EDGE support: %s%s", trx->cfg.egprs ? "Enabled" : "Disabled", VTY_NEWLINE);
|
||||
vty_out(vty, " Extended RACH support: %s%s", trx->cfg.ext_rach ? "Enabled" : "Disabled", VTY_NEWLINE);
|
||||
vty_out(vty, " Real Time Priority: %u (%s)%s", trx->cfg.sched_rr,
|
||||
trx->cfg.sched_rr ? "Enabled" : "Disabled", VTY_NEWLINE);
|
||||
vty_out(vty, " Channels: %u%s", trx->cfg.num_chans, VTY_NEWLINE);
|
||||
|
@ -564,6 +581,7 @@ int trx_vty_init(struct trx_ctx* trx)
|
|||
install_element(TRX_NODE, &cfg_rssi_offset_cmd);
|
||||
install_element(TRX_NODE, &cfg_swap_channels_cmd);
|
||||
install_element(TRX_NODE, &cfg_egprs_cmd);
|
||||
install_element(TRX_NODE, &cfg_ext_rach_cmd);
|
||||
install_element(TRX_NODE, &cfg_rt_prio_cmd);
|
||||
install_element(TRX_NODE, &cfg_filler_cmd);
|
||||
|
||||
|
|
|
@ -57,6 +57,7 @@ struct trx_ctx {
|
|||
double offset;
|
||||
double rssi_offset;
|
||||
bool swap_channels;
|
||||
bool ext_rach;
|
||||
bool egprs;
|
||||
unsigned int sched_rr;
|
||||
unsigned int num_chans;
|
||||
|
|
|
@ -159,7 +159,8 @@ Transceiver::~Transceiver()
|
|||
* are still expected to report clock indications through control channel
|
||||
* activity.
|
||||
*/
|
||||
bool Transceiver::init(FillerType filler, size_t rtsc, unsigned rach_delay, bool edge)
|
||||
bool Transceiver::init(FillerType filler, size_t rtsc, unsigned rach_delay,
|
||||
bool edge, bool ext_rach)
|
||||
{
|
||||
int d_srcport, d_dstport, c_srcport, c_dstport;
|
||||
|
||||
|
@ -173,6 +174,7 @@ bool Transceiver::init(FillerType filler, size_t rtsc, unsigned rach_delay, bool
|
|||
return false;
|
||||
}
|
||||
|
||||
mExtRACH = ext_rach;
|
||||
mEdge = edge;
|
||||
|
||||
mDataSockets.resize(mChans);
|
||||
|
@ -497,16 +499,16 @@ CorrType Transceiver::expectedCorrType(GSM::Time currTime,
|
|||
break;
|
||||
case IV:
|
||||
case VI:
|
||||
return RACH;
|
||||
return mExtRACH ? EXT_RACH : RACH;
|
||||
break;
|
||||
case V: {
|
||||
int mod51 = burstFN % 51;
|
||||
if ((mod51 <= 36) && (mod51 >= 14))
|
||||
return RACH;
|
||||
return mExtRACH ? EXT_RACH : RACH;
|
||||
else if ((mod51 == 4) || (mod51 == 5))
|
||||
return RACH;
|
||||
return mExtRACH ? EXT_RACH : RACH;
|
||||
else if ((mod51 == 45) || (mod51 == 46))
|
||||
return RACH;
|
||||
return mExtRACH ? EXT_RACH : RACH;
|
||||
else if (mHandover[burstTN][sdcch4_subslot[burstFN % 102]])
|
||||
return RACH;
|
||||
else
|
||||
|
@ -524,7 +526,7 @@ CorrType Transceiver::expectedCorrType(GSM::Time currTime,
|
|||
case XIII: {
|
||||
int mod52 = burstFN % 52;
|
||||
if ((mod52 == 12) || (mod52 == 38))
|
||||
return RACH;
|
||||
return mExtRACH ? EXT_RACH : RACH;
|
||||
else if ((mod52 == 25) || (mod52 == 51))
|
||||
return IDLE;
|
||||
else
|
||||
|
@ -635,9 +637,11 @@ SoftVector *Transceiver::pullRadioVector(GSM::Time &wTime, double &RSSI, bool &i
|
|||
noise = 20.0 * log10(rxFullScale / state->mNoiseLev);
|
||||
}
|
||||
|
||||
unsigned max_toa = (type == RACH || type == EXT_RACH) ?
|
||||
mMaxExpectedDelayAB : mMaxExpectedDelayNB;
|
||||
|
||||
/* Detect normal or RACH bursts */
|
||||
rc = detectAnyBurst(*burst, mTSC, BURST_THRESH, mSPSRx, type, amp, toa,
|
||||
(type==RACH)?mMaxExpectedDelayAB:mMaxExpectedDelayNB);
|
||||
rc = detectAnyBurst(*burst, mTSC, BURST_THRESH, mSPSRx, type, amp, toa, max_toa);
|
||||
|
||||
if (rc > 0) {
|
||||
type = (CorrType) rc;
|
||||
|
|
|
@ -114,7 +114,8 @@ public:
|
|||
~Transceiver();
|
||||
|
||||
/** Start the control loop */
|
||||
bool init(FillerType filler, size_t rtsc, unsigned rach_delay, bool edge);
|
||||
bool init(FillerType filler, size_t rtsc, unsigned rach_delay,
|
||||
bool edge, bool ext_rach);
|
||||
|
||||
/** attach the radioInterface receive FIFO */
|
||||
bool receiveFIFO(VectorFIFO *wFIFO, size_t chan)
|
||||
|
@ -210,6 +211,7 @@ private:
|
|||
int mSPSRx; ///< number of samples per Rx symbol
|
||||
size_t mChans;
|
||||
|
||||
bool mExtRACH;
|
||||
bool mEdge;
|
||||
bool mOn; ///< flag to indicate that transceiver is powered on
|
||||
bool mForceClockInterface; ///< flag to indicate whether IND CLOCK shall be sent unconditionally after transceiver is started
|
||||
|
|
|
@ -144,7 +144,7 @@ int makeTransceiver(struct trx_ctx *trx, RadioInterface *radio)
|
|||
trx->cfg.rx_sps, trx->cfg.num_chans, GSM::Time(3,0),
|
||||
radio, trx->cfg.rssi_offset);
|
||||
if (!transceiver->init(trx->cfg.filler, trx->cfg.rtsc,
|
||||
trx->cfg.rach_delay, trx->cfg.egprs)) {
|
||||
trx->cfg.rach_delay, trx->cfg.egprs, trx->cfg.ext_rach)) {
|
||||
LOG(ALERT) << "Failed to initialize transceiver";
|
||||
return -1;
|
||||
}
|
||||
|
@ -408,6 +408,7 @@ static void print_config(struct trx_ctx *trx)
|
|||
ost << " Tx Samples-per-Symbol... " << trx->cfg.tx_sps << std::endl;
|
||||
ost << " Rx Samples-per-Symbol... " << trx->cfg.rx_sps << std::endl;
|
||||
ost << " EDGE support............ " << trx->cfg.egprs << std::endl;
|
||||
ost << " Extended RACH support... " << trx->cfg.ext_rach << std::endl;
|
||||
ost << " Reference............... " << trx->cfg.clock_ref << std::endl;
|
||||
ost << " C0 Filler Table......... " << trx->cfg.filler << std::endl;
|
||||
ost << " Multi-Carrier........... " << trx->cfg.multi_arfcn << std::endl;
|
||||
|
|
Loading…
Reference in New Issue