Skip to content

Commit 5e4ed93

Browse files
committed
framebufferio: Add getters for remaining displayio_display_core_construct arguments
.. and introduce a convenience macro that helps many of them be required (if their values match defaults or are inapplicable)
1 parent 1ee2062 commit 5e4ed93

File tree

2 files changed

+46
-29
lines changed

2 files changed

+46
-29
lines changed

shared-module/framebufferio/FramebufferDisplay.c

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@
4040
#include <stdint.h>
4141
#include <string.h>
4242

43+
#define fb_getter_default(method, default_value) \
44+
(self->framebuffer_protocol->method \
45+
? self->framebuffer_protocol->method(self->framebuffer) \
46+
: (default_value))
47+
4348
void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebufferdisplay_obj_t* self,
4449
mp_obj_t framebuffer,
4550
uint16_t rotation,
@@ -51,7 +56,7 @@ void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebu
5156

5257
uint16_t ram_width = 0x100;
5358
uint16_t ram_height = 0x100;
54-
uint16_t depth = self->framebuffer_protocol->get_color_depth(self->framebuffer);
59+
uint16_t depth = fb_getter_default(get_color_depth, 16);
5560
displayio_display_core_construct(
5661
&self->core,
5762
NULL,
@@ -63,19 +68,15 @@ void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebu
6368
0,
6469
rotation,
6570
depth,
66-
(depth < 12), // grayscale
67-
true, // pixels_in_byte_share_row
68-
self->framebuffer_protocol->get_bytes_per_cell(self->framebuffer),
69-
true, // reverse_pixels_in_byte
70-
false // reverse_bytes_in_word
71+
fb_getter_default(get_grayscale, (depth < 8)),
72+
fb_getter_default(get_pixels_in_byte_share_row, false),
73+
fb_getter_default(get_bytes_per_cell, 2),
74+
fb_getter_default(get_reverse_pixels_in_byte, false),
75+
fb_getter_default(get_reverse_pixels_in_word, false)
7176
);
7277

