summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2021-10-24 00:55:16 +0200
committerAki <please@ignore.pl>2021-10-24 00:55:16 +0200
commitb28a51120c8fca3105387f2931023a025dea3753 (patch)
treeb6b713b0ce88fd28b2e7fafe749be367c4017d0b
parent3a183df872409594e74d3c55e3c1eedf9ee8abec (diff)
downloadhwd-python-b28a51120c8fca3105387f2931023a025dea3753.zip
hwd-python-b28a51120c8fca3105387f2931023a025dea3753.tar.gz
hwd-python-b28a51120c8fca3105387f2931023a025dea3753.tar.bz2
Added memory module
-rw-r--r--CMakeLists.txt20
-rw-r--r--setup.py5
-rw-r--r--src/gpio.cpp (renamed from src/hwdmodule.cpp)12
-rw-r--r--src/memory.cpp41
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
+ )
+
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/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);
+}