From b28a51120c8fca3105387f2931023a025dea3753 Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 24 Oct 2021 00:55:16 +0200 Subject: Added memory module --- CMakeLists.txt | 20 ++++++++++++++----- setup.py | 5 ++++- src/gpio.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/hwdmodule.cpp | 59 ------------------------------------------------------- src/memory.cpp | 41 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 119 insertions(+), 65 deletions(-) create mode 100644 src/gpio.cpp delete mode 100644 src/hwdmodule.cpp create mode 100644 src/memory.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a7c821f..13ddf5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,12 +4,22 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_EXTENSIONS No) find_package(Hwd REQUIRED) find_package(Python COMPONENTS Development.Module) -Python_add_library(${PROJECT_NAME} MODULE - src/hwdmodule.cpp +Python_add_library(hwd.gpio MODULE + src/gpio.cpp ) -target_link_libraries(${PROJECT_NAME} +target_link_libraries(hwd.gpio PRIVATE Hwd::library ) -set_target_properties(${PROJECT_NAME} - PROPERTIES OUTPUT_NAME hwd +set_target_properties(hwd.gpio PROPERTIES + OUTPUT_NAME gpio ) +Python_add_library(hwd.memory MODULE + src/memory.cpp + ) +target_link_libraries(hwd.memory + PRIVATE Hwd::library + ) +set_target_properties(hwd.memory PROPERTIES + OUTPUT_NAME memory + ) + diff --git a/setup.py b/setup.py index b6e3626..f243f62 100644 --- a/setup.py +++ b/setup.py @@ -35,6 +35,9 @@ class CMakeBuild(build_ext): setup( name="hwd", - ext_modules=[CMakeExtension("hwd")], + ext_modules=[ + CMakeExtension("hwd.gpio"), + CMakeExtension("hwd.memory"), + ], cmdclass={"build_ext": CMakeBuild}, ) 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