HI Josh - here is the entire file ./python/bindings/python_bindings.cc:

/*
 * Copyright 2020 Free Software Foundation, Inc.
 *
 * This file is part of GNU Radio
 *
 * SPDX-License-Identifier: GPL-3.0-or-later
 *
 */

#include <pybind11/pybind11.h>

#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
#include <numpy/arrayobject.h>

namespace py = pybind11;

// Headers for binding functions
/**************************************/
/* The following comment block is used for
/* gr_modtool to insert function prototypes
/* Please do not delete
/**************************************/
// BINDING_FUNCTION_PROTOTYPES(
    void bind_hermesNB(py::module& m);
    void bind_hermesWB(py::module& m);
// ) END BINDING_FUNCTION_PROTOTYPES


// We need this hack because import_array() returns NULL
// for newer Python versions.
// This function is also necessary because it ensures access to the C API
// and removes a warning.
void* init_numpy()
{
    import_array();
    return NULL;
}

PYBIND11_MODULE(hpsdr_python, m)
{
    // Initialize the numpy C API
    // (otherwise we will see segmentation faults)
    init_numpy();

    // Allow access to base block methods
    py::module::import("gnuradio.gr");

    /**************************************/
    /* The following comment block is used for
    /* gr_modtool to insert binding function calls
    /* Please do not delete
    /**************************************/
    // BINDING_FUNCTION_CALLS(
    bind_hermesNB(m);
    bind_hermesWB(m);
    // ) END BINDING_FUNCTION_CALLS
}

-- Tom, N5EG




On Wed, May 5, 2021 at 9:41 AM Josh Morman <mor...@gmail.com> wrote:

> That looks right.  And in python_bindings.cc, do you see the import of
> base block methods like:
>
> PYBIND11_MODULE(blocks_python, m)
> {
>     // Initialize the numpy C API
>     // (otherwise we will see segmentation faults)
>     init_numpy();
>
>     // Allow access to base block methods
>     py::module::import("gnuradio.gr");
>
> On Wed, May 5, 2021 at 11:21 AM Tom McDermott <tom.n...@gmail.com> wrote:
>
>> Hi Josh - thanks for your help.
>>
>> from ./python/bindings/hermesNB_python.cc:
>>
>> void bind_hermesNB(py::module& m)
>> {
>>
>>     using hermesNB    = ::gr::hpsdr::hermesNB;
>>
>>
>>     py::class_<hermesNB, gr::block, gr::basic_block,
>>         std::shared_ptr<hermesNB>>(m, "hermesNB", D(hermesNB))
>>
>>         .def(py::init(&hermesNB::make),
>>            py::arg("RxFreq0"),
>> ... long list of arguments...
>>           D(hermesNB,make)
>>         )
>>
>> -- Tom, N5EG
>>
>>
>> On Wed, May 5, 2021 at 7:26 AM Josh Morman <mor...@gmail.com> wrote:
>>
>>> Tom,
>>>
>>> What does your hermesNB_python.cc look like?
>>>
>>> There should be a declaration for the binding in there that looks like:
>>>     py::class_<block_name,
>>>                gr::sync_block,
>>>                gr::block,
>>>                gr::basic_block,
>>>
>>> or something to that effect.  It could be that modtool didn't add the
>>> parent classes so that the inherited methods show up in the bindings.  If
>>> so, that is a bug.  I'm just thinking that what you are seeing would be the
>>> case if gr:;block wasn't a part of the declaration of the binding (which
>>> should happen automatically)
>>>
>>> I don't think it is related to the capitalization of the category name -
>>> in the code, the module is all lowercase.
>>>
>>> Josh
>>>
>>> On Wed, May 5, 2021 at 10:20 AM Tom McDermott <tom.n...@gmail.com>
>>> wrote:
>>>
>>>> I'm working on porting my OOT to gr 3.9  The 3.7 and 3.8 versions work
>>>> fine.
>>>> The ported code is compiled and make installed.  My OOT is visible in
>>>> GRC, and
>>>> I've added to a new flowgraph.
>>>>
>>>> My OOT is in category HPSDR  and the module is hermesNB (of several).
>>>>
>>>> When I try to execute a simple flowgraph in GRC with this OOT I get the
>>>> following error:
>>>>
>>>> Traceback (most recent call last):
>>>>   File "/home/tom/Desktop/Test_AM.py", line 38, in <module>
>>>>     import hpsdr
>>>>   File "/usr/lib/python3/dist-packages/hpsdr/__init__.py", line 18, in
>>>> <module>
>>>>     from .hpsdr_python import *
>>>> ImportError: generic_type: type "hermesNB" referenced unknown base type
>>>> "gr::block"
>>>>
>>>> Do I need to add code somewhere to import gr::block   ??
>>>>
>>>> Is there an issue with capitalization of  hpsdr  vs. category name of
>>>> HPSDR  ??
>>>>
>>>> -- Tom, N5EG
>>>>
>>>>
>>>>
>>>>
>>>>

Reply via email to