mirror of https://github.com/ARMmbed/mbed-os.git
Correctly check return codes from bytewise write function of I2C.
parent
52aed22978
commit
e850984715
|
|
@ -69,17 +69,18 @@ int I2CEEBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size)
|
||||||
{
|
{
|
||||||
_i2c->start();
|
_i2c->start();
|
||||||
|
|
||||||
auto const pagedDeviceAddress = get_paged_device_address(page);
|
if (1 != _i2c->write(pagedDeviceAddress))
|
||||||
|
{
|
||||||
if (!_i2c->write(pagedDeviceAddress)) {
|
|
||||||
return BD_ERROR_DEVICE_ERROR;
|
return BD_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_address_is_eight_bit && !_i2c->write((char)(pagedStart >> 8u))) {
|
if (!_address_is_eight_bit && 1 != _i2c->write((char) (pagedStart >> 8u)))
|
||||||
|
{
|
||||||
return BD_ERROR_DEVICE_ERROR;
|
return BD_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_i2c->write((char)(pagedStart & 0xffu))) {
|
if (1 != _i2c->write((char) (pagedStart & 0xffu)))
|
||||||
|
{
|
||||||
return BD_ERROR_DEVICE_ERROR;
|
return BD_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -113,28 +114,34 @@ int I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_t size
|
||||||
const uint8_t &pagedDeviceAddress) -> int
|
const uint8_t &pagedDeviceAddress) -> int
|
||||||
{
|
{
|
||||||
// While we have some more data to write.
|
// While we have some more data to write.
|
||||||
while (size > 0) {
|
while (size > 0)
|
||||||
|
{
|
||||||
uint32_t off = addr % _block;
|
uint32_t off = addr % _block;
|
||||||
uint32_t chunk = (off + size < _block) ? size : (_block - off);
|
uint32_t chunk = (off + size < _block) ? size : (_block - off);
|
||||||
|
|
||||||
_i2c->start();
|
_i2c->start();
|
||||||
|
|
||||||
auto const pagedDeviceAddress = get_paged_device_address(page);
|
if (1 != _i2c->write(pagedDeviceAddress))
|
||||||
|
{
|
||||||
if (!_i2c->write(pagedDeviceAddress)) {
|
|
||||||
return BD_ERROR_DEVICE_ERROR;
|
return BD_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_address_is_eight_bit && !_i2c->write((char)(pagedStart >> 8u))) {
|
if (!_address_is_eight_bit && 1 != _i2c->write((char) (pagedStart >> 8u)))
|
||||||
|
{
|
||||||
return BD_ERROR_DEVICE_ERROR;
|
return BD_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_i2c->write((char)(addr & 0xffu))) {
|
if (1 != _i2c->write((char) (addr & 0xffu)))
|
||||||
|
{
|
||||||
return BD_ERROR_DEVICE_ERROR;
|
return BD_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unsigned i = 0; i < chunk; i++) {
|
for (unsigned i = 0; i < chunk; i++)
|
||||||
_i2c->write(charBuffer[i]);
|
{
|
||||||
|
if (1 != _i2c->write(charBuffer[i]))
|
||||||
|
{
|
||||||
|
return BD_ERROR_DEVICE_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_i2c->stop();
|
_i2c->stop();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue