diff options
Diffstat (limited to 'firmware/export')
-rw-r--r-- | firmware/export/config.h | 1 | ||||
-rw-r--r-- | firmware/export/config/samsungypr0.h | 2 | ||||
-rw-r--r-- | firmware/export/config/samsungypr1.h | 4 | ||||
-rw-r--r-- | firmware/export/config/sansae200v2.h | 4 | ||||
-rw-r--r-- | firmware/export/config/sdlapp.h | 4 | ||||
-rw-r--r-- | firmware/export/lcd.h | 85 |
6 files changed, 92 insertions, 8 deletions
diff --git a/firmware/export/config.h b/firmware/export/config.h index 9c1a8dbf57..5e4178cd4c 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h | |||
@@ -275,6 +275,7 @@ | |||
275 | #define VERTICAL_INTERLEAVED 4 | 275 | #define VERTICAL_INTERLEAVED 4 |
276 | #define RGB565 565 | 276 | #define RGB565 565 |
277 | #define RGB565SWAPPED 3553 | 277 | #define RGB565SWAPPED 3553 |
278 | #define RGB888 888 | ||
278 | 279 | ||
279 | /* LCD_STRIDEFORMAT */ | 280 | /* LCD_STRIDEFORMAT */ |
280 | #define VERTICAL_STRIDE 1 | 281 | #define VERTICAL_STRIDE 1 |
diff --git a/firmware/export/config/samsungypr0.h b/firmware/export/config/samsungypr0.h index 049caa01b6..0fce70e1fe 100644 --- a/firmware/export/config/samsungypr0.h +++ b/firmware/export/config/samsungypr0.h | |||
@@ -47,7 +47,7 @@ | |||
47 | /* sqrt(240^2 + 320^2) / 2.6 = 153.8 */ | 47 | /* sqrt(240^2 + 320^2) / 2.6 = 153.8 */ |
48 | #define LCD_DPI 154 | 48 | #define LCD_DPI 154 |
49 | 49 | ||
50 | #define LCD_DEPTH 16 | 50 | #define LCD_DEPTH 24 |
51 | /* Check that but should not matter */ | 51 | /* Check that but should not matter */ |
52 | #define LCD_PIXELFORMAT RGB565 | 52 | #define LCD_PIXELFORMAT RGB565 |
53 | 53 | ||
diff --git a/firmware/export/config/samsungypr1.h b/firmware/export/config/samsungypr1.h index 1aaf85dcb5..42b46e0699 100644 --- a/firmware/export/config/samsungypr1.h +++ b/firmware/export/config/samsungypr1.h | |||
@@ -53,11 +53,11 @@ | |||
53 | #define LCD_HEIGHT 240 | 53 | #define LCD_HEIGHT 240 |
54 | #endif | 54 | #endif |
55 | 55 | ||
56 | #define LCD_DEPTH 16 | 56 | #define LCD_DEPTH 24 |
57 | /* Calculated value, important for touch sensor */ | 57 | /* Calculated value, important for touch sensor */ |
58 | #define LCD_DPI 180 | 58 | #define LCD_DPI 180 |
59 | /* Check that but should not matter */ | 59 | /* Check that but should not matter */ |
60 | #define LCD_PIXELFORMAT RGB565 | 60 | #define LCD_PIXELFORMAT RGB888 |
61 | 61 | ||
62 | /* Capacitive touchscreen */ | 62 | /* Capacitive touchscreen */ |
63 | #define HAVE_TOUCHSCREEN | 63 | #define HAVE_TOUCHSCREEN |
diff --git a/firmware/export/config/sansae200v2.h b/firmware/export/config/sansae200v2.h index c703439e7f..e70b409d51 100644 --- a/firmware/export/config/sansae200v2.h +++ b/firmware/export/config/sansae200v2.h | |||
@@ -53,8 +53,8 @@ | |||
53 | #define LCD_HEIGHT 220 | 53 | #define LCD_HEIGHT 220 |
54 | /* sqrt(176^2 + 220^2) / 1.8 = 156.5 */ | 54 | /* sqrt(176^2 + 220^2) / 1.8 = 156.5 */ |
55 | #define LCD_DPI 157 | 55 | #define LCD_DPI 157 |
56 | #define LCD_DEPTH 16 /* 65536 colours */ | 56 | #define LCD_DEPTH 24 /* 65536 colours */ |
57 | #define LCD_PIXELFORMAT RGB565 /* rgb565 */ | 57 | #define LCD_PIXELFORMAT RGB888 /* rgb565 */ |
58 | 58 | ||
59 | #ifndef BOOTLOADER | 59 | #ifndef BOOTLOADER |
60 | /* define this if you have LCD enable function */ | 60 | /* define this if you have LCD enable function */ |
diff --git a/firmware/export/config/sdlapp.h b/firmware/export/config/sdlapp.h index cd973fcf73..626bd5c99f 100644 --- a/firmware/export/config/sdlapp.h +++ b/firmware/export/config/sdlapp.h | |||
@@ -44,8 +44,8 @@ | |||
44 | #define LCD_HEIGHT 480 | 44 | #define LCD_HEIGHT 480 |
45 | #endif | 45 | #endif |
46 | 46 | ||
47 | #define LCD_DEPTH 16 | 47 | #define LCD_DEPTH 24 |
48 | #define LCD_PIXELFORMAT RGB565 | 48 | #define LCD_PIXELFORMAT RGB888 |
49 | 49 | ||
50 | /* define this to indicate your device's keypad */ | 50 | /* define this to indicate your device's keypad */ |
51 | #define HAVE_TOUCHSCREEN | 51 | #define HAVE_TOUCHSCREEN |
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h index 673ce069af..cf6a16572a 100644 --- a/firmware/export/lcd.h +++ b/firmware/export/lcd.h | |||
@@ -127,7 +127,13 @@ typedef unsigned char fb_data; | |||
127 | #elif LCD_DEPTH <= 16 | 127 | #elif LCD_DEPTH <= 16 |
128 | typedef unsigned short fb_data; | 128 | typedef unsigned short fb_data; |
129 | #define FB_DATA_SZ 2 | 129 | #define FB_DATA_SZ 2 |
130 | #else /* LCD_DEPTH > 16 */ | 130 | #elif LCD_DEPTH <= 24 |
131 | struct _fb_pixel { | ||
132 | unsigned char b, g, r; | ||
133 | }; | ||
134 | typedef struct _fb_pixel fb_data; | ||
135 | #define FB_DATA_SZ 3 | ||
136 | #else /* LCD_DEPTH > 24 */ | ||
131 | typedef unsigned long fb_data; | 137 | typedef unsigned long fb_data; |
132 | #define FB_DATA_SZ 4 | 138 | #define FB_DATA_SZ 4 |
133 | #endif /* LCD_DEPTH */ | 139 | #endif /* LCD_DEPTH */ |
@@ -341,6 +347,31 @@ static inline unsigned lcd_color_to_native(unsigned color) | |||
341 | #define RGB_UNPACK_GREEN_LCD(x) _RGB_UNPACK_GREEN_LCD(x) | 347 | #define RGB_UNPACK_GREEN_LCD(x) _RGB_UNPACK_GREEN_LCD(x) |
342 | #define RGB_UNPACK_BLUE_LCD(x) _RGB_UNPACK_BLUE_LCD(x) | 348 | #define RGB_UNPACK_BLUE_LCD(x) _RGB_UNPACK_BLUE_LCD(x) |
343 | #endif /* RGB565* */ | 349 | #endif /* RGB565* */ |
350 | |||
351 | #elif LCD_PIXELFORMAT == RGB888 | ||
352 | #define LCD_MAX_RED 255 | ||
353 | #define LCD_MAX_GREEN 255 | ||
354 | #define LCD_MAX_BLUE 255 | ||
355 | #define LCD_RED_BITS 8 | ||
356 | #define LCD_GREEN_BITS 8 | ||
357 | #define LCD_BLUE_BITS 8 | ||
358 | |||
359 | /* pack/unpack native RGB values */ | ||
360 | #define _RGBPACK(r, g, b) ( r << 16 | g << 8 | b ) | ||
361 | #define _RGB_UNPACK_RED(x) ((x >> 16) & 0xff) | ||
362 | #define _RGB_UNPACK_GREEN(x) ((x >> 8) & 0xff) | ||
363 | #define _RGB_UNPACK_BLUE(x) ((x >> 0) & 0xff) | ||
364 | |||
365 | #define _LCD_UNSWAP_COLOR(x) (x) | ||
366 | #define LCD_RGBPACK(r, g, b) _RGBPACK((r), (g), (b)) | ||
367 | #define LCD_RGBPACK_LCD(r, g, b) _RGBPACK((r), (g), (b)) | ||
368 | #define RGB_UNPACK_RED(x) _RGB_UNPACK_RED(x) | ||
369 | #define RGB_UNPACK_GREEN(x) _RGB_UNPACK_GREEN(x) | ||
370 | #define RGB_UNPACK_BLUE(x) _RGB_UNPACK_BLUE(x) | ||
371 | #define RGB_UNPACK_RED_LCD(x) _RGB_UNPACK_RED(x) | ||
372 | #define RGB_UNPACK_GREEN_LCD(x) _RGB_UNPACK_GREEN(x) | ||
373 | #define RGB_UNPACK_BLUE_LCD(x) _RGB_UNPACK_BLUE(x) | ||
374 | |||
344 | #else | 375 | #else |
345 | /* other colour depths */ | 376 | /* other colour depths */ |
346 | #endif | 377 | #endif |
@@ -367,6 +398,58 @@ static inline unsigned lcd_color_to_native(unsigned color) | |||
367 | 398 | ||
368 | #endif /* HAVE_LCD_COLOR */ | 399 | #endif /* HAVE_LCD_COLOR */ |
369 | 400 | ||
401 | /* Framebuffer conversion macros: Convert from and to the native display data | ||
402 | * format (fb_data). | ||
403 | * | ||
404 | * FB_RGBPACK: Convert the three r,g,b values to fb_data. r,g,b are | ||
405 | * assumed to in 8-bit format. | ||
406 | * FB_RGBPACK_LCD Like FB_RGBPACK, except r,g,b shall be in display-native | ||
407 | * bit format (e.g. 5-bit r for RGB565) | ||
408 | * FB_UNPACK_RED Extract the red component of fb_data into 8-bit red value. | ||
409 | * FB_UNPACK_GREEN Like FB_UNPACK_RED, just for the green component. | ||
410 | * FB_UNPACK_BLIE Like FB_UNPACK_RED, just for the green component. | ||
411 | * FB_SCALARPACK Similar to FB_RGBPACK, except that the channels are already | ||
412 | * combined into a single scalar value. Again, 8-bit per channel. | ||
413 | * FB_SCALARPACK_LCD Like FB_SCALARPACK, except the channels shall be in | ||
414 | * display-native format (i.e. the scalar is 16bits on RGB565) | ||
415 | * FB_UNPACK_SCALAR_LCD Converts an fb_data to a scalar value in display-native | ||
416 | * format, so it's the reverse of FB_SCALARPACK_LCD | ||
417 | */ | ||
418 | #if LCD_DEPTH >= 24 | ||
419 | static inline fb_data scalar_to_fb(unsigned p) | ||
420 | { | ||
421 | union { fb_data st; unsigned sc; } convert; | ||
422 | convert.sc = p; return convert.st; | ||
423 | } | ||
424 | static inline unsigned fb_to_scalar(fb_data p) | ||
425 | { | ||
426 | union { fb_data st; unsigned sc; } convert; | ||
427 | convert.st = p; return convert.sc; | ||
428 | } | ||
429 | #define FB_RGBPACK(r_, g_, b_) ((fb_data){.r = r_, .g = g_, .b = b_}) | ||
430 | #define FB_RGBPACK_LCD(r_, g_, b_) FB_RGBPACK(r_, g_, b_) | ||
431 | #define FB_UNPACK_RED(fb) ((fb).r) | ||
432 | #define FB_UNPACK_GREEN(fb) ((fb).g) | ||
433 | #define FB_UNPACK_BLUE(fb) ((fb).b) | ||
434 | #define FB_SCALARPACK(c) scalar_to_fb(c) | ||
435 | #define FB_SCALARPACK_LCD(c) scalar_to_fb(c) | ||
436 | #define FB_UNPACK_SCALAR_LCD(fb) fb_to_scalar(fb) | ||
437 | #elif defined(HAVE_LCD_COLOR) | ||
438 | #define FB_RGBPACK(r_, g_, b_) LCD_RGBPACK(r_, g_, b_) | ||
439 | #define FB_RGBPACK_LCD(r_, g_, b_) LCD_RGBPACK_LCD(r_, g_, b_) | ||
440 | #define FB_UNPACK_RED(fb) RGB_UNPACK_RED(fb) | ||
441 | #define FB_UNPACK_GREEN(fb) RGB_UNPACK_GREEN(fb) | ||
442 | #define FB_UNPACK_BLUE(fb) RGB_UNPACK_BLUE(fb) | ||
443 | #define FB_SCALARPACK(c) LCD_RGBPACK(RGB_UNPACK_RED(c), RGB_UNPACK_GREEN(c), RGB_UNPACK_BLUE(c)) | ||
444 | #define FB_SCALARPACK_LCD(c) (c) | ||
445 | #define FB_UNPACK_SCALAR_LCD(fb) (fb) | ||
446 | #else | ||
447 | #define FB_SCALARPACK(c) (c) | ||
448 | #define FB_SCALARPACK_LCD(c) (c) | ||
449 | #define FB_UNPACK_SCALAR_LCD(fb) (fb) | ||
450 | #endif | ||
451 | |||
452 | |||
370 | /* Frame buffer dimensions */ | 453 | /* Frame buffer dimensions */ |
371 | #if LCD_DEPTH == 1 | 454 | #if LCD_DEPTH == 1 |
372 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING | 455 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING |