def disp_spi_send(self, data, dma=False): if len(data) == 0: return # no need to send anything self.trans.length = len( data) * 8 # Length is in bytes, transaction length is in bits. self.trans.tx_buffer = data if dma: self.trans.user = self.spi_callbacks esp.spi_device_queue_trans(self.spi, self.trans, -1) else: self.trans.user = None esp.spi_device_polling_transmit(self.spi, self.trans)
def do_cmds(self): trans = esp.spi_transaction_t({ "length": self.buflen * 8, "tx_buffer": self.txbuf, "rx_buffer": self.rxbuf }) rxbuf = self.rxbuf.__dereference__(self.buflen) res = esp.spi_device_polling_transmit(self.spi, trans) # print("got:", res, ["%02x"%v for v in rxbuf]) vals = [(rxbuf[1 + 2 * i] << 5) | (rxbuf[2 + 2 * i] >> 3) for i in range(self.buflen // 2)] # print("res:", res, "vals:", vals) res = [(vals[c * REP + REP - 2] + vals[c * REP + REP - 1]) // 2 for c in range(len(self.CMDS))] return res
def spi_send(self, data): self.trans.length = len( data) * 8 # Length is in bytes, transaction length is in bits. self.trans.tx_buffer = data # data should be allocated as DMA-able memory self.trans.user = None esp.spi_device_polling_transmit(self.spi, self.trans)