@@ -366,27 +366,28 @@ def write(self, data, speed=0, bits_per_word=0, delay=0):
366366 """Perform half-duplex SPI write.
367367
368368 Args:
369- data: Binary string of data to write
369+ data: List of words to write
370370 speed: Optional temporary bitrate override in Hz. 0 (default)
371371 uses existing spidev speed setting.
372372 bits_per_word: Optional temporary bits_per_word override. 0 (
373373 default) is equivalent to 8 bits per word.
374374 delay: Optional delay in usecs between sending the last bit and
375375 deselecting the chip select line. 0 (default) for no delay.
376376 """
377+ data = array .array ('B' , data ).tostring ()
377378 length = len (data )
378- transmit_buffer = ctypes .create_string_buffer (str ( data ) )
379+ transmit_buffer = ctypes .create_string_buffer (data )
379380 spi_ioc_transfer = struct .pack (SPI ._IOC_TRANSFER_FORMAT ,
380381 ctypes .addressof (transmit_buffer ), 0 ,
381382 length , speed , delay , bits_per_word , 0 ,
382383 0 , 0 , 0 )
383384 fcntl .ioctl (self .handle , SPI ._IOC_MESSAGE , spi_ioc_transfer )
384385
385386 def read (self , length , speed = 0 , bits_per_word = 0 , delay = 0 ):
386- """Perform half-duplex SPI read
387+ """Perform half-duplex SPI read as a binary string
387388
388389 Args:
389- length: Integer count of bytes to read
390+ length: Integer count of words to read
390391 speed: Optional temporary bitrate override in Hz. 0 (default)
391392 uses existing spidev speed setting.
392393 bits_per_word: Optional temporary bits_per_word override. 0 (
@@ -395,21 +396,21 @@ def read(self, length, speed=0, bits_per_word=0, delay=0):
395396 deselecting the chip select line. 0 (default) for no delay.
396397
397398 Returns:
398- Binary string of data read from device
399+ List of words read from device
399400 """
400401 receive_buffer = ctypes .create_string_buffer (length )
401402 spi_ioc_transfer = struct .pack (SPI ._IOC_TRANSFER_FORMAT , 0 ,
402403 ctypes .addressof (receive_buffer ),
403404 length , speed , delay , bits_per_word , 0 ,
404405 0 , 0 , 0 )
405406 fcntl .ioctl (self .handle , SPI ._IOC_MESSAGE , spi_ioc_transfer )
406- return ctypes .string_at (receive_buffer , length )
407+ return [ ord ( byte ) for byte in ctypes .string_at (receive_buffer , length )]
407408
408409 def transfer (self , data , speed = 0 , bits_per_word = 0 , delay = 0 ):
409410 """Perform full-duplex SPI transfer
410411
411412 Args:
412- data: Binary string to transmit
413+ data: List of words to transmit
413414 speed: Optional temporary bitrate override in Hz. 0 (default)
414415 uses existing spidev speed setting.
415416 bits_per_word: Optional temporary bits_per_word override. 0 (
@@ -418,7 +419,7 @@ def transfer(self, data, speed=0, bits_per_word=0, delay=0):
418419 deselecting the chip select line. 0 (default) for no delay.
419420
420421 Returns:
421- Binary string of bytes read from SPI bus during transfer
422+ List of words read from SPI bus during transfer
422423 """
423424 length = len (data )
424425 transmit_buffer = ctypes .create_string_buffer (str (data ))
@@ -429,4 +430,4 @@ def transfer(self, data, speed=0, bits_per_word=0, delay=0):
429430 length , speed , delay , bits_per_word , 0 ,
430431 0 , 0 , 0 )
431432 fcntl .ioctl (self .handle , SPI ._IOC_MESSAGE , spi_ioc_transfer )
432- return ctypes .string_at (receive_buffer , length )
433+ return [ ord ( byte ) for byte in ctypes .string_at (receive_buffer , length )]
0 commit comments