adafruit_bus_device: SPIDevice: Fix so it works with bitbangio.SPI
.. by calling methods, same as we did for I2C
This commit is contained in:
parent
a70b679ed5
commit
172715194f
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user