4
4
#include " drivers/uc8151/uc8151.hpp"
5
5
#include " drivers/uc8159/uc8159.hpp"
6
6
#include " drivers/st7567/st7567.hpp"
7
+ #include " drivers/inky73/inky73.hpp"
8
+ #include " drivers/psram_display/psram_display.hpp"
7
9
#include " libraries/pico_graphics/pico_graphics.hpp"
8
10
#include " common/pimoroni_common.hpp"
9
11
#include " common/pimoroni_bus.hpp"
@@ -192,6 +194,14 @@ bool get_display_settings(PicoGraphicsDisplay display, int &width, int &height,
192
194
if (rotate == -1 ) rotate = (int )Rotation::ROTATE_0;
193
195
if (pen_type == -1 ) pen_type = PEN_RGB888;
194
196
break ;
197
+ case DISPLAY_INKY_FRAME_7:
198
+ width = 800 ;
199
+ height = 480 ;
200
+ bus_type = BUS_SPI;
201
+ // Portrait to match labelling
202
+ if (rotate == -1 ) rotate = (int )Rotation::ROTATE_0;
203
+ if (pen_type == -1 ) pen_type = PEN_INKY7;
204
+ break ;
195
205
default :
196
206
return false ;
197
207
}
@@ -214,6 +224,8 @@ size_t get_required_buffer_size(PicoGraphicsPenType pen_type, uint width, uint h
214
224
return PicoGraphics_PenRGB565::buffer_size (width, height);
215
225
case PEN_RGB888:
216
226
return PicoGraphics_PenRGB888::buffer_size (width, height);
227
+ case PEN_INKY7:
228
+ return PicoGraphics_PenInky7::buffer_size (width, height);
217
229
default :
218
230
return 0 ;
219
231
}
@@ -276,7 +288,7 @@ mp_obj_t ModPicoGraphics_make_new(const mp_obj_type_t *type, size_t n_args, size
276
288
self->i2c = (_PimoroniI2C_obj_t *)MP_OBJ_TO_PTR (PimoroniI2C_make_new (&PimoroniI2C_type, 0 , 0 , nullptr ));
277
289
i2c_bus = (pimoroni::I2C *)(self->i2c ->i2c );
278
290
} else if (bus_type == BUS_SPI) {
279
- if (display == DISPLAY_INKY_FRAME || display == DISPLAY_INKY_FRAME_4) {
291
+ if (display == DISPLAY_INKY_FRAME || display == DISPLAY_INKY_FRAME_4 || display == DISPLAY_INKY_FRAME_7 ) {
280
292
spi_bus = {PIMORONI_SPI_DEFAULT_INSTANCE, SPI_BG_FRONT_CS, SPI_DEFAULT_SCK, SPI_DEFAULT_MOSI, PIN_UNUSED, 28 , PIN_UNUSED};
281
293
} else if (display == DISPLAY_INKY_PACK) {
282
294
spi_bus = {PIMORONI_SPI_DEFAULT_INSTANCE, SPI_BG_FRONT_CS, SPI_DEFAULT_SCK, SPI_DEFAULT_MOSI, PIN_UNUSED, 20 , PIN_UNUSED};
@@ -292,6 +304,11 @@ mp_obj_t ModPicoGraphics_make_new(const mp_obj_type_t *type, size_t n_args, size
292
304
// TODO grab BUSY and RESET from ARG_extra_pins
293
305
self->display = m_new_class (UC8159, width, height, (Rotation)rotate, spi_bus);
294
306
307
+ } else if (display == DISPLAY_INKY_FRAME_7) {
308
+ pen_type = PEN_INKY7;
309
+ // TODO grab BUSY and RESET from ARG_extra_pins
310
+ self->display = m_new_class (Inky73, width, height, (Rotation)rotate, spi_bus);
311
+
295
312
} else if (display == DISPLAY_TUFTY_2040) {
296
313
self->display = m_new_class (ST7789, width, height, (Rotation)rotate, parallel_bus);
297
314
@@ -324,15 +341,19 @@ mp_obj_t ModPicoGraphics_make_new(const mp_obj_type_t *type, size_t n_args, size
324
341
size_t required_size = get_required_buffer_size ((PicoGraphicsPenType)pen_type, width, height);
325
342
if (required_size == 0 ) mp_raise_ValueError (" Unsupported pen type!" );
326
343
327
- if (args[ARG_buffer].u_obj != mp_const_none) {
328
- mp_buffer_info_t bufinfo;
329
- mp_get_buffer_raise (args[ARG_buffer].u_obj , &bufinfo, MP_BUFFER_RW);
330
- self->buffer = bufinfo.buf ;
331
- if (bufinfo.len < (size_t )(required_size)) {
332
- mp_raise_ValueError (" Supplied buffer is too small!" );
333
- }
344
+ if (pen_type == PEN_INKY7) {
345
+ self->buffer = m_new_class (PSRamDisplay, width, height);
334
346
} else {
335
- self->buffer = m_new (uint8_t , required_size);
347
+ if (args[ARG_buffer].u_obj != mp_const_none) {
348
+ mp_buffer_info_t bufinfo;
349
+ mp_get_buffer_raise (args[ARG_buffer].u_obj , &bufinfo, MP_BUFFER_RW);
350
+ self->buffer = bufinfo.buf ;
351
+ if (bufinfo.len < (size_t )(required_size)) {
352
+ mp_raise_ValueError (" Supplied buffer is too small!" );
353
+ }
354
+ } else {
355
+ self->buffer = m_new (uint8_t , required_size);
356
+ }
336
357
}
337
358
338
359
// Create an instance of the graphics library
@@ -363,6 +384,9 @@ mp_obj_t ModPicoGraphics_make_new(const mp_obj_type_t *type, size_t n_args, size
363
384
case PEN_RGB888:
364
385
self->graphics = m_new_class (PicoGraphics_PenRGB888, self->display ->width , self->display ->height , self->buffer );
365
386
break ;
387
+ case PEN_INKY7:
388
+ self->graphics = m_new_class (PicoGraphics_PenInky7, self->display ->width , self->display ->height , *(IDirectDisplayDriver<uint8_t > *)self->buffer );
389
+ break ;
366
390
default :
367
391
break ;
368
392
}
@@ -376,7 +400,7 @@ mp_obj_t ModPicoGraphics_make_new(const mp_obj_type_t *type, size_t n_args, size
376
400
self->graphics ->clear ();
377
401
378
402
// Update the LCD from the graphics library
379
- if (display != DISPLAY_INKY_FRAME && display != DISPLAY_INKY_FRAME_4 && display != DISPLAY_INKY_PACK) {
403
+ if (display != DISPLAY_INKY_FRAME && display != DISPLAY_INKY_FRAME_4 && display != DISPLAY_INKY_PACK && display != DISPLAY_INKY_FRAME_7 ) {
380
404
self->display ->update (self->graphics );
381
405
}
382
406
0 commit comments