FreeCalypso > hg > themwi-system-sw
comparison mgw/pstn2gsm.c @ 174:c985c33baeac
mgw: support EFR by way of libgsmefr
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 10 Jan 2023 17:56:22 -0800 |
parents | f062c32a5116 |
children | cf1ba5d65188 |
comparison
equal
deleted
inserted
replaced
173:36cce9b0bbe2 | 174:c985c33baeac |
---|---|
13 #include <string.h> | 13 #include <string.h> |
14 #include <strings.h> | 14 #include <strings.h> |
15 #include <syslog.h> | 15 #include <syslog.h> |
16 #include <unistd.h> | 16 #include <unistd.h> |
17 #include <gsm.h> /* libgsm dependency */ | 17 #include <gsm.h> /* libgsm dependency */ |
18 #include <gsm_efr.h> | |
18 #include "../include/tmgw_ctrl.h" | 19 #include "../include/tmgw_ctrl.h" |
19 #include "../include/tmgw_const.h" | 20 #include "../include/tmgw_const.h" |
20 #include "struct.h" | 21 #include "struct.h" |
21 #include "select.h" | 22 #include "select.h" |
22 #include "int_defs.h" | 23 #include "int_defs.h" |
126 pkt.seq = htons(++ep->p2g_out_seq); | 127 pkt.seq = htons(++ep->p2g_out_seq); |
127 switch (ep->gsm_payload_msg_type) { | 128 switch (ep->gsm_payload_msg_type) { |
128 case GSM_TCHF_FRAME: | 129 case GSM_TCHF_FRAME: |
129 gsm_encode(ep->gsm_encoder_state, pcm_samples, pkt.payload); | 130 gsm_encode(ep->gsm_encoder_state, pcm_samples, pkt.payload); |
130 break; | 131 break; |
132 case GSM_TCHF_FRAME_EFR: | |
133 EFR_encode_frame(ep->gsm_encoder_state, pcm_samples, | |
134 pkt.payload, (int *) 0, (int *) 0); | |
135 break; | |
131 } | 136 } |
132 addrlen = sizeof(struct sockaddr_in); | 137 addrlen = sizeof(struct sockaddr_in); |
133 sendto(ep->rtp_gsm.rtp_fd, &pkt, ep->gsm_rtp_pkt_size, 0, | 138 sendto(ep->rtp_gsm.rtp_fd, &pkt, ep->gsm_rtp_pkt_size, 0, |
134 (struct sockaddr *) &ep->rtp_gsm.remote_addr, addrlen); | 139 (struct sockaddr *) &ep->rtp_gsm.remote_addr, addrlen); |
135 } | 140 } |
143 case GSM_TCHF_FRAME: | 148 case GSM_TCHF_FRAME: |
144 ep->gsm_encoder_state = gsm_create(); | 149 ep->gsm_encoder_state = gsm_create(); |
145 if (!ep->gsm_encoder_state) | 150 if (!ep->gsm_encoder_state) |
146 return TMGW_RESP_ERR_RSRC; | 151 return TMGW_RESP_ERR_RSRC; |
147 break; | 152 break; |
153 case GSM_TCHF_FRAME_EFR: | |
154 ep->gsm_encoder_state = EFR_encoder_create(0); | |
155 if (!ep->gsm_encoder_state) | |
156 return TMGW_RESP_ERR_RSRC; | |
157 break; | |
148 } | 158 } |
149 select_handlers[ep->rtp_pstn.rtp_fd] = pstn2gsm_rtp_in; | 159 select_handlers[ep->rtp_pstn.rtp_fd] = pstn2gsm_rtp_in; |
150 return TMGW_RESP_OK; | 160 return TMGW_RESP_OK; |
151 } | 161 } |