K
krishna2prasad
Hello,
I am trying to build a structure to be passed down to an I2C device driver.The driver expects a struct that has a data array of size 512 bytes among other things. This is my code -
rd_wr = 0x0 # Read operation
i2c_addr = addr
mux = mux_sel
multi_len = count
cmd = 0x0
i2c_inst_type = CHEL_I2C_AUTO_RD_TYPE_5
flag = CHEL_I2C_AUTO_VALID
status = 0x0
data = array.array('B', (0 for x in range(0,512)))
os_inst_bytes = (struct.pack('B', rd_wr) +
struct.pack('B', i2c_addr) +
struct.pack('B', mux) +
struct.pack('B', multi_len) +
struct.pack('B', cmd) +
struct.pack('B', i2c_inst_type) +
struct.pack('B', flag) +
struct.pack('I', status) +
struct.pack('512B', data))
#Convert to byte array
os_inst = bytearray(os_inst_bytes)
ret = fcntl.ioctl(self._dev_fd,
self.__IOWR(FXCB_FPGAIO_I2C_AUTO_OS_INST),
os_inst, 1)
I get an error like this -
591 struct.pack('B', flag) +
592 struct.pack('I', status) +
--> 593 struct.pack('512B', data))
error: pack requires exactly 512 arguments
In [1]:
Even though data is a 512 element array, it is not treat as such in this struct.pack. The data field is used to return data from the driver. I should be able to unpack the struct os_inst and read the data buffer after the IOCTL call. How can I achieve this ?
Thanks in advance!
I am trying to build a structure to be passed down to an I2C device driver.The driver expects a struct that has a data array of size 512 bytes among other things. This is my code -
rd_wr = 0x0 # Read operation
i2c_addr = addr
mux = mux_sel
multi_len = count
cmd = 0x0
i2c_inst_type = CHEL_I2C_AUTO_RD_TYPE_5
flag = CHEL_I2C_AUTO_VALID
status = 0x0
data = array.array('B', (0 for x in range(0,512)))
os_inst_bytes = (struct.pack('B', rd_wr) +
struct.pack('B', i2c_addr) +
struct.pack('B', mux) +
struct.pack('B', multi_len) +
struct.pack('B', cmd) +
struct.pack('B', i2c_inst_type) +
struct.pack('B', flag) +
struct.pack('I', status) +
struct.pack('512B', data))
#Convert to byte array
os_inst = bytearray(os_inst_bytes)
ret = fcntl.ioctl(self._dev_fd,
self.__IOWR(FXCB_FPGAIO_I2C_AUTO_OS_INST),
os_inst, 1)
I get an error like this -
591 struct.pack('B', flag) +
592 struct.pack('I', status) +
--> 593 struct.pack('512B', data))
error: pack requires exactly 512 arguments
In [1]:
Even though data is a 512 element array, it is not treat as such in this struct.pack. The data field is used to return data from the driver. I should be able to unpack the struct os_inst and read the data buffer after the IOCTL call. How can I achieve this ?
Thanks in advance!