Skip to content

Commit c6d140f

Browse files
committed
mutable polarity and phase on SPIDevice
1 parent e39fe0a commit c6d140f

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

shared-bindings/adafruit_bus_device/spi_device/SPIDevice.c

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "shared/runtime/buffer_helper.h"
1616
#include "shared/runtime/context_manager_helpers.h"
1717
#include "py/runtime.h"
18+
#include "py/objproperty.h"
1819

1920
//| class SPIDevice:
2021
//| """SPI Device Manager"""
@@ -96,6 +97,48 @@ static mp_obj_t adafruit_bus_device_spidevice_make_new(const mp_obj_type_t *type
9697
return (mp_obj_t)self;
9798
}
9899

100+
//| polarity: int
101+
//| """Polarity of the SPIDevice."""
102+
static mp_obj_t adafruit_bus_device_spidevice_obj_get_polarity(mp_obj_t self_in) {
103+
adafruit_bus_device_spidevice_obj_t *self = MP_OBJ_TO_PTR(self_in);
104+
return MP_OBJ_NEW_SMALL_INT(common_hal_adafruit_bus_device_spidevice_get_polarity(self));
105+
}
106+
MP_DEFINE_CONST_FUN_OBJ_1(adafruit_bus_device_spidevice_get_polarity_obj, adafruit_bus_device_spidevice_obj_get_polarity);
107+
108+
static mp_obj_t adafruit_bus_device_spidevice_obj_set_polarity(mp_obj_t self_in, mp_obj_t polarity_obj) {
109+
adafruit_bus_device_spidevice_obj_t *self = MP_OBJ_TO_PTR(self_in);
110+
111+
mp_int_t polarity = mp_obj_get_int(polarity_obj);
112+
common_hal_adafruit_bus_device_spidevice_set_polarity(self, polarity);
113+
return mp_const_none;
114+
}
115+
MP_DEFINE_CONST_FUN_OBJ_2(adafruit_bus_device_spidevice_set_polarity_obj, adafruit_bus_device_spidevice_obj_set_polarity);
116+
117+
MP_PROPERTY_GETSET(adafruit_bus_device_spidevice_polarity_obj,
118+
(mp_obj_t)&adafruit_bus_device_spidevice_get_polarity_obj,
119+
(mp_obj_t)&adafruit_bus_device_spidevice_set_polarity_obj);
120+
121+
//| phase: int
122+
//| """Phase of the SPIDevice."""
123+
static mp_obj_t adafruit_bus_device_spidevice_obj_get_phase(mp_obj_t self_in) {
124+
adafruit_bus_device_spidevice_obj_t *self = MP_OBJ_TO_PTR(self_in);
125+
return MP_OBJ_NEW_SMALL_INT(common_hal_adafruit_bus_device_spidevice_get_phase(self));
126+
}
127+
MP_DEFINE_CONST_FUN_OBJ_1(adafruit_bus_device_spidevice_get_phase_obj, adafruit_bus_device_spidevice_obj_get_phase);
128+
129+
static mp_obj_t adafruit_bus_device_spidevice_obj_set_phase(mp_obj_t self_in, mp_obj_t phase_obj) {
130+
adafruit_bus_device_spidevice_obj_t *self = MP_OBJ_TO_PTR(self_in);
131+
132+
mp_int_t phase = mp_obj_get_int(phase_obj);
133+
common_hal_adafruit_bus_device_spidevice_set_phase(self, phase);
134+
return mp_const_none;
135+
}
136+
MP_DEFINE_CONST_FUN_OBJ_2(adafruit_bus_device_spidevice_set_phase_obj, adafruit_bus_device_spidevice_obj_set_phase);
137+
138+
MP_PROPERTY_GETSET(adafruit_bus_device_spidevice_phase_obj,
139+
(mp_obj_t)&adafruit_bus_device_spidevice_get_phase_obj,
140+
(mp_obj_t)&adafruit_bus_device_spidevice_set_phase_obj);
141+
99142
//| def __enter__(self) -> busio.SPI:
100143
//| """Starts a SPI transaction by configuring the SPI and asserting chip select."""
101144
//| ...
@@ -122,14 +165,16 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(adafruit_bus_device_spidevice___exit_
122165
static const mp_rom_map_elem_t adafruit_bus_device_spidevice_locals_dict_table[] = {
123166
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&adafruit_bus_device_spidevice___enter___obj) },
124167
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&adafruit_bus_device_spidevice___exit___obj) },
168+
{ MP_ROM_QSTR(MP_QSTR_polarity), MP_ROM_PTR(&adafruit_bus_device_spidevice_polarity_obj) },
169+
{ MP_ROM_QSTR(MP_QSTR_phase), MP_ROM_PTR(&adafruit_bus_device_spidevice_phase_obj) },
125170
};
126171

