kopia lustrzana https://github.com/pimoroni/pimoroni-pico
PicoGraphics: Non-blocking Inky update for #936.
rodzic
9985daf56b
commit
25f30fba00
|
@ -12,6 +12,8 @@ MP_DEFINE_CONST_FUN_OBJ_1(ModPicoGraphics_update_obj, ModPicoGraphics_update);
|
||||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ModPicoGraphics_partial_update_obj, 5, 5, ModPicoGraphics_partial_update);
|
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ModPicoGraphics_partial_update_obj, 5, 5, ModPicoGraphics_partial_update);
|
||||||
MP_DEFINE_CONST_FUN_OBJ_2(ModPicoGraphics_set_backlight_obj, ModPicoGraphics_set_backlight);
|
MP_DEFINE_CONST_FUN_OBJ_2(ModPicoGraphics_set_backlight_obj, ModPicoGraphics_set_backlight);
|
||||||
MP_DEFINE_CONST_FUN_OBJ_2(ModPicoGraphics_set_update_speed_obj, ModPicoGraphics_set_update_speed);
|
MP_DEFINE_CONST_FUN_OBJ_2(ModPicoGraphics_set_update_speed_obj, ModPicoGraphics_set_update_speed);
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_2(ModPicoGraphics_set_blocking_obj, ModPicoGraphics_set_blocking);
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_1(ModPicoGraphics_is_busy_obj, ModPicoGraphics_is_busy);
|
||||||
|
|
||||||
// Palette management
|
// Palette management
|
||||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ModPicoGraphics_update_pen_obj, 5, 5, ModPicoGraphics_update_pen);
|
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ModPicoGraphics_update_pen_obj, 5, 5, ModPicoGraphics_update_pen);
|
||||||
|
@ -69,6 +71,10 @@ static const mp_rom_map_elem_t ModPicoGraphics_locals_dict_table[] = {
|
||||||
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&ModPicoGraphics_update_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&ModPicoGraphics_update_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_partial_update), MP_ROM_PTR(&ModPicoGraphics_partial_update_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_partial_update), MP_ROM_PTR(&ModPicoGraphics_partial_update_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_set_update_speed), MP_ROM_PTR(&ModPicoGraphics_set_update_speed_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_set_update_speed), MP_ROM_PTR(&ModPicoGraphics_set_update_speed_obj) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_set_blocking), MP_ROM_PTR(&ModPicoGraphics_set_blocking_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_is_busy), MP_ROM_PTR(&ModPicoGraphics_is_busy_obj) },
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_set_clip), MP_ROM_PTR(&ModPicoGraphics_set_clip_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_set_clip), MP_ROM_PTR(&ModPicoGraphics_set_clip_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_get_clip), MP_ROM_PTR(&ModPicoGraphics_get_clip_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_get_clip), MP_ROM_PTR(&ModPicoGraphics_get_clip_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_remove_clip), MP_ROM_PTR(&ModPicoGraphics_remove_clip_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_remove_clip), MP_ROM_PTR(&ModPicoGraphics_remove_clip_obj) },
|
||||||
|
|
|
@ -39,6 +39,7 @@ typedef struct _ModPicoGraphics_obj_t {
|
||||||
void *buffer;
|
void *buffer;
|
||||||
void *fontdata;
|
void *fontdata;
|
||||||
_PimoroniI2C_obj_t *i2c;
|
_PimoroniI2C_obj_t *i2c;
|
||||||
|
bool blocking = true;
|
||||||
//mp_obj_t scanline_callback; // Not really feasible in MicroPython
|
//mp_obj_t scanline_callback; // Not really feasible in MicroPython
|
||||||
} ModPicoGraphics_obj_t;
|
} ModPicoGraphics_obj_t;
|
||||||
|
|
||||||
|
@ -643,6 +644,17 @@ mp_obj_t ModPicoGraphics_set_scanline_callback(mp_obj_t self_in, mp_obj_t cb_in)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
mp_obj_t ModPicoGraphics_set_blocking(mp_obj_t self_in, mp_obj_t blocking_in) {
|
||||||
|
ModPicoGraphics_obj_t *self = MP_OBJ_TO_PTR2(self_in, ModPicoGraphics_obj_t);
|
||||||
|
self->blocking = blocking_in == mp_const_true;
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
|
||||||
|
mp_obj_t ModPicoGraphics_is_busy(mp_obj_t self_in) {
|
||||||
|
ModPicoGraphics_obj_t *self = MP_OBJ_TO_PTR2(self_in, ModPicoGraphics_obj_t);
|
||||||
|
return self->display->is_busy() ? mp_const_true : mp_const_false;
|
||||||
|
}
|
||||||
|
|
||||||
mp_obj_t ModPicoGraphics_update(mp_obj_t self_in) {
|
mp_obj_t ModPicoGraphics_update(mp_obj_t self_in) {
|
||||||
ModPicoGraphics_obj_t *self = MP_OBJ_TO_PTR2(self_in, ModPicoGraphics_obj_t);
|
ModPicoGraphics_obj_t *self = MP_OBJ_TO_PTR2(self_in, ModPicoGraphics_obj_t);
|
||||||
/*
|
/*
|
||||||
|
@ -666,13 +678,15 @@ mp_obj_t ModPicoGraphics_update(mp_obj_t self_in) {
|
||||||
|
|
||||||
self->display->update(self->graphics);
|
self->display->update(self->graphics);
|
||||||
|
|
||||||
while(self->display->is_busy()) {
|
if(self->blocking) {
|
||||||
#ifdef mp_event_handle_nowait
|
while(self->display->is_busy()) {
|
||||||
mp_event_handle_nowait();
|
#ifdef mp_event_handle_nowait
|
||||||
#endif
|
mp_event_handle_nowait();
|
||||||
}
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
self->display->power_off();
|
self->display->power_off();
|
||||||
|
}
|
||||||
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
|
@ -695,10 +709,12 @@ mp_obj_t ModPicoGraphics_partial_update(size_t n_args, const mp_obj_t *args) {
|
||||||
mp_obj_get_int(args[ARG_h])
|
mp_obj_get_int(args[ARG_h])
|
||||||
});
|
});
|
||||||
|
|
||||||
while(self->display->is_busy()) {
|
if(self->blocking) {
|
||||||
#ifdef mp_event_handle_nowait
|
while(self->display->is_busy()) {
|
||||||
mp_event_handle_nowait();
|
#ifdef mp_event_handle_nowait
|
||||||
#endif
|
mp_event_handle_nowait();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
|
|
|
@ -72,6 +72,9 @@ extern mp_obj_t ModPicoGraphics_partial_update(size_t n_args, const mp_obj_t *ar
|
||||||
extern mp_obj_t ModPicoGraphics_set_backlight(mp_obj_t self_in, mp_obj_t brightness);
|
extern mp_obj_t ModPicoGraphics_set_backlight(mp_obj_t self_in, mp_obj_t brightness);
|
||||||
extern mp_obj_t ModPicoGraphics_set_update_speed(mp_obj_t self_in, mp_obj_t update_speed);
|
extern mp_obj_t ModPicoGraphics_set_update_speed(mp_obj_t self_in, mp_obj_t update_speed);
|
||||||
|
|
||||||
|
extern mp_obj_t ModPicoGraphics_set_blocking(mp_obj_t self_in, mp_obj_t blocking_in);
|
||||||
|
extern mp_obj_t ModPicoGraphics_is_busy(mp_obj_t self_in);
|
||||||
|
|
||||||
// Palette management
|
// Palette management
|
||||||
extern mp_obj_t ModPicoGraphics_update_pen(size_t n_args, const mp_obj_t *args);
|
extern mp_obj_t ModPicoGraphics_update_pen(size_t n_args, const mp_obj_t *args);
|
||||||
extern mp_obj_t ModPicoGraphics_reset_pen(mp_obj_t self_in, mp_obj_t pen);
|
extern mp_obj_t ModPicoGraphics_reset_pen(mp_obj_t self_in, mp_obj_t pen);
|
||||||
|
|
Ładowanie…
Reference in New Issue