void display_image_on_screen(void) { unsigned i = 0; unsigned total_x = config->width; unsigned total_y = config->height; unsigned bytes_per_bpp = ((config->bpp) / 8); unsigned image_base = ((((total_y/2) - (SPLASH_IMAGE_WIDTH / 2) - 1) * (config->width)) + (total_x/2 - (SPLASH_IMAGE_HEIGHT / 2))); fbcon_clear(); #if DISPLAY_TYPE_MIPI if (bytes_per_bpp == 3) { for (i = 0; i < SPLASH_IMAGE_WIDTH; i++) { memcpy (config->base + ((image_base + (i * (config->width))) * bytes_per_bpp), imageBuffer_rgb888 + (i * SPLASH_IMAGE_HEIGHT * bytes_per_bpp), SPLASH_IMAGE_HEIGHT * bytes_per_bpp); } } fbcon_flush(); #if DISPLAY_MIPI_PANEL_NOVATEK_BLUE if(is_cmd_mode_enabled()) mipi_dsi_cmd_mode_trigger(); #endif #elif DISPLAY_TYPE_TOUCHPAD /* not supported yet */ return; #else if (bytes_per_bpp == 2) { for (i = 0; i < SPLASH_IMAGE_WIDTH; i++) { memcpy (config->base + ((image_base + (i * (config->width))) * bytes_per_bpp), imageBuffer + (i * SPLASH_IMAGE_HEIGHT * bytes_per_bpp), SPLASH_IMAGE_HEIGHT * bytes_per_bpp); } } fbcon_flush(); #endif }
/** * Put image at a specific (x,y) location on the screen. * Duplicated from fbcon.c, with modifications to allow (x,y) location (instead of a centered image), * and display bmp images properly (order of copying the lines to the screen was reversed) */ static void fbcon_putImage_in_location(struct mdtp_fbimage *fbimg, uint32_t x, uint32_t y) { unsigned i = 0; unsigned bytes_per_bpp; unsigned image_base; unsigned width, pitch, height; unsigned char *logo_base = NULL; if (!fb_config) { dprintf(CRITICAL,"ERROR: NULL configuration, image cannot be displayed\n"); return; } if(fbimg) { width = pitch = fbimg->width; height = fbimg->height; logo_base = (unsigned char *)fbimg->image; } else { dprintf(CRITICAL,"ERROR: invalid image struct\n"); return; } bytes_per_bpp = ((fb_config->bpp) / BITS_PER_BYTE); #if DISPLAY_TYPE_MIPI if (bytes_per_bpp == 3) { if (fbimg->width == fb_config->width && fbimg->height == fb_config->height) { dprintf(CRITICAL,"ERROR: full screen image, cannot be displayed\n"); return; } if (fbimg->width > fb_config->width || fbimg->height > fb_config->height || (x > (fb_config->width - fbimg->width)) || (y > (fb_config->height - fbimg->height))) { dprintf(CRITICAL,"ERROR: invalid image size, larger than the screen or exceeds its margins\n"); return; } image_base = ( (y *(fb_config->width)) + x); for (i = 0; i < height; i++) { memcpy (fb_config->base + ((image_base + (i * (fb_config->width))) * bytes_per_bpp), logo_base + ((height - 1 - i) * pitch * bytes_per_bpp), width * bytes_per_bpp); } } else { dprintf(CRITICAL,"ERROR: invalid bpp value\n"); display_error_msg(); /* This will never return */ } /* Flush the contents to memory before giving the data to dma */ arch_clean_invalidate_cache_range((addr_t) fb_config->base, (fb_config->height * fb_config->width * bytes_per_bpp)); fbcon_flush(); #if DISPLAY_MIPI_PANEL_NOVATEK_BLUE if(is_cmd_mode_enabled()) mipi_dsi_cmd_mode_trigger(); #endif #endif }