29
29
#include <string.h>
30
30
31
31
#include "py/mpstate.h"
32
+ #include "shared-bindings/displayio/Bitmap.h"
32
33
#include "shared-bindings/displayio/Group.h"
33
34
#include "shared-bindings/displayio/Palette.h"
34
35
#include "shared-bindings/displayio/TileGrid.h"
@@ -48,23 +49,28 @@ extern size_t blinka_bitmap_data[];
48
49
extern displayio_bitmap_t blinka_bitmap ;
49
50
extern displayio_group_t circuitpython_splash ;
50
51
52
+ #if CIRCUITPY_TERMINALIO
51
53
static supervisor_allocation * tilegrid_tiles = NULL ;
54
+ #endif
52
55
53
56
void supervisor_start_terminal (uint16_t width_px , uint16_t height_px ) {
57
+ // Default the scale to 2 because we may show blinka without the terminal for
58
+ // languages that don't have font support.
59
+ uint8_t scale = 2 ;
60
+
61
+ #if CIRCUITPY_TERMINALIO
54
62
displayio_tilegrid_t * grid = & supervisor_terminal_text_grid ;
55
63
uint16_t width_in_tiles = (width_px - blinka_bitmap .width ) / grid -> tile_width ;
56
64
// determine scale based on h
57
- uint8_t scale = 1 ;
58
- if (width_in_tiles > 80 ) {
59
- scale = 2 ;
65
+ if (width_in_tiles < 80 ) {
66
+ scale = 1 ;
60
67
}
61
68
width_in_tiles = (width_px - blinka_bitmap .width * scale ) / (grid -> tile_width * scale );
62
69
uint16_t height_in_tiles = height_px / (grid -> tile_height * scale );
63
70
uint16_t remaining_pixels = height_px % (grid -> tile_height * scale );
64
71
if (remaining_pixels > 0 ) {
65
72
height_in_tiles += 1 ;
66
73
}
67
- circuitpython_splash .scale = scale ;
68
74
69
75
uint16_t total_tiles = width_in_tiles * height_in_tiles ;
70
76
@@ -94,34 +100,42 @@ void supervisor_start_terminal(uint16_t width_px, uint16_t height_px) {
94
100
grid -> full_change = true;
95
101
96
102
common_hal_terminalio_terminal_construct (& supervisor_terminal , grid , & supervisor_terminal_font );
103
+ #endif
104
+
105
+ circuitpython_splash .scale = scale ;
97
106
}
98
107
99
108
void supervisor_stop_terminal (void ) {
109
+ #if CIRCUITPY_TERMINALIO
100
110
if (tilegrid_tiles != NULL ) {
101
111
free_memory (tilegrid_tiles );
102
112
tilegrid_tiles = NULL ;
103
113
supervisor_terminal_text_grid .inline_tiles = false;
104
114
supervisor_terminal_text_grid .tiles = NULL ;
105
115
}
116
+ #endif
106
117
}
107
118
108
119
void supervisor_display_move_memory (void ) {
109
- #if CIRCUITPY_DISPLAYIO
120
+ #if CIRCUITPY_TERMINALIO
110
121
displayio_tilegrid_t * grid = & supervisor_terminal_text_grid ;
111
- if (MP_STATE_VM (terminal_tilegrid_tiles ) == NULL || grid -> tiles != MP_STATE_VM (terminal_tilegrid_tiles )) {
112
- return ;
113
- }
114
- uint16_t total_tiles = grid -> width_in_tiles * grid -> height_in_tiles ;
122
+ if (MP_STATE_VM (terminal_tilegrid_tiles ) != NULL &&
123
+ grid -> tiles == MP_STATE_VM (terminal_tilegrid_tiles )) {
124
+ uint16_t total_tiles = grid -> width_in_tiles * grid -> height_in_tiles ;
115
125
116
- tilegrid_tiles = allocate_memory (align32_size (total_tiles ), false);
117
- if (tilegrid_tiles != NULL ) {
118
- memcpy (tilegrid_tiles -> ptr , grid -> tiles , total_tiles );
119
- grid -> tiles = (uint8_t * ) tilegrid_tiles -> ptr ;
120
- } else {
121
- grid -> tiles = NULL ;
122
- grid -> inline_tiles = false;
126
+ tilegrid_tiles = allocate_memory (align32_size (total_tiles ), false);
127
+ if (tilegrid_tiles != NULL ) {
128
+ memcpy (tilegrid_tiles -> ptr , grid -> tiles , total_tiles );
129
+ grid -> tiles = (uint8_t * ) tilegrid_tiles -> ptr ;
130
+ } else {
131
+ grid -> tiles = NULL ;
132
+ grid -> inline_tiles = false;
133
+ }
134
+ MP_STATE_VM (terminal_tilegrid_tiles ) = NULL ;
123
135
}
124
- MP_STATE_VM (terminal_tilegrid_tiles ) = NULL ;
136
+ #endif
137
+
138
+ #if CIRCUITPY_DISPLAYIO
125
139
for (uint8_t i = 0 ; i < CIRCUITPY_DISPLAY_LIMIT ; i ++ ) {
126
140
#if CIRCUITPY_RGBMATRIX
127
141
if (displays [i ].rgbmatrix .base .type == & rgbmatrix_RGBMatrix_type ) {
@@ -254,18 +268,26 @@ displayio_tilegrid_t blinka_sprite = {
254
268
.in_group = true
255
269
};
256
270
271
+ #if CIRCUITPY_TERMINALIO
272
+ #define CHILD_COUNT 2
257
273
displayio_group_child_t splash_children [2 ] = {
258
274
{& blinka_sprite , & blinka_sprite },
259
275
{& supervisor_terminal_text_grid , & supervisor_terminal_text_grid }
260
276
};
277
+ #else
278
+ #define CHILD_COUNT 1
279
+ displayio_group_child_t splash_children [1 ] = {
280
+ {& blinka_sprite , & blinka_sprite },
281
+ };
282
+ #endif
261
283
262
284
displayio_group_t circuitpython_splash = {
263
285
.base = {.type = & displayio_group_type },
264
286
.x = 0 ,
265
287
.y = 0 ,
266
288
.scale = 2 ,
267
- .size = 2 ,
268
- .max_size = 2 ,
289
+ .size = CHILD_COUNT ,
290
+ .max_size = CHILD_COUNT ,
269
291
.children = splash_children ,
270
292
.item_removed = false,
271
293
.in_group = false,
0 commit comments