summaryrefslogtreecommitdiffstats
path: root/gsm_audio.c
diff options
context:
space:
mode:
authorAndreas Eversberg2009-05-11 11:07:58 +0200
committerAndreas Eversberg2009-05-11 11:07:58 +0200
commit20a671d76854520ad9d5ea9d481e008240465e62 (patch)
treefbfd12696b1d31b347e85442f1e9ed37ccfda0d8 /gsm_audio.c
parentApplied patch by Daniel: "execute"-action can now be performed on call init o... (diff)
downloadlcr-20a671d76854520ad9d5ea9d481e008240465e62.tar.gz
lcr-20a671d76854520ad9d5ea9d481e008240465e62.tar.xz
lcr-20a671d76854520ad9d5ea9d481e008240465e62.zip
Added GSM network support.
This turns LCR into a GSM mobile switching center. More infos will follow.
Diffstat (limited to 'gsm_audio.c')
-rw-r--r--gsm_audio.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/gsm_audio.c b/gsm_audio.c
new file mode 100644
index 0000000..751f354
--- /dev/null
+++ b/gsm_audio.c
@@ -0,0 +1,54 @@
+/*****************************************************************************\
+** **
+** LCR **
+** **
+**---------------------------------------------------------------------------**
+** Copyright: Andreas Eversberg **
+** **
+** gsm audio **
+** **
+\*****************************************************************************/
+
+extern "C" {
+#include "/usr/local/include/gsm.h"
+
+
+/* create gsm instance */
+void *gsm_audio_create(void)
+{
+ int value = 1;
+ gsm handle;
+
+ handle = gsm_create();
+ if (handle)
+ gsm_option(handle, GSM_OPT_WAV49, &value);
+
+ return handle;
+}
+
+/* free gsm instance */
+void gsm_audio_destroy(void *arg)
+{
+ gsm_destroy((gsm)arg);
+}
+
+/* decode frame into samples, return error */
+int gsm_audio_decode(void *arg, unsigned char *frame, signed short *samples)
+{
+ int value = 0;
+
+ gsm_option((gsm)arg, GSM_OPT_FRAME_INDEX, &value);
+ return gsm_decode((gsm)arg, (gsm_byte *)frame, (gsm_signal *)samples);
+}
+
+/* encode samples into frame */
+void gsm_audio_encode(void *arg, signed short *samples, unsigned char *frame)
+{
+ int value = 0;
+
+ gsm_option((gsm)arg, GSM_OPT_FRAME_INDEX, &value);
+ gsm_encode((gsm)arg, (gsm_signal *)samples, (gsm_byte *)frame);
+}
+
+}
+