diff --git a/micropython/modules/pico_scroll/README.md b/micropython/modules/pico_scroll/README.md index 87ca5cb3..54d681c2 100644 --- a/micropython/modules/pico_scroll/README.md +++ b/micropython/modules/pico_scroll/README.md @@ -10,6 +10,7 @@ We've included helper functions to handle every aspect of drawing to the matrix - [get_width](#get_width) - [get_height](#get_height) - [set_pixel](#set_pixel) + - [set_pixels](#set_pixels) - [update](#update) - [clear](#clear) - [is_pressed](#is_pressed) @@ -73,6 +74,17 @@ This function sets a pixel at the `x` and `y` coordinates to a brightness level picoscroll.set_pixel(x, y, l) ``` +### set_pixels + +This function sets all pixel at once from a `bytearray` image indexed +as `y * picoscroll.get_width() + x`, containing brightness levels +between 0 and 255. Changes will not be visible until `update()` is called. + +```python +image = bytearray(0 for j in range(width * height)) +picoscroll.set_pixels(image) +``` + ### update Pushes pixel data from the Pico to the Scroll Pack. Until this function is called any `set_pixel` or `clear` calls won't have any visible effect. diff --git a/micropython/modules/pico_scroll/pico_scroll.c b/micropython/modules/pico_scroll/pico_scroll.c index 61b3be46..b1968268 100644 --- a/micropython/modules/pico_scroll/pico_scroll.c +++ b/micropython/modules/pico_scroll/pico_scroll.c @@ -20,6 +20,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(picoscroll_get_width_obj, picoscroll_get_width) STATIC MP_DEFINE_CONST_FUN_OBJ_0(picoscroll_get_height_obj, picoscroll_get_height); STATIC MP_DEFINE_CONST_FUN_OBJ_0(picoscroll_update_obj, picoscroll_update); STATIC MP_DEFINE_CONST_FUN_OBJ_3(picoscroll_set_pixel_obj, picoscroll_set_pixel); +STATIC MP_DEFINE_CONST_FUN_OBJ_1(picoscroll_set_pixels_obj, picoscroll_set_pixels); STATIC MP_DEFINE_CONST_FUN_OBJ_0(picoscroll_clear_obj, picoscroll_clear); STATIC MP_DEFINE_CONST_FUN_OBJ_1(picoscroll_is_pressed_obj, picoscroll_is_pressed); @@ -31,6 +32,7 @@ STATIC const mp_map_elem_t picoscroll_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_get_height), MP_ROM_PTR(&picoscroll_get_height_obj) }, { MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&picoscroll_update_obj) }, { MP_ROM_QSTR(MP_QSTR_set_pixel), MP_ROM_PTR(&picoscroll_set_pixel_obj) }, + { MP_ROM_QSTR(MP_QSTR_set_pixels), MP_ROM_PTR(&picoscroll_set_pixels_obj) }, { MP_ROM_QSTR(MP_QSTR_clear), MP_ROM_PTR(&picoscroll_clear_obj) }, { MP_ROM_QSTR(MP_QSTR_is_pressed), MP_ROM_PTR(&picoscroll_is_pressed_obj) }, { MP_ROM_QSTR(MP_QSTR_BUTTON_A), MP_ROM_INT(BUTTON_A) }, @@ -49,4 +51,4 @@ const mp_obj_module_t picoscroll_user_cmodule = { //////////////////////////////////////////////////////////////////////////////////////////////////// MP_REGISTER_MODULE(MP_QSTR_picoscroll, picoscroll_user_cmodule, MODULE_PICOSCROLL_ENABLED); //////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file +//////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/micropython/modules/pico_scroll/pico_scroll.cpp b/micropython/modules/pico_scroll/pico_scroll.cpp index 43dff462..f706adda 100644 --- a/micropython/modules/pico_scroll/pico_scroll.cpp +++ b/micropython/modules/pico_scroll/pico_scroll.cpp @@ -58,6 +58,25 @@ mp_obj_t picoscroll_set_pixel(mp_obj_t x_obj, mp_obj_t y_obj, mp_obj_t v_obj) { return mp_const_none; } +mp_obj_t picoscroll_set_pixels(mp_obj_t image_obj) { + if(scroll != nullptr) { + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(image_obj, &bufinfo, MP_BUFFER_RW); + unsigned char * values = (unsigned char *) bufinfo.buf; + + for (int y = 0; y < PicoScroll::HEIGHT; y++) { + for (int x = 0; x < PicoScroll::WIDTH; x++) { + int val = values[y * PicoScroll::WIDTH + x]; + scroll->set_pixel(x, y, val); + } + } + } + else + mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG); + + return mp_const_none; +} + mp_obj_t picoscroll_clear() { if(scroll != nullptr) scroll->clear(); @@ -98,4 +117,4 @@ mp_obj_t picoscroll_is_pressed(mp_obj_t button_obj) { return buttonPressed ? mp_const_true : mp_const_false; } -} \ No newline at end of file +} diff --git a/micropython/modules/pico_scroll/pico_scroll.h b/micropython/modules/pico_scroll/pico_scroll.h index 1d95d959..166792b1 100644 --- a/micropython/modules/pico_scroll/pico_scroll.h +++ b/micropython/modules/pico_scroll/pico_scroll.h @@ -7,5 +7,6 @@ extern mp_obj_t picoscroll_get_width(); extern mp_obj_t picoscroll_get_height(); extern mp_obj_t picoscroll_update(); extern mp_obj_t picoscroll_set_pixel(mp_obj_t x_obj, mp_obj_t y_obj, mp_obj_t v_obj); +extern mp_obj_t picoscroll_set_pixels(mp_obj_t image_obj); extern mp_obj_t picoscroll_clear(); -extern mp_obj_t picoscroll_is_pressed(mp_obj_t button_obj); \ No newline at end of file +extern mp_obj_t picoscroll_is_pressed(mp_obj_t button_obj);