Commit 1eab6647 authored by Lucas Russo's avatar Lucas Russo

sm_io/protocols/*: fix transmission size for generic read/write

We must account for cases when the user
did not "correctly" specified data pointer
and/or data size.
parent ed260e5e
......@@ -638,14 +638,17 @@ static ssize_t _i2c_write_generic (smpr_t *self, size_t size_offs, uint64_t offs
size_t raw_size = size_offs + size;
uint8_t raw_data [raw_size];
size_t trans_size = 0;
/* Copy address + data */
memcpy (&raw_data, &offs, size_offs);
trans_size += size_offs;
if (data != NULL) {
memcpy (&raw_data + size_offs, data, size);
trans_size += size;
}
ssize_t err = _i2c_write_raw (self, raw_size, raw_data);
ASSERT_TEST(err > 0 && (size_t) err == raw_size /* in bytes*/,
ssize_t err = _i2c_write_raw (self, trans_size, raw_data);
ASSERT_TEST(err > 0 && (size_t) err == trans_size /* in bytes*/,
"Could not write data to I2C", err_exit, -1);
/* We return only the number of data bytes actually written, not addr+data */
......
......@@ -472,27 +472,32 @@ static ssize_t _spi_read_write_generic (smpr_t *self, size_t size_offs, uint64_t
smpr_spi_t *smpr_spi = (smpr_spi_t *) smpr_get_ops (self);
uint32_t addr_msb = smpr_spi_get_addr_msb (smpr_spi);
size_t trans_size = 0;
if (addr_msb) {
/* Copy address (MSB) + data */
if (data != NULL) {
memcpy (&raw_data, data, size);
memcpy (&raw_data + size, &offs, size_offs);
trans_size += size + size_offs;
}
/* Only copy address to buffer */
else {
memcpy (&raw_data, &offs, size_offs);
trans_size += size_offs;
}
}
else {
/* Copy data (MSB) + address */
memcpy (&raw_data, &offs, size_offs);
trans_size += size_offs;
if (data != NULL) {
memcpy (&raw_data + size_offs, data, size);
trans_size += size;
}
}
ssize_t err = _spi_read_write_raw (self, raw_size, raw_data, mode);
ASSERT_TEST(err > 0 && (size_t) err == raw_size /* in bytes*/,
ssize_t err = _spi_read_write_raw (self, trans_size, raw_data, mode);
ASSERT_TEST(err > 0 && (size_t) err == trans_size /* in bytes*/,
"Could not write data to SPI", err_exit, -1);
/* We return only the number of data bytes actually written, not addr+data */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment