diff options
| author | gamblor21 <mark.komus@gmail.com> | 2020-11-11 09:58:08 -0600 |
|---|---|---|
| committer | gamblor21 <mark.komus@gmail.com> | 2020-11-11 09:58:08 -0600 |
| commit | 03b110b44c8e8fed1feb43b7c14b03bbfddf4f2c (patch) | |
| tree | 3149a33fc9f022364293d6385b1bc2f87d1a90cf /shared-module | |
| parent | 4c93db35959e96889b3a28af792c837fbe1fdca5 (diff) | |
Add abort check in I2C lock
Diffstat (limited to 'shared-module')
| -rw-r--r-- | shared-module/adafruit_bus_device/I2CDevice.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/shared-module/adafruit_bus_device/I2CDevice.c b/shared-module/adafruit_bus_device/I2CDevice.c index d790ff53a..ee4b4fa55 100644 --- a/shared-module/adafruit_bus_device/I2CDevice.c +++ b/shared-module/adafruit_bus_device/I2CDevice.c @@ -29,6 +29,7 @@ #include "py/mperrno.h" #include "py/nlr.h" #include "py/runtime.h" +#include "lib/utils/interrupt_char.h" void common_hal_adafruit_bus_device_i2cdevice_construct(adafruit_bus_device_i2cdevice_obj_t *self, busio_i2c_obj_t *i2c, uint8_t device_address) { self->i2c = i2c; @@ -36,11 +37,15 @@ void common_hal_adafruit_bus_device_i2cdevice_construct(adafruit_bus_device_i2cd } void common_hal_adafruit_bus_device_i2cdevice_lock(adafruit_bus_device_i2cdevice_obj_t *self) { - bool success = false; + bool success = common_hal_busio_i2c_try_lock(self->i2c); + while (!success) { + RUN_BACKGROUND_TASKS; + if (mp_hal_is_interrupted()) { + break; + } + success = common_hal_busio_i2c_try_lock(self->i2c); - //RUN_BACKGROUND_TASKS; - //mp_handle_pending(); } } |
