Skip to content

Commit 48aaf51

Browse files
committed
qspibus: align Python API with FourWire/ParallelBus conventions
- Add reset() method binding (common_hal implementation already existed) with "No %q pin" error matching FourWire/ParallelBus pattern. - Remove deinit(), __enter__(), __exit__() from Python API; display bus lifecycle is managed through displayio.release_displays(). - Remove two unreachable data == NULL guards: Python binding validates buffers via mp_get_buffer_raise(), and displayio always passes valid pointers.
1 parent 21bf0f7 commit 48aaf51

2 files changed

Lines changed: 13 additions & 37 deletions

File tree

ports/espressif/common-hal/qspibus/QSPIBus.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ static void qspibus_send_color_bytes(
147147
qspibus_send_command_bytes(self, command, NULL, 0);
148148
return;
149149
}
150-
if (data == NULL || self->dma_buffer_size == 0) {
150+
if (self->dma_buffer_size == 0) {
151151
mp_raise_OSError_msg(MP_ERROR_TEXT("Could not allocate DMA capable buffer"));
152152
}
153153

@@ -474,9 +474,6 @@ void common_hal_qspibus_qspibus_write_data(
474474
}
475475
return;
476476
}
477-
if (data == NULL) {
478-
mp_raise_ValueError(MP_ERROR_TEXT("Buffer too small"));
479-
}
480477
if (!self->has_pending_command) {
481478
mp_raise_ValueError(MP_ERROR_TEXT("No pending command"));
482479
}

shared-bindings/qspibus/QSPIBus.c

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,22 @@ static mp_obj_t qspibus_qspibus_make_new(const mp_obj_type_t *type, size_t n_arg
8989
return MP_OBJ_FROM_PTR(self);
9090
}
9191

92-
//| def deinit(self) -> None:
93-
//| """Release QSPI bus resources and claimed pins."""
92+
//| def reset(self) -> None:
93+
//| """Perform a hardware reset using the reset pin.
94+
//|
95+
//| :raises RuntimeError: if no reset pin was provided at construction.
96+
//| """
9497
//| ...
9598
//|
96-
static mp_obj_t qspibus_qspibus_deinit(mp_obj_t self_in) {
99+
static mp_obj_t qspibus_qspibus_obj_reset(mp_obj_t self_in) {
97100
qspibus_qspibus_obj_t *self = MP_OBJ_TO_PTR(self_in);
98-
common_hal_qspibus_qspibus_deinit(self);
101+
check_for_deinit(self);
102+
if (!common_hal_qspibus_qspibus_reset(MP_OBJ_FROM_PTR(self))) {
103+
mp_raise_RuntimeError_varg(MP_ERROR_TEXT("No %q pin"), MP_QSTR_reset);
104+
}
99105
return mp_const_none;
100106
}
101-
static MP_DEFINE_CONST_FUN_OBJ_1(qspibus_qspibus_deinit_obj, qspibus_qspibus_deinit);
107+
static MP_DEFINE_CONST_FUN_OBJ_1(qspibus_qspibus_reset_obj, qspibus_qspibus_obj_reset);
102108

103109
//| def send(self, command: int, data: ReadableBuffer = b"") -> None:
104110
//| """Send command with optional payload bytes.
@@ -178,38 +184,11 @@ static mp_obj_t qspibus_qspibus_write_data(mp_obj_t self_in, mp_obj_t data_obj)
178184
}
179185
MP_DEFINE_CONST_FUN_OBJ_2(qspibus_qspibus_write_data_obj, qspibus_qspibus_write_data);
180186

181-
//| def __enter__(self) -> QSPIBus:
182-
//| """No-op context manager entry."""
183-
//| ...
184-
//|
185-
static mp_obj_t qspibus_qspibus___enter__(mp_obj_t self_in) {
186-
return self_in;
187-
}
188-
static MP_DEFINE_CONST_FUN_OBJ_1(qspibus_qspibus___enter___obj, qspibus_qspibus___enter__);
189-
190-
//| def __exit__(
191-
//| self,
192-
//| exc_type: type[BaseException] | None,
193-
//| exc_value: BaseException | None,
194-
//| traceback: TracebackType | None,
195-
//| ) -> None:
196-
//| """Deinitialize on context manager exit."""
197-
//| ...
198-
//|
199-
static mp_obj_t qspibus_qspibus___exit__(size_t n_args, const mp_obj_t *args) {
200-
(void)n_args;
201-
common_hal_qspibus_qspibus_deinit(MP_OBJ_TO_PTR(args[0]));
202-
return mp_const_none;
203-
}
204-
static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(qspibus_qspibus___exit___obj, 4, 4, qspibus_qspibus___exit__);
205-
206187
static const mp_rom_map_elem_t qspibus_qspibus_locals_dict_table[] = {
207-
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&qspibus_qspibus_deinit_obj) },
188+
{ MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&qspibus_qspibus_reset_obj) },
208189
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&qspibus_qspibus_send_obj) },
209190
{ MP_ROM_QSTR(MP_QSTR_write_command), MP_ROM_PTR(&qspibus_qspibus_write_command_obj) },
210191
{ MP_ROM_QSTR(MP_QSTR_write_data), MP_ROM_PTR(&qspibus_qspibus_write_data_obj) },
211-
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&qspibus_qspibus___enter___obj) },
212-
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&qspibus_qspibus___exit___obj) },
213192
};
214193
static MP_DEFINE_CONST_DICT(qspibus_qspibus_locals_dict, qspibus_qspibus_locals_dict_table);
215194

0 commit comments

Comments
 (0)