Skip to content

Commit b17216d

Browse files
authored
Merge pull request #5199 from aramcon-badge/aramcon/quick-refresh
Adding quick refresh support
2 parents ab4ab2a + 27502f9 commit b17216d

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

shared-bindings/displayio/EPaperDisplay.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,31 @@ STATIC mp_obj_t displayio_epaperdisplay_obj_show(mp_obj_t self_in, mp_obj_t grou
217217
}
218218
MP_DEFINE_CONST_FUN_OBJ_2(displayio_epaperdisplay_show_obj, displayio_epaperdisplay_obj_show);
219219

220+
//| def update_refresh_mode(self, start_sequence: ReadableBuffer, seconds_per_frame: float = 180) -> None:
221+
//| """Updates the ``start_sequence`` and ``seconds_per_frame`` parameters to enable
222+
//| varying the refresh mode of the display."""
223+
//|
224+
STATIC mp_obj_t displayio_epaperdisplay_update_refresh_mode(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
225+
enum { ARG_start_sequence, ARG_seconds_per_frame };
226+
static const mp_arg_t allowed_args[] = {
227+
{ MP_QSTR_start_sequence, MP_ARG_REQUIRED | MP_ARG_OBJ },
228+
{ MP_QSTR_seconds_per_frame, MP_ARG_OBJ, {.u_obj = MP_OBJ_NEW_SMALL_INT(180)} },
229+
};
230+
displayio_epaperdisplay_obj_t *self = native_display(pos_args[0]);
231+
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
232+
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
233+
234+
// Get parameters
235+
mp_buffer_info_t start_sequence;
236+
mp_get_buffer_raise(args[ARG_start_sequence].u_obj, &start_sequence, MP_BUFFER_READ);
237+
float seconds_per_frame = mp_obj_get_float(args[ARG_seconds_per_frame].u_obj);
238+
239+
// Update parameters
240+
displayio_epaperdisplay_change_refresh_mode_parameters(self, &start_sequence, seconds_per_frame);
241+
return mp_const_none;
242+
}
243+
MP_DEFINE_CONST_FUN_OBJ_KW(displayio_epaperdisplay_update_refresh_mode_obj, 3, displayio_epaperdisplay_update_refresh_mode);
244+
220245
//| def refresh(self) -> None:
221246
//| """Refreshes the display immediately or raises an exception if too soon. Use
222247
//| ``time.sleep(display.time_to_refresh)`` to sleep until a refresh can occur."""
@@ -339,6 +364,7 @@ const mp_obj_property_t displayio_epaperdisplay_bus_obj = {
339364

340365
STATIC const mp_rom_map_elem_t displayio_epaperdisplay_locals_dict_table[] = {
341366
{ MP_ROM_QSTR(MP_QSTR_show), MP_ROM_PTR(&displayio_epaperdisplay_show_obj) },
367+
{ MP_ROM_QSTR(MP_QSTR_update_refresh_mode), MP_ROM_PTR(&displayio_epaperdisplay_update_refresh_mode_obj) },
342368
{ MP_ROM_QSTR(MP_QSTR_refresh), MP_ROM_PTR(&displayio_epaperdisplay_refresh_obj) },
343369

344370
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&displayio_epaperdisplay_width_obj) },

shared-module/displayio/EPaperDisplay.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,13 @@ STATIC void send_command_sequence(displayio_epaperdisplay_obj_t *self,
163163
}
164164
}
165165

166+
void displayio_epaperdisplay_change_refresh_mode_parameters(displayio_epaperdisplay_obj_t *self,
167+
mp_buffer_info_t *start_sequence, float seconds_per_frame) {
168+
self->start_sequence = (uint8_t *)start_sequence->buf;
169+
self->start_sequence_len = start_sequence->len;
170+
self->milliseconds_per_frame = seconds_per_frame * 1000;
171+
}
172+
166173
void displayio_epaperdisplay_start_refresh(displayio_epaperdisplay_obj_t *self) {
167174
// run start sequence
168175
self->core.bus_reset(self->core.bus);

shared-module/displayio/EPaperDisplay.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ typedef struct {
5959
display_chip_select_behavior_t chip_select;
6060
} displayio_epaperdisplay_obj_t;
6161

62+
void displayio_epaperdisplay_change_refresh_mode_parameters(displayio_epaperdisplay_obj_t *self,
63+
mp_buffer_info_t *start_sequence, float seconds_per_frame);
6264
void displayio_epaperdisplay_background(displayio_epaperdisplay_obj_t *self);
6365
void release_epaperdisplay(displayio_epaperdisplay_obj_t *self);
6466
size_t maybe_refresh_epaperdisplay(void);

0 commit comments

Comments
 (0)