summaryrefslogtreecommitdiff
path: root/zephyr/emul/emul_smart_battery.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/emul/emul_smart_battery.c')
-rw-r--r--zephyr/emul/emul_smart_battery.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/zephyr/emul/emul_smart_battery.c b/zephyr/emul/emul_smart_battery.c
index 279e08719d..136d81cc35 100644
--- a/zephyr/emul/emul_smart_battery.c
+++ b/zephyr/emul/emul_smart_battery.c
@@ -586,20 +586,21 @@ static int sbat_emul_handle_read_msg(struct i2c_emul *emul, int reg)
/* Handle commands which return block */
ret = sbat_emul_get_block_data(emul, reg, &blk, &len);
- if (ret != 0) {
- if (ret == 1) {
- data->bat.error_code = STATUS_CODE_UNSUPPORTED;
- LOG_ERR("Unknown read command (0x%x)", reg);
- }
-
+ if (ret < 0) {
return -EIO;
}
+ if (ret == 0) {
+ data->num_to_read = len + 1;
+ data->msg_buf[0] = len;
+ memcpy(&data->msg_buf[1], blk, len);
+ data->bat.error_code = STATUS_CODE_OK;
+ sbat_emul_append_pec(data, reg);
- data->num_to_read = len + 1;
- data->msg_buf[0] = len;
- memcpy(&data->msg_buf[1], blk, len);
- data->bat.error_code = STATUS_CODE_OK;
- sbat_emul_append_pec(data, reg);
+ return 0;
+ }
+
+ /* Command is unknown. Wait for custom handler before failing. */
+ data->num_to_read = 0;
return 0;
}
@@ -740,6 +741,13 @@ static int sbat_emul_read_byte(struct i2c_emul *emul, int reg, uint8_t *val,
data = SBAT_DATA_FROM_I2C_EMUL(emul);
+ if (data->num_to_read == 0) {
+ data->bat.error_code = STATUS_CODE_UNSUPPORTED;
+ LOG_ERR("Unknown read command (0x%x)", reg);
+
+ return -EIO;
+ }
+
if (bytes < data->num_to_read) {
*val = data->msg_buf[bytes];
}