diff --git a/dmx_usb_module/dmx.pyx b/dmx_usb_module/dmx.pyx new file mode 100644 --- /dev/null +++ b/dmx_usb_module/dmx.pyx @@ -0,0 +1,28 @@ +cdef extern from "fcntl.h": + int open(char *pathname, int flags) + int O_WRONLY + +cdef extern from "unistd.h": + int write(int fd, void *buf, int count) + +cdef extern from "string.h": + char *strncpy(char *dest, char *src, int n) + +cdef extern from "Python.h": + char* PyString_AsString(object string) + +cdef class Dmx: + cdef int fd + def __new__(self, port="/dev/dmx0"): + self.fd = open(port, O_WRONLY) + if self.fd < 0: + raise OSError("open failed") + + def write(self, buf): + cdef char *cbuf + cbuf = PyString_AsString(buf) + if cbuf == NULL: + raise + res = write(self.fd, cbuf, 513) + if res < 0: + raise OSError("write failed")