diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2019-12-21 00:40:09 +0100 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-01-07 16:04:04 +0100 |
commit | fd99c6ce05e2b62dcba93201e2a2d1ac83b3673d (patch) | |
tree | 81cc56117b72c5695795eadd8d1e9f959d6e152e /Transceiver52M/radioInterface.h | |
parent | e947db8d98fc873b06e7b42abc51f0109810e640 (diff) |
radioInterfaceMulti: Fail to tune on freq not following multi-arfcn restrictions
multi-arfcn feature uses a hardcoded disposition of logical channels on
a physical channel. Logical channels in the phisical channel are
separated by MCBTS_SPACING Hz, that is 4 GSM ARFCNs.
As a result, multi-arfcn restricts the TRX ARFCN setup to the following:
ARFCN(TRX0)=N, ARFCN(TRX1)=N+1*4, ARFCN(TRX2)=N+2*4, ...
Let's make sure radioInterfaceMulti verifies the requested Rx/Tx
frequencies for each logical channel over TRXC match the restriction
explained above. It will check freq going to be set is indeed separated
by MCBTS_SPACING from already set channels, making sure the ARFCN series
is consistent.
Otherwise, before this patch, one could set in osmo-bsc:
ARFCN(TRX0)=N, ARFCN(TRX1)=N+2
and osmo-trx would silently ack the related Rx/TxTUNE TRXC commands, but
actually still transmit on ARFCN N+4 instead. As a result, in this
scenario TRX!=0 were unusable with multi-arfcn.
Related: OS#4207
Change-Id: I2f3d66a611d3a489b3e4d9431994f4ec77b4460f
Diffstat (limited to 'Transceiver52M/radioInterface.h')
-rw-r--r-- | Transceiver52M/radioInterface.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h index d9fa414..c75a983 100644 --- a/Transceiver52M/radioInterface.h +++ b/Transceiver52M/radioInterface.h @@ -156,16 +156,24 @@ public: void close(); }; +struct freq_cfg_state { + bool set; + double freq_hz; +}; + class RadioInterfaceMulti : public RadioInterface { private: bool pushBuffer(); int pullBuffer(); + bool verify_arfcn_consistency(double freq, size_t chan, bool tx); virtual double setTxGain(double dB, size_t chan); signalVector *outerSendBuffer; signalVector *outerRecvBuffer; std::vector<signalVector *> history; std::vector<bool> active; + std::vector<struct freq_cfg_state> rx_freq_state; + std::vector<struct freq_cfg_state> tx_freq_state; Resampler *dnsampler; Resampler *upsampler; |