# HG changeset patch # User Mychaela Falconia # Date 1673402182 28800 # Node ID c985c33baeac14911975b2f1cb16d9c42b7c85c3 # Parent 36cce9b0bbe269cd8f99f4844c8560255f46d306 mgw: support EFR by way of libgsmefr diff -r 36cce9b0bbe2 -r c985c33baeac mgw/Makefile --- a/mgw/Makefile Mon Nov 21 12:17:55 2022 -0800 +++ b/mgw/Makefile Tue Jan 10 17:56:22 2023 -0800 @@ -10,7 +10,7 @@ all: ${PROG} ${PROG}: ${OBJS} ${LIBS} - ${CC} ${CFLAGS} -o $@ ${OBJS} ${LIBS} -lgsmfrp -lgsm -lm + ${CC} ${CFLAGS} -o $@ ${OBJS} ${LIBS} -lgsmefr -lgsmfrp -lgsm -lm install: install -c -o bin -g bin -m 755 ${PROG} ${INSTBIN} diff -r 36cce9b0bbe2 -r c985c33baeac mgw/gsm2pstn.c --- a/mgw/gsm2pstn.c Mon Nov 21 12:17:55 2022 -0800 +++ b/mgw/gsm2pstn.c Tue Jan 10 17:56:22 2023 -0800 @@ -16,6 +16,7 @@ #include #include /* libgsm dependency */ #include +#include #include "../include/tmgw_ctrl.h" #include "../include/tmgw_const.h" #include "struct.h" @@ -127,6 +128,14 @@ pkt.payload); gsm_decode(ep->gsm_decoder_state, pkt.payload, pcm_samples); break; + case GSM_TCHF_FRAME_EFR: + if (bfi) + EFR_decode_bfi_nodata(ep->gsm_decoder_state, taf, + pcm_samples); + else + EFR_decode_frame(ep->gsm_decoder_state, pkt.payload, + 0, 0, pcm_samples); + break; } if (ep->dtmf_sample_ptr) { bcopy(ep->dtmf_sample_ptr, pcm_samples, SAMPLES_PER_FRAME*2); @@ -162,6 +171,11 @@ return TMGW_RESP_ERR_RSRC; } break; + case GSM_TCHF_FRAME_EFR: + ep->gsm_decoder_state = EFR_decoder_create(); + if (!ep->gsm_decoder_state) + return TMGW_RESP_ERR_RSRC; + break; } select_handlers[ep->rtp_gsm.rtp_fd] = gsm2pstn_rtp_in; return TMGW_RESP_OK; diff -r 36cce9b0bbe2 -r c985c33baeac mgw/mdcx.c --- a/mgw/mdcx.c Mon Nov 21 12:17:55 2022 -0800 +++ b/mgw/mdcx.c Tue Jan 10 17:56:22 2023 -0800 @@ -50,8 +50,8 @@ return TMGW_RESP_ERR_PARAM; switch (req->gsm_payload_msg_type) { case GSM_TCHF_FRAME: + case GSM_TCHF_FRAME_EFR: break; - case GSM_TCHF_FRAME_EFR: case GSM_TCHH_FRAME: case GSM_TCH_FRAME_AMR: return TMGW_RESP_ERR_NOTSUP; diff -r 36cce9b0bbe2 -r c985c33baeac mgw/pstn2gsm.c --- a/mgw/pstn2gsm.c Mon Nov 21 12:17:55 2022 -0800 +++ b/mgw/pstn2gsm.c Tue Jan 10 17:56:22 2023 -0800 @@ -15,6 +15,7 @@ #include #include #include /* libgsm dependency */ +#include #include "../include/tmgw_ctrl.h" #include "../include/tmgw_const.h" #include "struct.h" @@ -128,6 +129,10 @@ case GSM_TCHF_FRAME: gsm_encode(ep->gsm_encoder_state, pcm_samples, pkt.payload); break; + case GSM_TCHF_FRAME_EFR: + EFR_encode_frame(ep->gsm_encoder_state, pcm_samples, + pkt.payload, (int *) 0, (int *) 0); + break; } addrlen = sizeof(struct sockaddr_in); sendto(ep->rtp_gsm.rtp_fd, &pkt, ep->gsm_rtp_pkt_size, 0, @@ -145,6 +150,11 @@ if (!ep->gsm_encoder_state) return TMGW_RESP_ERR_RSRC; break; + case GSM_TCHF_FRAME_EFR: + ep->gsm_encoder_state = EFR_encoder_create(0); + if (!ep->gsm_encoder_state) + return TMGW_RESP_ERR_RSRC; + break; } select_handlers[ep->rtp_pstn.rtp_fd] = pstn2gsm_rtp_in; return TMGW_RESP_OK;