127172
static MP_DEFINE_CONST_DICT(adafruit_bus_device_spidevice_locals_dict, adafruit_bus_device_spidevice_locals_dict_table);
128173

129174
MP_DEFINE_CONST_OBJ_TYPE(
130175
adafruit_bus_device_spidevice_type,
131176
MP_QSTR_SPIDevice,
132-
MP_TYPE_FLAG_NONE,
177+
MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS,
133178
make_new, adafruit_bus_device_spidevice_make_new,
134179
locals_dict, &adafruit_bus_device_spidevice_locals_dict
135180
);

shared-bindings/adafruit_bus_device/spi_device/SPIDevice.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,7 @@ extern void common_hal_adafruit_bus_device_spidevice_construct(adafruit_bus_devi
2525
bool cs_active_value, uint32_t baudrate, uint8_t polarity, uint8_t phase, uint8_t extra_clocks);
2626
extern mp_obj_t common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spidevice_obj_t *self);
2727
extern void common_hal_adafruit_bus_device_spidevice_exit(adafruit_bus_device_spidevice_obj_t *self);
28+
extern uint8_t common_hal_adafruit_bus_device_spidevice_get_polarity(adafruit_bus_device_spidevice_obj_t *self);
29+
extern void common_hal_adafruit_bus_device_spidevice_set_polarity(adafruit_bus_device_spidevice_obj_t *self, uint8_t polarity);
30+
extern uint8_t common_hal_adafruit_bus_device_spidevice_get_phase(adafruit_bus_device_spidevice_obj_t *self);
31+
extern void common_hal_adafruit_bus_device_spidevice_set_phase(adafruit_bus_device_spidevice_obj_t *self, uint8_t phase);

shared-module/adafruit_bus_device/spi_device/SPIDevice.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,22 @@ void common_hal_adafruit_bus_device_spidevice_construct(adafruit_bus_device_spid
2323
self->cs_active_value = cs_active_value;
2424
}
2525

26+
void common_hal_adafruit_bus_device_spidevice_set_polarity(adafruit_bus_device_spidevice_obj_t *self, uint8_t polarity) {
27+
self->polarity = polarity;
28+
}
29+
30+
void common_hal_adafruit_bus_device_spidevice_set_phase(adafruit_bus_device_spidevice_obj_t *self, uint8_t phase) {
31+
self->phase = phase;
32+
}
33+
34+
uint8_t common_hal_adafruit_bus_device_spidevice_get_polarity(adafruit_bus_device_spidevice_obj_t *self) {
35+
return self->polarity;
36+
}
37+
38+
uint8_t common_hal_adafruit_bus_device_spidevice_get_phase(adafruit_bus_device_spidevice_obj_t *self) {
39+
return self->phase;
40+
}
41+
2642
mp_obj_t common_hal_adafruit_bus_device_spidevice_enter(adafruit_bus_device_spidevice_obj_t *self) {
2743
{
2844
mp_obj_t dest[2];

0 commit comments

Comments
 (0)