diff options
| author | Dan Halbert <halbert@halwitz.org> | 2017-10-02 20:49:40 -0400 |
|---|---|---|
| committer | Scott Shawcroft <scott@tannewt.org> | 2017-10-03 12:07:17 -0700 |
| commit | c478c10923b9085b2abe135470e968029aaf2fdb (patch) | |
| tree | 6d76c8aa9cc4553d68fe3ff766f2f36b59378ec5 /shared-module/bitbangio | |
| parent | c2bb9e2eb50e0dee6d7405fd738f1b4b0f94d10b (diff) | |
Do not allow a *io object to be used after deinit().
Fixes #278, #277, #276, #275.
Diffstat (limited to 'shared-module/bitbangio')
| -rw-r--r-- | shared-module/bitbangio/I2C.c | 8 | ||||
| -rw-r--r-- | shared-module/bitbangio/OneWire.c | 7 | ||||
| -rw-r--r-- | shared-module/bitbangio/SPI.c | 7 |
3 files changed, 22 insertions, 0 deletions
diff --git a/shared-module/bitbangio/I2C.c b/shared-module/bitbangio/I2C.c index 0f017fc18..7eeda0e00 100644 --- a/shared-module/bitbangio/I2C.c +++ b/shared-module/bitbangio/I2C.c @@ -162,7 +162,15 @@ void shared_module_bitbangio_i2c_construct(bitbangio_i2c_obj_t *self, stop(self); } +bool shared_module_bitbangio_i2c_deinited(bitbangio_i2c_obj_t *self) { + // If one is deinited, both will be. + return common_hal_digitalio_digitalinout_deinited(&self->scl); +} + void shared_module_bitbangio_i2c_deinit(bitbangio_i2c_obj_t *self) { + if (shared_module_bitbangio_i2c_deinited(self)) { + return; + } common_hal_digitalio_digitalinout_deinit(&self->scl); common_hal_digitalio_digitalinout_deinit(&self->sda); } diff --git a/shared-module/bitbangio/OneWire.c b/shared-module/bitbangio/OneWire.c index 46c0c406c..e77bdb3b2 100644 --- a/shared-module/bitbangio/OneWire.c +++ b/shared-module/bitbangio/OneWire.c @@ -38,7 +38,14 @@ void shared_module_bitbangio_onewire_construct(bitbangio_onewire_obj_t* self, common_hal_digitalio_digitalinout_construct(&self->pin, pin); } +bool shared_module_bitbangio_onewire_deinited(bitbangio_onewire_obj_t* self) { + return common_hal_digitalio_digitalinout_deinited(&self->pin); +} + void shared_module_bitbangio_onewire_deinit(bitbangio_onewire_obj_t* self) { + if (shared_module_bitbangio_onewire_deinited(self)) { + return; + } common_hal_digitalio_digitalinout_deinit(&self->pin); } diff --git a/shared-module/bitbangio/SPI.c b/shared-module/bitbangio/SPI.c index a3c70dde9..0576a6e56 100644 --- a/shared-module/bitbangio/SPI.c +++ b/shared-module/bitbangio/SPI.c @@ -70,7 +70,14 @@ void shared_module_bitbangio_spi_construct(bitbangio_spi_obj_t *self, self->phase = 0; } +bool shared_module_bitbangio_spi_deinited(bitbangio_spi_obj_t *self) { + return common_hal_digitalio_digitalinout_deinited(&self->clock); +} + void shared_module_bitbangio_spi_deinit(bitbangio_spi_obj_t *self) { + if (shared_module_bitbangio_spi_deinited(self)) { + return; + } common_hal_digitalio_digitalinout_deinit(&self->clock); if (self->has_mosi) { common_hal_digitalio_digitalinout_deinit(&self->mosi); |
