diff options
author | Harald Welte <laforge@gnumonks.org> | 2011-09-01 18:18:43 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2011-09-03 18:23:20 +0200 |
commit | ab386e6120559ef2deb6a27f4455539cba920c9d (patch) | |
tree | 425cb2f19eac173c8d59c719143735865f94740b /openbsc/src/libmsc/mncc_builtin.c | |
parent | 6b353778c4329deb27f69301c050e0b6e55d4df6 (diff) |
Add VTY command to specify default speech codec
In order to have the MNCC application reliably decide on the codec type,
it needs to know if we are running on a TCH/F or TCH/H. Thus, we pass
lchan_mode as a new parameter to the 'struct gsm_mncc'
Diffstat (limited to 'openbsc/src/libmsc/mncc_builtin.c')
-rw-r--r-- | openbsc/src/libmsc/mncc_builtin.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/openbsc/src/libmsc/mncc_builtin.c b/openbsc/src/libmsc/mncc_builtin.c index 105f1dd96..31d9b4325 100644 --- a/openbsc/src/libmsc/mncc_builtin.c +++ b/openbsc/src/libmsc/mncc_builtin.c @@ -30,6 +30,7 @@ #include <openbsc/gsm_04_08.h> #include <openbsc/debug.h> #include <openbsc/mncc.h> +#include <openbsc/mncc_int.h> #include <osmocom/core/talloc.h> #include <openbsc/gsm_data.h> #include <openbsc/transaction.h> @@ -41,6 +42,10 @@ static LLIST_HEAD(call_list); static uint32_t new_callref = 0x00000001; +struct mncc_int mncc_int = { + .def_codec = { GSM48_CMODE_SPEECH_EFR, GSM48_CMODE_SPEECH_V1 }, +}; + static void free_call(struct gsm_call *call) { llist_del(&call->entry); @@ -60,6 +65,15 @@ static struct gsm_call *get_call_ref(uint32_t callref) return NULL; } +static uint8_t determine_lchan_mode(struct gsm_mncc *setup) +{ + /* FIXME: check codec capabilities of the phone */ + + if (setup->lchan_type == GSM_LCHAN_TCH_F) + return mncc_int.def_codec[0]; + else + return mncc_int.def_codec[1]; +} /* on incoming call, look up database and send setup to remote subscr. */ static int mncc_setup_ind(struct gsm_call *call, int msg_type, @@ -112,7 +126,7 @@ static int mncc_setup_ind(struct gsm_call *call, int msg_type, /* modify mode */ memset(&mncc, 0, sizeof(struct gsm_mncc)); mncc.callref = call->callref; - mncc.lchan_mode = GSM48_CMODE_SPEECH_EFR; + mncc.lchan_mode = determine_lchan_mode(setup); DEBUGP(DMNCC, "(call %x) Modify channel mode.\n", call->callref); mncc_tx_to_cc(call->net, MNCC_LCHAN_MODIFY, &mncc); @@ -346,7 +360,7 @@ int int_mncc_recv(struct gsm_network *net, struct msgb *msg) break; case MNCC_CALL_CONF_IND: /* we now need to MODIFY the channel */ - data->lchan_mode = GSM48_CMODE_SPEECH_EFR; + data->lchan_mode = determine_lchan_mode(data); mncc_tx_to_cc(call->net, MNCC_LCHAN_MODIFY, data); break; case MNCC_ALERT_IND: |