ip.access speech mode for TCH/H channels
This commit is contained in:
parent
2c82899135
commit
0603c9d9e5
|
@ -1442,19 +1442,40 @@ static int abis_rsl_rx_rll(struct msgb *msg)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u_int8_t ipa_smod_s_for_tch_mode(u_int8_t tch_mode)
|
static u_int8_t ipa_smod_s_for_lchan(struct gsm_lchan *lchan)
|
||||||
{
|
{
|
||||||
switch (tch_mode) {
|
switch (lchan->tch_mode) {
|
||||||
case GSM48_CMODE_SPEECH_V1:
|
case GSM48_CMODE_SPEECH_V1:
|
||||||
return 0x00;
|
switch (lchan->type) {
|
||||||
|
case GSM_LCHAN_TCH_F:
|
||||||
|
return 0x00;
|
||||||
|
case GSM_LCHAN_TCH_H:
|
||||||
|
return 0x03;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
case GSM48_CMODE_SPEECH_EFR:
|
case GSM48_CMODE_SPEECH_EFR:
|
||||||
return 0x01;
|
switch (lchan->type) {
|
||||||
|
case GSM_LCHAN_TCH_F:
|
||||||
|
return 0x01;
|
||||||
|
/* there's no half-rate EFR */
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
case GSM48_CMODE_SPEECH_AMR:
|
case GSM48_CMODE_SPEECH_AMR:
|
||||||
return 0x02;
|
switch (lchan->type) {
|
||||||
/* FIXME: Type1 half-rate and type3 half-rate */
|
case GSM_LCHAN_TCH_F:
|
||||||
|
return 0x02;
|
||||||
|
case GSM_LCHAN_TCH_H:
|
||||||
|
return 0x05;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
DEBUGPC(DRSL, "Cannot determine ip.access speech mode for "
|
DEBUGPC(DRSL, "Cannot determine ip.access speech mode for "
|
||||||
"tch_mode == 0x%02x\n", tch_mode);
|
"tch_mode == 0x%02x\n", lchan->tch_mode);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1471,7 +1492,7 @@ int rsl_ipacc_crcx(struct gsm_lchan *lchan)
|
||||||
dh->chan_nr = lchan2chan_nr(lchan);
|
dh->chan_nr = lchan2chan_nr(lchan);
|
||||||
|
|
||||||
/* 0x1- == receive-only, 0x-1 == EFR codec */
|
/* 0x1- == receive-only, 0x-1 == EFR codec */
|
||||||
speech_mode = 0x10 | ipa_smod_s_for_tch_mode(lchan->tch_mode);
|
speech_mode = 0x10 | ipa_smod_s_for_lchan(lchan);
|
||||||
msgb_tv_put(msg, RSL_IE_IPAC_SPEECH_MODE, speech_mode);
|
msgb_tv_put(msg, RSL_IE_IPAC_SPEECH_MODE, speech_mode);
|
||||||
|
|
||||||
DEBUGP(DRSL, "channel=%s chan_nr=0x%02x IPAC_BIND "
|
DEBUGP(DRSL, "channel=%s chan_nr=0x%02x IPAC_BIND "
|
||||||
|
@ -1498,7 +1519,7 @@ int rsl_ipacc_mdcx(struct gsm_lchan *lchan, u_int32_t ip, u_int16_t port,
|
||||||
dh->chan_nr = lchan2chan_nr(lchan);
|
dh->chan_nr = lchan2chan_nr(lchan);
|
||||||
|
|
||||||
/* 0x0- == both directions, 0x-1 == EFR codec */
|
/* 0x0- == both directions, 0x-1 == EFR codec */
|
||||||
speech_mode = 0x00 | ipa_smod_s_for_tch_mode(lchan->tch_mode);
|
speech_mode = 0x00 | ipa_smod_s_for_lchan(lchan);
|
||||||
|
|
||||||
ia.s_addr = htonl(ip);
|
ia.s_addr = htonl(ip);
|
||||||
DEBUGP(DRSL, "channel=%s chan_nr=0x%02x IPAC_MDCX "
|
DEBUGP(DRSL, "channel=%s chan_nr=0x%02x IPAC_MDCX "
|
||||||
|
|
Loading…
Reference in New Issue