From b28a51120c8fca3105387f2931023a025dea3753 Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 24 Oct 2021 00:55:16 +0200 Subject: Added memory module --- src/gpio.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/hwdmodule.cpp | 59 ------------------------------------------------------- src/memory.cpp | 41 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 59 deletions(-) create mode 100644 src/gpio.cpp delete mode 100644 src/hwdmodule.cpp create mode 100644 src/memory.cpp (limited to 'src') diff --git a/src/gpio.cpp b/src/gpio.cpp new file mode 100644 index 0000000..478bcc7 --- /dev/null +++ b/src/gpio.cpp @@ -0,0 +1,59 @@ +#define PY_SSIZE_T_CLEAN +#include + +#include + + +static PyObject * gpio_set_mode(PyObject * self, PyObject * args) +{ + unsigned port; + short mode; + if (!PyArg_ParseTuple(args, "Ih", &port, &mode)) + return NULL; + hwd::gpio::set_mode(port, mode); + Py_RETURN_NONE; +} + + +static PyObject * gpio_write(PyObject * self, PyObject * args) +{ + unsigned port; + short value; + if (!PyArg_ParseTuple(args, "Ih", &port, &value)) + return NULL; + hwd::gpio::write(port, value); + Py_RETURN_NONE; +} + + +static PyObject * gpio_read(PyObject * self, PyObject * args) +{ + unsigned port; + if (!PyArg_ParseTuple(args, "I", &port)) + return NULL; + const short value = hwd::gpio::read(port); + return PyLong_FromLong(value); +} + + +static PyMethodDef gpio_methods[] = { + {"set_mode", gpio_set_mode, METH_VARARGS, "set_mode(port, mode)\n--\n\nSets *mode* of a *port*."}, + {"write", gpio_write, METH_VARARGS, "write(port, value)\n--\n\nWrites *value* to a *port*."}, + {"read", gpio_read, METH_VARARGS, "read(port)\n--\n\nReads a value from a *port*."}, + {NULL, NULL, 0, NULL} +}; + + +static struct PyModuleDef gpio_module = { + PyModuleDef_HEAD_INIT, + "gpio", + NULL, + -1, + gpio_methods +}; + + +PyMODINIT_FUNC PyInit_gpio(void) +{ + return PyModule_Create(&gpio_module); +} diff --git a/src/hwdmodule.cpp b/src/hwdmodule.cpp deleted file mode 100644 index 6d3a574..0000000 --- a/src/hwdmodule.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#define PY_SSIZE_T_CLEAN -#include - -#include - - -static PyObject * gpio_set_mode(PyObject * self, PyObject * args) -{ - unsigned port; - short mode; - if (!PyArg_ParseTuple(args, "Ih", &port, &mode)) - return NULL; - hwd::gpio::set_mode(port, mode); - Py_RETURN_NONE; -} - - -static PyObject * gpio_write(PyObject * self, PyObject * args) -{ - unsigned port; - short value; - if (!PyArg_ParseTuple(args, "Ih", &port, &value)) - return NULL; - hwd::gpio::write(port, value); - Py_RETURN_NONE; -} - - -static PyObject * gpio_read(PyObject * self, PyObject * args) -{ - unsigned port; - if (!PyArg_ParseTuple(args, "I", &port)) - return NULL; - const short value = hwd::gpio::read(port); - return PyLong_FromLong(value); -} - - -static PyMethodDef HwdMethods[] = { - {"set_mode", gpio_set_mode, METH_VARARGS, "set_mode(port, mode)\n--\n\nSets *mode* of a *port*."}, - {"write", gpio_write, METH_VARARGS, "write(port, value)\n--\n\nWrites *value* to a *port*."}, - {"read", gpio_read, METH_VARARGS, "read(port)\n--\n\nReads a value from a *port*."}, - {NULL, NULL, 0, NULL} -}; - - -static struct PyModuleDef hwdmodule = { - PyModuleDef_HEAD_INIT, - "hwd", - NULL, - -1, - HwdMethods -}; - - -PyMODINIT_FUNC PyInit_hwd(void) -{ - return PyModule_Create(&hwdmodule); -} diff --git a/src/memory.cpp b/src/memory.cpp new file mode 100644 index 0000000..415695d --- /dev/null +++ b/src/memory.cpp @@ -0,0 +1,41 @@ +#define PY_SSIZE_T_CLEAN +#include + +#include +#include + +#include + + +static PyObject * memory_write(PyObject * self, PyObject * args) +{ + Py_ssize_t offset; + Py_buffer data; + if (!PyArg_ParseTuple(args, "y*n", &data, &offset)) + return NULL; + hwd::memory::write( + std::vector {static_cast(data.buf), static_cast(data.buf) + data.len}, + static_cast(offset)); + Py_RETURN_NONE; +} + + +static PyMethodDef memory_methods[] = { + {"write", memory_write, METH_VARARGS, "mem_write(data, offset)\n--\n\nWrites *data* to memory at *offset*."}, + {NULL, NULL, 0, NULL} +}; + + +static struct PyModuleDef memory_module = { + PyModuleDef_HEAD_INIT, + "memory", + NULL, + -1, + memory_methods +}; + + +PyMODINIT_FUNC PyInit_memory(void) +{ + return PyModule_Create(&memory_module); +} -- cgit v1.1