From 7e71a9741a3c8990baa9909969a97739bcd75867 Mon Sep 17 00:00:00 2001 From: Christophe Favergeon Date: Thu, 18 Feb 2021 11:40:09 +0100 Subject: [PATCH] CMSIS-DSP:New feature for issue #1129 (PythonWrapper) --- PythonWrapper/cmsisdsp_pkg/src/cmsismodule.c | 20 ++++++++++++++++++++ PythonWrapper/cmsisdsp_pkg/src/cmsismodule.h | 8 +++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/PythonWrapper/cmsisdsp_pkg/src/cmsismodule.c b/PythonWrapper/cmsisdsp_pkg/src/cmsismodule.c index 7bd04d45..47a1c1b8 100644 --- a/PythonWrapper/cmsisdsp_pkg/src/cmsismodule.c +++ b/PythonWrapper/cmsisdsp_pkg/src/cmsismodule.c @@ -275,6 +275,26 @@ CREATEMATRIX(f64,float64_t); CREATEMATRIX(q31,q31_t); CREATEMATRIX(q15,q15_t); +#define NUMPYVECTORFROMBUFFER(EXT,CTYPE,NUMPYTYPE_FROMC) \ +PyObject *NumpyVectorFrom##EXT##Buffer(CTYPE *ptr,int nb) \ +{ \ + npy_intp dims[1]; \ + const int ND=1; \ + dims[0]=nb; \ + \ + void *pDst=PyMem_Malloc(sizeof(CTYPE) *nb); \ + memcpy((void*)pDst,(void*)ptr,sizeof(CTYPE)*nb); \ + \ + PyObject *OBJ=PyArray_SimpleNewFromData(ND, dims, NUMPYTYPE_FROMC, pDst);\ + PyObject *pythonResult = Py_BuildValue("O",OBJ); \ + Py_DECREF(OBJ); \ + return(pythonResult); \ +} + +NUMPYVECTORFROMBUFFER(f32,float32_t,NPY_FLOAT); + + + #define NUMPYARRAYFROMMATRIX(EXT,NUMPYTYPE_FROMC) \ PyObject *NumpyArrayFrom##EXT##Matrix(arm_matrix_instance_##EXT *mat) \ { \ diff --git a/PythonWrapper/cmsisdsp_pkg/src/cmsismodule.h b/PythonWrapper/cmsisdsp_pkg/src/cmsismodule.h index 0d22a25a..d640a412 100644 --- a/PythonWrapper/cmsisdsp_pkg/src/cmsismodule.h +++ b/PythonWrapper/cmsisdsp_pkg/src/cmsismodule.h @@ -3922,11 +3922,17 @@ if (PyArg_ParseTupleAndKeywords(args, kwds, "|i", kwlist,&self->instance->numSta GETFIELD(arm_biquad_cascade_df2T_instance_f32,numStages,"i"); +static PyObject * +Method_arm_biquad_cascade_df2T_instance_f32_state(ml_arm_biquad_cascade_df2T_instance_f32Object *self, PyObject *ignored) +{ + float32_t *state=self->instance->pState; + return(NumpyVectorFromf32Buffer(state,self->instance->numStages * 2)); +} static PyMethodDef arm_biquad_cascade_df2T_instance_f32_methods[] = { {"numStages", (PyCFunction) Method_arm_biquad_cascade_df2T_instance_f32_numStages,METH_NOARGS,"numStages"}, - + {"state", (PyCFunction) Method_arm_biquad_cascade_df2T_instance_f32_state,METH_NOARGS,"state"}, {NULL} /* Sentinel */ };