def read_i2c_block_data(self, i2c_addr, register, length):
# type: (int, int, int) -> list
"""
Read a block of byte data from a given register
:rtype: list
:param i2c_addr: i2c address
:param register: Start register
:param length: Desired block length
:return: List of bytes
"""
if length > I2C_SMBUS_BLOCK_MAX:
raise ValueError("Desired block length over %d bytes" % I2C_SMBUS_BLOCK_MAX)
self._set_address(i2c_addr)
msg = i2c_smbus_ioctl_data.create(
read_write=I2C_SMBUS_READ, command=register, size=I2C_SMBUS_I2C_BLOCK_DATA
)
msg.data.contents.byte = length
ioctl(self.fd, I2C_SMBUS, msg)
return msg.data.contents.block[1:length+1]
评论列表
文章目录