summaryrefslogtreecommitdiff
path: root/shared-bindings/adafruit_bus_device
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2021-02-11 18:50:02 -0500
committerDan Halbert <halbert@halwitz.org>2021-02-11 18:50:02 -0500
commitf0564b49862eaef0b9752b62d80ef00e3e12a3ee (patch)
tree79a48a30955bdc7ae4e1971135809a0593130417 /shared-bindings/adafruit_bus_device
parent1b7f3d11e73be5cb0f7a97a528fedad87624b97f (diff)
parent206109763f3d8b8dc92a5f5bf1bfabb49ce9c7b7 (diff)
merge from upstream; complicated webusb merge
Diffstat (limited to 'shared-bindings/adafruit_bus_device')
-rw-r--r--shared-bindings/adafruit_bus_device/I2CDevice.c23
-rw-r--r--shared-bindings/adafruit_bus_device/SPIDevice.c34
-rw-r--r--shared-bindings/adafruit_bus_device/SPIDevice.h3
3 files changed, 46 insertions, 14 deletions
diff --git a/shared-bindings/adafruit_bus_device/I2CDevice.c b/shared-bindings/adafruit_bus_device/I2CDevice.c
index 3c5d33f52..e6ec8c147 100644
--- a/shared-bindings/adafruit_bus_device/I2CDevice.c
+++ b/shared-bindings/adafruit_bus_device/I2CDevice.c
@@ -234,23 +234,24 @@ STATIC mp_obj_t adafruit_bus_device_i2cdevice_write_then_readinto(size_t n_args,
mp_obj_t dest[13];
uint8_t num_kws = 2;
+ uint8_t index = 2;
mp_load_method(self->i2c, MP_QSTR_writeto_then_readfrom, dest);
- dest[2] = MP_OBJ_NEW_SMALL_INT(self->device_address);
- dest[3] = args[ARG_out_buffer].u_obj;
- dest[4] = args[ARG_in_buffer].u_obj;
- dest[5] = MP_OBJ_NEW_QSTR(MP_QSTR_out_start);
- dest[6] = MP_OBJ_NEW_SMALL_INT(args[ARG_out_start].u_int);
+ dest[index++] = MP_OBJ_NEW_SMALL_INT(self->device_address);
+ dest[index++] = args[ARG_out_buffer].u_obj;
+ dest[index++] = args[ARG_in_buffer].u_obj;
+ dest[index++] = MP_OBJ_NEW_QSTR(MP_QSTR_out_start);
+ dest[index++] = MP_OBJ_NEW_SMALL_INT(args[ARG_out_start].u_int);
if (args[ARG_out_end].u_int != INT_MAX) {
- dest[7] = MP_OBJ_NEW_QSTR(MP_QSTR_out_end);
- dest[8] = MP_OBJ_NEW_SMALL_INT(args[ARG_out_end].u_int);
+ dest[index++] = MP_OBJ_NEW_QSTR(MP_QSTR_out_end);
+ dest[index++] = MP_OBJ_NEW_SMALL_INT(args[ARG_out_end].u_int);
num_kws++;
}
- dest[9] = MP_OBJ_NEW_QSTR(MP_QSTR_in_start);
- dest[10] = MP_OBJ_NEW_SMALL_INT(args[ARG_in_start].u_int);
+ dest[index++] = MP_OBJ_NEW_QSTR(MP_QSTR_in_start);
+ dest[index++] = MP_OBJ_NEW_SMALL_INT(args[ARG_in_start].u_int);
if (args[ARG_in_end].u_int != INT_MAX) {
- dest[11] = MP_OBJ_NEW_QSTR(MP_QSTR_in_end);
- dest[12] = MP_OBJ_NEW_SMALL_INT(args[ARG_in_end].u_int);
+ dest[index++] = MP_OBJ_NEW_QSTR(MP_QSTR_in_end);
+ dest[index++] = MP_OBJ_NEW_SMALL_INT(args[ARG_in_end].u_int);
num_kws++;
}
diff --git a/shared-bindings/adafruit_bus_device/SPIDevice.c b/shared-bindings/adafruit_bus_device/SPIDevice.c
index e127e39b8..e37f88368 100644
--- a/shared-bindings/adafruit_bus_device/SPIDevice.c
+++ b/shared-bindings/adafruit_bus_device/SPIDevice.c
@@ -34,6 +34,7 @@
#include "lib/utils/buffer_helper.h"
#include "lib/utils/context_manager_helpers.h"
+#include "py/objproperty.h"
#include "py/runtime.h"
#include "supervisor/shared/translate.h"
@@ -100,22 +101,51 @@ STATIC mp_obj_t adafruit_bus_device_spidevice_make_new(const mp_obj_type_t *type
return (mp_obj_t)self;
}
+//| def __enter__(self) -> busio.SPI:
+//| """Starts a SPI transaction by configuring the SPI and asserting chip select."""
+//| ...
+//|
STATIC mp_obj_t adafruit_bus_device_spidevice_obj___enter__(mp_obj_t self_in) {
adafruit_bus_device_spidevice_obj_t *self = MP_OBJ_TO_PTR(self_in);
- common_hal_adafruit_bus_device_spidevice_enter(self);
- return self->spi;
+ return common_hal_adafruit_bus_device_spidevice_enter(self);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(adafruit_bus_device_spidevice___enter___obj, adafruit_bus_device_spidevice_obj___enter__);
+
+//| def __exit__(self) -> None:
+//| """Ends a SPI transaction by deasserting chip select. See
+//| :ref:`lifetime-and-contextmanagers` for more info."""
+//| ...
+//|
STATIC mp_obj_t adafruit_bus_device_spidevice_obj___exit__(size_t n_args, const mp_obj_t *args) {
common_hal_adafruit_bus_device_spidevice_exit(MP_OBJ_TO_PTR(args[0]));
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(adafruit_bus_device_spidevice___exit___obj, 4, 4, adafruit_bus_device_spidevice_obj___exit__);
+//| spi: busio.SPI
+//| """The underlying SPI bus. Useful for weird uses like clocking an SD card without chip select.
+//|
+//| You shouldn't normally need this."""
+//|
+STATIC mp_obj_t adafruit_bus_device_spidevice_obj_get_spi(mp_obj_t self_in) {
+ adafruit_bus_device_spidevice_obj_t *self = MP_OBJ_TO_PTR(self_in);
+ return common_hal_adafruit_bus_device_spidevice_get_spi(self);
+}
+MP_DEFINE_CONST_FUN_OBJ_1(adafruit_bus_device_spidevice_get_spi_obj, adafruit_bus_device_spidevice_obj_get_spi);
+
+const mp_obj_property_t adafruit_bus_device_spidevice_spi_obj = {
+ .base.type = &mp_type_property,
+ .proxy = {(mp_obj_t)&adafruit_bus_device_spidevice_get_spi_obj,
+ (mp_obj_t)&mp_const_none_obj,
+ (mp_obj_t)&mp_const_none_obj},
+};
+
STATIC const mp_rom_map_elem_t adafruit_bus_device_spidevice_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&adafruit_bus_device_spidevice___enter___obj) },
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&adafruit_bus_device_spidevice___exit___obj) },
+
+ { MP_ROM_QSTR(MP_QSTR_spi), MP_ROM_PTR(&adafruit_bus_device_spidevice_spi_obj) },
};
STATIC MP_DEFINE_CONST_DICT(adafruit_bus_device_spidevice_locals_dict, adafruit_bus_device_spidevice_locals_dict_table);
diff --git a/shared-bindings/adafruit_bus_device/SPIDevice.h b/shared-bindings/adafruit_bus_device/SPIDevice.h
index 5596b157f..baa9ec464 100644
--- a/shared-bindings/adafruit_bus_device/SPIDevice.h
+++ b/shared-bindings/adafruit_bus_device/SPIDevice.h
@@ -44,7 +44,8 @@ extern const mp_obj_type_t adafruit_bus_device_spidevice_type;
// Initializes the hardware peripheral.
extern void common_hal_adafruit_bus_device_spidevice_construct(adafruit_bus_device_spidevice_obj_t *self, busio_spi_obj_t *spi, digitalio_digitalinout_obj_t *cs,
uint32_t baudrate, uint8_t polarity, uint8_t phase, uint8_t extra_clocks);
-extern void common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spidevice_obj_t *self);
+extern mp_obj_t common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spidevice_obj_t *self);
extern void common_hal_adafruit_bus_device_spidevice_exit(adafruit_bus_device_spidevice_obj_t *self);
+extern mp_obj_t common_hal_adafruit_bus_device_spidevice_get_spi(adafruit_bus_device_spidevice_obj_t *self);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BUSDEVICE_SPIDEVICE_H