summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extmod/modframebuf.c10
-rw-r--r--tests/extmod/framebuf1.py3
-rw-r--r--tests/extmod/framebuf1.py.exp1
3 files changed, 14 insertions, 0 deletions
diff --git a/extmod/modframebuf.c b/extmod/modframebuf.c
index b055a8938..eb639c172 100644
--- a/extmod/modframebuf.c
+++ b/extmod/modframebuf.c
@@ -159,6 +159,15 @@ STATIC mp_obj_t framebuf_make_new(const mp_obj_type_t *type, size_t n_args, size
return MP_OBJ_FROM_PTR(o);
}
+STATIC mp_int_t framebuf_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufinfo, mp_uint_t flags) {
+ (void)flags;
+ mp_obj_framebuf_t *self = MP_OBJ_TO_PTR(self_in);
+ bufinfo->buf = self->buf;
+ bufinfo->len = self->stride * self->height * (self->format == FRAMEBUF_RGB565 ? 2 : 1);
+ bufinfo->typecode = 'B'; // view framebuf as bytes
+ return 0;
+}
+
STATIC mp_obj_t framebuf_fill(mp_obj_t self_in, mp_obj_t col_in) {
mp_obj_framebuf_t *self = MP_OBJ_TO_PTR(self_in);
mp_int_t col = mp_obj_get_int(col_in);
@@ -441,6 +450,7 @@ STATIC const mp_obj_type_t mp_type_framebuf = {
{ &mp_type_type },
.name = MP_QSTR_FrameBuffer,
.make_new = framebuf_make_new,
+ .buffer_p = { .get_buffer = framebuf_get_buffer },
.locals_dict = (mp_obj_t)&framebuf_locals_dict,
};
diff --git a/tests/extmod/framebuf1.py b/tests/extmod/framebuf1.py
index 7be365528..7f09050b0 100644
--- a/tests/extmod/framebuf1.py
+++ b/tests/extmod/framebuf1.py
@@ -10,6 +10,9 @@ h = 16
buf = bytearray(w * h // 8)
fbuf = framebuf.FrameBuffer(buf, w, h, framebuf.MVLSB)
+# access as buffer
+print(memoryview(fbuf)[0])
+
# fill
fbuf.fill(1)
print(buf)
diff --git a/tests/extmod/framebuf1.py.exp b/tests/extmod/framebuf1.py.exp
index dae02ad86..4a83a2e9c 100644
--- a/tests/extmod/framebuf1.py.exp
+++ b/tests/extmod/framebuf1.py.exp
@@ -1,3 +1,4 @@
+0
bytearray(b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff')
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
bytearray(b'\x01\x00\x00\x00\x01\x80\x00\x00\x00\x80')