diff options
author | Timofey Titovets <nefelim4ag@gmail.com> | 2024-10-21 14:19:56 +0200 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2024-10-26 22:06:30 -0400 |
commit | a4aa2a900267c83d20247f93e6ddb06f63324135 (patch) | |
tree | 7c0d71f171ebc997e9205f8ed0489017a70878bc /src/i2ccmds.c | |
parent | 08a85ba869c3232ca7063c737c238ca41e20885e (diff) | |
download | kutter-a4aa2a900267c83d20247f93e6ddb06f63324135.tar.gz kutter-a4aa2a900267c83d20247f93e6ddb06f63324135.tar.xz kutter-a4aa2a900267c83d20247f93e6ddb06f63324135.zip |
i2c: handle errors at i2ccmds
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
Diffstat (limited to 'src/i2ccmds.c')
-rw-r--r-- | src/i2ccmds.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/i2ccmds.c b/src/i2ccmds.c index c3465b5d..dfe5ccb3 100644 --- a/src/i2ccmds.c +++ b/src/i2ccmds.c @@ -52,10 +52,20 @@ i2cdev_set_software_bus(struct i2cdev_s *i2c, struct i2c_software *is) void i2c_dev_write(struct i2cdev_s *i2c, uint8_t write_len, uint8_t *data) { uint_fast8_t flags = i2c->flags; + int ret; if (CONFIG_WANT_SOFTWARE_I2C && flags & IF_SOFTWARE) - i2c_software_write(i2c->i2c_sw, write_len, data); + ret = i2c_software_write(i2c->i2c_sw, write_len, data); else - i2c_write(i2c->i2c_hw, write_len, data); + ret = i2c_write(i2c->i2c_hw, write_len, data); + + switch (ret) { + case I2C_BUS_NACK: + shutdown("I2C NACK"); + case I2C_BUS_START_NACK: + shutdown("I2C_START_NACK"); + case I2C_BUS_TIMEOUT: + shutdown("I2C Timeout"); + } } void command_i2c_write(uint32_t *args) @@ -72,10 +82,21 @@ void i2c_dev_read(struct i2cdev_s *i2c, uint8_t reg_len, uint8_t *reg , uint8_t read_len, uint8_t *read) { uint_fast8_t flags = i2c->flags; + int ret; if (CONFIG_WANT_SOFTWARE_I2C && flags & IF_SOFTWARE) - i2c_software_read(i2c->i2c_sw, reg_len, reg, read_len, read); + ret = i2c_software_read(i2c->i2c_sw, reg_len, reg, read_len, read); else - i2c_read(i2c->i2c_hw, reg_len, reg, read_len, read); + ret = i2c_read(i2c->i2c_hw, reg_len, reg, read_len, read); + switch (ret) { + case I2C_BUS_NACK: + shutdown("I2C NACK"); + case I2C_BUS_START_NACK: + shutdown("I2C START NACK"); + case I2C_BUS_START_READ_NACK: + shutdown("I2C START READ NACK"); + case I2C_BUS_TIMEOUT: + shutdown("I2C Timeout"); + } } void command_i2c_read(uint32_t *args) |