summaryrefslogtreecommitdiff
path: root/gr-vocoder/python/vocoder
diff options
context:
space:
mode:
authorJosh Morman <mormjb@gmail.com>2020-06-02 07:23:48 -0400
committerJosh Morman <mormjb@gmail.com>2020-06-04 11:00:08 -0400
commitdd2ca7ef26a6e14f7b98df81dbee0daeeba4bd54 (patch)
treed0773f0a35166114d8149217318e9dc52e932809 /gr-vocoder/python/vocoder
parent7842e287b56950ea95e7f1961992b6e2d38ca27f (diff)
vocoder: add bindings for freedv_api to fix qa
Diffstat (limited to 'gr-vocoder/python/vocoder')
-rw-r--r--gr-vocoder/python/vocoder/bindings/CMakeLists.txt4
-rw-r--r--gr-vocoder/python/vocoder/bindings/codec2_python.cc30
-rw-r--r--gr-vocoder/python/vocoder/bindings/freedv_api_python.cc56
-rw-r--r--gr-vocoder/python/vocoder/bindings/python_bindings.cc2
-rw-r--r--gr-vocoder/python/vocoder/qa_gsm_full_rate.py4
5 files changed, 86 insertions, 10 deletions
diff --git a/gr-vocoder/python/vocoder/bindings/CMakeLists.txt b/gr-vocoder/python/vocoder/bindings/CMakeLists.txt
index ad6184c21e..d059dc23fc 100644
--- a/gr-vocoder/python/vocoder/bindings/CMakeLists.txt
+++ b/gr-vocoder/python/vocoder/bindings/CMakeLists.txt
@@ -17,6 +17,7 @@ pybind11_add_module(vocoder_python
ulaw_encode_sb_python.cc)
if(LIBCODEC2_FOUND)
+ target_compile_definitions(vocoder_python PRIVATE LIBCODEC2_FOUND)
target_sources(vocoder_python PRIVATE
codec2_python.cc
codec2_decode_ps_python.cc
@@ -25,13 +26,16 @@ if(LIBCODEC2_FOUND)
endif(LIBCODEC2_FOUND)
if(LIBCODEC2_HAS_FREEDV_API)
+ target_compile_definitions(vocoder_python PRIVATE LIBCODEC2_HAS_FREEDV_API)
target_sources(vocoder_python PRIVATE
+ freedv_api_python.cc
freedv_rx_ss_python.cc
freedv_tx_ss_python.cc
)
endif(LIBCODEC2_HAS_FREEDV_API)
if(LIBGSM_FOUND)
+ target_compile_definitions(vocoder_python PRIVATE LIBGSM_FOUND)
target_sources(vocoder_python PRIVATE
gsm_fr_decode_ps_python.cc
gsm_fr_encode_sp_python.cc
diff --git a/gr-vocoder/python/vocoder/bindings/codec2_python.cc b/gr-vocoder/python/vocoder/bindings/codec2_python.cc
index 7c9d960dd2..4625ffa715 100644
--- a/gr-vocoder/python/vocoder/bindings/codec2_python.cc
+++ b/gr-vocoder/python/vocoder/bindings/codec2_python.cc
@@ -24,12 +24,26 @@ void bind_codec2(py::module& m)
using codec2 = ::gr::vocoder::codec2;
-
- py::class_<codec2, std::shared_ptr<codec2>>(m, "codec2", D(codec2))
-
- .def(py::init<>(), D(codec2, codec2, 0))
- .def(
- py::init<gr::vocoder::codec2 const&>(), py::arg("arg0"), D(codec2, codec2, 1))
-
- ;
+ py::class_<codec2, std::shared_ptr<codec2>> codec2_class(m, "codec2", D(codec2));
+
+ py::enum_<gr::vocoder::codec2::bit_rate>(codec2_class, "bit_rate")
+ .value("MODE_3200", gr::vocoder::codec2::MODE_3200)
+ .value("MODE_2400", gr::vocoder::codec2::MODE_2400)
+ .value("MODE_1600", gr::vocoder::codec2::MODE_1600)
+ .value("MODE_1400", gr::vocoder::codec2::MODE_1400)
+ .value("MODE_1300", gr::vocoder::codec2::MODE_1300)
+ .value("MODE_1200", gr::vocoder::codec2::MODE_1200)
+#ifdef CODEC2_MODE_700
+ .value("MODE_700", gr::vocoder::codec2::MODE_700)
+#endif
+#ifdef CODEC2_MODE_700B
+ .value("MODE_700B", gr::vocoder::codec2::MODE_700B)
+#endif
+#ifdef CODEC2_MODE_700C
+ .value("MODE_700C", gr::vocoder::codec2::MODE_700C)
+#endif
+#ifdef CODEC2_MODE_WB
+ .value("MODE_WB", gr::vocoder::codec2::MODE_WB)
+#endif
+ .export_values();
}
diff --git a/gr-vocoder/python/vocoder/bindings/freedv_api_python.cc b/gr-vocoder/python/vocoder/bindings/freedv_api_python.cc
new file mode 100644
index 0000000000..ba436f45e9
--- /dev/null
+++ b/gr-vocoder/python/vocoder/bindings/freedv_api_python.cc
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2020 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+/* This file is automatically generated using bindtool */
+
+#include <pybind11/complex.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+
+namespace py = pybind11;
+
+#include <gnuradio/vocoder/freedv_api.h>
+
+void bind_freedv_api(py::module& m)
+{
+ using freedv_api = ::gr::vocoder::freedv_api;
+
+ py::class_<freedv_api, std::shared_ptr<freedv_api>> freedv_api_class(m, "freedv_api");
+
+ py::enum_<gr::vocoder::freedv_api::freedv_modes>(freedv_api_class, "freedv_modes")
+
+#ifdef FREEDV_MODE_1600
+ .value("MODE_1600", gr::vocoder::freedv_api::MODE_1600)
+#endif
+#ifdef FREEDV_MODE_700
+ .value("MODE_700", gr::vocoder::freedv_api::MODE_700)
+#endif
+#ifdef FREEDV_MODE_700B
+ .value("MODE_700B", gr::vocoder::freedv_api::MODE_700B)
+#endif
+#ifdef FREEDV_MODE_2400A
+ .value("MODE_2400A", gr::vocoder::freedv_api::MODE_2400A)
+#endif
+#ifdef FREEDV_MODE_2400B
+ .value("MODE_2400B", gr::vocoder::freedv_api::MODE_2400B)
+#endif
+#ifdef FREEDV_MODE_800XA
+ .value("MODE_800XA", gr::vocoder::freedv_api::MODE_800XA)
+#endif
+#ifdef FREEDV_MODE_700C
+ .value("MODE_700C", gr::vocoder::freedv_api::MODE_700C)
+#endif
+#ifdef FREEDV_MODE_700D
+ .value("MODE_700D", gr::vocoder::freedv_api::MODE_700D)
+ .value("SYNC_UNSYNC", gr::vocoder::freedv_api::SYNC_UNSYNC)
+ .value("SYNC_AUTO", gr::vocoder::freedv_api::SYNC_AUTO)
+ .value("SYNC_MANUAL", gr::vocoder::freedv_api::SYNC_MANUAL)
+#endif
+ .export_values();
+}
diff --git a/gr-vocoder/python/vocoder/bindings/python_bindings.cc b/gr-vocoder/python/vocoder/bindings/python_bindings.cc
index d98ef6e372..2e2918b88b 100644
--- a/gr-vocoder/python/vocoder/bindings/python_bindings.cc
+++ b/gr-vocoder/python/vocoder/bindings/python_bindings.cc
@@ -25,6 +25,7 @@ void bind_codec2_encode_sp(py::module&);
void bind_cvsd_decode_bs(py::module&);
void bind_cvsd_encode_sb(py::module&);
#ifdef LIBCODEC2_HAS_FREEDV_API
+void bind_freedv_api(py::module&);
void bind_freedv_rx_ss(py::module&);
void bind_freedv_tx_ss(py::module&);
#endif
@@ -70,6 +71,7 @@ PYBIND11_MODULE(vocoder_python, m)
bind_cvsd_decode_bs(m);
bind_cvsd_encode_sb(m);
#ifdef LIBCODEC2_HAS_FREEDV_API
+ bind_freedv_api(m);
bind_freedv_rx_ss(m);
bind_freedv_tx_ss(m);
#endif
diff --git a/gr-vocoder/python/vocoder/qa_gsm_full_rate.py b/gr-vocoder/python/vocoder/qa_gsm_full_rate.py
index 59b3323eae..9de32111b0 100644
--- a/gr-vocoder/python/vocoder/qa_gsm_full_rate.py
+++ b/gr-vocoder/python/vocoder/qa_gsm_full_rate.py
@@ -21,7 +21,7 @@ class test_gsm_vocoder (gr_unittest.TestCase):
def test001_module_load (self):
data = 20*(100,200,300,400,500,600,700,800)
- expected_data = (0,0,360,304,256,720,600,504,200,144,128,464,
+ expected_data = [0,0,360,304,256,720,600,504,200,144,128,464,
376,384,680,576,440,264,176,176,640,520,480,
464,384,288,432,296,328,760,624,504,176,96,96,
416,312,360,808,672,216,104,136,504,376,448,
@@ -34,7 +34,7 @@ class test_gsm_vocoder (gr_unittest.TestCase):
144,336,440,520,616,664,304,176,80,536,448,376,
680,600,240,168,112,408,488,472,608,480,240,232,
208,288,480,600,616,520,176,88,184,296,392,584,
- 656,552,248,160,144,336,432,512,608,664)
+ 656,552,248,160,144,336,432,512,608,664]
src = blocks.vector_source_s(data)
enc = vocoder.gsm_fr_encode_sp()
dec = vocoder.gsm_fr_decode_ps()