From dd2ca7ef26a6e14f7b98df81dbee0daeeba4bd54 Mon Sep 17 00:00:00 2001
From: Josh Morman <mormjb@gmail.com>
Date: Tue, 2 Jun 2020 07:23:48 -0400
Subject: vocoder: add bindings for freedv_api to fix qa

---
 gr-vocoder/python/vocoder/bindings/CMakeLists.txt  |  4 ++
 .../python/vocoder/bindings/codec2_python.cc       | 30 ++++++++----
 .../python/vocoder/bindings/freedv_api_python.cc   | 56 ++++++++++++++++++++++
 .../python/vocoder/bindings/python_bindings.cc     |  2 +
 gr-vocoder/python/vocoder/qa_gsm_full_rate.py      |  4 +-
 5 files changed, 86 insertions(+), 10 deletions(-)
 create mode 100644 gr-vocoder/python/vocoder/bindings/freedv_api_python.cc

(limited to 'gr-vocoder/python')

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()
-- 
cgit v1.2.3