4 static PyObject *pneum_callback = NULL;
7 wrap_pneum_callback (char *data, int len)
9 PyGILState_STATE gstate;
10 PyObject *result;//, *arglist;
12 gstate = PyGILState_Ensure();
14 /* Time to call the callback */
15 result = PyObject_CallFunction(pneum_callback, "y#", data, len);
21 PyGILState_Release(gstate);
26 wrap_connect (PyObject *self, PyObject *args)
32 if (!PyArg_ParseTuple(args, "sO:set_callback", &name, &temp))
35 if (!PyCallable_Check(temp)) {
36 PyErr_SetString(PyExc_TypeError, "parameter must be callable");
40 Py_XINCREF(temp); /* Add a reference to new callback */
41 Py_XDECREF(pneum_callback); /* Dispose of previous callback */
42 pneum_callback = temp; /* Remember new callback */
44 Py_BEGIN_ALLOW_THREADS
45 rv = pneum_connect(name);
47 return PyLong_FromLong(rv);
51 wrap_disconnect (PyObject *self, PyObject *args)
54 Py_BEGIN_ALLOW_THREADS
55 rv = pneum_disconnect();
57 return PyLong_FromLong(rv);
60 wrap_write (PyObject *self, PyObject *args)
65 if (!PyArg_ParseTuple(args, "s#", &data, &len))
67 Py_BEGIN_ALLOW_THREADS
68 rv = pneum_write(data, len);
71 return PyLong_FromLong(rv);
74 void vl_msg_api_free(void *);
77 wrap_read (PyObject *self, PyObject *args)
82 Py_BEGIN_ALLOW_THREADS
83 rv = pneum_read(&data, &len);
86 if (rv != 0) { Py_RETURN_NONE; }
88 PyObject *ret = Py_BuildValue("y#", data, len);
89 if (!ret) { Py_RETURN_NONE; }
91 vl_msg_api_free(data);
95 static PyMethodDef vpp_api_Methods[] = {
96 {"connect", wrap_connect, METH_VARARGS, "Connect to the VPP API."},
97 {"disconnect", wrap_disconnect, METH_VARARGS, "Disconnect from the VPP API."},
98 {"write", wrap_write, METH_VARARGS, "Write data to the VPP API."},
99 {"read", wrap_read, METH_VARARGS, "Read data from the VPP API."},
100 {NULL, NULL, 0, NULL} /* Sentinel */
103 static struct PyModuleDef vpp_api_module = {
104 PyModuleDef_HEAD_INIT,
105 "vpp_api", /* name of module */
106 NULL, /* module documentation, may be NULL */
107 -1, /* size of per-interpreter state of the module,
108 or -1 if the module keeps state in global variables. */
113 PyInit_vpp_api (void)
115 /* Ensure threading is initialised */
116 if (!PyEval_ThreadsInitialized()) {
117 PyEval_InitThreads();
119 return PyModule_Create(&vpp_api_module);