pcuif_proto: version 10: add frequency hopping parameters
Change-Id: I6863830883d90954006a7126c22d348aa2a83271 Related: SYS#4868, OS#4547
This commit is contained in:
parent
40a9e603b9
commit
8e2bd1e79d
|
@ -5,7 +5,7 @@
|
|||
|
||||
#define PCU_SOCK_DEFAULT "/tmp/pcu_bts"
|
||||
|
||||
#define PCU_IF_VERSION 0x09
|
||||
#define PCU_IF_VERSION 0x0a
|
||||
#define TXT_MAX_LEN 128
|
||||
|
||||
/* msg_type */
|
||||
|
@ -112,12 +112,21 @@ struct gsm_pcu_if_rach_ind {
|
|||
uint8_t ts_nr;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct gsm_pcu_if_info_ts {
|
||||
uint8_t tsc;
|
||||
uint8_t h;
|
||||
uint8_t hsn;
|
||||
uint8_t maio;
|
||||
uint8_t ma_bit_len;
|
||||
uint8_t ma[8];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct gsm_pcu_if_info_trx {
|
||||
uint16_t arfcn;
|
||||
uint8_t pdch_mask; /* PDCH channels per TS */
|
||||
uint8_t pdch_mask; /* PDCH timeslot mask */
|
||||
uint8_t spare;
|
||||
uint8_t tsc[8]; /* TSC per channel */
|
||||
uint32_t hlayer1;
|
||||
struct gsm_pcu_if_info_ts ts[8]; /* timeslots per TRX */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct gsm_pcu_if_info_ind {
|
||||
|
|
|
@ -630,6 +630,7 @@ bssgp_failed:
|
|||
}
|
||||
|
||||
for (ts_nr = 0; ts_nr < ARRAY_SIZE(bts->trx[0].pdch); ts_nr++) {
|
||||
const struct gsm_pcu_if_info_ts *its = &info_ind->trx[trx_nr].ts[ts_nr];
|
||||
struct gprs_rlcmac_pdch *pdch = &bts->trx[trx_nr].pdch[ts_nr];
|
||||
if ((info_ind->trx[trx_nr].pdch_mask & (1 << ts_nr))) {
|
||||
/* FIXME: activate dynamically at RLCMAC */
|
||||
|
@ -643,9 +644,27 @@ bssgp_failed:
|
|||
pcu_tx_act_req(trx_nr, ts_nr, 1);
|
||||
pdch->enable();
|
||||
}
|
||||
pdch->tsc = info_ind->trx[trx_nr].tsc[ts_nr];
|
||||
LOGP(DL1IF, LOGL_INFO, "PDCH: trx=%d ts=%d\n",
|
||||
trx_nr, ts_nr);
|
||||
|
||||
pdch->tsc = its->tsc;
|
||||
|
||||
/* (Optional) frequency hopping parameters */
|
||||
if (its->h) {
|
||||
pdch->fh.enabled = true;
|
||||
pdch->fh.maio = its->maio;
|
||||
pdch->fh.hsn = its->hsn;
|
||||
|
||||
OSMO_ASSERT(its->ma_bit_len <= sizeof(pdch->fh.ma) * 8);
|
||||
pdch->fh.ma_oct_len = OSMO_BYTES_FOR_BITS(its->ma_bit_len);
|
||||
pdch->fh.ma_bit_len = its->ma_bit_len;
|
||||
|
||||
/* Mobile Allocation + padding (byte/bit order as on the wire):
|
||||
* | 00 00 00 00 00 cc bb aa | -> | cc bb aa 00 00 00 00 00 | */
|
||||
unsigned int offset = sizeof(pdch->fh.ma) - pdch->fh.ma_oct_len;
|
||||
memcpy(pdch->fh.ma, its->ma + offset, pdch->fh.ma_oct_len);
|
||||
}
|
||||
|
||||
LOGP(DL1IF, LOGL_INFO, "PDCH (trx=%u, ts=%u): tsc=%u, hopping=%s\n",
|
||||
trx_nr, ts_nr, pdch->tsc, pdch->fh.enabled ? "yes" : "no");
|
||||
} else {
|
||||
if (pdch->is_enabled()) {
|
||||
pcu_tx_act_req(trx_nr, ts_nr, 0);
|
||||
|
|
Loading…
Reference in New Issue