view dmx_usb_module/dmx.pyx @ 1921:0c54bd6e1630

color picker no longer opens on hover, and no longer shows a rainbow in small mode. Ignore-this: 637e296da9b59d81acf03eff16a4e193 you can also drag outside the large rainbow while picking and it'll snap to the closest point.
author Drew Perttula <drewp@bigasterisk.com>
date Sat, 01 Jun 2019 21:16:47 +0000
parents 295e803f6a5e
children
line wrap: on
line source

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 __cinit__(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 ValueError("string buffer conversion failed")
        res = write(self.fd, cbuf, 513)
        if res < 0:
            raise OSError("write failed")