csd_bs_list_to_bearer_cap(): properly initialize bcap fields
Currently this function fails to initialize all bcap fields properly, so the resulting CC Setup message generated by osmo-msc has some fields set to reserved/invalid values. With these changes I am able to establish a data call on TCH/F9.6: * cap->{mode,coding}: assign default values explicitly; * cap->radio: value 0 is reserved, set GSM48_BCAP_RRQ_FR_ONLY; * cap->data.sig_access: value 0 is reserved, set GSM48_BCAP_SA_I440_I450; * cap->data.transp: this is not a bool, set GSM48_BCAP_TR_{TRANSP,RLP}; * cap->data.{nr_{data,stop}_bits,parity}: set 8N1 by default; * cap->data.modem_type: explicitly assign default value; * cap->data.interm_rate: value 0 is reserved, set GSM48_BCAP_IR_{8k,16k}. The related libosmocore.git patch additionally fixes encoding of the "Connection element (octet 6c)", so that bcap->data.transp is used. Change-Id: If49c89e4f867bac92ad062c062b9f36bab2b4531 Related: libosmocore.git I7339908864e8a2aef6f2b48a108650167e413c7f Related: OS#6110, OS#4394
This commit is contained in:
parent
9145531d7f
commit
ab2845ac87
|
@ -422,6 +422,9 @@ int csd_bs_list_to_bearer_cap(struct gsm_mncc_bearer_cap *cap, const struct csd_
|
|||
{
|
||||
*cap = (struct gsm_mncc_bearer_cap){
|
||||
.transfer = GSM_MNCC_BCAP_UNR_DIG,
|
||||
.mode = GSM48_BCAP_TMOD_CIRCUIT,
|
||||
.coding = GSM48_BCAP_CODING_GSM_STD,
|
||||
.radio = GSM48_BCAP_RRQ_FR_ONLY,
|
||||
};
|
||||
enum csd_bs bs;
|
||||
int i;
|
||||
|
@ -430,24 +433,39 @@ int csd_bs_list_to_bearer_cap(struct gsm_mncc_bearer_cap *cap, const struct csd_
|
|||
bs = list->bs[i];
|
||||
|
||||
cap->data.rate_adaption = GSM48_BCAP_RA_V110_X30;
|
||||
cap->data.sig_access = GSM48_BCAP_SA_I440_I450;
|
||||
cap->data.async = bs_map[bs].async;
|
||||
cap->data.transp = bs_map[bs].transp;
|
||||
if (bs_map[bs].transp)
|
||||
cap->data.transp = GSM48_BCAP_TR_TRANSP;
|
||||
else
|
||||
cap->data.transp = GSM48_BCAP_TR_RLP;
|
||||
|
||||
/* FIXME: proper values for sync/async (current: 8N1) */
|
||||
cap->data.nr_data_bits = 8;
|
||||
cap->data.parity = GSM48_BCAP_PAR_NONE;
|
||||
cap->data.nr_stop_bits = 1;
|
||||
cap->data.modem_type = GSM48_BCAP_MT_NONE;
|
||||
|
||||
switch (bs_map[bs].rate) {
|
||||
case 300:
|
||||
cap->data.user_rate = GSM48_BCAP_UR_300;
|
||||
cap->data.interm_rate = GSM48_BCAP_IR_8k;
|
||||
break;
|
||||
case 1200:
|
||||
cap->data.user_rate = GSM48_BCAP_UR_1200;
|
||||
cap->data.interm_rate = GSM48_BCAP_IR_8k;
|
||||
break;
|
||||
case 2400:
|
||||
cap->data.user_rate = GSM48_BCAP_UR_2400;
|
||||
cap->data.interm_rate = GSM48_BCAP_IR_8k;
|
||||
break;
|
||||
case 4800:
|
||||
cap->data.user_rate = GSM48_BCAP_UR_4800;
|
||||
cap->data.interm_rate = GSM48_BCAP_IR_8k;
|
||||
break;
|
||||
case 9600:
|
||||
cap->data.user_rate = GSM48_BCAP_UR_9600;
|
||||
cap->data.interm_rate = GSM48_BCAP_IR_16k;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue