summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
authorJeff Epler <jepler@unpythonic.net>2021-03-26 14:51:53 -0500
committerJeff Epler <jepler@unpythonic.net>2021-03-26 14:51:53 -0500
commit172715194fde0047fd843bd6e29a9cc6651ffdf7 (patch)
treef53a9d211de9c507108a9271d692a83e04afcd65 /shared-module
parenta70b679ed52529f8cc317959b180fd8a34bd220d (diff)
adafruit_bus_device: SPIDevice: Fix so it works with bitbangio.SPI
.. by calling methods, same as we did for I2C
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/adafruit_bus_device/SPIDevice.c44
1 files changed, 29 insertions, 15 deletions
diff --git a/shared-module/adafruit_bus_device/SPIDevice.c b/shared-module/adafruit_bus_device/SPIDevice.c
index c65807aeb..f34bb99f9 100644
--- a/shared-module/adafruit_bus_device/SPIDevice.c
+++ b/shared-module/adafruit_bus_device/SPIDevice.c
@@ -42,14 +42,28 @@ void common_hal_adafruit_bus_device_spidevice_construct(adafruit_bus_device_spid
}
mp_obj_t common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spidevice_obj_t *self) {
- bool success = false;
- while (!success) {
- success = common_hal_busio_spi_try_lock(self->spi);
- RUN_BACKGROUND_TASKS;
- mp_handle_pending();
+ {
+ mp_obj_t dest[2];
+ mp_load_method(self->spi, MP_QSTR_try_lock, dest);
+
+ while (!mp_obj_is_true(mp_call_method_n_kw(0, 0, dest))) {
+ mp_handle_pending();
+ }
}
- common_hal_busio_spi_configure(self->spi, self->baudrate, self->polarity, self->phase, 8);
+ {
+ mp_obj_t dest[10];
+ mp_load_method(self->spi, MP_QSTR_configure, dest);
+ dest[2] = MP_OBJ_NEW_QSTR(MP_QSTR_baudrate);
+ dest[3] = MP_OBJ_NEW_SMALL_INT(self->baudrate);
+ dest[4] = MP_OBJ_NEW_QSTR(MP_QSTR_polarity);
+ dest[5] = MP_OBJ_NEW_SMALL_INT(self->polarity);
+ dest[6] = MP_OBJ_NEW_QSTR(MP_QSTR_phase);
+ dest[7] = MP_OBJ_NEW_SMALL_INT(self->phase);
+ dest[8] = MP_OBJ_NEW_QSTR(MP_QSTR_bits);
+ dest[9] = MP_OBJ_NEW_SMALL_INT(8);
+ mp_call_method_n_kw(0, 4, dest);
+ }
if (self->chip_select != MP_OBJ_NULL) {
common_hal_digitalio_digitalinout_set_value(MP_OBJ_TO_PTR(self->chip_select), false);
@@ -67,21 +81,21 @@ void common_hal_adafruit_bus_device_spidevice_exit(adafruit_bus_device_spidevice
mp_buffer_info_t bufinfo;
mp_obj_t buffer = mp_obj_new_bytearray_of_zeros(1);
- mp_get_buffer_raise(buffer, &bufinfo, MP_BUFFER_READ);
+ mp_get_buffer_raise(buffer, &bufinfo, MP_BUFFER_WRITE);
((uint8_t *)bufinfo.buf)[0] = 0xFF;
- uint8_t clocks = self->extra_clocks / 8;
- if ((self->extra_clocks % 8) != 0) {
- clocks += 1;
- }
+ uint8_t clocks = (self->extra_clocks + 7) / 8;
+ mp_obj_t dest[3];
+ mp_load_method(self->spi, MP_QSTR_write, dest);
+ dest[2] = buffer;
while (clocks > 0) {
- if (!common_hal_busio_spi_write(self->spi, ((uint8_t *)bufinfo.buf), 1)) {
- mp_raise_OSError(MP_EIO);
- }
+ mp_call_method_n_kw(1, 0, dest);
clocks--;
}
}
- common_hal_busio_spi_unlock(self->spi);
+ mp_obj_t dest[2];
+ mp_load_method(self->spi, MP_QSTR_unlock, dest);
+ mp_call_method_n_kw(0, 0, dest);
}