cdef extern from "Python.h": object PyString_FromStringAndSize(char *s, int len) cdef extern from "hostlib.h": void *avr_open() void avr_close(void *dev) void avr_set_debug(int level) void avr_send_command(void *dev, int cmd, int val) void avr_send_command_idx(void *dev, int cmd, int val, int idx) int avr_get_response(void *dev, int cmd, int val, char *buf, int len) int avr_get_response_idx(void *dev, int cmd, int idx, int val, char *buf, int len) ctypedef enum _avr_command_t: AVR_INFRA_BUFFER_EMPTY AVR_INFRA_GET_CODE AVR_DDR_SET AVR_DDR_GET AVR_PORT_SET AVR_PORT_GET AVR_PIN_GET AVR_EEPROM_READ AVR_EEPROM_WRITE AVR_RS232_WRITE AVR_RS232_READ AVR_RS232_BAUD_SET AVR_RS232_BAUD_GET AVR_SPI AVR_SPI4 cdef class Avr: cdef void *device cdef int is_open def __init__(self): self.device = avr_open() self.is_open = 1 def __del__(self): self.close() def close(self): if self.is_open: self.is_open = 0 avr_close(self.device) def send_command(self, int cmd, int val=0, idx=0): avr_send_command_idx(self.device, cmd, val, idx) def get_response(self, int cmd, int val=0, idx=0): cdef char res[4] cdef int len len = avr_get_response_idx(self.device, cmd, val, idx, res, 4) return PyString_FromStringAndSize(res, len)