diff options
author | Aki <please@ignore.pl> | 2021-10-24 00:55:16 +0200 |
---|---|---|
committer | Aki <please@ignore.pl> | 2021-10-24 00:55:16 +0200 |
commit | b28a51120c8fca3105387f2931023a025dea3753 (patch) | |
tree | b6b713b0ce88fd28b2e7fafe749be367c4017d0b | |
parent | 3a183df872409594e74d3c55e3c1eedf9ee8abec (diff) | |
download | hwd-python-b28a51120c8fca3105387f2931023a025dea3753.zip hwd-python-b28a51120c8fca3105387f2931023a025dea3753.tar.gz hwd-python-b28a51120c8fca3105387f2931023a025dea3753.tar.bz2 |
Added memory module
-rw-r--r-- | CMakeLists.txt | 20 | ||||
-rw-r--r-- | setup.py | 5 | ||||
-rw-r--r-- | src/gpio.cpp (renamed from src/hwdmodule.cpp) | 12 | ||||
-rw-r--r-- | src/memory.cpp | 41 |
4 files changed, 66 insertions, 12 deletions
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 + ) + @@ -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/hwdmodule.cpp b/src/gpio.cpp index 6d3a574..478bcc7 100644 --- a/src/hwdmodule.cpp +++ b/src/gpio.cpp @@ -36,7 +36,7 @@ static PyObject * gpio_read(PyObject * self, PyObject * args) } -static PyMethodDef HwdMethods[] = { +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*."}, @@ -44,16 +44,16 @@ static PyMethodDef HwdMethods[] = { }; -static struct PyModuleDef hwdmodule = { +static struct PyModuleDef gpio_module = { PyModuleDef_HEAD_INIT, - "hwd", + "gpio", NULL, -1, - HwdMethods + gpio_methods }; -PyMODINIT_FUNC PyInit_hwd(void) +PyMODINIT_FUNC PyInit_gpio(void) { - return PyModule_Create(&hwdmodule); + return PyModule_Create(&gpio_module); } 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 <Python.h> + +#include <cstddef> +#include <vector> + +#include <hwd.h> + + +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<char> {static_cast<char *>(data.buf), static_cast<char *>(data.buf) + data.len}, + static_cast<std::size_t>(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); +} |