73-
self->first_pixel_offset = self->framebuffer_protocol->get_first_pixel_offset
74-
? self->framebuffer_protocol->get_first_pixel_offset(self->framebuffer)
75-
: 0;
76-
self->row_stride = self->framebuffer_protocol->get_row_stride
77-
? self->framebuffer_protocol->get_row_stride(self->framebuffer)
78-
: 0;
78+
self->first_pixel_offset = fb_getter_default(get_first_pixel_offset, 0);
79+
self->row_stride = fb_getter_default(get_row_stride, 0);
7980
if (self->row_stride == 0) {
8081
self->row_stride = self->core.width * self->core.colorspace.depth/8;
8182
}
@@ -88,7 +89,7 @@ void common_hal_framebufferio_framebufferdisplay_construct(framebufferio_framebu
8889

8990
self->first_manual_refresh = !auto_refresh;
9091

91-
self->native_frames_per_second = self->framebuffer_protocol->get_native_frames_per_second(self->framebuffer);
92+
self->native_frames_per_second = fb_getter_default(get_native_frames_per_second, 60);
9293
self->native_ms_per_frame = 1000 / self->native_frames_per_second;
9394

9495
supervisor_start_terminal(self->core.width, self->core.height);

shared-module/framebufferio/FramebufferDisplay.h

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -62,35 +62,51 @@ void framebufferio_framebufferdisplay_collect_ptrs(framebufferio_framebufferdisp
6262

6363
mp_obj_t common_hal_framebufferio_framebufferdisplay_get_framebuffer(framebufferio_framebufferdisplay_obj_t* self);
6464

65-
typedef void (*framebuffer_get_bufinfo_fun)(mp_obj_t, mp_buffer_info_t *bufinfo);
66-
typedef void (*framebuffer_swapbuffers_fun)(mp_obj_t);
67-
typedef void (*framebuffer_deinit_fun)(mp_obj_t);
68-
typedef bool (*framebuffer_set_brightness_fun)(mp_obj_t, mp_float_t);
69-
typedef mp_float_t (*framebuffer_get_brightness_fun)(mp_obj_t);
70-
typedef bool (*framebuffer_set_auto_brightness_fun)(mp_obj_t, bool);
7165
typedef bool (*framebuffer_get_auto_brightness_fun)(mp_obj_t);
72-
typedef int (*framebuffer_get_width_fun)(mp_obj_t);
73-
typedef int (*framebuffer_get_height_fun)(mp_obj_t);
74-
typedef int (*framebuffer_get_row_stride_fun)(mp_obj_t);
75-
typedef int (*framebuffer_get_first_pixel_offset_fun)(mp_obj_t);
76-
typedef int (*framebuffer_get_color_depth_fun)(mp_obj_t);
66+
typedef bool (*framebuffer_get_reverse_pixels_in_byte_fun)(mp_obj_t);
67+
typedef bool (*framebuffer_get_reverse_pixels_in_word_fun)(mp_obj_t);
68+
typedef bool (*framebuffer_set_auto_brightness_fun)(mp_obj_t, bool);
69+
typedef bool (*framebuffer_set_brightness_fun)(mp_obj_t, mp_float_t);
7770
typedef int (*framebuffer_get_bytes_per_cell_fun)(mp_obj_t);
71+
typedef int (*framebuffer_get_color_depth_fun)(mp_obj_t);
72+
typedef int (*framebuffer_get_first_pixel_offset_fun)(mp_obj_t);
73+
typedef int (*framebuffer_get_grayscale_fun)(mp_obj_t);
74+
typedef int (*framebuffer_get_height_fun)(mp_obj_t);
7875
typedef int (*framebuffer_get_native_frames_per_second_fun)(mp_obj_t);
76+
typedef int (*framebuffer_get_pixels_in_byte_share_row_fun)(mp_obj_t);
77+
typedef int (*framebuffer_get_row_stride_fun)(mp_obj_t);
78+
typedef int (*framebuffer_get_width_fun)(mp_obj_t);
79+
typedef mp_float_t (*framebuffer_get_brightness_fun)(mp_obj_t);
80+
typedef void (*framebuffer_deinit_fun)(mp_obj_t);
81+
typedef void (*framebuffer_get_bufinfo_fun)(mp_obj_t, mp_buffer_info_t *bufinfo);
82+
typedef void (*framebuffer_swapbuffers_fun)(mp_obj_t);
7983

8084
typedef struct _framebuffer_p_t {
8185
MP_PROTOCOL_HEAD // MP_QSTR_protocol_framebuffer
86+
87+
// Mandatory
8288
framebuffer_get_bufinfo_fun get_bufinfo;
8389
framebuffer_swapbuffers_fun swapbuffers;
8490
framebuffer_deinit_fun deinit;
8591
framebuffer_get_width_fun get_width;
8692
framebuffer_get_height_fun get_height;
87-
framebuffer_get_color_depth_fun get_color_depth;
88-
framebuffer_get_bytes_per_cell_fun get_bytes_per_cell;
89-
framebuffer_get_native_frames_per_second_fun get_native_frames_per_second;
93+
94+
// Optional getters
95+
framebuffer_get_bytes_per_cell_fun get_bytes_per_cell; // default: 2
96+
framebuffer_get_color_depth_fun get_color_depth; // default: 16
97+
framebuffer_get_first_pixel_offset_fun get_first_pixel_offset; // default: 0
98+
framebuffer_get_grayscale_fun get_grayscale; // default: grayscale if depth < 8
99+
framebuffer_get_native_frames_per_second_fun get_native_frames_per_second; // default: 60
100+
framebuffer_get_pixels_in_byte_share_row_fun get_pixels_in_byte_share_row; // default: false
101+
framebuffer_get_reverse_pixels_in_byte_fun get_reverse_pixels_in_byte; // default: false
102+
framebuffer_get_reverse_pixels_in_word_fun get_reverse_pixels_in_word; // default: false
103+
framebuffer_get_row_stride_fun get_row_stride; // default: 0 (no extra row padding)
104+
105+
// Optional -- default is no brightness control
90106
framebuffer_get_brightness_fun get_brightness;
91107
framebuffer_set_brightness_fun set_brightness;
92-
framebuffer_get_row_stride_fun get_row_stride;
93-
framebuffer_get_first_pixel_offset_fun get_first_pixel_offset;
108+
109+
// Optional -- default is no automatic brightness control
94110
framebuffer_get_auto_brightness_fun get_auto_brightness;
95111
framebuffer_set_auto_brightness_fun set_auto_brightness;
96112
} framebuffer_p_t;

0 commit comments

Comments
 (0)