summaryrefslogtreecommitdiff
path: root/shared-module/bitbangio
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2017-10-02 20:49:40 -0400
committerScott Shawcroft <scott@tannewt.org>2017-10-03 12:07:17 -0700
commitc478c10923b9085b2abe135470e968029aaf2fdb (patch)
tree6d76c8aa9cc4553d68fe3ff766f2f36b59378ec5 /shared-module/bitbangio
parentc2bb9e2eb50e0dee6d7405fd738f1b4b0f94d10b (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.c8
-rw-r--r--shared-module/bitbangio/OneWire.c7
-rw-r--r--shared-module/bitbangio/SPI.c7
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);