Skip to content

Commit 1727151

Browse files
committed
adafruit_bus_device: SPIDevice: Fix so it works with bitbangio.SPI
.. by calling methods, same as we did for I2C
1 parent a70b679 commit 1727151

File tree

1 file changed

+29
-15
lines changed

1 file changed

+29
-15
lines changed

shared-module/adafruit_bus_device/SPIDevice.c

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,28 @@ void common_hal_adafruit_bus_device_spidevice_construct(adafruit_bus_device_spid
4242
}
4343

4444
mp_obj_t common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spidevice_obj_t *self) {
45-
bool success = false;
46-
while (!success) {
47-
success = common_hal_busio_spi_try_lock(self->spi);
48-
RUN_BACKGROUND_TASKS;
49-
mp_handle_pending();
45+
{
46+
mp_obj_t dest[2];
47+
mp_load_method(self->spi, MP_QSTR_try_lock, dest);
48+
49+
while (!mp_obj_is_true(mp_call_method_n_kw(0, 0, dest))) {
50+
mp_handle_pending();
51+
}
5052
}
5153

52-
common_hal_busio_spi_configure(self->spi, self->baudrate, self->polarity, self->phase, 8);
54+
{
55+
mp_obj_t dest[10];
56+
mp_load_method(self->spi, MP_QSTR_configure, dest);
57+
dest[2] = MP_OBJ_NEW_QSTR(MP_QSTR_baudrate);
58+
dest[3] = MP_OBJ_NEW_SMALL_INT(self->baudrate);
59+
dest[4] = MP_OBJ_NEW_QSTR(MP_QSTR_polarity);
60+
dest[5] = MP_OBJ_NEW_SMALL_INT(self->polarity);
61+
dest[6] = MP_OBJ_NEW_QSTR(MP_QSTR_phase);
62+
dest[7] = MP_OBJ_NEW_SMALL_INT(self->phase);
63+
dest[8] = MP_OBJ_NEW_QSTR(MP_QSTR_bits);
64+
dest[9] = MP_OBJ_NEW_SMALL_INT(8);
65+
mp_call_method_n_kw(0, 4, dest);
66+
}
5367

5468
if (self->chip_select != MP_OBJ_NULL) {
5569
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
6781
mp_buffer_info_t bufinfo;
6882
mp_obj_t buffer = mp_obj_new_bytearray_of_zeros(1);
6983

70-
mp_get_buffer_raise(buffer, &bufinfo, MP_BUFFER_READ);
84+
mp_get_buffer_raise(buffer, &bufinfo, MP_BUFFER_WRITE);
7185
((uint8_t *)bufinfo.buf)[0] = 0xFF;
7286

73-
uint8_t clocks = self->extra_clocks / 8;
74-
if ((self->extra_clocks % 8) != 0) {
75-
clocks += 1;
76-
}
87+
uint8_t clocks = (self->extra_clocks + 7) / 8;
7788

89+
mp_obj_t dest[3];
90+
mp_load_method(self->spi, MP_QSTR_write, dest);
91+
dest[2] = buffer;
7892
while (clocks > 0) {
79-
if (!common_hal_busio_spi_write(self->spi, ((uint8_t *)bufinfo.buf), 1)) {
80-
mp_raise_OSError(MP_EIO);
81-
}
93+
mp_call_method_n_kw(1, 0, dest);
8294
clocks--;
8395
}
8496
}
8597

86-
common_hal_busio_spi_unlock(self->spi);
98+
mp_obj_t dest[2];
99+
mp_load_method(self->spi, MP_QSTR_unlock, dest);
100+
mp_call_method_n_kw(0, 0, dest);
87101
}

0 commit comments

Comments
 (0)