From: Andreas Eversberg Date: Thu, 8 Mar 2012 13:44:17 +0000 (+0100) Subject: Added support for all GSM codecs to GSM and SIP interface X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=commitdiff_plain;h=97fb04eee95f8109a8e80aa38a5c43226863279a Added support for all GSM codecs to GSM and SIP interface Untested! --- diff --git a/gsm.cpp b/gsm.cpp index 9e17920..31a7967 100644 --- a/gsm.cpp +++ b/gsm.cpp @@ -139,10 +139,10 @@ void Pgsm::send_mncc_rtp_connect(void) nrtp->payload_msg_type = GSM_TCHF_FRAME_EFR; break; case MEDIA_TYPE_AMR: - nrtp->payload_msg_type = GSM_TCHF_FRAME_AMR; + nrtp->payload_msg_type = GSM_TCH_FRAME_AMR; break; case MEDIA_TYPE_GSM_HR: - nrtp->payload_msg_type = GSM_TCHF_FRAME_HR; + nrtp->payload_msg_type = GSM_TCHH_FRAME; break; } nrtp->payload_type = p_g_payload_type; @@ -229,7 +229,7 @@ void Pgsm::frame_receive(void *arg) if (!p_g_decoder) return; - if (frame->msg_type != GSM_TCHF_BAD_FRAME) { + if (frame->msg_type != GSM_BAD_FRAME) { if ((frame->data[0]>>4) != 0xd) PERROR("received GSM frame with wrong magig 0x%x\n", frame->data[0]>>4); @@ -375,12 +375,8 @@ void Pgsm::modify_lchan(int media_type) add_trace("speech", "version", "AMR given"); mode->lchan_mode = 0x41; /* GSM V3 */ break; - case MEDIA_TYPE_GSM_HR: - add_trace("speech", "version", "Half Rate given"); - mode->lchan_mode = 0x05; /* GSM V1 HR */ - break; default: - add_trace("speech", "version", "Full Rate given"); + add_trace("speech", "version", "Full/Half Rate given"); mode->lchan_mode = 0x01; /* GSM V1 */ } mode->lchan_type = 0x02; /* FIXME: unused */ diff --git a/gsm_bs.cpp b/gsm_bs.cpp index 9ce9321..fc59125 100644 --- a/gsm_bs.cpp +++ b/gsm_bs.cpp @@ -322,6 +322,11 @@ void Pgsm_bs::select_payload_type(struct gsm_mncc *mncc, unsigned char *payload_ media_type = MEDIA_TYPE_GSM_HR; payload_type = dynamic_type++; break; + case 5: + add_trace("speech", "version", "AMR Half Rate given"); + media_type = MEDIA_TYPE_AMR; + payload_type = dynamic_type++; + break; default: add_trace("speech", "version", "%d given", mncc->bearer_cap.speech_ver[i]); media_type = 0; @@ -583,7 +588,7 @@ int message_bsc(struct lcr_gsm *lcr_gsm, int msg_type, void *arg) } if (msg_type == GSM_TCHF_FRAME - || msg_type == GSM_TCHF_BAD_FRAME) { + || msg_type == GSM_BAD_FRAME) { if (port) { /* inject DTMF, if enabled */ if (pgsm_bs->p_g_dtmf) { diff --git a/gsm_ms.cpp b/gsm_ms.cpp index 0cbcca1..1726543 100644 --- a/gsm_ms.cpp +++ b/gsm_ms.cpp @@ -342,7 +342,7 @@ int message_ms(struct lcr_gsm *gsm_ms, int msg_type, void *arg) } if (msg_type == GSM_TCHF_FRAME - || msg_type == GSM_TCHF_BAD_FRAME) { + || msg_type == GSM_BAD_FRAME) { if (port) pgsm_ms->frame_receive(arg); return 0; diff --git a/mncc.h b/mncc.h index dcb8f04..14dd6d4 100644 --- a/mncc.h +++ b/mncc.h @@ -56,11 +56,11 @@ #define MNCC_RTP_CONNECT 0x0205 #define MNCC_RTP_FREE 0x0206 -#define GSM_TCHF_FRAME 0x0300 -#define GSM_TCHF_FRAME_EFR 0x0301 -#define GSM_TCHF_FRAME_HR 0x0302 -#define GSM_TCHF_FRAME_AMR 0x0303 -#define GSM_TCHF_BAD_FRAME 0x03ff +#define GSM_TCHF_FRAME 0x0300 +#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_SSVERSION 128