Add set_pixels() function

pull/121/head
Graeme Winter 2021-04-07 15:21:01 +01:00
rodzic 5a5e61529a
commit 3ef0ddfecc
4 zmienionych plików z 37 dodań i 3 usunięć

Wyświetl plik

@ -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.

Wyświetl plik

@ -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);
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////

Wyświetl plik

@ -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;
}
}
}

Wyświetl plik

@ -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);
extern mp_obj_t picoscroll_is_pressed(mp_obj_t button_obj);