mobile: add missing TCH MNCC messages and handle them
Change-Id: I28a1ae1ed504748c33c64c86ca7d57a94c7c7c6d Related: OS#5599
This commit is contained in:
parent
7304b1720d
commit
290ea6b7fa
|
@ -104,6 +104,9 @@ struct gsm_call {
|
||||||
|
|
||||||
#define GSM_TCHF_FRAME 0x0300
|
#define GSM_TCHF_FRAME 0x0300
|
||||||
#define GSM_TCHF_FRAME_EFR 0x0301
|
#define GSM_TCHF_FRAME_EFR 0x0301
|
||||||
|
#define GSM_TCHH_FRAME 0x0302
|
||||||
|
#define GSM_TCH_FRAME_AMR 0x0303
|
||||||
|
#define GSM_BAD_FRAME 0x03ff
|
||||||
|
|
||||||
#define GSM_MAX_FACILITY 128
|
#define GSM_MAX_FACILITY 128
|
||||||
#define GSM_MAX_SSVERSION 128
|
#define GSM_MAX_SSVERSION 128
|
||||||
|
|
|
@ -1966,6 +1966,10 @@ int mncc_tx_to_cc(void *inst, int msg_type, void *arg)
|
||||||
|
|
||||||
switch (msg_type) {
|
switch (msg_type) {
|
||||||
case GSM_TCHF_FRAME:
|
case GSM_TCHF_FRAME:
|
||||||
|
case GSM_TCHF_FRAME_EFR:
|
||||||
|
case GSM_TCHH_FRAME:
|
||||||
|
case GSM_TCH_FRAME_AMR:
|
||||||
|
case GSM_BAD_FRAME:
|
||||||
return gsm_send_voice_frame(ms, arg);
|
return gsm_send_voice_frame(ms, arg);
|
||||||
case MNCC_LCHAN_MODIFY:
|
case MNCC_LCHAN_MODIFY:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -46,13 +46,19 @@ int mncc_sock_from_cc(struct mncc_sock_state *state, struct msgb *msg)
|
||||||
|
|
||||||
/* Check if we currently have a MNCC handler connected */
|
/* Check if we currently have a MNCC handler connected */
|
||||||
if (state->conn_bfd.fd < 0) {
|
if (state->conn_bfd.fd < 0) {
|
||||||
|
struct gsm_mncc mncc_out;
|
||||||
LOGP(DMNCC, LOGL_ERROR, "mncc_sock receives %s for external CC app "
|
LOGP(DMNCC, LOGL_ERROR, "mncc_sock receives %s for external CC app "
|
||||||
"but socket is gone\n", get_mncc_name(msg_type));
|
"but socket is gone\n", get_mncc_name(msg_type));
|
||||||
if (msg_type != GSM_TCHF_FRAME
|
switch (msg_type) {
|
||||||
&& msg_type != GSM_TCHF_FRAME_EFR
|
case MNCC_REL_IND:
|
||||||
&& msg_type != MNCC_REL_IND) {
|
case GSM_TCHF_FRAME:
|
||||||
|
case GSM_TCHF_FRAME_EFR:
|
||||||
|
case GSM_TCHH_FRAME:
|
||||||
|
case GSM_TCH_FRAME_AMR:
|
||||||
|
case GSM_BAD_FRAME:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
/* release the request */
|
/* release the request */
|
||||||
struct gsm_mncc mncc_out;
|
|
||||||
memset(&mncc_out, 0, sizeof(mncc_out));
|
memset(&mncc_out, 0, sizeof(mncc_out));
|
||||||
mncc_out.callref = mncc_in->callref;
|
mncc_out.callref = mncc_in->callref;
|
||||||
mncc_set_cause(&mncc_out, GSM48_CAUSE_LOC_PRN_S_LU,
|
mncc_set_cause(&mncc_out, GSM48_CAUSE_LOC_PRN_S_LU,
|
||||||
|
|
|
@ -82,14 +82,18 @@ int gsm_send_voice_frame(struct osmocom_ms *ms, const struct gsm_data_frame *fra
|
||||||
struct msgb *nmsg;
|
struct msgb *nmsg;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
switch (ms->rrlayer.cd_now.mode) {
|
switch (frame->msg_type) {
|
||||||
case GSM48_CMODE_SPEECH_V1:
|
case GSM_TCHF_FRAME:
|
||||||
/* FIXME: FR only, check for TCH/F (FR) and TCH/H (HR) */
|
|
||||||
len = GSM_FR_BYTES;
|
len = GSM_FR_BYTES;
|
||||||
break;
|
break;
|
||||||
case GSM48_CMODE_SPEECH_EFR:
|
case GSM_TCHF_FRAME_EFR:
|
||||||
len = GSM_EFR_BYTES;
|
len = GSM_EFR_BYTES;
|
||||||
break;
|
break;
|
||||||
|
case GSM_TCHH_FRAME:
|
||||||
|
len = GSM_HR_BYTES;
|
||||||
|
break;
|
||||||
|
/* TODO: case GSM_TCH_FRAME_AMR (variable length) */
|
||||||
|
/* TODO: case GSM_BAD_FRAME (empty?) */
|
||||||
default:
|
default:
|
||||||
LOGP(DL1C, LOGL_ERROR, "%s(): msg_type=0x%02x: not implemented\n",
|
LOGP(DL1C, LOGL_ERROR, "%s(): msg_type=0x%02x: not implemented\n",
|
||||||
__func__, frame->msg_type);
|
__func__, frame->msg_type);
|
||||||
|
|
Loading…
Reference in New Issue